私は自分のMACで完璧に動作するOpenCLコードを持っています。しかし、私はEC2のg2.2xlargeインスタンスへのポートにそれを、それはデバッグの多くの後OpenCLカーネル内の配列の宣言は機能しません。 (clBuildProgram(-11))
今Exception
ERROR: clBuildProgram(-11)
を与えたときに、私はカーネルに構文エラーがあることが分かりました。
int size_a = POP_SIZE/4/numberOfDevices;
int aliveIndividualsIndex[size_a];
私がしようとした場合::
int aliveIndividualsIndex[40];
それはあまりにもEC2インスタンス上で動作し、さらにそれを絞り込む後、私はエラーが次の行にあることがわかりました。
MACとEC2インスタンスが同じカーネルコードを処理する方法に違いがあるのはなぜですか?なぜ彼らの1人がコードを認識していて、もう1人が構文エラーを出すのですか?どうすれば修正できますか?私は[size_a]を使う必要があるからです。
どちらもOpenCL 1.2を使用しています。 gccやg ++などのバージョンに関する情報が必要な場合は、それらを提供してください。
ことがありますCLで動的ランタイム・アレイを作成することは不可能です。コンパイル時には、メモリー・フットプリントを知って、カーネルに適切なメモリー割り振りを許可する必要があります。いくつかのプラットフォームの下でコードが失敗していない場合、それはCPU上で実行されるため、許容コンパイラを使用しているようです。 – DarkZeros