将 16 字节和 256 字节复制到共享内存之间的区别
difference between copying 16-bytes and 256-bytes to shared memory
我正在编写 CUDA 程序。代码将固定内存复制到共享内存,固定内存是指用 cudaHostAlloc(., ., cudaHostAllocMapped)
分配的内存。复制 16 字节需要 600us,复制 256[=22] 需要 8ms =] 字节。为什么差别这么大?
我的代码如下:
__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
因为 256 字节是您之前复制的内容(16 字节)的 16 倍
现在 16 字节 花费了 600us
和 16 倍 即 9600us 接近您观察到的 8000us ( 1ms = 1000us)
我正在编写 CUDA 程序。代码将固定内存复制到共享内存,固定内存是指用 cudaHostAlloc(., ., cudaHostAllocMapped)
分配的内存。复制 16 字节需要 600us,复制 256[=22] 需要 8ms =] 字节。为什么差别这么大?
我的代码如下:
__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
因为 256 字节是您之前复制的内容(16 字节)的 16 倍
现在 16 字节 花费了 600us
和 16 倍 即 9600us 接近您观察到的 8000us ( 1ms = 1000us)