14

Apple サイトの公式ドキュメントを見ていると、Xcode で OpenCL を使用する方法についてのクイックスタートがあることがわかります。

たぶん私だけかもしれませんが、「hello world OCL」セクションに記載されているコードをビルドすることができませんでした。

Xcode を起動し、空のプロジェクトを作成しました。main.c と .cl カーネル ファイルを作成し、Apple 開発者サイトにあるものを貼り付けましたが、ターゲットを追加した後でも、何もビルドすることができません。

AD サイトにはダウンロードするプロジェクトがないため、失敗の原因についての手がかりがありません (私が原因である可能性が最も高いか、サイトが手順を想定していて、それらについて言及していない可能性があります)。

macresearch.org のサンプル プロジェクトも試してみましたが、かなり古いもので、3 番目のレッスンのテスト プロジェクトはまったく実行されていません。

現在、他の人が Xcode を使用して OCL コードを実行していることは確かですが、OCL を使用して Xcode プロジェクトを実行する方法について明確な設定を提供する単一のページ (前述の macresearch.org を除く) を見つけることができません。OCL と Xcode の操作方法を示すチュートリアルを知っている人はいますか?

OCL に関する本を 3 冊購入しました (Gaster の OpenCL を使用した Heterogeneous Computing、Scarpino の OpenCL の動作、Munshi の OpenCL プログラミング ガイド)。 .

側面上; OCL アプリケーションで実行する前にカーネル コードを検証できるアプリケーションはありますか?

あなたが持っているかもしれない提案を前もって感謝します。

4

3 に答える 3

13

簡単な答え: https://developer.apple.com/library/mac/#documentation/Performance/Conceptual/OpenCL_MacProgGuide/XCodeHelloWorld/XCodeHelloWorld.html

コマンド ライナーの長い答え:

最近の Xcode (および Lion 以降) では、 を呼び出す必要さえありませんclCreateProgramWithSource。カーネルを作成してアプリから呼び出すだけですが、追加のコンパイル手順が必要です。

ここでは、デフォルトのコンパイラ フラグを使用して Apple から OpenCL Hello World の例を取り上げています ( https://developer.apple.com/library/mac/#documentation/Performance/Conceptual/OpenCL_MacProgGuide/ExampleHelloWorld/Example_HelloWorld.htmlを参照)。 Xcode がバックグラウンドで実行する手順。

開始するには、次の操作を行います。

/System/Library/Frameworks/OpenCL.framework/Libraries/openclc -x cl -cl-std=CL1.1 -cl-auto-vectorize-enable -emit-gcl mykernel.cl

これにより、mykernel.cl.h と mykernel.cl.c の 2 つのファイルが作成されます (mykernel.cl.c は、カーネルをアプリにロードするすべての魔法を実行します)。次に、カーネルをコンパイルする必要があります。

/System/Library/Frameworks/OpenCL.framework/Libraries/openclc -x cl -cl-std=CL1.1 -Os -triple i386-applecl-darwin -emit-llvm-bc -o mykernel.cl.i386.bc mykernel.cl
/System/Library/Frameworks/OpenCL.framework/Libraries/openclc -x cl -cl-std=CL1.1 -Os -triple x86_64-applecl-darwin -emit-llvm-bc -o mykernel.cl.x86_64.bc mykernel.cl
/System/Library/Frameworks/OpenCL.framework/Libraries/openclc -x cl -cl-std=CL1.1 -Os -triple gpu_32-applecl-darwin -emit-llvm-bc -o mykernel.cl.gpu_32.bc mykernel.cl

最後に、アプリ自体をビルドします。

clang -c -Os -Wall -arch x86_64 -o mykernel.cl.o mykernel.cl.c
clang -c -Os -Wall -arch x86_64 -o square.o square.c
clang -framework OpenCL -o square mykernel.cl.o square.o

以上です。Apple のサンプル コードには、またははclCreateProgramWithBinary表示されません。clCreateProgramWithSourceすべては、によって生成された mykernel.cl.c を介して行われopenclcます。

于 2013-02-06T00:32:41.613 に答える
6

したがって、この方法で問題を部分的に解決できたようです。

  • 空のプロジェクトを作成し、main.cファイルとカーネルファイルを作成します

  • コンソールアプリケーションとしてターゲットを作成する

  • ビルド設定で、OpenCLフレームワークを追加します(正しく追加される場合は、左側のペインのファイルブラウザーに表示されます)。

  • カーネルファイルが配置されている場所を指定し、パスをハードコーディングします(「mykernel.cl」とだけ言うだけでは不十分です。何らかの理由でXcodeは、clファイルがメインと同じディレクトリにあることを取得しません。カーネルファイルをロードするときにパスを指定する必要があります)

Appleデベロッパサイトのサンプルコードを使用しながら、これらの手順を使用して成功しました。

これを行うには他の方法があると確信していますが、少なくともこれは、私のように、開始方法についての手がかりがなかった人に役立つ可能性があります。

于 2012-10-28T22:00:56.567 に答える
1

foo.cl質問の 2 番目の部分に答えるには、Mountain Lion で次のように OpenCL コンパイラを実行できます。

/System/Library/Frameworks/OpenCL.framework/Libraries/openclc \
    -c -Wall -emit-llvm -arch gpu_32 -o foo.bc foo.cl

foo.clLLVM ビットコードにコンパイルされますfoo.bc。このバイナリ ファイルはclCreateProgramWithBinary、より高速な で使用できますclCreateProgramWithSource。の有効な値-archi386 x86_64 gpu_32です。

于 2012-10-26T01:03:04.733 に答える