2017-02-24 31 views
1

當我的主機程序是C語言時,我可以傳遞兩個選項作爲OpenCL函數的參數。例如,我可以傳遞兩個 標誌的clCreateBuffer功能是這樣的:在Fortran(OpenCL)中傳遞兩個選項作爲參數(CLFORTRAN)

 
clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, 
          sizeof(main_data), main_data, &err) 

然而,當我嘗試做相同的Fortran語言編寫的主機程序:

 
main_data=clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, & 
           sizeof(main_data), C_NULL_PTR, err) 

我得到一個錯誤:

&  |CL_MEM_COPY_HOST_PTR, size_in_bytes,C_NULL_PTR,ierr)   
     1 
Error: Syntax error in argument list at (1) 

我已經成功編譯CLFORTRAN其他一些程序,但每當我試圖通過兩個標誌像CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR我得到的ABO我錯了。

回答

3

C位或|不能在Fortran中使用。你必須使用+ior()函數可能也會工作,但我會使用+ *。它的工作原理是因爲常量的值通常設計爲只有一個位,而且每次都位於不同的位置。

*如果您確實使用+您可能不會添加相同的標誌兩次,它的標誌將被錯誤地計算。

+0

謝謝你解答我的問題的這個答案。 – Sergio

+0

爲什麼downvote?這個總結實際上在許多官方綁定中使用,例如FFTW和其他。 –

+0

我提高了答案,但其他人低估了答案。 – Sergio

相關問題