This functionality is related only to debugging of SYCL implementation
via single-threaded CPU execution and is disabled by default.
Host device has been deprecated in SYCL 2020 spec and we removed it
in 305b92e05f.
Since this is still very useful for debugging, we're restoring a
similar functionality here through SYCL 2020 Host Task.
48 lines
1.3 KiB
C++
48 lines
1.3 KiB
C++
/* SPDX-License-Identifier: Apache-2.0
|
|
* Copyright 2021-2022 Intel Corporation */
|
|
|
|
#pragma once
|
|
|
|
#include "kernel/integrator/state.h"
|
|
#include "kernel/types.h"
|
|
#include "kernel/util/profiling.h"
|
|
|
|
CCL_NAMESPACE_BEGIN
|
|
|
|
/* NOTE(@nsirgien): With SYCL we can't declare __constant__ global variable, which will be
|
|
* accessible from device code, like it has been done for Cycles CUDA backend. So, the backend will
|
|
* allocate this "constant" memory regions and store pointers to them in oneAPI context class */
|
|
|
|
struct IntegratorStateGPU;
|
|
struct IntegratorQueueCounter;
|
|
|
|
typedef struct KernelGlobalsGPU {
|
|
|
|
#define KERNEL_DATA_ARRAY(type, name) const type *__##name = nullptr;
|
|
#include "kernel/data_arrays.h"
|
|
#undef KERNEL_DATA_ARRAY
|
|
IntegratorStateGPU *integrator_state;
|
|
const KernelData *__data;
|
|
|
|
#ifdef WITH_ONEAPI_SYCL_HOST_TASK
|
|
size_t nd_item_local_id_0;
|
|
size_t nd_item_local_range_0;
|
|
size_t nd_item_group_id_0;
|
|
size_t nd_item_group_range_0;
|
|
size_t nd_item_global_id_0;
|
|
size_t nd_item_global_range_0;
|
|
#endif
|
|
} KernelGlobalsGPU;
|
|
|
|
typedef ccl_global KernelGlobalsGPU *ccl_restrict KernelGlobals;
|
|
|
|
#define kernel_data (*(__data))
|
|
#define kernel_integrator_state (*(integrator_state))
|
|
|
|
/* data lookup defines */
|
|
|
|
#define kernel_data_fetch(name, index) __##name[index]
|
|
#define kernel_data_array(name) __##name
|
|
|
|
CCL_NAMESPACE_END
|