2016-07-13 15 views
2

短い背景:OpenCL SubSliceはCUDA Warp(SIMD)に類似していますか?

CUDAでは、同期が保証されている32スレッドのコンセプトがあります。私はこのSIMDの動作に依存して、一連の同期呼び出し(あるループの後に1つのスレッドが終了し、残りのスレッドが計算に使用する共有メモリに値を書き込む)の潜在的なオーバーヘッドを避けるために、

OpenCLでこの動作をイメージする方法はありますか。 Sub_Slices? According to Intel彼らはこのように動作しているようですが、SIMDの動作を保証するOpenCLの機能がありますか?

+1

「スライス」(または「サブスライス」)がOpenCLの標準用語の明示的な部分であることを示唆しているようです。私は間違っているかもしれないが、私はそうではないと思う。私はIntelの設計に固有のものかもしれないと思っています。確かに「スライス」という言葉は、[OpenCL仕様書](https://www.khronos.org/registry/cl/specs/opencl-2.0.pdf)には表示されていますが、これは命名規則としてのみ使用されています。多次元データ構造内の特定の層に適用されます。私が知る限り、 "Sublice"はOpenCLの標準仕様にはまったく現れません。 –

+0

@RobertCrovellaそれを指摘してくれてありがとう。私はサブスライスについて明示的に質問するつもりはないが、一般的にはSIMDであることを明確にしようとした。 –

答えて

3

OpenCLの場合NVIDIAこれらはwarpsとも呼ばれ、通常32個の作業項目があります。 AMDには、wavefrontと64個の作業項目があります。 Intel上では、これは、ハードウェアスレッドに適合して同時に実行できるSIMD-8またはSIMD-16またはSIMD-32(8/16/32作業項目)です。それがSIMD-8であるかSIMD-16であるかSIMD-32であるかは、コンパイラの選択に依存します。

通常、情報はclGetKernelWorkGroupInfo()CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLEパラメータから取得できます。

+0

http://stackoverflow.com/questions/7093488/opencl-how-to-i-query-for-a-devices-simd-width?rq=1同じことを言った。しかし、欠けているのは、CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLEがSIMD幅であり、このように動作するかどうかです。さもなければ私のアルゴリズムは間違った結果を生み出します。 –

+0

[this](https://software.intel.com/en-us/node/540486)を参照してください。それは明示的にそれを確認するものではありません。あなたはそのガイドでもっと掘り下げたいかもしれません。 – doqtor

+0

Intelはこれらのサブスライスを呼び出しません。彼らはそれらを "(SIMD)スレッド"と呼びます。サブスライスは、7つのSIMDスレッドの中から選択できるEU(実行ユニット)の集まりです。 – Tim

2

ええ、これは便利なイディオムです。あなたが探しているのは、OpenCL subgroups拡張です。 「サブグループ」は、HWスレッド(Intelの「wave」という言葉)に相当します。

サブリストは実際にはEUの集合であり、それぞれに7つの「SIMDスレッド」(波)があります。ただし、それらはすべてサンプラ、データポート、命令キャッシュ、およびテクスチャキャッシュを共有します。