使用共享& CUDA中的常量内存

时间:2012-03-17 10:29:22

标签: cuda gpu-shared-memory gpu-constant-memory

我想读取一个文本文件并将其存储在一个数组中。然后,我想将数组从主机传输到设备并将其存储在共享内存中。我编写了以下代码,但与使用全局内存相比,执行时间有所增加。我无法理解原因是什么?此外,如果有人可以帮助我使用常量内存来编写此代码,那将会很棒。

__global__ void deviceFunction(char *pBuffer,int pSize){
    extern __shared__ char p[];
    int i;
    for(i=0;i<pSize;i++)}
        p[i] = pBuffer[i];
    }
}
int main(void){

    cudaMalloc((void**)&pBuffer_device,sizeof(char)*pSize);
    cudaMemcpy(pBuffer_device,pBuffer,sizeof(char)*pSize,cudaMemcpyHostTo Device);
    kernel<<<BLOCK,THREAD>>>(pBuffer_device,pSize);

}

1 个答案:

答案 0 :(得分:1)

  1. 可能是因为块中的每个线程都试图写入从0到pSize的相同共享内存地址!
    使用线程协作加载全局内存数据到共享内存: http://forums.nvidia.com/index.php?showtopic=216640&view=findpost&p=1332005
    内核中的每个线程执行“pSize”全局内存读取。