2017-02-24 6 views
1

私のホストプログラムがC言語であるとき、OpenCL関数の引数として2つのオプションを渡すことができます。例えば、私はこのようなclCreateBuffer関数に2つの フラグを渡すことができます。FortranでOpenCLの引数として2つのオプションを渡す(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()関数もおそらく動作しますが、+ *を使用します。これは、定数の値が通常は1つだけ1ビットを持ち、毎回異なる位置にあるように設計されているために機能します。

* +を使用する場合、同じフラグを2回追加しないことがありますが、フラグは正しく計算されません。

+0

私の問題を解決したこの回答をありがとう。 – Sergio

+0

なぜdownvote? Thuの和は、FFTWなどの多くの公式バインディングで実際に使用されています。 –

+0

私は答えをupvotedしかし他の誰かがそれをdownvoted。 – Sergio