我目前正在通过pycuda/cuda在GPU上编程一些数值方法,并正在编写我自己的内核。在某些时候,我需要估计至少1000个耦合ODE的误差。我不想复制超过1000个条目的几个向量,所以我创建了一个基本的最大功能的内核(在帖子的底部)。这些%(T)s和%(N)s是我在运行时所做的字符串替换,这对于这个问题应该是不相关的(T代表复杂的数据类型,N代表耦合的ODE的数量)。没有线程的GPU内核块大小/网格大小
我的问题是:没有必要进行并行计算,所以我不使用线程。当我在python中调用这个函数时,我应该指定什么是块大小或网格大小?
__global__ void get_error(double *max_error,%(T)s error_vec[1][%(N)s])
{
max_error[0]=error_vec[0][0].real();
for(int ii=0;ii<%(N)s;ii=ii+1)
{
if(max_error[0] < error_vec[0][ii].real())
{
max_error[0]=error_vec[0][ii].real();
}
}
return;
}
1的块大小和1的网格大小会让你正好在GPU上执行一个线程 –
@RobertCrovella谢谢,即使我没有任何变量链接到threadId,gpu将使用一个线程执行? – malxmusician212
正确。相信你的知识(不管它可能是什么)作为C/C++程序员。 –