4

こんにちは、私は現在、研究プロジェクトのためにレイトレーサーを FORTRAN 77 から C に移植しています。

本質を移植した後、問題は並列化にどのように進むかです。
ラボでは、2 ~ 8 コアの異なる Opteron マシンにアクセスできますが、(今のところ) GPU はありません。64b gentoo を実行しています。

GPGPU バージョンは (非常に) 望ましいものですが、プロジェクトにプログラマーが 1 人しかいないため、非 GPU バージョンと GPU バージョンを別々に維持することは選択肢ではありません。
また、コードは GPL で保護されているため、ハードウェアが大きく異なる他のユーザーがコードを使用することを望んでいます。

そのため、GPU やマルチコア システムを使用しなくても、プログラム全体を簡単にコンパイル/実行できる必要があります。
OpenCl は、GPU のないマシンで実行できるため、良いオプションのように思えますが、このコードはシングルコアまたは 32b システムでどのように動作しますか?
openCLなしで簡単にコンパイルできるような方法でコードを書くことは可能でしょうか?

4

2 に答える 2

8

現在、4つの主要なOpenCL実装があります:AMD、nVidia(Cuda)、Apple、Intel、そしておそらくもっとすぐに:OpenCL実装。OpenCLは、GPUコンピューティングを特に対象とした言語ではなく、異種デバイス用の汎用コンピューティング言語として設計されました。たとえば、GPUやAMD以外のCPU(もちろんx86)がなくてもAMD実装を使用できます。

openCLなしで簡単にコンパイルできるような方法でコードを書くことは可能でしょうか?

あなたが言うように、それは一人のプロジェクトだと私はそれが努力の価値があるとは思えません。

このコードは、シングルコアまたは32bシステムでどのように機能しますか?

ネイティブプログラムが実行するのと同じくらい良いです。OpenCLベクタータイプを介してSIMDにアクセスできます。また、ワークグループ構成を介してスレッド化を処理できます。

ただし、同じカーネル/ワークグループ設定ですべてのデバイスから100%のパフォーマンスが得られると期待しないでください。可能なデバイス固有の調整はたくさんあります(まずはOpenCL CPUチュートリアル)。

私はOpenCLに行くと言うでしょう。それはあなたのアプリケーションにもっと多くの可能性を提供し、それはプラットフォームに依存しません。

于 2011-01-31T11:53:05.280 に答える
2

OpenCL と C99 の共通点を利用し、プリプロセッサを使用して相違点を処理することは十分に実現可能かもしれません。次に、C99 と OpenCL コードベースを 1 つにします。これは、 SmallPT-GPUで採用されているアプローチです。

ただし、CPU の OpenCL 実装は、移植可能なスカラー C コードとほとんど同じである必要があり、移植可能な SIMD を可能にするために OpenCL のベクトル型を使用している場合はより優れています。

于 2011-01-31T15:53:02.987 に答える