これは行列乗算のコードです
program ex
implicit none
real :: a(256,256),b(256,256),c(256,256),t1,t2
integer i,j,k,sum
sum=0
do j = 1,256
do i = 1,256
a(i,j) = 1
b(i,j) = 1
c(i,j) = 0.0
enddo
enddo
call cpu_time(t1)
!$acc region do
do i=1,256
do j=1,256
sum=0
do k=1,256
sum=sum+a(i,k)*b(k,j)
c(i,j)=sum
end do
end do
end do
!$acc end region
call cpu_time(t2)
print*,"cpu time=",t2-t1
print*,c
end program ex
これを実行すると、アクセラレータディレクティブとPGIコンパイラを使用した場合の実行時間は75ミリ秒になります。しかし、「cuda fortran」実装で同じ行列乗算を実行すると、実行時間はわずか5ミリ秒です。したがって、アクセラレータディレクティブを使用したとしても、大きな違いがあります。したがって、アクセラレータディレクティブが正しく機能しているとは思えません。