[英]How to use acc_set_cuda_stream(streamId, stream)?
我以這種方式創建了 CUDA stream :
integer(kind=cuda_stream_kind) :: stream1
istat = cudaStreamCreate(stream1)
將其用於袖帶的計划:
err_dir = err_dir + cufftPlan2D(plan_dir1,NY,NY,CUFFT_D2Z)
err_dir = err_dir + cufftSetStream(plan_dir1,stream1)
在執行袖帶的例程中,我通過plan_dir1
並且我有
subroutine new_fft_dir(z,plan)
!$acc host_data use_device(z)
ierr = ierr + cufftExecD2Z(plan,z,z)
!$acc end host_data
!$acc parallel loop collapse(2) present(z)
do i=1,NXP2
do j=1,NY
z(i,j) = z(i,j)/NY**2
enddo
enddo
!$acc end parallel loop
我想設置一個 OpenACC stream 等於 CUDA stream stream1
,但使用:
integer(kind=cuda_stream_kind) :: stream1
istat = cudaStreamCreate(stream1)
integer :: stream
istat = cudaStreamCreate(stream1)
acc_set_cuda_stream(stream,stream1)
我在行尾或行尾附近收到 **NVFORTRAN-S-0034-Syntax 錯誤 (main.f90: 48) **
我的目標是將async
子句添加到
!$acc parallel loop collapse(2) present(z) async(stream)
do i=1,NXP2
do j=1,NY
z(i,j) = z(i,j)/NY**2
enddo
enddo
!$acc end parallel loop
讓這個循環和 fft 在同一個 CUDA stream 上。
問題可能是我使用integer(kind=cuda_stream_kind)
而cudaStream_t stream
嗎?
“acc_set_cuda_stream”是一個子程序,所以你需要在它之前添加“call”。 此外,變量需要在可執行代碼之前聲明,因此“integer::stream”需要向上移動一行。
use cudafor
use openacc
integer(kind=cuda_stream_kind) :: stream1
integer :: stream
istat = cudaStreamCreate(stream1)
call acc_set_cuda_stream(stream,stream1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.