8#include <hpx/async_base/apply.hpp>
9#include <hpx/async_base/async.hpp>
10#include <hpx/execution_base/execution.hpp>
11#include <hpx/async_cuda/cuda_executor.hpp>
16template <typename Interface, typename Pool, typename... Ts>
17void test_pool_memcpy(const size_t executor_parameter, Ts &&...ts) {
19 cppuddle::memory_recycling::recycle_allocator_cuda_host<double>>
21 cppuddle::memory_recycling::cuda_device_buffer<double> devicebuffer(512);
22 cppuddle::executor_recycling::executor_pool::init<Interface, Pool>(
23 executor_parameter, std::forward<Ts>(ts)...);
24 // without interface wrapper
27 cppuddle::executor_recycling::executor_pool::get_interface<Interface,
29 Interface test1_interface = std::get<0>(test1);
30 size_t interface_id = std::get<1>(test1);
31 hpx::apply(test1_interface, cudaMemcpyAsync,
32 devicebuffer.device_side_buffer, hostbuffer.data(),
33 512 * sizeof(double), cudaMemcpyHostToDevice);
34 auto fut1 = hpx::async(test1_interface, cudaMemcpyAsync, hostbuffer.data(),
35 devicebuffer.device_side_buffer,
36 512 * sizeof(double), cudaMemcpyDeviceToHost);
38 cppuddle::executor_recycling::executor_pool::release_interface<Interface,
43 // with interface wrapper
45 cppuddle::executor_recycling::executor_interface<Interface, Pool>
47 // hpx::cuda::cuda_executor test1_interface(0, false);
48 hpx::apply(test1_interface.interface, cudaMemcpyAsync,
49 devicebuffer.device_side_buffer, hostbuffer.data(),
50 512 * sizeof(double), cudaMemcpyHostToDevice);
51 auto fut1 = hpx::async(test1_interface.interface, cudaMemcpyAsync,
52 hostbuffer.data(), devicebuffer.device_side_buffer,
53 512 * sizeof(double), cudaMemcpyDeviceToHost);
56 cppuddle::executor_recycling::executor_pool::cleanup<Interface, Pool>();
17void test_pool_memcpy(const size_t executor_parameter, Ts &&...ts) { {
…}
59template <typename Interface, typename Pool, typename... Ts>
60void test_pool_ref_counting(const size_t executor_parameter, Ts &&...ts) {
63 cppuddle::executor_recycling::executor_pool::init<Interface, Pool>(
64 executor_parameter, std::forward<Ts>(ts)...);
68 cppuddle::executor_recycling::executor_pool::get_interface<Interface,
71 cppuddle::executor_recycling::executor_pool::get_current_load<Interface,
74 Interface test1_interface = std::get<0>(test1);
75 size_t test1_index = std::get<1>(test1);
77 cppuddle::executor_recycling::executor_pool::get_interface<Interface,
80 cppuddle::executor_recycling::executor_pool::get_current_load<Interface,
83 Interface test2_interface = std::get<0>(test2);
84 // auto fut = test2_interface.get_future();
85 size_t test2_index = std::get<1>(test2);
87 cppuddle::executor_recycling::executor_pool::get_interface<Interface,
90 cppuddle::executor_recycling::executor_pool::get_current_load<Interface,
93 Interface test3_interface = std::get<0>(test3);
94 size_t test3_index = std::get<1>(test3);
96 cppuddle::executor_recycling::executor_pool::get_interface<Interface,
99 cppuddle::executor_recycling::executor_pool::get_current_load<Interface,
101 Interface test4_interface = std::get<0>(test4);
102 size_t test4_index = std::get<1>(test4);
105 cppuddle::executor_recycling::executor_pool::release_interface<Interface,
109 cppuddle::executor_recycling::executor_pool::get_current_load<Interface,
112 cppuddle::executor_recycling::executor_pool::release_interface<Interface,
116 cppuddle::executor_recycling::executor_pool::get_current_load<Interface,
119 cppuddle::executor_recycling::executor_pool::release_interface<Interface,
123 cppuddle::executor_recycling::executor_pool::get_current_load<Interface,
126 cppuddle::executor_recycling::executor_pool::release_interface<Interface,
130 cppuddle::executor_recycling::executor_pool::get_current_load<Interface,
136 cppuddle::executor_recycling::executor_pool::get_current_load<Interface,
139 cppuddle::executor_recycling::executor_pool::cleanup<Interface, Pool>();
60void test_pool_ref_counting(const size_t executor_parameter, Ts &&...ts) { {
…}
142template <typename Interface, typename Pool, typename... Ts>
143void test_pool_wrappers(const size_t executor_parameter, Ts &&...ts) {
145 cppuddle::executor_recycling::executor_interface<Interface, Pool>;
147 cppuddle::executor_recycling::executor_pool::init<Interface, Pool>(
148 executor_parameter, std::forward<Ts>(ts)...);
150 wrapper_type test1{0};
152 cppuddle::executor_recycling::executor_pool::get_current_load<Interface,
155 wrapper_type test2{0};
157 cppuddle::executor_recycling::executor_pool::get_current_load<Interface,
159 // auto fut = test2.get_future();
161 wrapper_type test3{0};
163 cppuddle::executor_recycling::executor_pool::get_current_load<Interface,
166 wrapper_type test4{0};
168 cppuddle::executor_recycling::executor_pool::get_current_load<Interface,
171 // Check availability method:
173 cppuddle::executor_recycling::executor_pool::interface_available<
174 Interface, Pool>(1, 0);
175 assert(avail == false); // NOLINT
176 avail = cppuddle::executor_recycling::executor_pool::interface_available<
177 Interface, Pool>(2, 0);
178 assert(avail == false); // NOLINT
179 avail = cppuddle::executor_recycling::executor_pool::interface_available<
180 Interface, Pool>(3, 0);
181 assert(avail == true); // NOLINT
184 cppuddle::executor_recycling::executor_pool::get_current_load<Interface,
187 cppuddle::executor_recycling::executor_pool::cleanup<Interface, Pool>();
143void test_pool_wrappers(const size_t executor_parameter, Ts &&...ts) { {
…}
Contains a RAII wrappers for CUDA device buffers. Intended to be used with the recycling allocators b...