Использование общей и постоянной памяти в CUDA

Я хочу прочитать текстовый файл и сохранить его в массиве. Затем я хочу передать массив с хоста на устройство и сохранить его в общей памяти. Я написал следующий код, но время выполнения было увеличено по сравнению с использованием глобальной памяти. Я не могу понять, в чем причина? Также было бы здорово, если бы кто-нибудь помог мне написать этот код с использованием постоянной памяти.

__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 ответ

  1. Возможно, потому что каждый поток в блоке пытается записать одни и те же адреса совместно используемой памяти одновременно в диапазоне от 0 до pSize!
    Используйте совместную загрузку глобальных данных памяти в разделяемую память: http://forums.nvidia.com/index.php?showtopic=216640&view=findpost&p=1332005
    Каждый поток в вашем ядре выполняет чтение глобальной памяти "pSize".
Другие вопросы по тегам