opencl
छद्म-यादृच्छिक संख्या जनरेटर कर्नेल उदाहरण
खोज…
पैरामीटर
पैरामीटर | विवरण |
---|---|
__global अहस्ताक्षरित int * rnd_buffer | अहस्ताक्षरित int OpenCL मानक द्वारा 32-बिट के रूप में मानकीकृत है |
* | __global का अर्थ है पढ़ने / लिखने की पहुंच के लिए डिवाइस की मुख्य मेमोरी |
* | rnd_buffer "opencl program" के दायरे में एक नाम है (होस्ट नहीं, लेकिन डिवाइस) |
थॉमस वैंग के पूर्णांक हैश फ़ंक्शन का उपयोग करना
Auxilliary फ़ंक्शन जो एक बीज लेता है और मूल्यांकन करता है:
uint wang_hash(uint seed)
{
seed = (seed ^ 61) ^ (seed >> 16);
seed *= 9;
seed = seed ^ (seed >> 4);
seed *= 0x27d4eb2d;
seed = seed ^ (seed >> 15);
return seed;
}
एक अन्य सहायक कार्य जो "आईडी" द्वारा दिखाए गए बफर स्थान को आरम्भ करने के लिए इसका उपयोग करता है:
void wang_rnd_0(__global unsigned int * rnd_buffer,int id)
{
uint maxint=0;
maxint--;
uint rndint=wang_hash(id);
rnd_buffer[id]=rndint;
}
और दूसरा 0 और 1 के बीच अतिरिक्त फ्लोट आउटपुट कर रहा है
float wang_rnd(__global unsigned int * rnd_buffer,int id)
{
uint maxint=0;
maxint--; // not ok but works
uint rndint=wang_hash(rnd_buffer[id]);
rnd_buffer[id]=rndint;
return ((float)rndint)/(float)maxint;
}
प्रारंभिक कर्नेल:
__kernel void rnd_init(__global unsigned int * rnd_buffer)
{
int id=get_global_id(0);
wang_rnd_0(rnd_buffer,id); // each (id) thread has its own random seed now
}
एकल पुनरावृति कर्नेल:
__kernel void rnd_1(__global unsigned int * rnd_buffer)
{
int id=get_global_id(0);
// can use this to populate a buffer with random numbers
// concurrently on all cores of a gpu
float thread_private_random_number=wang_rnd(rnd_buffer,id);
}
Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow