Потоковая переменная, которая сохраняется между вызовами ядра

Мне нужно, чтобы каждый поток вычислял часть своей проблемы, возвращался в Python, и когда ядро ​​запустится снова, я бы хотел, чтобы оно продолжало с того места, где оно было ранее прервано. Проблема в коде ниже заключается в том, что variable Кажется, что разделены между потоками. Есть ли способ (регистрируется?) Для создания специфичной для потока переменной, которая сохраняется между вызовами ядра?

MCVE:

import pycuda.driver as cuda
import pycuda.autoinit
from pycuda.compiler import SourceModule

A = np.arange(4).reshape((2,2))
A = a.astype(np.float32)
A_gpu = cuda.mem_alloc(A.nbytes)
cuda.memcpy_htod(A_gpu, A)

mod = SourceModule("""
__device__ float variable;

__global__ void step1(float *out)
{
    int idx = threadIdx.x + threadIdx.y * 2;
    int asd [4] = {111, 222, 333, 444};
    variable = asd[idx];
    out[idx] = variable;
}

__global__ void step2(float *out)
{
    int idx = threadIdx.x + threadIdx.y * 2;
    out[idx] = variable;
}
""")

print('initial A\n', A,'\n')

mod.get_function("step1")(A_gpu, block=(2,2,1))
A_out = np.empty_like(A)
cuda.memcpy_dtoh(A_out, A_gpu)
print('A step1\n',A_out,'\n')

mod.get_function("step2")(A_gpu, block=(2,2,1))
A_out = np.empty_like(A)
cuda.memcpy_dtoh(A_out, A_gpu)
print('A step2\n',A_out,'\n')

Выход:

initial A
 [[0. 1.]
 [2. 3.]] 

A step1
 [[111. 222.]
 [333. 444.]] 

A step2
 [[444. 444.]
 [444. 444.]] 

0 ответов

Другие вопросы по тегам