关于标准 CUDA 内存分配模型的快速问题:
double* x_device;
cudaMalloc(&x_device,myArraySize);
Run Code Online (Sandbox Code Playgroud)
该变量x_device是一个指向双精度的指针。在我调用 cudaMalloc 之后,x_device 现在是否指向cuda 设备上的内存位置?因此,换句话说,*x_device会导致段错误,因为我们无法直接从主机访问设备内存。
附带问题,编译器没有抱怨我不使用(void**)&x_device,这是必需的吗?我有时会在示例中看到它,有时不会。
谢谢!
我编写了以下函数来生成双精度的随机向量:
void getrands(vector<double> *x)
{
int N=(*x).size();
uniform_real_distribution<double> unif(0.0,1.0);
mt19937 re(time(NULL));
auto generator = bind(unif,re);
generate_n((*x).begin(),N,generator);
}
Run Code Online (Sandbox Code Playgroud)
在我的main()程序中,如果我尝试在几个向量上调用此函数(假设我想生成10个随机向量),我最终得到的所有向量都包含相同的随机数,因为没有足够的时间来获取一个好的重播种子.有什么更好的方法呢?我应该创建一个随机数组然后将其转换为向量?我已经习惯了matlab,我可以调用X = rand(n,m)......
谢谢!