1

2020 年 9 月 7 日更新

我在https://gitlab.com/lisanhu2016/rust-openacc-example.git为此添加了一个小示例

这是一个带有自述文件的公共存储库,您应该可以在那里尝试该示例。

我一直链接的库是:nvc、achost、pgm,你可以在build.rs

===

我正在尝试从 rust 代码中调用 openacc 代码,但我遇到了可能与链接有关的问题。我正在使用以下步骤:

  1. 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
  1. 编译 rust 代码libfoo.a,并动态链接到库nvc nvcpumath nvhost nvdevice
  2. 用一些数据运行代码,它运行。
  3. 运行代码PGI_ACC_TIME=1,没有时间信息
  4. 运行代码ncu --set full,它没有显示内核信息

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

4

1 回答 1

1

我通过 OpenACC Slack 频道与三虎合作。有两个问题。

首先,由于他没有与 PGI/NV 链接,他需要添加“-gpu=nordc”标志。RDC 需要在被 Rust 链接时不执行的设备链接步骤。

其次,由于“数据”数组是由 Rust 分配的,它不会被放入 CUDA 统一内存中。因此,他需要使用“process_array”例程将其添加到 OpenACC 数据区域。

于 2020-09-11T18:52:34.600 回答