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