cuda - What dimension should the cuRAND initialization kernel have -


i working on program in there 2 main kernels.

due impact on performances, each kernel has own dimensions. have 2 different block , grid sizes (whose values cannot known @ compile time).

both kernels need use curand library, before third kernel launched initialize curand state on device.

my question comes when need choose dimensions of kernel.

let's have kernel 1 , 2:

block_size_1 = 256 grid_size_1 = 10 block_size_2 = 512 grid_size_2 = 2 

for curand initialization kernel, should use largest sizes (10*512), or highest number of threads (10*256)?

pick biggest kernel size, because maximum number of curand generators you'll use. can easyly evaluate size need using like

__host__ void fun(){     curandstate * randstate;     int mycurandsize = ((block_size1 * grid_size1) > (block_size2 * grid_size2))? block_size1 * grid_size1 : block_size2 * grid_size2);     error = cudamalloc((void **)&randstate, mycurandsize * sizeof(curandstate));     if (error == cudaerrormemoryallocation){         cudadevicereset();         return 1;     }     setup_curand <<<1, mycurandsize>>> (randstate, unsigned(time(null)));      //don't forget free space     cudafree(randstate); }  __global__ void setup_curand(curandstate * state, unsigned long seed) {     int id = threadidx.x;     curand_init(seed, id, 0, &state[id]); } 

edit: asumming block_size * grid_size not go on maximum thread limit, otherwise, can same keeping aswell grid , block dimension , launching number of threads setup_curand<<<x, y>>>(...);


Comments

Popular posts from this blog

Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12:test (default-test) on project.Error occurred in starting fork -

windows - Debug iNetMgr.exe unhandle exception System.Management.Automation.CmdletInvocationException -

configurationsection - activeMq-5.13.3 setup configurations for wildfly 10.0.0 -