【问题标题】:How to know my code is running on CPU or GPU?如何知道我的代码是在 CPU 还是 GPU 上运行?
【发布时间】:2020-07-18 05:54:41
【问题描述】:

我是 OpenACC 的初学者。我想通过使用带有 GCC 编译器的 fortran 语言的 OpenACC 来加速我的程序。我的代码是:

Program Test

 use openacc

 Implicit None
  integer(8)::I1,I2,I3,I4,I5,I6,I,ii,jj,J

    !$acc kernels
    !$acc loop
     do I=1,1200000000
     do II=1,300
     do jj=1,200
     do I1=1,200
    do I2=1,500
     if(I2==20.and.I1==200.and.JJ==200.and.II==200)then
     print*,"Hello"
     endif
      Data1(I)=I-I+I-I+I
      enddo
      enddo
       enddo
        enddo
         enddo

          !$acc end kernels
            end

我的代码速度没有改变。 我如何知道我的代码在 CPU 或 GPU 上运行?或者我如何更改我的代码以加速我的程序?

【问题讨论】:

  • 如果那是你的真实代码,那么速度没有改变的原因可能是打印Hello 无数次本质上是一个串行操作(而且也相对较慢)。无论您的 CPU / GPU 处理最里面的语句有多快,您的输出子系统都会以同样的速度前进。

标签: gcc parallel-processing gpu openacc


【解决方案1】:

我找到了一个知道代码在主机或目标设备上运行的解决方案。 解决方法是使用 acc_on_device (acc_device_host)) 函数。如果代码在主机上运行,​​则此函数返回 true,如果代码在目标设备上运行,则此函数返回 False。 我的代码在主机(CPU)上运行。但另一个问题是为什么这段代码不能在目标设备(GPU)上运行?

【讨论】:

  • 你用的是什么编译器?在将 Data1 的声明添加到代码中并将 independent 添加到您的 !$acc loop 之后,我能够让 PGI 编译器为 GPU 构建它。另外,你的意思是有这么多的旅行次数吗?
  • 我正在使用 GCC 编译器和 AMD GPU
【解决方案2】:

您还可以使用 nvidia-smi 命令监控您的工作(如果使用 NVidia GPU)。

也许与卸载编译选项有关? https://gcc.gnu.org/wiki/Offloading#Compilation_options

【讨论】:

    猜你喜欢
    • 2012-02-27
    • 1970-01-01
    • 2017-09-02
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    • 2019-12-01
    相关资源
    最近更新 更多