Это код для матричного умножениядирективы ускоритель не работает
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
Когда я исполняю этот раз исполнение 75 мс при использовании директивы акселератор и компилятор PGI. Но когда я выполняю такое же матричное умножение с реализацией «cuda fortran», время выполнения составляет всего 5 мсек. Поэтому есть большая разница, хотя я использовал директивы ускорителя. Поэтому я сомневаюсь, что мои директивы ускорителя работают правильно.
И ваш вопрос? – talonmies
Неужели я глуп, или OP указывает, что время выполнения сократилось с 75 мсек до 5 мсек при использовании директив ускорителя? –
@HighPerformanceMark: CUDA fortran * может * ссылаться на компилятор кода устройства Fortran PGI, а не на ускоритель PGI, но кто мог сказать? – talonmies