在cuda

时间:2015-08-13 10:49:27

标签: c cuda memory-alignment

我正在尝试使用CUDA并行化C函数。我注意到有几个结构作为指向此函数的指针传递。 使用unified memory view,我已将malloc()标识并修改为cudaMallocManaged()

但是,现在使用memalign()进行分配。我希望实现与cudaMallocManaged()完成的类似任务。

这样的等价物是否存在?如果不是,那么需要做什么?

这是memalign()分配行的外观:

float *data = (float*) memalign(16, some_integer*sizeof(float));

1 个答案:

答案 0 :(得分:2)

您应该能够注册现有的主机内存缓冲区,如下所示:

float *data = (float*) memalign(16, some_integer*sizeof(float));
cudaHostRegister((void *)data, some_integer*sizeof(float), cudaHostRegisterDefault);
注册data后的

应与使用cudaMallocManaged分配的内存相同。检查cudaHostRegister调用的返回值,如果失败,则选择了不兼容的对齐方式。