Как индексировать потоки в PyCuda в методе FDTD - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть нижеприведенный SourceModule fdtd, мне нужно указать, чтобы каждый поток выполнял одну операцию, а также, когда размер массива меньше количества потоков.

__global__ void fdtd(double *ex, double *hy, int kc, int t0, int spread, int step)
{

    int idx = threadIdx.x*blockIdx.x + threadIdx.y;
    double pulse;
    ex[idx] = ex[idx] + 0.5* (hy[idx-1] - hy[idx]);
    pulse = (double)exp((double)-0.5 * pow((double)(t0 - step)/(double)spread, 2));
    ex[kc] = pulse;
    hy[idx] = hy[idx] + 0.5 * (ex[idx] - ex[idx+1]);
}

Массивы и вызов функции

ex = numpy.zeros(10000)
hy = numpy.zeros(10000)
func(ex_gpu, hy_gpu,kc,t0,spread,numpy.int32(i), block=(16,16,1),grid=(5,1))
...