Gcc 如何知道我的代码在CPU或GPU上运行?

Gcc 如何知道我的代码在CPU或GPU上运行?,gcc,parallel-processing,gpu,openacc,Gcc,Parallel Processing,Gpu,Openacc,我是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

我是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上运行?或者如何更改代码以加快程序速度?

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

您还可以使用nvidia smi命令(如果使用nvidia GPU)监视作业


可能与卸载编译选项有关

你在用什么编译器?在将Data1声明添加到代码中,并将
独立的
添加到
中之后$acc循环
我能够让PGI编译器为GPU构建它。还有,你的意思是有这么大的行程计数吗?我使用的是GCC编译器和AMD GPUIf,这是你真正的代码,那么速度没有改变的原因可能是打印
Hello
a gazmillion次基本上是一个串行操作(而且速度也相对较慢)。无论您的CPU/GPU处理最内部语句的速度有多快,您的输出子系统都将以相同的速度缓慢运行。