RAJA
RAJA provides a collection of platform portability abstractions for C++ HPC applications.
launch_core.hpp
Go to the documentation of this file.
1 
11 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
12 // Copyright (c) Lawrence Livermore National Security, LLC and other
13 // RAJA Project Developers. See top-level LICENSE and COPYRIGHT
14 // files for dates and other details. No copyright assignment is required
15 // to contribute to RAJA.
16 //
17 // SPDX-License-Identifier: (BSD-3-Clause)
18 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
19 
20 #ifndef RAJA_pattern_launch_core_HPP
21 #define RAJA_pattern_launch_core_HPP
22 
23 #include "RAJA/config.hpp"
27 #include "RAJA/util/macros.hpp"
28 #include "RAJA/util/plugins.hpp"
29 #include "RAJA/util/types.hpp"
30 
31 // Needed to provide a default indices/dims implementation for LaunchContext
32 // when compiling for GPU backends. The default launch context is used by
33 // existing examples and user code (e.g. RAJA::LaunchContext), but device-side
34 // index mappers require an indices/dims object.
35 #if defined(RAJA_HIP_ACTIVE)
37 #elif defined(RAJA_CUDA_ACTIVE)
39 #endif
40 
41 #include "camp/camp.hpp"
42 #include "camp/concepts.hpp"
43 #include "camp/tuple.hpp"
44 
45 
46 #if defined(RAJA_GPU_DEVICE_COMPILE_PASS_ACTIVE) && !defined(RAJA_SYCL_ACTIVE)
47 #define RAJA_TEAM_SHARED __shared__
48 #else
49 #define RAJA_TEAM_SHARED
50 #endif
51 
52 namespace RAJA
53 {
54 
55 // GPU or CPU threads available
56 // strongly type the ExecPlace (guards agaist errors)
57 enum struct ExecPlace : int
58 {
59  HOST,
60  DEVICE,
62 };
63 
65 {};
66 
67 // Support for host, and device
68 template<typename HOST_POLICY
69 #if defined(RAJA_GPU_ACTIVE)
70  ,
71  typename DEVICE_POLICY = HOST_POLICY
72 #endif
73  >
74 
75 struct LoopPolicy
76 {
77  using host_policy_t = HOST_POLICY;
78 #if defined(RAJA_GPU_ACTIVE)
79  using device_policy_t = DEVICE_POLICY;
80 #endif
81 };
82 
83 template<typename HOST_POLICY
84 #if defined(RAJA_GPU_ACTIVE)
85  ,
86  typename DEVICE_POLICY = HOST_POLICY
87 #endif
88  >
90 {
91  using host_policy_t = HOST_POLICY;
92 #if defined(RAJA_GPU_ACTIVE)
93  using device_policy_t = DEVICE_POLICY;
94 #endif
95 };
96 
97 struct Teams
98 {
99  int value[3];
100 
101  RAJA_INLINE
102 
104  constexpr Teams() : value {1, 1, 1} {}
105 
106  RAJA_INLINE
107 
109  constexpr Teams(int i) : value {i, 1, 1} {}
110 
111  RAJA_INLINE
112 
114  constexpr Teams(int i, int j) : value {i, j, 1} {}
115 
116  RAJA_INLINE
117 
119  constexpr Teams(int i, int j, int k) : value {i, j, k} {}
120 };
121 
122 struct Threads
123 {
124  int value[3];
125 
126  RAJA_INLINE
127 
129  constexpr Threads() : value {1, 1, 1} {}
130 
131  RAJA_INLINE
132 
134  constexpr Threads(int i) : value {i, 1, 1} {}
135 
136  RAJA_INLINE
137 
139  constexpr Threads(int i, int j) : value {i, j, 1} {}
140 
141  RAJA_INLINE
142 
144  constexpr Threads(int i, int j, int k) : value {i, j, k} {}
145 };
146 
147 struct Lanes
148 {
149  int value;
150 
151  RAJA_INLINE
152 
154  constexpr Lanes() : value(0) {}
155 
156  RAJA_INLINE
157 
159  constexpr Lanes(int i) : value(i) {}
160 };
161 
163 {
164 public:
168 
169  RAJA_INLINE
170  LaunchParams() = default;
171 
172  LaunchParams(Teams in_teams,
173  Threads in_threads,
174  size_t in_shared_mem_size = 0)
175  : teams(in_teams),
176  threads(in_threads),
177  shared_mem_size(in_shared_mem_size) {};
178 
179 private:
181 
182  RAJA_INLINE
183  Teams apply(Teams const& a) { return (teams = a); }
184 
186 
187  RAJA_INLINE
188  Threads apply(Threads const& a) { return (threads = a); }
189 };
190 
192 {
193 public:
194  // Bump style allocator used to
195  // get memory from the pool
198 
199 // In the future move this into a derived class.
200 #if defined(RAJA_SYCL_ACTIVE)
201  // SGS ODR issue
202  mutable ::sycl::nd_item<3>* itm;
203 #endif
204 
206  : shared_mem_offset(0),
207  shared_mem_ptr(nullptr)
208  {}
209 
210  // TODO handle alignment
211  template<typename T>
213  {
214 
215  // Calculate offset in bytes with a char pointer
216  void* mem_ptr = static_cast<char*>(shared_mem_ptr) + shared_mem_offset;
217 
218  shared_mem_offset += bytes * sizeof(T);
219 
220  // convert to desired type
221  return static_cast<T*>(mem_ptr);
222  }
223 
225  {
226  // On the cpu/gpu we want to restart the count
227  shared_mem_offset = 0;
228  }
229 
231  void teamSync()
232  {
233  // SGS ODR Issue
234 #if defined(RAJA_GPU_DEVICE_COMPILE_PASS_ACTIVE) && defined(RAJA_SYCL_ACTIVE)
235  itm->barrier(::sycl::access::fence_space::local_space);
236 #endif
237 
238 #if defined(RAJA_GPU_DEVICE_COMPILE_PASS_ACTIVE) && !defined(RAJA_SYCL_ACTIVE)
239  __syncthreads();
240 #endif
241  }
242 };
243 
244 template<>
245 class LaunchContextT<LaunchContextHostPolicy> : public LaunchContextBase
246 {
247 public:
249 };
250 
251 // Preserve backwards compatibility
252 #if defined(RAJA_HIP_ACTIVE)
253 using LaunchContext =
255 #elif defined(RAJA_CUDA_ACTIVE)
256 using LaunchContext =
258 #else
260 #endif
261 
262 template<typename LAUNCH_POLICY>
264 
265 // Duplicate of code above on account that we need to support the case in which
266 // a kernel_name is not given
267 template<typename LAUNCH_POLICY, typename... ReduceParams>
268 void launch(LaunchParams const& launch_params,
269  ReduceParams&&... rest_of_launch_args)
270 {
271  // Get reducers
272  auto reducers = expt::make_forall_param_pack(
273  std::forward<ReduceParams>(rest_of_launch_args)...);
274 
275  // get kernel name
276  std::string kernel_name =
277  expt::get_kernel_name(std::forward<ReduceParams>(rest_of_launch_args)...);
278 
279  auto&& launch_body =
280  expt::get_lambda(std::forward<ReduceParams>(rest_of_launch_args)...);
281 
282  // Take the first policy as we assume the second policy is not user defined.
283  // We rely on the user to pair launch and loop policies correctly.
284  util::PluginContext context {
285  util::make_context<typename LAUNCH_POLICY::host_policy_t>(
286  std::move(kernel_name))};
288 
290  auto p_body = trigger_updates_before(launch_body);
291 
293 
295 
297 
298  using Res = typename resources::get_resource<
299  typename LAUNCH_POLICY::host_policy_t>::type;
300 
301  launch_t::exec(Res::get_default(), launch_params, p_body, reducers);
302 
304 }
305 
306 //=================================================
307 // Run time based policy launch
308 //=================================================
309 template<typename POLICY_LIST, typename BODY>
310 void launch(ExecPlace place, LaunchParams const& params, BODY const& body)
311 {
312  launch<POLICY_LIST>(place, params, body);
313 }
314 
315 // Run-time API for new reducer interface with support of the case without a new
316 // kernel name
317 template<typename POLICY_LIST, typename... ReduceParams>
318 void launch(ExecPlace place,
319  const LaunchParams& launch_params,
320  ReduceParams&&... rest_of_launch_args)
321 // BODY const &body)
322 {
323 
324  // Forward to single policy launch API - simplifies testing of plugins
325  switch (place)
326  {
327  case ExecPlace::HOST:
328  {
329  using Res = typename resources::get_resource<
330  typename POLICY_LIST::host_policy_t>::type;
331  launch<LaunchPolicy<typename POLICY_LIST::host_policy_t>>(
332  Res::get_default(), launch_params,
333  std::forward<ReduceParams>(rest_of_launch_args)...);
334  break;
335  }
336 #if defined(RAJA_GPU_ACTIVE)
337  case ExecPlace::DEVICE:
338  {
339  using Res = typename resources::get_resource<
340  typename POLICY_LIST::device_policy_t>::type;
341  launch<LaunchPolicy<typename POLICY_LIST::device_policy_t>>(
342  Res::get_default(), launch_params,
343  std::forward<ReduceParams>(rest_of_launch_args)...);
344  break;
345  }
346 #endif
347  default:
348  RAJA_ABORT_OR_THROW("Unknown launch place or device is not enabled");
349  }
350 }
351 
352 
353 // Helper function to retrieve a resource based on the run-time policy - if a
354 // device is active
355 #if defined(RAJA_ENABLE_CUDA) || defined(RAJA_ENABLE_HIP) || \
356  defined(RAJA_ENABLE_SYCL)
357 template<typename T, typename U>
358 RAJA::resources::Resource Get_Runtime_Resource(T host_res,
359  U device_res,
360  RAJA::ExecPlace device)
361 {
362  if (device == RAJA::ExecPlace::DEVICE)
363  {
364  return RAJA::resources::Resource(device_res);
365  }
366  else
367  {
368  return RAJA::resources::Resource(host_res);
369  }
370 }
371 #endif
372 
373 template<typename T>
374 RAJA::resources::Resource Get_Host_Resource(T host_res, RAJA::ExecPlace device)
375 {
376  if (device == RAJA::ExecPlace::DEVICE)
377  {
378  RAJA_ABORT_OR_THROW("Device is not enabled");
379  }
380 
381  return RAJA::resources::Resource(host_res);
382 }
383 
384 // Launch API which takes team resource struct and supports new reducers
385 
386 // Duplicate of API above on account that we need to handle the case that a
387 // kernel name is not provided
388 template<typename POLICY_LIST, typename... ReduceParams>
389 resources::EventProxy<resources::Resource> launch(
390  RAJA::resources::Resource res,
391  LaunchParams const& launch_params,
392  ReduceParams&&... rest_of_launch_args)
393 {
394 
395  // Get reducers
396  auto reducers = expt::make_forall_param_pack(
397  std::forward<ReduceParams>(rest_of_launch_args)...);
398 
399  std::string kernel_name =
400  expt::get_kernel_name(std::forward<ReduceParams>(rest_of_launch_args)...);
401 
402  auto&& launch_body =
403  expt::get_lambda(std::forward<ReduceParams>(rest_of_launch_args)...);
404 
405  ExecPlace place;
406  if (res.get_platform() == RAJA::Platform::host)
407  {
408  place = RAJA::ExecPlace::HOST;
409  }
410  else
411  {
412  place = RAJA::ExecPlace::DEVICE;
413  }
414 
415  //
416  // Configure plugins
417  //
418 #if defined(RAJA_GPU_ACTIVE)
419  util::PluginContext context {
420  place == ExecPlace::HOST
421  ? util::make_context<typename POLICY_LIST::host_policy_t>(
422  std::move(kernel_name))
423  : util::make_context<typename POLICY_LIST::device_policy_t>(
424  std::move(kernel_name))};
425 #else
426  util::PluginContext context {
427  util::make_context<typename POLICY_LIST::host_policy_t>(
428  std::move(kernel_name))};
429 #endif
430 
432 
434  auto p_body = trigger_updates_before(launch_body);
435 
437 
439 
440  switch (place)
441  {
442  case ExecPlace::HOST:
443  {
445  resources::EventProxy<resources::Resource> e_proxy =
446  launch_t::exec(res, launch_params, p_body, reducers);
448  return e_proxy;
449  }
450 #if defined(RAJA_GPU_ACTIVE)
451  case ExecPlace::DEVICE:
452  {
454  resources::EventProxy<resources::Resource> e_proxy =
455  launch_t::exec(res, launch_params, p_body, reducers);
457  return e_proxy;
458  }
459 #endif
460  default:
461  {
462  RAJA_ABORT_OR_THROW("Unknown launch place or device is not enabled");
463  }
464  }
465 
466  RAJA_ABORT_OR_THROW("Unknown launch place");
467 
468  //^^ RAJA will abort before getting here
469  return resources::EventProxy<resources::Resource>(res);
470 }
471 
472 template<typename POLICY_LIST>
473 #if defined(RAJA_GPU_DEVICE_COMPILE_PASS_ACTIVE)
474 using loop_policy = typename POLICY_LIST::device_policy_t;
475 #else
476 using loop_policy = typename POLICY_LIST::host_policy_t;
477 #endif
478 
479 template<typename POLICY, typename SEGMENT>
480 struct LoopExecute;
481 
482 template<typename POLICY, typename SEGMENT>
484 
486 template<typename POLICY_LIST,
487  typename CONTEXT,
488  typename SEGMENT,
489  typename BODY>
490 RAJA_HOST_DEVICE RAJA_INLINE void loop(CONTEXT const& ctx,
491  SEGMENT const& segment,
492  BODY const& body)
493 {
494 
495  LoopExecute<loop_policy<POLICY_LIST>, SEGMENT>::exec(ctx, segment, body);
496 }
497 
498 template<typename POLICY_LIST,
499  typename CONTEXT,
500  typename SEGMENT,
501  typename BODY>
502 RAJA_HOST_DEVICE RAJA_INLINE void loop_icount(CONTEXT const& ctx,
503  SEGMENT const& segment,
504  BODY const& body)
505 {
506 
507  LoopICountExecute<loop_policy<POLICY_LIST>, SEGMENT>::exec(ctx, segment,
508  body);
509 }
510 
511 namespace expt
512 {
513 
515 template<typename POLICY_LIST,
516  typename CONTEXT,
517  typename SEGMENT,
518  typename BODY>
519 RAJA_HOST_DEVICE RAJA_INLINE void loop(CONTEXT const& ctx,
520  SEGMENT const& segment0,
521  SEGMENT const& segment1,
522  BODY const& body)
523 {
524 
525  LoopExecute<loop_policy<POLICY_LIST>, SEGMENT>::exec(ctx, segment0, segment1,
526  body);
527 }
528 
530 template<typename POLICY_LIST,
531  typename CONTEXT,
532  typename SEGMENT,
533  typename BODY>
534 RAJA_HOST_DEVICE RAJA_INLINE void loop_icount(CONTEXT const& ctx,
535  SEGMENT const& segment0,
536  SEGMENT const& segment1,
537  BODY const& body)
538 {
539 
540  LoopICountExecute<loop_policy<POLICY_LIST>, SEGMENT>::exec(ctx, segment0,
541  segment1, body);
542 }
543 
545 template<typename POLICY_LIST,
546  typename CONTEXT,
547  typename SEGMENT,
548  typename BODY>
549 RAJA_HOST_DEVICE RAJA_INLINE void loop(CONTEXT const& ctx,
550  SEGMENT const& segment0,
551  SEGMENT const& segment1,
552  SEGMENT const& segment2,
553  BODY const& body)
554 {
555 
556  LoopExecute<loop_policy<POLICY_LIST>, SEGMENT>::exec(ctx, segment0, segment1,
557  segment2, body);
558 }
559 
561 template<typename POLICY_LIST,
562  typename CONTEXT,
563  typename SEGMENT,
564  typename BODY>
565 RAJA_HOST_DEVICE RAJA_INLINE void loop_icount(CONTEXT const& ctx,
566  SEGMENT const& segment0,
567  SEGMENT const& segment1,
568  SEGMENT const& segment2,
569  BODY const& body)
570 {
571 
573  ctx, segment0, segment1, segment2, body);
574 }
575 
576 } // namespace expt
577 
578 template<typename POLICY, typename SEGMENT>
579 struct TileExecute;
580 
581 template<typename POLICY, typename SEGMENT>
583 
584 template<typename POLICY_LIST,
585  typename CONTEXT,
586  typename TILE_T,
587  typename SEGMENT,
588  typename BODY>
589 RAJA_HOST_DEVICE RAJA_INLINE void tile(CONTEXT const& ctx,
590  TILE_T tile_size,
591  SEGMENT const& segment,
592  BODY const& body)
593 {
594 
595  TileExecute<loop_policy<POLICY_LIST>, SEGMENT>::exec(ctx, tile_size, segment,
596  body);
597 }
598 
599 template<typename POLICY_LIST,
600  typename CONTEXT,
601  typename TILE_T,
602  typename SEGMENT,
603  typename BODY>
604 RAJA_HOST_DEVICE RAJA_INLINE void tile_tcount(CONTEXT const& ctx,
605  TILE_T tile_size,
606  SEGMENT const& segment,
607  BODY const& body)
608 {
609  TileTCountExecute<loop_policy<POLICY_LIST>, SEGMENT>::exec(ctx, tile_size,
610  segment, body);
611 }
612 
613 namespace expt
614 {
615 
616 template<typename POLICY_LIST,
617  typename CONTEXT,
618  typename TILE_T,
619  typename SEGMENT,
620  typename BODY>
621 RAJA_HOST_DEVICE RAJA_INLINE void tile(CONTEXT const& ctx,
622  TILE_T tile_size0,
623  TILE_T tile_size1,
624  SEGMENT const& segment0,
625  SEGMENT const& segment1,
626  BODY const& body)
627 {
628 
629  TileExecute<loop_policy<POLICY_LIST>, SEGMENT>::exec(
630  ctx, tile_size0, tile_size1, segment0, segment1, body);
631 }
632 
633 template<typename POLICY_LIST,
634  typename CONTEXT,
635  typename TILE_T,
636  typename SEGMENT,
637  typename BODY>
638 RAJA_HOST_DEVICE RAJA_INLINE void tile_tcount(CONTEXT const& ctx,
639  TILE_T tile_size0,
640  TILE_T tile_size1,
641  SEGMENT const& segment0,
642  SEGMENT const& segment1,
643  BODY const& body)
644 {
645 
647  ctx, tile_size0, tile_size1, segment0, segment1, body);
648 }
649 
650 template<typename POLICY_LIST,
651  typename CONTEXT,
652  typename TILE_T,
653  typename SEGMENT,
654  typename BODY>
655 RAJA_HOST_DEVICE RAJA_INLINE void tile(CONTEXT const& ctx,
656  TILE_T tile_size0,
657  TILE_T tile_size1,
658  TILE_T tile_size2,
659  SEGMENT const& segment0,
660  SEGMENT const& segment1,
661  SEGMENT const& segment2,
662  BODY const& body)
663 {
664 
665  TileExecute<loop_policy<POLICY_LIST>, SEGMENT>::exec(
666  ctx, tile_size0, tile_size1, tile_size2, segment0, segment1, segment2,
667  body);
668 }
669 
670 template<typename POLICY_LIST,
671  typename CONTEXT,
672  typename TILE_T,
673  typename SEGMENT,
674  typename BODY>
675 RAJA_HOST_DEVICE RAJA_INLINE void tile_tcount(CONTEXT const& ctx,
676  TILE_T tile_size0,
677  TILE_T tile_size1,
678  TILE_T tile_size2,
679  SEGMENT const& segment0,
680  SEGMENT const& segment1,
681  SEGMENT const& segment2,
682  BODY const& body)
683 {
684 
686  ctx, tile_size0, tile_size1, tile_size2, segment0, segment1, segment2,
687  body);
688 }
689 
690 } // namespace expt
691 
692 } // namespace RAJA
693 #endif
RAJA header file defining Layout, a N-dimensional index calculator with compile-time defined sizes an...
Definition: launch_core.hpp:192
void * shared_mem_ptr
Definition: launch_core.hpp:197
size_t shared_mem_offset
Definition: launch_core.hpp:196
RAJA_HOST_DEVICE void teamSync()
Definition: launch_core.hpp:231
RAJA_HOST_DEVICE LaunchContextBase()
Definition: launch_core.hpp:205
RAJA_HOST_DEVICE void releaseSharedMemory()
Definition: launch_core.hpp:224
RAJA_HOST_DEVICE T * getSharedMemory(size_t bytes)
Definition: launch_core.hpp:212
Definition: launch_context_policy.hpp:30
Header file containing RAJA CUDA policy definitions.
Header file containing RAJA HIP policy definitions.
RAJA header file containing a helper to determine the launch context type.
Header file for common RAJA internal macro definitions.
RAJA_HOST_DEVICE void RAJA_ABORT_OR_THROW(const char *str)
Definition: macros.hpp:143
#define RAJA_HOST_DEVICE
Definition: macros.hpp:65
#define RAJA_SUPPRESS_HD_WARN
Definition: macros.hpp:68
RAJA_SUPPRESS_HD_WARN RAJA_HOST_DEVICE RAJA_INLINE void loop(CONTEXT const &ctx, SEGMENT const &segment0, SEGMENT const &segment1, BODY const &body)
Definition: launch_core.hpp:519
std::string get_kernel_name(Args &&... args)
Definition: forall.hpp:442
constexpr auto && get_lambda(Args &&... args)
Definition: forall.hpp:396
RAJA_SUPPRESS_HD_WARN RAJA_HOST_DEVICE RAJA_INLINE void loop_icount(CONTEXT const &ctx, SEGMENT const &segment0, SEGMENT const &segment1, BODY const &body)
Definition: launch_core.hpp:534
RAJA_HOST_DEVICE RAJA_INLINE void tile_tcount(CONTEXT const &ctx, TILE_T tile_size0, TILE_T tile_size1, SEGMENT const &segment0, SEGMENT const &segment1, BODY const &body)
Definition: launch_core.hpp:638
RAJA_HOST_DEVICE RAJA_INLINE void tile(CONTEXT const &ctx, TILE_T tile_size0, TILE_T tile_size1, SEGMENT const &segment0, SEGMENT const &segment1, BODY const &body)
Definition: launch_core.hpp:621
constexpr auto make_forall_param_pack(Args &&... args)
Definition: forall.hpp:377
RAJA_INLINE void callPreLaunchPlugins(const PluginContext &p)
Definition: plugins.hpp:56
RAJA_INLINE void callPostCapturePlugins(const PluginContext &p)
Definition: plugins.hpp:46
RAJA_INLINE auto trigger_updates_before(T &&item) -> typename std::remove_reference< T >::type
Definition: plugins.hpp:29
RAJA_INLINE void callPostLaunchPlugins(const PluginContext &p)
Definition: plugins.hpp:66
RAJA_INLINE void callPreCapturePlugins(const PluginContext &p)
Definition: plugins.hpp:36
Definition: AlignedRangeIndexSetBuilders.cpp:35
LaunchContextType ctx
Definition: launch.hpp:185
RAJA_HOST_DEVICE RAJA_INLINE void tile(CONTEXT const &ctx, TILE_T tile_size, SEGMENT const &segment, BODY const &body)
Definition: launch_core.hpp:589
RAJA_HOST_DEVICE RAJA_INLINE void loop_icount(CONTEXT const &ctx, SEGMENT const &segment, BODY const &body)
Definition: launch_core.hpp:502
RAJA_SUPPRESS_HD_WARN RAJA_HOST_DEVICE RAJA_INLINE void loop(CONTEXT const &ctx, SEGMENT const &segment, BODY const &body)
Definition: launch_core.hpp:490
void launch(LaunchParams const &launch_params, ReduceParams &&... rest_of_launch_args)
Definition: launch_core.hpp:268
ExecPlace
Definition: launch_core.hpp:58
auto & body
Definition: launch.hpp:177
typename POLICY_LIST::host_policy_t loop_policy
Definition: launch_core.hpp:476
RAJA_HOST_DEVICE RAJA_INLINE void tile_tcount(CONTEXT const &ctx, TILE_T tile_size, SEGMENT const &segment, BODY const &body)
Definition: launch_core.hpp:604
RAJA::resources::Resource Get_Host_Resource(T host_res, RAJA::ExecPlace device)
Definition: launch_core.hpp:374
Definition: launch_core.hpp:148
int value
Definition: launch_core.hpp:149
RAJA_INLINE constexpr RAJA_HOST_DEVICE Lanes()
Definition: launch_core.hpp:154
RAJA_INLINE constexpr RAJA_HOST_DEVICE Lanes(int i)
Definition: launch_core.hpp:159
Definition: launch_core.hpp:263
Definition: launch_core.hpp:163
RAJA_INLINE LaunchParams()=default
size_t shared_mem_size
Definition: launch_core.hpp:167
Teams teams
Definition: launch_core.hpp:165
LaunchParams(Teams in_teams, Threads in_threads, size_t in_shared_mem_size=0)
Definition: launch_core.hpp:172
Threads threads
Definition: launch_core.hpp:166
Definition: launch_core.hpp:90
HOST_POLICY host_policy_t
Definition: launch_core.hpp:91
Definition: launch_core.hpp:480
Definition: launch_core.hpp:483
Definition: launch_core.hpp:76
HOST_POLICY host_policy_t
Definition: launch_core.hpp:77
Definition: launch_core.hpp:98
int value[3]
Definition: launch_core.hpp:99
RAJA_INLINE constexpr RAJA_HOST_DEVICE Teams()
Definition: launch_core.hpp:104
RAJA_INLINE constexpr RAJA_HOST_DEVICE Teams(int i, int j)
Definition: launch_core.hpp:114
RAJA_INLINE constexpr RAJA_HOST_DEVICE Teams(int i, int j, int k)
Definition: launch_core.hpp:119
RAJA_INLINE constexpr RAJA_HOST_DEVICE Teams(int i)
Definition: launch_core.hpp:109
Definition: launch_core.hpp:123
RAJA_INLINE constexpr RAJA_HOST_DEVICE Threads(int i, int j, int k)
Definition: launch_core.hpp:144
int value[3]
Definition: launch_core.hpp:124
RAJA_INLINE constexpr RAJA_HOST_DEVICE Threads(int i, int j)
Definition: launch_core.hpp:139
RAJA_INLINE constexpr RAJA_HOST_DEVICE Threads(int i)
Definition: launch_core.hpp:134
RAJA_INLINE constexpr RAJA_HOST_DEVICE Threads()
Definition: launch_core.hpp:129
Definition: launch_core.hpp:579
Definition: launch_core.hpp:582
Definition: launch_core.hpp:65
Definition: resource.hpp:48
Definition: PluginContext.hpp:26
Header file for RAJA type definitions.