I'm new to CUDA, and CUDALink. I see how CUDAFunctionLoad allows one to set the block dimensions. On calling the function, you can also either pass as argument or have MMA automatically select the number of threads to be launched as the max length of the arguments passed. However, I don't see how I can set the grid dimensions if I want a bidimensional grid. It should be possible, right?
2 Answers
You cannot specify the grid dimensions, you can specify how many threads to launch. This is done by passing an extra argument when calling the CUDAFunciton, so
colorNegate = CUDAFunctionLoad[{srcf}, "imageColorNegate",
{{_Integer, _, "InputOutput"},_Integer, _Integer, _Integer}, {16, 16}]
this will figure out the number of threads automatically:
colorNegate[img, 512, 512, 3]
this will force CUDALink to launch {256, 256} threads
colorNegate[img, 512, 512, 3, {256, 256}]
-
$\begingroup$ Thanks, hadn't realised you could get bidimensional with the extra argument of the number of threads to launch $\endgroup$– RojoCommented Feb 4, 2012 at 18:14
I think you can use a list {nX, nY}
like in this example from the documentation (where nX = nY = 16) :
colorNegate = CUDAFunctionLoad[{srcf}, "imageColorNegate",
{{_Integer, _, "InputOutput"},_Integer, _Integer, _Integer}, {16, 16}]
I would recommend the two free seminars :
You can also download the presentation notebooks.