web-dev-qa-db-ja.com

OpenCLソースをどのように管理しますか?

プログラムが実行時にコンパイルできるようにOpenCLソースコードを管理する方法を決定するのに苦労しています。 2つの多くの戦略があるようです。あなたはそれらをあなたのCソースに文字列として作成することができます(これはコードを書くための恐ろしい方法のように思われるので、私は本当にこのアプローチは好きではありません)。 2番目のアプローチは、stdioを使用して実行時に.clファイルを読み取り、それらをコンパイルすることです。これが私がやっていることです。これに関して私が持っている唯一の問題は、それが私のプログラムに依存関係を追加することです(単一の実行可能ファイルに含まれるようにしたいと思います)。また、プログラムを.clファイルと同じディレクトリで実行して、それらを見つけられるようにする必要があるようです。私はこれに対するいくつかの解決策を考えることができますが、私はあなたたちがそれをどのように行うのか疑問に思っていますか?

最後に、pythonスクリプトを作成してコンパイル前に実行し、各.clファイルに対応する文字列を含むヘッダーファイルを生成しました。この方法で、clソースコードを個別に作成して含めることができます。これで私が抱えている問題は、openclソース内のインクルードを処理する方法がわからないことです。openclソースコードをどのように管理するのですか。

4
chasep255

OpenCLソースを実行可能ファイルに埋め込むこともできます。小さなスクリプトを変換して(おそらく hexdump(1) ...を使用して)そのファイルを次のような巨大なCファイルに変換します

 const char myopenclsource[] = { 0x2f, 0x2f, 0x20, 0x4d, 0x75, 
   /// etc
 };

(もちろん、OpenCLソースはバイナリ実行可能ファイルから簡単に見つけることができます。たとえば、Linuxでは strings(1) を使用します)

次に、ビルド手順を変更する必要があります。 Makefile に数行を追加します。

一部のOpenCL実装は [〜#〜] spir [〜#〜] バイトコードも受け入れる可能性があります(これはおそらく同様に埋め込むことができますが、人間にとってはデコードが簡単ではなく、おそらくわずかに高速です)実装によってGPUにロードします)。