【问题标题】:CUFFT_INVALID_DEVICE when creating cufft plan on HPC在 HPC 上创建袖带计划时的 CUFFT_INVALID_DEVICE
【发布时间】:2018-02-26 09:00:18
【问题描述】:

我正在我自己的本地机器上(在 Archlinux 和使用 nvidia 驱动程序 390 和 cuda 9.1 的 Ubuntu 16.04 上)和我们的本地 HPC 集群上测试以下代码:

#include <iostream>
#include <cufft.h>

int main(){
    // Initializing variables
    int n = 1024;
    cufftHandle plan1d;
    double2 *h_a, *d_a;

    // Allocation / definitions
    h_a = (double2 *)malloc(sizeof(double2)*n);
    for (int i = 0; i < n; ++i){
        h_a[i].x = sin(2*M_PI*i/n);
        h_a[i].y = 0;
    }

    cudaMalloc(&d_a, sizeof(double2)*n);
    cudaMemcpy(d_a, h_a, sizeof(double2)*n, cudaMemcpyHostToDevice);
    cufftResult result = cufftPlan1d(&plan1d, n, CUFFT_Z2Z, 1);

    // ignoring full error checking for readability
    if (result == CUFFT_INVALID_DEVICE){
        std::cout << "Invalid Device Error\n";
        exit(1);
    }

    // Executing FFT
    cufftExecZ2Z(plan1d, d_a, d_a, CUFFT_FORWARD);

    //Executing the iFFT
    cufftExecZ2Z(plan1d, d_a, d_a, CUFFT_INVERSE);

    // Copying back
    cudaMemcpy(h_a, d_a, sizeof(double2)*n, cudaMemcpyDeviceToHost);

 }

我用nvcc cuda_test.cu -lcufft编译

在我的两台本地机器上,代码都运行良好;但是,我尝试在我们的 HPC 集群上使用相同的代码,它会在该硬件/配置上返回 CUFFT_INVALID_DEVICE 错误。以下是这些设备的硬件和驱动程序配置。

  • 对于一个集群,我们有多个 P100 可用,并且使用 nvidia 驱动程序版本 384.90 和 cuda 版本 8.0.61。
  • 在第二个集群上,我们使用 K80 和 nvidia 驱动程序版本 367.44 和 cuda 版本 8.0.44。请注意,在此硬件上使用 cuda 版本 7.5.18 运行代码时,上述代码仍会返回错误,但这实际上不会影响代码的执行(据我所知)。

根据this,cuda 版本与可用的驱动程序版本应该没问题;但是,当我之前在本地 ubuntu 机器上安装不正确的驱动程序和 cuda 时,我收到了类似的错误。

我完全不知道如何在这里继续,只能想到几件事:

  1. 我在本地计算机上使用的消费类硬件(Titan X、pascal 和 GTX 970)与集群 HPC 硬件之间存在一些差异。
  2. 有一些我没有考虑过的驱动程序配置问题。我尽我所能尝试了不同的 cuda 版本,但它们似乎都不起作用,除了 7.5.18,它返回了相同的错误,但似乎没有影响性能。
  3. cuda 7.5.18 之后 cufft 发生了一些我没有意识到的变化。

请注意:这只是一个示例,但我有一个更大的代码库,由于此错误似乎无法运行,我正在尝试找出当前如何解决该问题。

感谢您的阅读,如果您对如何进行有任何想法,请告诉我!

编辑 -- 在 Rob 的评论之后添加了评论并修复了主代码中的错字。

【问题讨论】:

  • 1. cufftPlan1d 的返回类型不是 int。 2. 使用正确的 CUDA 错误检查。 3. 用cuda-memcheck运行你的代码
  • Hey Rob 1. 很抱歉打错字了,intcufftResult 在这种情况下在功能上是相同的(据我所知) 2. 为了可读性,我忽略了对这个示例的错误检查因为写这样的东西:devtalk.nvidia.com/default/topic/542160/cufft-error-handling/… 会使代码难以阅读,并且在功能上与我写的没有什么不同 3. cuda-memcheck 不会返回任何错误,cufft 会。谢谢!
  • docs.nvidia.com/cuda/cufft/index.html#function-cufftplan1d -- 文档说 cufftPlan1d 不能返回 CUFFT_INVALID_DEVICE。要么某些东西严重损坏,要么您发现了一个错误,要么您在问题中的示例实际上并不是您正在运行的。不知道是哪个
  • 就在上面,结果 11 显示为 CUFFT_INVALID_DEVICE:docs.nvidia.com/cuda/cufft/index.html#cufftresult 我肯定在运行示例代码,毫无疑问。我已经在 nvidia 论坛上发布了这个,看看有没有人知道。

标签: cuda driver hpc cufft


【解决方案1】:

我遇到了类似的问题,结果证明是 Cray 包装器和 cuda 工具包之间的冲突。 不加载 cudatoolkit 模块,启用动态链接并使用编译器提供的库解决了这个问题。

PS:我使用的是 PGI Fortran 17.5,所以不是完全匹配。

【讨论】:

    猜你喜欢
    • 2015-08-29
    • 2021-03-15
    • 2012-07-26
    • 2020-09-18
    • 2020-08-10
    • 1970-01-01
    • 2018-07-06
    • 2011-11-15
    • 1970-01-01
    相关资源
    最近更新 更多