| 37 | |
| 38 | template<typename T> |
| 39 | static Kernel getRandomEngineKernel(const af_random_engine_type type, |
| 40 | const int kerIdx, |
| 41 | const uint elementsPerBlock) { |
| 42 | std::string key; |
| 43 | std::vector<common::Source> sources{random_engine_write_cl_src}; |
| 44 | switch (type) { |
| 45 | case AF_RANDOM_ENGINE_PHILOX_4X32_10: |
| 46 | key = "philoxGenerator"; |
| 47 | sources.emplace_back(random_engine_philox_cl_src); |
| 48 | break; |
| 49 | case AF_RANDOM_ENGINE_THREEFRY_2X32_16: |
| 50 | key = "threefryGenerator"; |
| 51 | sources.emplace_back(random_engine_threefry_cl_src); |
| 52 | break; |
| 53 | case AF_RANDOM_ENGINE_MERSENNE_GP11213: |
| 54 | key = "mersenneGenerator"; |
| 55 | sources.emplace_back(random_engine_mersenne_cl_src); |
| 56 | break; |
| 57 | default: |
| 58 | AF_ERROR("Random Engine Type Not Supported", AF_ERR_NOT_SUPPORTED); |
| 59 | } |
| 60 | std::array<TemplateArg, 2> targs = { |
| 61 | TemplateTypename<T>(), |
| 62 | TemplateArg(kerIdx), |
| 63 | }; |
| 64 | std::vector<std::string> options = { |
| 65 | DefineKeyValue(T, dtype_traits<T>::getName()), |
| 66 | DefineValue(THREADS), |
| 67 | DefineKeyValue(RAND_DIST, kerIdx), |
| 68 | }; |
| 69 | if (type != AF_RANDOM_ENGINE_MERSENNE_GP11213) { |
| 70 | options.emplace_back( |
| 71 | DefineKeyValue(ELEMENTS_PER_BLOCK, elementsPerBlock)); |
| 72 | } |
| 73 | #if defined(OS_MAC) // Because apple is "special" |
| 74 | options.emplace_back(DefineKey(IS_APPLE)); |
| 75 | options.emplace_back(DefineKeyValue(log10_val, std::log(10.0))); |
| 76 | #endif |
| 77 | options.emplace_back(getTypeBuildDefinition<T>()); |
| 78 | |
| 79 | return common::getKernel(key, sources, targs, options); |
| 80 | } |
| 81 | |
| 82 | template<typename T> |
| 83 | static void randomDistribution(cl::Buffer out, const size_t elements, |
nothing calls this directly
no test coverage detected