我正在写一个CUDA程序。代码将固定内存复制到共享内存,固定内存是指用cudaHostAlloc(., ., cudaHostAllocMapped)
分配的内存。复制 16 字节需要 600us , 8ms 复制 256 字节。为什么如此巨大的差异?
我的代码如下:
__global__
void kernel_func(char* dict, int dict_len)
{
__shared__ char s_dict[256];
/* dict_len = 16; */
if(threadIdx.x == 0) {// copy once for each block
memcpy((unsigned char*)s_dict, (unsigned char*)dict, dict_len);
}
__syncthreads();
}
kernel_func<<<32, 128>>>("256 bytes pinned memory", 256);
环境:GTX650 + CUDA 6.5 + Win7-32bit
答案 0 :(得分:2)
因为256字节是您之前复制的16倍(16字节)
现在 16字节采用 600us
16次 9600us 接近您观察到的 8000us (1ms = 1000us)