我正在尝试使用 CUDA 并行化 C 函数。我注意到有几个结构作为指向此函数的指针传递。
随着unified memory view ,我已经识别并将 malloc()
修改为 cudaMallocManaged()
。
但是,现在有一个使用 memalign()
的分配。我想完成与 cudaMallocManaged()
完成的任务类似的任务。
是否存在这样的等价物?如果不是,那么需要做什么?
这是 memalign()
分配行的样子:
float *data = (float*) memalign(16, some_integer*sizeof(float));
最佳答案
您应该能够像这样注册一个现有的主机内存缓冲区:
float *data = (float*) memalign(16, some_integer*sizeof(float));
cudaHostRegister((void *)data, some_integer*sizeof(float), cudaHostRegisterDefault);
注册后 data
的行为应与使用 cudaMallocManaged
分配的内存相同。检查 cudaHostRegister
调用的返回值,如果失败,则您选择了不兼容的对齐方式。
关于c - 相当于cuda中的memalign,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31986116/