Я пишу ядро в CUDA, которое использует два разных потока. вот как идет сценарий. У меня есть 3 массива параметров (альфа, бета, сигма), каждый из которых имеет размер 64. И у меня есть массив randomValue размером 10000.ядро cuda с двумя разными индексами потоков
Моя цель - создать массив размером 64, который вычисляет function (NextRate) со всеми различными случайными значениями для соответствующих параметров. что я могу сделать, как показано в коде, определяя 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();
Но это, кажется, не работает для меня. Я просто получаю последнее вычисленное значение и не происходит нити.