【问题标题】:Equivalent of memalign in cuda相当于 cuda 中的 memalign
【发布时间】:2015-08-13 21:22:24
【问题描述】:

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

但是,现在有一个使用memalign() 的分配。我想完成与cudaMallocManaged() 类似的任务。

这样的等价物存在吗?如果没有,那需要做什么?

memalign() 分配行的外观如下:

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

【问题讨论】:

  • 根据cuda c programming guide cuda分配函数分配的内存总是至少对齐256字节。据我所知,您无法指定其他对齐方式。

标签: c cuda memory-alignment


【解决方案1】:

您应该能够像这样注册现有的主机内存缓冲区:

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

注册后data 的行为应该与cudaMallocManaged 分配的内存相同。检查cudaHostRegister调用的返回值,如果失败,你选择了不兼容的对齐方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 2023-04-04
    • 2012-08-20
    • 2011-10-29
    • 2013-02-01
    • 1970-01-01
    相关资源
    最近更新 更多