【发布时间】:2023-04-11 06:13:02
【问题描述】:
我目前正在通过 pycuda/cuda 在 gpu 上编写一些数值方法,并且正在编写自己的内核。在某些时候,我需要估计至少 1000 个耦合 ODE 的误差。我不想复制两个超过 1000 个条目的向量,所以我创建了一个内核(在帖子的底部),它是一个基本的 max 函数。这些 %(T)s 和 %(N)s 是我在运行时进行的字符串替换,这应该与这个问题无关(T 代表复杂数据类型,N 代表耦合 ODE 的数量)。
我的问题是:不需要并行计算,所以我不使用线程。当我在python中调用这个函数时,我应该指定blocksize还是gridsize?
__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;
}
【问题讨论】:
-
blocksize 为 1 和 gridsize 为 1 将使您在 GPU 上获得一个执行线程
-
@RobertCrovella 谢谢,即使我没有链接到 threadId 的任何变量,gpu 也会使用一个线程来执行?
-
正确。相信您作为 C/C++ 程序员的知识(无论它是什么)。
-
太好了,谢谢@RobertCrovella!