Cuda统一内存简单测试失败

时间:2014-04-07 22:51:35

标签: c cuda

我是新手,这是第一次尝试测试Cuda6统一内存。在编译和运行之后,我期望得到:38,10,但我得到的结果是:5,10。有什么我做错了让我在这种情况下完全愚蠢吗?非常感谢你们!

#include <iostream>
#include <cuda.h>

__global__ void add2(int *a, int *b)
    {
        *a += 33;
    }

int main(){

    int a = 5;
    int b = 10;

    int *p_a, *p_b;

    cudaMallocManaged(&p_a,sizeof(int));
    cudaMallocManaged(&p_b,sizeof(int));

    p_a = &a;
    p_b = &b;

    add2<<<1,1>>>(p_a, p_b);
    cudaDeviceSynchronize();

    std::cout << *p_a << " " << b << std::endl;
    return 0;
}

1 个答案:

答案 0 :(得分:2)

cudaMallocManaged创建一个分配并相应地设置指针,类似于malloc。如果你然后用

消灭那个指定的指针
p_a=&a;

你的内核不会工作。请阅读CUDA 6编程指南中的部分,了解UM的工作原理。

相反,你可以尝试

*p_a=a;

,同样适用于b。