MCPcopy Create free account
hub / github.com/arrayfire/arrayfire / getRandomEngineKernel

Function getRandomEngineKernel

src/backend/opencl/kernel/random_engine.hpp:39–80  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

37
38template<typename T>
39static 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
82template<typename T>
83static void randomDistribution(cl::Buffer out, const size_t elements,

Callers

nothing calls this directly

Calls 4

TemplateArgClass · 0.85
getNameFunction · 0.85
logFunction · 0.85
getKernelFunction · 0.50

Tested by

no test coverage detected