Потоковая переменная, которая сохраняется между вызовами ядра
Мне нужно, чтобы каждый поток вычислял часть своей проблемы, возвращался в 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.]]