У меня есть ядро, которое передает 3 массива, первый массив d_A1 не имеет данных и используется только для записи данных, два других массива d_D1 и d_ST1 имеют данные.
Размер первого массива:
d_A1[13000000]
Размер второго массива:
d_D1[421]
Размер третьего массива:
d_ST1[21]
N
- 13000000
TestArray<<<n_blocks, block_size>>>(d_A1,N, d_D1, d_ST1);
Теперь я хочу передать только данные d_D1 [421] и d_ST1 [21] в общие массивы, поэтому я создал общие массивы как:
__global__ void TestArray(int* A1, unsigned int N, int* D1, unsigned int* ST1)
{
unsigned int __align__(16) tid = threadIdx.x;
unsigned int __align__(16) idx = __umul24(blockDim.x, blockIdx.x) + threadIdx.x;
__shared__ unsigned int __align__(16) s_D1[441]; //Shared array for d_D1
__shared__ unsigned int __align__(16) s_ST1[21]; //Shared array for d_ST1
if (idx < N) //13000000
{
Q. Как передать данные d_D1 [441] и d_ST1 [21] в s_D1 [441] и s_ST1 [21]?
Я попробовал:
while (idx < 441)
s_D1[tid] = d_D1[idx]
__syncthreads();
while (idx < 21)
s_ST1[tid] = d_ST1[idx]
__syncthreads();
но компьютер зависает, и я должен перезагрузить его.
Я тоже попробовал один раз, а именно только кулак
время, а потом только второе время, без удачи.
Если я использую глобальную память, а именно, d_D1, d_ST1, все работает.
Итак, вопрос:
Как вы передаете данные в общую переменную / массив, если размер массива не N?
} //End of kernel processing
}