rust - 从 Rust 调用 OpenACC 代码不在 GPU 上运行

标签 rust openacc pgi pgi-accelerator

2020 年 9 月 7 日更新
我在 https://gitlab.com/lisanhu2016/rust-openacc-example.git 添加了一个小例子。
这是一个带有 README 的公共(public)存储库,您应该可以在那里尝试该示例。
我一直链接的库是:nvc、achost、pgm,你可以在build.rs中看到它们
===
我正在尝试从 rust 代码中调用 openacc 代码,但我遇到了可能与链接有关的问题。
我正在使用以下步骤:

  • 编译bindings.cc带有 openacc 标志 -acc -gpu=managed -Minfo=accel并将其转换为静态库libfoo.a
  • [ 87%] Building CXX object CMakeFiles/foo.dir/bindings.cc.o
    /opt/nvidia/hpc/20.7/Linux_x86_64/20.7/compilers/bin/nvc++    -fast -O3 -DNDEBUG   -fPIC -acc -gpu=managed -Minfo=accel -o CMakeFiles/foo.dir/bindings.cc.o -c /usa/lisanhu/tmp/rust-c-ffi-example/bindings.cc
    process_batch:
          6, Generating copyout(lengths[:array.l]) [if not already present]
             Generating implicit copyin(array.data[:]) [if not already present]
             Generating Tesla code
             10, #pragma acc loop gang, vector(128) /* blockIdx.x threadIdx.x */
          6, Generating implicit copyin(array) [if not already present]
    [100%] Linking CXX static library libfoo.a
    
  • 使用 libfoo.a 编译 rust 代码, 并动态链接到库 nvc nvcpumath nvhost nvdevice .
  • 用一些数据运行代码,它运行。
  • 使用 PGI_ACC_TIME=1 运行代码,没有时间信息
  • 使用 ncu --set full 运行代码,它显示没有内核信息

  • 我想我们可能链接到了错误的库,但我不确定,你能帮我解决这个问题吗?非常感谢!!

    最佳答案

    我通过 OpenACC Slack channel 与三虎合作。有两个问题。
    首先,由于他没有与 PGI/NV 链接,他需要添加“-gpu=nordc”标志。 RDC 需要在被 Rust 链接时不执行的设备链接步骤。
    其次,由于“数据”数组是由 Rust 分配的,它不会被放入 CUDA 统一内存中。因此,他需要使用“process_array”例程将其添加到 OpenACC 数据区域。

    关于rust - 从 Rust 调用 OpenACC 代码不在 GPU 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63758643/

    相关文章:

    gcc - c - 将支持 PGI OpenACC 的库与 gcc 链接

    thrust - 编译器不支持#pragma Once

    rust - 如何在不将代码拆分成单独的函数的情况下为SPECS框架编写单元测试?

    rust - 是否可以查询闭包的堆栈空间?

    rust - 为什么具有未知标识符的匹配表达式会编译并运行?

    rust - 我必须怎么做才能解决 "use of moved value"错误?

    c - OpenAcc 归并排序程序中的浮点异常

    c - 使用 openmp 使用 C 通过 openacc 在多个 GPU 上分配矩阵乘法工作

    c++ - OpenACC 和面向对象的 C++

    c - 在 OpenACC 的 PGI 编译器中使用 -fast 时,如何解决循环携带的依赖关系阻止循环向量化