伙计们请确认我的想法是否正确.
假设我有一个内核函数mykernel(double *array).我希望内核中的代码执行128次.从主机调用内核时,我可以通过两种方式执行此操作:
mykernel<<<128, 1>>>(myarray);
//or
mykernel<<<1, 128>>>(myarray);
Run Code Online (Sandbox Code Playgroud)
通过第一次调用,我将创建128个块,每个块运行1个线程.在第二次调用中,我将创建一个包含128个线程的块.但由于内核中的代码在同一个数组上运行,因此使用第二次调用更有效.
我是个傻瓜,还是应该坚持学习CUDA?:)
小智 5
这取决于.第一次调用将创建多个块,但每个块都太小而无法有效地使用GPU的多处理器(它们甚至小于warp大小).第二次调用不会使用GPU上的多个多处理器.如果你真的只需要128个线程,那么我建议你尝试一下
mykernel<<<4, 32>>>(myarray);
Run Code Online (Sandbox Code Playgroud)
但通常你需要使用不同的参数对代码进行基准测试,以优化性能,YMMV.