将循环放入内核中是很常见的.这并不意味着它总是一个好主意,但它并不意味着它也不是.
确定如何有效地分配任务和数据以及利用相关并行性的一般问题是一个非常困难和未解决的问题,尤其是涉及到CUDA时.正在进行积极的研究以有效地确定(即,不盲目地探索参数空间)如何为给定的内核实现最佳结果.
有时,将循环放入内核会很有意义.例如,对表现出强数据独立性的大型常规数据结构的许多元素的迭代计算非常适合于包含循环的内核.其他时候,您可能决定让每个线程处理许多数据点,例如,如果您没有足够的共享内存来为每个任务分配一个线程(当大量线程共享大量数据时,这种情况并不少见,通过增加每个线程完成的工作量,您可以将所有线程的共享数据放入共享内存中.
您最好的选择是根据需要进行有根据的猜测,测试,配置文件和修改.有很多空间可以使用优化...启动参数,全局与常量与共享内存,保持寄存器数量冷却,确保合并并避免内存库冲突等.如果您对性能感兴趣,你应该在CUDA 4.0文档页面上查看NVIDIA提供的"CUDA C最佳实践"和"CUDA占用计算器"(如果你还没有).