0
我在使用兩個不同線程的CUDA中編寫內核。這裏是情景如何。我有3個參數數組(alpha,beta,sigma),每個數組的大小爲64. 而且我有一個大小爲10000的randomValue數組。具有兩個不同線索索引的cuda內核
我的目標是創建一個大小爲64的數組,函數(NextRate)和相應參數的所有不同randomValues。我可以如代碼所示通過將tid2定義爲參數的索引並將tid3定義爲randomValues的索引來完成。這裏是我的內核:
__global__ void evaluateVasicek(KernelArray<double> crrntMonthMdlData, KernelArray<double> crrntMonthMrktData,
KernelArray<double> alpha, KernelArray<double> beta,
KernelArray<double> sigma, KernelArray<double> nextRateRands,
const int NP, double r0, KernelArray<double> dr)
{
int tid = blockIdx.x * blockDim.x + threadIdx.x;
if (tid >= 640000)
return;
int tid2 = tid/10000; // The index for Parameters
int tid3 = tid % 10000; // The index for randomArray
dr._array[tid2] += NextRate(nextRateRands._array[tid3], alpha._array[tid2], beta._array[tid2], sigma._array[tid2], r0);
__syncthreads();
if (tid3 == 0)
printf("dr for tid %d is %f\n", tid2, dr._array[tid2]);
}
當我想總結一下所有的10000醫生對相應的參數我寫了下面一行:
dr._array[tid2] += NextRate(nextRateRands._array[tid3], alpha._array[tid2], beta._array[tid2], sigma._array[tid2], r0);
__syncthreads();
但這似乎並不爲我工作。我只是得到最後一次計算的值,並且沒有線程同步發生。