在Fortran(OpenCL)中传递两个选项作为参数(CLFORTRAN)

问题描述:

当我的主机程序是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我错了。

C位或|不能在Fortran中使用。你必须使用+ior()函数可能也会工作,但我会使用+ *。它的工作原理是因为常量的值通常设计为只有一个位,而且每次都位于不同的位置。

*如果您确实使用+您可能不会添加相同的标志两次,它的标志将被错误地计算。

+0

谢谢你解答我的问题的这个答案。 – Sergio

+0

为什么downvote?这个总结实际上在许多官方绑定中使用,例如FFTW和其他。 –

+0

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