c - 相当于cuda中的memalign

标签 c cuda memory-alignment

我正在尝试使用 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/

相关文章:

c++ - 推力:如何有意避免将参数传递给算法?

c++ - std::pair<U,V> 对齐控制

c - 如何在 C 中给客户端特定的 ip 地址

c - C语言文件中的字符串排序

c++ - 自动为 C++ 函数添加函数前缀

c++ - 将全局复制到共享内存的最佳方法

c - 如果我说 calloc(1000, 23),那么 23 "round up"会变成 24 吗?还是到32?

c - 为什么 C 中的 double 是 8 字节对齐的?

c - 如何通过 C 中的命名管道发送文件?

c - C 位运算的行为