在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()
函数可能也会工作,但我会使用+
*。它的工作原理是因为常量的值通常设计为只有一个位,而且每次都位于不同的位置。
*如果您确实使用+
您可能不会添加相同的标志两次,它的标志将被错误地计算。
谢谢你解答我的问题的这个答案。 – Sergio
为什么downvote?这个总结实际上在许多官方绑定中使用,例如FFTW和其他。 –
我提高了答案,但其他人低估了答案。 – Sergio