我是新手,这是第一次尝试测试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;
}
答案 0 :(得分:2)
cudaMallocManaged
创建一个分配并相应地设置指针,类似于malloc
。如果你然后用
p_a=&a;
你的内核不会工作。请阅读CUDA 6编程指南中的部分,了解UM的工作原理。
相反,你可以尝试
*p_a=a;
,同样适用于b。