我目前正在通過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++程序員。 –