繁体   English   中英

即使页面对齐的内存,cudaHostRegister也会因“无效参数”错误而失败

[英]cudaHostRegister fails with 'invalid argument' error even with page-aligned memory

我使用posix_memalign在主机上分配了页面对齐的内存。 对posix_memalign的调用不会返回任何错误。 但是,使用此指针作为cudaHostRegister的参数会给我一个“无效参数”错误。 可能是什么问题?

CUDA API版本:4.0
gcc版本:4.4.5
GPU计算能力:2.0

编辑
内存分配在应用程序代码中完成,指针传递给库例程。
应用程序代码段:

  if(posix_memalign((void **)&h_A, getpagesize(), n * n * sizeof(float))) {
    printf("Error allocating aligned memory for A\n");
    return 1;
  }

共享库代码段:

  if((ret = cudaSetDeviceFlags(cudaDeviceMapHost)) != cudaSuccess) {
    fprintf(stderr, "Error setting device flag: %s\n", 
            cudaGetErrorString(ret));
    return NULL;
  }

  if((ret = cudaHostRegister(h_A, n2 * sizeof(float), 
                            cudaHostRegisterMapped)) != cudaSuccess) {
    fprintf(stderr, "Error registering page-locked memory for A: %s\n", 
            cudaGetErrorString(ret));
    return NULL;
  }

我无法重现这一点。 如果我使用您提供的代码片段并将它们转换为最小的可执行文件:

#include <unistd.h>
#include <stdlib.h>
#include <malloc.h>
#include <stdio.h>

int main(void)
{
    const int n2 = 100 * 100;
    float *h_A;
    cudaError_t ret;

    if(posix_memalign((void **)&h_A, getpagesize(), n2 * sizeof(float))) {
        printf("Error allocating aligned memory for A\n");
        return -1;
    }


    if((ret = cudaSetDeviceFlags(cudaDeviceMapHost)) != cudaSuccess) {
        fprintf(stderr, "Error setting device flag: %s\n", 
                cudaGetErrorString(ret));
        return -1;
    }

    if((ret = cudaHostRegister(h_A, n2 * sizeof(float), 
                    cudaHostRegisterMapped)) != cudaSuccess) {
        fprintf(stderr, "Error registering page-locked memory for A: %s\n", 
                cudaGetErrorString(ret));
        return -1;
    }

    return 0;
}

它在具有304.54驱动程序的64位Linux主机上的CUDA 4.2和CUDA 5.0下编译和运行没有错误。 因此,我会得出结论,要么你有一个破坏的CUDA安装,要么你的代码在你没有向我们展示过的地方有问题。

也许您可以像我发布的那样编译和运行此代码,看看会发生什么。 如果它有效,它可能有助于缩小可能出现问题的范围。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM