glslとopenclのクランプ機能はどのように機能しますか?ブランチの作成を使用しますか?そして私はそれを使用することを避けるべきですか?

Hasan Al-Baghdadi

GLSLとOpenCLの両方に、値が境界を超えた場合に挿入された上限または下限に数値をクランプするクランプ機能があります。このようなものをC ++で実装しようとすると、次のコードのようになります。

if(i < min){
     i=min;
}else if(i > max){
     i=max;
}

ただし、これには複数の分岐パスがあり、ほとんどの場合、すべての分岐を実行する必要があるため、GPUの速度が大幅に低下する可能性があります。

では、GLSL / OpenCLクランプはどのように機能し、ブランチを使用する場合は、可能であれば回避することをお勧めしますか?

マイケルケンゼル

GPU命令セットアーキテクチャの関連ドキュメント(たとえば、ここここ)を確認すると、GPUは通常、最小命令と最大命令をネイティブでサポートしていることがわかります。たとえば、NVIDIA GPUの条件は、持っていなかったとしても、述語の実行に基づいています。妥当なコンパイラであれば、上記の例を本格的なブランチではなく条件付き割り当てに変換します(ここでの例)。CPUでも…

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ