我正在尝试使用CUDA并行化C函数。我注意到有几个结构作为指向此函数的指针传递。
使用unified memory view,我已将malloc()
标识并修改为cudaMallocManaged()
。
但是,现在使用memalign()
进行分配。我希望实现与cudaMallocManaged()
完成的类似任务。
这样的等价物是否存在?如果不是,那么需要做什么?
这是memalign()
分配行的外观:
float *data = (float*) memalign(16, some_integer*sizeof(float));
答案 0 :(得分:2)
您应该能够注册现有的主机内存缓冲区,如下所示:
float *data = (float*) memalign(16, some_integer*sizeof(float));
cudaHostRegister((void *)data, some_integer*sizeof(float), cudaHostRegisterDefault);
注册data
后的应与使用cudaMallocManaged
分配的内存相同。检查cudaHostRegister
调用的返回值,如果失败,则选择了不兼容的对齐方式。