2016-07-11 1 views
2

この質問がばかげているのであれば謝罪しますが、私はGPGPUプログラミングの初心者です。OpenCLでは、ワークグループサイズがアーキテクチャの一部ではない場合、__localメモリはどのように高速化できますか?

私の質問は、デバイスのアーキテクチャは変更できないため、__localメモリはローカルワークグループのアイテムだけがアクセスできるように最適化することができますサイズ(分割可能性)?

答えて

4

ローカルメモリは、通常、GPUハードウェアにおける実行ユニットの特定のクラスタに取り付けられています。ワークグループのサイズは実際にはクライアントアプリケーションによって選択されますが、OpenCLの実装では制限が課せられます。あなたのアプリケーションはclGetKernelWorkGroupInfo()CL_KERNEL_WORK_GROUP_SIZEパラメータ名を使用してこれを照会する必要があります。

ほとんどのGPUが設計され、実行のため、複数のスレッドが単一の実行ユニットで実行するようにスケジュールすることができますので、作業グループのサイズはある程度の柔軟性があります。 (SMTの形態。)も注意例えばGPUクラスタ内の64個のプロセッサを有し、各プロセッサ上で4ウェイSMTをサポートしている場合、スケジュールされたスレッドがあっても、そう、同じワークグループにあると、それらを必要としないことハードウェアとコンパイラの機能に応じて、256スレッドは1,2、または4、または場合によっては8または16のワークグループになる可能性があります。 1つのプロセッサが、たとえば、一度に4作業項目を扱うかもしれない - OpenCLの作業項目に1:スレッドは1をマッピングしないように

一部のGPUプロセッサはまた、内部ベクトルレジスタと命令を使用します。

最終的にかかわらず、ワークグループは、ローカルメモリの1つのチャンクに取り付けられているプロセッサのクラスタに適合しなければなりません。 1つのクラスタでスケジューリングできるローカルメモリサイズと最大スレッド数が最大ワークグループサイズに影響します。一般的に

、OpenCLの実装はスケジューリング作業グループのための最大の柔軟性を持つように、あなたのワークグループが使用するローカルメモリの量を最小限に抑えるようにしてください。 (ただし、パフォーマンスに役立つときは、ローカルメモリを使用してください。できるだけ少なくしてください)

関連する問題