Поиск…


параметры

параметр подробности
__global unsigned int * rnd_buffer unsigned int стандартизован стандартом OpenCL как 32-разрядный
* __global означает основную память устройства для доступа к чтению / записи
* rnd_buffer - это просто имя в области «opencl program» (не хост, а устройство)

Использование целочисленной хэш-функции Томаса Ванга

Вспомогательная функция, которая принимает семя и оценивает:

uint wang_hash(uint seed)
{
        seed = (seed ^ 61) ^ (seed >> 16);
        seed *= 9;
        seed = seed ^ (seed >> 4);
        seed *= 0x27d4eb2d;
        seed = seed ^ (seed >> 15);
        return seed;
 }

другая вспомогательная функция, которая использует его для инициализации местоположения буфера, показанного «id»:

 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