将 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-32​​bit

因为 256 字节是您之前复制的内容(16 字节)的 16 倍

现在 16 字节 花费了 600us

16 倍9600us 接近您观察到的 8000us ( 1ms = 1000us)