将16字节和256字节复制到共享内存之间的区别

时间:2015-07-06 09:52:48

标签: c++ cuda shared-memory

我正在写一个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-32​​bit

1 个答案:

答案 0 :(得分:2)

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

现在 16字节采用 600us

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