我有一个关于在GPU上使用CUDA或OpenCL代码的并行性的一般问题。我使用NVIDIA GTX 470。
我简要阅读了Cuda编程指南,但没有找到相关答案,因此在这里提问。
我有一个顶级函数,它调用CUDA内核(对于相同的内核,我有其OpenCL版本)。此顶级函数本身从我的主函数中的“for循环”中调用3次,针对3个不同的数据集(图像数据R、G、B),而实际的代码块也对图像/帧中的所有像素进行处理,因此它有2个“for循环”。
我想知道的是这里利用了什么样的并行性-任务级别的并行性还是数据级别的并行性?
所以我想要理解的是,这个CUDA和C代码是否为代码块和顶级代码中的不同功能/函数创建了多个线程,并在并行执行中利用了任务并行性。如果是这样,谁创建它,因为代码中没有明确包含或链接线程库。
还是说它为不同的“for循环”迭代创建线程/任务,这些迭代是独立的,从而实现数据并行性。如果它采用这种并行性,它是通过注意到不同的for循环迭代没有依赖性,因此可以并行调度来利用的吗?
因为我没有看到任何特殊的编译器构造/内置函数(如OpenMP中的并行for循环),告诉编译器/调度程序调度这样的for循环/函数并行执行。
任何阅读材料都会有帮助。