相关疑难解决方法(0)

默认固定存储器与零复制存储器

在CUDA中,我们可以使用固定内存来更有效地将数据从主机复制到GPU,而不是通过主机上的malloc分配的默认内存.但是,默认固定存储器零复制固定存储器有两种类型的固定存储器.

默认的固定内存将数据从主机复制到GPU的速度是正常传输速度的两倍,所以肯定有一个优势(前提是我们有足够的主机内存来锁定页面)

在固定存储器的不同版本中,即零复制存储器,我们不需要将数据从主机复制到GPU的DRAM.内核直接从主机内存中读取数据.

我的问题是:这些固定内存类型中的哪一种是更好的编程习惯.

cuda

34
推荐指数
2
解决办法
1万
查看次数

CUDA是否将内存固定为零拷贝?

固定内存应该会增加主机到设备的传输速率(api参考).但是我发现我不需要调用cuMemcpyHtoD来让内核访问这些值,或者cuMemcpyDtoA让主机读回值.我不认为这会起作用,但确实如此:

__global__ void testPinnedMemory(double * mem)
{
    double currentValue = mem[threadIdx.x];
    printf("Thread id: %d, memory content: %f\n", threadIdx.x, currentValue);
    mem[threadIdx.x] = currentValue+10;
}

void test() 
{
    const size_t THREADS = 8;
    double * pinnedHostPtr;
    cudaHostAlloc((void **)&pinnedHostPtr, THREADS, cudaHostAllocDefault);

    //set memory values
    for (size_t i = 0; i < THREADS; ++i)
        pinnedHostPtr[i] = i;

    //call kernel
    dim3 threadsPerBlock(THREADS);
    dim3 numBlocks(1);
    testPinnedMemory<<< numBlocks, threadsPerBlock>>>(pinnedHostPtr);

    //read output
    printf("Data after kernel execution: ");
    for (int i = 0; i < THREADS; ++i) …
Run Code Online (Sandbox Code Playgroud)

cuda

6
推荐指数
2
解决办法
1814
查看次数

标签 统计

cuda ×2