# CUDA: setting grid dimensions

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?

-

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]


colorNegate[img, 512, 512, 3, {256, 256}]

-
Thanks, hadn't realised you could get bidimensional with the extra argument of the number of threads to launch –  Rojo Feb 4 '12 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 :

S70 CUDA Computation

S71 CUDA Programming