5

これが私のコードです:

#include <stdio.h>
#include <CL/cl.h>
#include <CL/cl_platform.h>

int main(){    
    cl_float3 f3 =  (cl_float3){1, 1, 1};
    cl_float3 f31 = (cl_float3) {2, 2, 2};
    cl_float3 f32 = (cl_float3) {2, 2, 2};
    f3 = f31 + f32;
    printf("%g %g %g \n", f3.x, f3.y, f3.z);
    return  0;
}

gcc 4.6 でコンパイルすると、エラーが発生します

test.c:14:11: error: invalid operands to binary + (have ‘cl_float3’ and ‘cl_float3’)

OpenCL 仕様がセクション 6.4 で 2 つの追加を示しているため、私には非常に奇妙ですfloatn。他のヘッダーを含める必要がありますか?

しかし、さらに奇妙なのは、でコンパイルすると-std=c99次のようなエラーが発生することです

test.c:16:26: error: ‘cl_float3’ has no member named ‘x’

..すべてのコンポーネント (x、y、z) について...

4

3 に答える 3

5

OpenCL プログラムは 2 つの部分で構成されています。

  1. ホスト上で動作するプログラム。これは通常、C または C++ で記述されますが、OpenCL 仕様のセクション 4 および 5 で説明されている API を使用することを除けば、特別なことではありません。
  2. OpenCL デバイス (通常は GPU) で実行されるカーネル。これは、セクション 6 で指定された言語で書かれています。これは C ではありませんが、C に近い言語です。ベクトル操作などを追加します(使用しようとしているように)。これは、カーネル コードを含む文字列を API 経由で OpenCL に渡すホスト プログラムによってコンパイルされます。

この 2 つを混同し、ホスト コードでカーネル言語の機能を使用しようとしました。

于 2012-06-11T12:51:22.730 に答える