Skip to content

Commit ba2840f

Browse files
Device Support PR feedback (#1589)
1 parent 6c74a2e commit ba2840f

11 files changed

Lines changed: 1457 additions & 1432 deletions

src/cmake/Setup3rdParty.cmake

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,14 @@ if(RAJA_DIR) # optional for now
222222
endif()
223223
endif()
224224

225+
if(ENABLE_CUDA AND NOT RAJA_FOUND)
226+
message(FATAL_ERROR "ENABLE_CUDA requires RAJA.")
227+
endif()
228+
229+
if(ENABLE_HIP AND NOT RAJA_FOUND)
230+
message(FATAL_ERROR "ENABLE_HIP requires RAJA.")
231+
endif()
232+
225233
################################
226234
# Umpire
227235
################################

src/libs/conduit/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ set(conduit_headers
5151
conduit_endianness.hpp
5252
conduit_execution.hpp
5353
conduit_execution_policy.hpp
54-
conduit_execution_core.hpp
5554
conduit_memory_manager.hpp
5655
conduit_data_array.hpp
5756
conduit_data_accessor.hpp

src/libs/conduit/conduit_data_accessor.hpp

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ class CONDUIT_API DataAccessor
7474
/// Device compilation needs to see the copy operation.
7575
///
7676
/// Copy constructor
77-
CONDUIT_EXEC_HOST_DEVICE DataAccessor(const DataAccessor<T> &accessor)
77+
CONDUIT_EXEC DataAccessor(const DataAccessor<T> &accessor)
7878
: m_data(accessor.m_data),
7979
m_orig_data_ptr(accessor.m_orig_data_ptr),
8080
m_dtype(accessor.m_dtype),
@@ -103,9 +103,9 @@ class CONDUIT_API DataAccessor
103103
/// no-op while the host path preserves ownership cleanup.
104104
///
105105
/// Destructor.
106-
CONDUIT_EXEC_HOST_DEVICE ~DataAccessor()
106+
CONDUIT_EXEC ~DataAccessor()
107107
{
108-
#if !defined(CONDUIT_EXEC_DEVICE_COMPILE)
108+
#if !defined(CONDUIT_DEVICE_COMPILE)
109109
if (m_do_i_own_it)
110110
{
111111
if (execution::DeviceMemory::is_device_ptr(m_other_ptr))
@@ -137,7 +137,7 @@ class CONDUIT_API DataAccessor
137137
/// device lambdas.
138138
///
139139
/// Assignment operator
140-
CONDUIT_EXEC_HOST_DEVICE DataAccessor<T> &operator=(const DataAccessor<T> &accessor)
140+
CONDUIT_EXEC DataAccessor<T> &operator=(const DataAccessor<T> &accessor)
141141
{
142142
if(this != &accessor)
143143
{
@@ -163,10 +163,10 @@ class CONDUIT_API DataAccessor
163163
/// array layout, so device compilation must see the definitions here in
164164
/// the header.
165165
///
166-
CONDUIT_EXEC_HOST_DEVICE T operator[](index_t idx) const
166+
CONDUIT_EXEC T operator[](index_t idx) const
167167
{return element(idx);}
168168

169-
CONDUIT_EXEC_HOST_DEVICE T element(index_t idx) const
169+
CONDUIT_EXEC T element(index_t idx) const
170170
{
171171
switch(dtype().id())
172172
{
@@ -192,7 +192,7 @@ class CONDUIT_API DataAccessor
192192
return (T)(*(float64*)(element_ptr(idx)));
193193
default:
194194
{
195-
#if !defined(CONDUIT_EXEC_DEVICE_COMPILE)
195+
#if !defined(CONDUIT_DEVICE_COMPILE)
196196
CONDUIT_ERROR("DataAccessor does not support dtype: "
197197
<< dtype().name());
198198
#endif
@@ -204,7 +204,7 @@ class CONDUIT_API DataAccessor
204204
// Restrict the scalar setter to non-pointer value types so calls like
205205
// set(0, value) do not collide with the bulk pointer setter below.
206206
template <typename U = T>
207-
CONDUIT_EXEC_HOST_DEVICE
207+
CONDUIT_EXEC
208208
typename std::enable_if<!std::is_pointer<U>::value, void>::type
209209
set(index_t idx, T value) const
210210
{
@@ -262,7 +262,7 @@ class CONDUIT_API DataAccessor
262262
}
263263
default:
264264
{
265-
#if !defined(CONDUIT_EXEC_DEVICE_COMPILE)
265+
#if !defined(CONDUIT_DEVICE_COMPILE)
266266
CONDUIT_ERROR("DataAccessor does not support dtype: "
267267
<< dtype().name());
268268
#endif
@@ -280,21 +280,21 @@ class CONDUIT_API DataAccessor
280280

281281
void fill(T value);
282282

283-
CONDUIT_EXEC_HOST_DEVICE const void *element_ptr(index_t idx) const
283+
CONDUIT_EXEC const void *element_ptr(index_t idx) const
284284
{
285285
return static_cast<const char*>(m_data) +
286286
dtype().element_index(idx);
287287
}
288288

289-
CONDUIT_EXEC_HOST_DEVICE index_t number_of_elements() const
289+
CONDUIT_EXEC index_t number_of_elements() const
290290
{return dtype().number_of_elements();}
291291

292292
///
293293
/// dtype metadata is cached in the accessor so device code can choose
294294
/// between the original and migrated layout without dereferencing Node.
295295
/// This logic must stay inline in the header for device compilation.
296296
///
297-
CONDUIT_EXEC_HOST_DEVICE const DataType &dtype() const
297+
CONDUIT_EXEC const DataType &dtype() const
298298
{
299299
if (nullptr != m_node_ptr)
300300
{
@@ -312,10 +312,10 @@ class CONDUIT_API DataAccessor
312312
/// These methods are part of the cached dtype metadata used by device
313313
/// code, so they must remain inline in the header alongside dtype().
314314
///
315-
CONDUIT_EXEC_HOST_DEVICE const DataType &orig_dtype() const
315+
CONDUIT_EXEC const DataType &orig_dtype() const
316316
{ return m_dtype; }
317317

318-
CONDUIT_EXEC_HOST_DEVICE const DataType &other_dtype() const
318+
CONDUIT_EXEC const DataType &other_dtype() const
319319
{ return nullptr != m_node_ptr ? m_other_dtype : m_dtype; }
320320

321321
//-----------------------------------------------------------------------------

src/libs/conduit/conduit_data_array.hpp

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ class CONDUIT_API DataArray
7272
/// Device compilation needs to see the copy operation.
7373
///
7474
/// copy constructor
75-
CONDUIT_EXEC_HOST_DEVICE DataArray(const DataArray<T> &array)
75+
CONDUIT_EXEC DataArray(const DataArray<T> &array)
7676
: m_data(array.m_data),
7777
m_orig_data_ptr(array.m_orig_data_ptr),
7878
m_dtype(array.m_dtype),
@@ -101,9 +101,9 @@ class CONDUIT_API DataArray
101101
/// no-op while the host path preserves ownership cleanup.
102102
///
103103
/// Destructor
104-
CONDUIT_EXEC_HOST_DEVICE ~DataArray()
104+
CONDUIT_EXEC ~DataArray()
105105
{
106-
#if !defined(CONDUIT_EXEC_DEVICE_COMPILE)
106+
#if !defined(CONDUIT_DEVICE_COMPILE)
107107
if (m_do_i_own_it)
108108
{
109109
if (execution::DeviceMemory::is_device_ptr(m_other_ptr))
@@ -124,7 +124,7 @@ class CONDUIT_API DataArray
124124
/// lambdas.
125125
///
126126
/// Assignment operator
127-
CONDUIT_EXEC_HOST_DEVICE DataArray<T> &operator=(const DataArray<T> &array)
127+
CONDUIT_EXEC DataArray<T> &operator=(const DataArray<T> &array)
128128
{
129129
if(this != &array)
130130
{
@@ -152,36 +152,36 @@ class CONDUIT_API DataArray
152152
/// array layout, so device compilation must see the definitions here in
153153
/// the header.
154154
///
155-
CONDUIT_EXEC_HOST_DEVICE T &operator[](index_t idx)
155+
CONDUIT_EXEC T &operator[](index_t idx)
156156
{return element(idx);}
157-
CONDUIT_EXEC_HOST_DEVICE T &operator[](index_t idx) const
157+
CONDUIT_EXEC T &operator[](index_t idx) const
158158
{return element(idx);}
159159

160-
CONDUIT_EXEC_HOST_DEVICE T &element(index_t idx)
160+
CONDUIT_EXEC T &element(index_t idx)
161161
{return (*(T*)(element_ptr(idx)));}
162-
CONDUIT_EXEC_HOST_DEVICE T &element(index_t idx) const
162+
CONDUIT_EXEC T &element(index_t idx) const
163163
{return (*(T*)(element_ptr(idx)));}
164164

165-
CONDUIT_EXEC_HOST_DEVICE void *element_ptr(index_t idx)
165+
CONDUIT_EXEC void *element_ptr(index_t idx)
166166
{
167167
return static_cast<char*>(m_data) +
168168
dtype().element_index(idx);
169169
};
170170

171-
CONDUIT_EXEC_HOST_DEVICE const void *element_ptr(index_t idx) const
171+
CONDUIT_EXEC const void *element_ptr(index_t idx) const
172172
{
173173
return static_cast<char*>(m_data) +
174174
dtype().element_index(idx);
175175
};
176176

177-
CONDUIT_EXEC_HOST_DEVICE index_t number_of_elements() const
177+
CONDUIT_EXEC index_t number_of_elements() const
178178
{return dtype().number_of_elements();}
179179
///
180180
/// dtype metadata is cached in the array so device code can choose
181181
/// between the original and migrated layout without dereferencing Node.
182182
/// This logic must stay inline in the header for device compilation.
183183
///
184-
CONDUIT_EXEC_HOST_DEVICE const DataType &dtype() const
184+
CONDUIT_EXEC const DataType &dtype() const
185185
{
186186
if (nullptr != m_node_ptr)
187187
{
@@ -199,13 +199,13 @@ class CONDUIT_API DataArray
199199
/// These methods are part of the cached dtype metadata used by device
200200
/// code, so they must remain inline in the header alongside dtype().
201201
///
202-
CONDUIT_EXEC_HOST_DEVICE const DataType &orig_dtype() const
202+
CONDUIT_EXEC const DataType &orig_dtype() const
203203
{ return m_dtype; }
204204

205-
CONDUIT_EXEC_HOST_DEVICE const DataType &other_dtype() const
205+
CONDUIT_EXEC const DataType &other_dtype() const
206206
{ return nullptr != m_node_ptr ? m_other_dtype : m_dtype; }
207207

208-
CONDUIT_EXEC_HOST_DEVICE void *data_ptr() const
208+
CONDUIT_EXEC void *data_ptr() const
209209
{ return m_data;}
210210

211211
bool compatible(const DataArray<T> &array) const;
@@ -242,29 +242,29 @@ class CONDUIT_API DataArray
242242
// Setters
243243
//-----------------------------------------------------------------------------
244244
/// signed integer single element
245-
CONDUIT_EXEC_HOST_DEVICE void set(index_t elem_idx, int8 value) const
245+
CONDUIT_EXEC void set(index_t elem_idx, int8 value) const
246246
{ this->element(elem_idx) = (T)value; }
247-
CONDUIT_EXEC_HOST_DEVICE void set(index_t elem_idx, int16 value) const
247+
CONDUIT_EXEC void set(index_t elem_idx, int16 value) const
248248
{ this->element(elem_idx) = (T)value; }
249-
CONDUIT_EXEC_HOST_DEVICE void set(index_t elem_idx, int32 value) const
249+
CONDUIT_EXEC void set(index_t elem_idx, int32 value) const
250250
{ this->element(elem_idx) = (T)value; }
251-
CONDUIT_EXEC_HOST_DEVICE void set(index_t elem_idx, int64 value) const
251+
CONDUIT_EXEC void set(index_t elem_idx, int64 value) const
252252
{ this->element(elem_idx) = (T)value; }
253253

254254
// unsigned integer single element
255-
CONDUIT_EXEC_HOST_DEVICE void set(index_t elem_idx, uint8 value) const
255+
CONDUIT_EXEC void set(index_t elem_idx, uint8 value) const
256256
{ this->element(elem_idx) = (T)value; }
257-
CONDUIT_EXEC_HOST_DEVICE void set(index_t elem_idx, uint16 value) const
257+
CONDUIT_EXEC void set(index_t elem_idx, uint16 value) const
258258
{ this->element(elem_idx) = (T)value; }
259-
CONDUIT_EXEC_HOST_DEVICE void set(index_t elem_idx, uint32 value) const
259+
CONDUIT_EXEC void set(index_t elem_idx, uint32 value) const
260260
{ this->element(elem_idx) = (T)value; }
261-
CONDUIT_EXEC_HOST_DEVICE void set(index_t elem_idx, uint64 value) const
261+
CONDUIT_EXEC void set(index_t elem_idx, uint64 value) const
262262
{ this->element(elem_idx) = (T)value; }
263263

264264
/// floating point single element
265-
CONDUIT_EXEC_HOST_DEVICE void set(index_t elem_idx, float32 value) const
265+
CONDUIT_EXEC void set(index_t elem_idx, float32 value) const
266266
{ this->element(elem_idx) = (T)value; }
267-
CONDUIT_EXEC_HOST_DEVICE void set(index_t elem_idx, float64 value) const
267+
CONDUIT_EXEC void set(index_t elem_idx, float64 value) const
268268
{ this->element(elem_idx) = (T)value; }
269269

270270
/// signed integer arrays

src/libs/conduit/conduit_data_type.hpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ class CONDUIT_API DataType
330330
/// device lambdas by value.
331331
///
332332
/// standard constructor
333-
CONDUIT_EXEC_HOST_DEVICE DataType()
333+
CONDUIT_EXEC DataType()
334334
: m_id(DataType::EMPTY_ID),
335335
m_num_ele(0),
336336
m_offset(0),
@@ -339,7 +339,7 @@ class CONDUIT_API DataType
339339
m_endianness(Endianness::DEFAULT_ID)
340340
{}
341341
/// copy constructor
342-
CONDUIT_EXEC_HOST_DEVICE DataType(const DataType& type)
342+
CONDUIT_EXEC DataType(const DataType& type)
343343
: m_id(type.m_id),
344344
m_num_ele(type.m_num_ele),
345345
m_offset(type.m_offset),
@@ -348,7 +348,7 @@ class CONDUIT_API DataType
348348
m_endianness(type.m_endianness)
349349
{}
350350
/// Assignment operator
351-
CONDUIT_EXEC_HOST_DEVICE DataType& operator=(const DataType& type)
351+
CONDUIT_EXEC DataType& operator=(const DataType& type)
352352
{
353353
m_id = type.m_id;
354354
m_num_ele = type.m_num_ele;
@@ -372,7 +372,7 @@ class CONDUIT_API DataType
372372
conduit::index_t endianness);
373373

374374
/// construct from full details, given a data type id
375-
CONDUIT_EXEC_HOST_DEVICE DataType(conduit::index_t dtype_id,
375+
CONDUIT_EXEC DataType(conduit::index_t dtype_id,
376376
conduit::index_t num_elements,
377377
conduit::index_t offset,
378378
conduit::index_t stride,
@@ -387,7 +387,7 @@ class CONDUIT_API DataType
387387
{}
388388

389389
/// destructor
390-
CONDUIT_EXEC_HOST_DEVICE ~DataType() = default;
390+
CONDUIT_EXEC ~DataType() = default;
391391

392392
/// return a data type to the default (empty) state
393393
void reset();
@@ -433,27 +433,27 @@ class CONDUIT_API DataType
433433
/// device-usable slice of DataAccessor queries them while executing inside
434434
/// device lambdas.
435435
///
436-
CONDUIT_EXEC_HOST_DEVICE conduit::index_t id() const { return m_id;}
436+
CONDUIT_EXEC conduit::index_t id() const { return m_id;}
437437
std::string name() const { return id_to_name(m_id);}
438438

439-
CONDUIT_EXEC_HOST_DEVICE conduit::index_t number_of_elements() const
439+
CONDUIT_EXEC conduit::index_t number_of_elements() const
440440
{ return m_num_ele; }
441-
CONDUIT_EXEC_HOST_DEVICE conduit::index_t offset() const
441+
CONDUIT_EXEC conduit::index_t offset() const
442442
{ return m_offset; }
443-
CONDUIT_EXEC_HOST_DEVICE conduit::index_t stride() const
443+
CONDUIT_EXEC conduit::index_t stride() const
444444
{ return m_stride; }
445-
CONDUIT_EXEC_HOST_DEVICE conduit::index_t element_bytes() const
445+
CONDUIT_EXEC conduit::index_t element_bytes() const
446446
{ return m_ele_bytes; }
447-
CONDUIT_EXEC_HOST_DEVICE conduit::index_t endianness() const
447+
CONDUIT_EXEC conduit::index_t endianness() const
448448
{ return m_endianness; }
449449
///
450450
/// element_index() is part of the address calculation path used from
451451
/// device lambdas, so it must remain inline in the header. The warning is
452452
/// kept host-only because device code cannot emit Conduit diagnostics.
453453
///
454-
CONDUIT_EXEC_HOST_DEVICE conduit::index_t element_index(conduit::index_t idx) const
454+
CONDUIT_EXEC conduit::index_t element_index(conduit::index_t idx) const
455455
{
456-
#if !defined(CONDUIT_EXEC_DEVICE_COMPILE)
456+
#if !defined(CONDUIT_DEVICE_COMPILE)
457457
if(idx > 0 && m_stride == 0)
458458
{
459459
CONDUIT_WARN("Node index calculation with with stride = 0");

0 commit comments

Comments
 (0)