3

いくつかの外部ライブラリ (http://trac.osgeo.org/geos/) を使用して、ジオメトリ オブジェクト (GIS) でいくつかの分析タスクを実行したいと考えています。Cuda で OpenCL を使用してこれらのタスクを実行したいので、GPU の並列処理能力を使用して、これらのタスクを大量のデータに対して並列に実行できます。私の質問は次のとおりです。

  1. これらのライブラリを使用してカーネルを作成できますか?

  2. また、これらのライブラリの複雑なデータ構造のオブジェクトを引数としてカーネルに渡すにはどうすればよいですか/(具体的には、これらの複雑なオブジェクトのバッファを作成するにはどうすればよいですか??

4

2 に答える 2

8

OpenCLプログラムは、主に 2 つの部分で構成されています

  1. ホスト コード - OpenCL ランタイムで関数を呼び出す通常の C/C++ コードで、他のコードと同様に機能します。このコードは、プログラムに (複雑な) データを提供する可能性のあるサードパーティ ライブラリと連携する必要があります。また、これらの複雑なデータ型を、ピース 2 で処理できる一連の単純なデータ型 ( scalarvectorother ) に変換する必要があります。
  2. カーネル コード - は、制限されたカーネル言語 (C99 に基づく) のテキスト/バイナリ表現を、ターゲット プラットフォームで実行できるオブジェクト コードに変換できるコンパイラで構成されます。この言語とコンパイラには、外部ライブラリにインクルード/リンクできないという事実を含む多くの制限があります (ホスト CPU で実行可能なネイティブ カーネルでは可能かもしれません) 。

カーネルのコンパイル/セットアップ、任意のライブラリ/ソースからのデータのフェッチ/セットアップ、適切なスカラー、ベクター、または OpenCL カーネルで許容されるその他のデータ型への変換、カーネルの実行は、ホスト コード次第です。データを処理し、計算デバイスからホストに結果を返し (必要な場合)、それらの単純なデータ型をコードの残りの部分で使用するために必要な形式に変換します。

したがって、カーネル内から通常の C++ ライブラリを直接使用することはできません。しかし、ホスト コードでやりたいことは何でもできます。

于 2012-05-29T22:39:02.547 に答える
6

いいえ、OpenCL カーネルで外部ライブラリを使用することはできません。OpenCl アプリケーションは、どのプラットフォームで実行されているかを事前に知ることができないため、OpenCl アプリケーションの実行時にカーネルをコンパイルする必要があることに注意してください。

于 2012-05-30T01:29:16.157 に答える