JavaとOpenCL開発:クラウドへの道





この記事では、OpenCLと組み合わせた開発のためのJavaプラットフォームの使用、このアプローチの長所と短所について説明します。 将来のソフトウェア開発におけるこれらの技術の組み合わせにより、クラウドコンピューティングとOpenCLのフルパワーを使用できるようになります。



最近、高度な並列処理を備えた市販のコンピューティングデバイスのソフトウェア開発が人気を集めています。 これらは、SIMDコマンドとGPGPU(GPUでの汎用計算)をサポートするビデオアクセラレーター、単一のAMD Fusionクリスタル上の中央およびグラフィックコプロセッサーを組み合わせたデバイス、および特殊なコプロセッサーを備えた最新のマルチコアプロセッサーです。 ほとんどすべてのタイプのデバイスには独自のコマンドシステム、アーキテクチャ機能、およびアプリケーション開発があり、以前は開発者がいくつかのプログラミング言語とAPI(アプリケーションプログラミングインターフェイス)の知識を必要としていました。 こうした非常に複雑なプログラミングにより、プラットフォームを変更することが不可能または経済的に不便になりました(ベンダーロックイン)。 Alliance of Hardware and Software Manufacturersは、これらの問題を解決するOpenCL言語を開発および標準化しました。 これはオープンスタンダードであり、オペレーティングシステムWindows、Linux、およびMacOS用のハードウェアAMD、Intel、Nvidia、IBMなどのさまざまなメーカーの実装がいくつかあります。



Windows for VisualStudioには、NVIDIAのプラグイン-Parallel NsightとAMDのgDEBuggerがあります。 また、前述のオペレーティングシステムのOpenCLコンパイラとランタイムランタイムに問題がない場合、Linux開発環境ではAMD / Nvidiaの方がはるかに複雑です。



ホストコードがデータを準備し、OpenCLカーネルの動作を調整するOpenCLコードの一部である場合、Javaで記述されているため、Linux / Windowsでのデバッグに問題があります。 クロスプラットフォームサーバーソフトウェアを開発するための市場でのJavaプラットフォームの成功を思い出すと、ハードウェアベンダーがまだOpenCL開発ツール(Eclipse IDE、Netbeans IDE、IntelliJ Ideaに組み込まれたデバッグとプロファイリング)を開発しない理由は明らかではありません。 それまでの間、これらの開発環境には問題のテクノロジーの操作を簡素化する既製のツールは含まれていません。今日利用可能なツールを使用して開発の問題を解決してみましょう。 これにより、現代のコンピューティングデバイスでの作業に最適化された競争力のある産業用ソリューションを手に入れることができます。



JavaとOpenCLを共有することの利点と欠点



では、なぜJavaプラットフォームを使用してOpenCLのホストコードを開発する必要があるのでしょうか。 この選択を支持していくつかの議論をします。





Javaを使用してOpenCLホストコードを記述しない場合:



そのため、私たちのタスクはOpenCLに適していると判断し、Java言語のみを使用して効果的に実装することは不可能です。 同時に、JVMを利用したいと考えています。 アイデアから実装に移りましょう。



技術



AMD + Radeon HD 5000/6000 CPUまたはAMD Fusionベースのデスクトップソリューションの代わりにサーバープロセッサAPU Opteronの使用に切り替える予定がある場合、 AMDの実装でOpenCLを開発することをお勧めします。 OpenCLを操作するためのAPIとしてのJavaCL 。 bridJを使用してOpenCL APIの動的ライブラリのネイティブコードを呼び出すと、JNAと比較してパフォーマンスが向上します。



デバッグツール:テキストユーザーインターフェイスを備えたgdbまたはgdbフロントエンドとしてのddd



コードプロファイリングについては、AMD Accelerated Parallel Processing(APP)SDKのAMD APPプロファイラー、開発用にAMD独自のFGLRXグラフィックスドライバーがインストールされたUbuntu 11.04 OSを使用することをお勧めします。 開発は、Mavenプロジェクトをサポートする任意のJava IDEで実行できます。 しかし、コードの記述中の構文強調表示およびOpenCL関数のコンパイルのサポートは、現在、netbeansプラグインのみをサポートしています 。 このプラグインの動作は非常に不安定でした。



開発用のインフラストラクチャと開発プロセスを作成することは、他のJavaテクノロジを操作することと変わりません。



デバッグツールはより複雑ですが、この問題に対する解決策もあります。 AMDのOpenCLランタイムを使用すると、CPUの起動時にカーネルをデバッグできます。ブレークポイントを設定し、ベクタータイプfloat4、int4などの変数値を表示します。 同時に、たとえばテクスチャを操作するために、GPU機能が中央プロセッサでエミュレートされます。 デバッグの詳細に興味がある人のために、 linuxでのJavaCLとOpenCLのデバッグに関する記事があります。 また、プロジェクトの作成者は、Javaからのカーネルコードのデバッグに関するWikiページを作成しましたOpenCLでサポートされているgdb拡張機能の詳細



AMD APPプロファイラーを使用して、アプリケーションのプロファイルを作成できます。 Linuxで起動すると、アプリケーションのOpenCL関数の動作に関する統計を収集し、LibreOffice Calcテーブルプロセッサでの後続のデータ分析のためにCSVファイルに保存できます。 コードの最適な動作を理解するには、プロファイラーによって測定されたパラメーターの値を解釈する必要があります



おわりに



この記事では、JavaプラットフォームとOpenCLテクノロジーを使用したソフトウェア開発の長所と短所を調べました。 並列処理が増加する過程でコンピューティングデバイスの開発が見込まれるため、ソフトウェア開発へのこのアプローチは、JVMでの高性能エンタープライズおよびクラウドアプリケーションの開発における主要なものの1つになると主張しています。




All Articles