浮動小数点数型/ double4構造体のAVX-256/512コードを探しています。*、+、/、 - 、スカラーなどの基本演算をオーバーロードし、ベクトルからの高速なパフォーマンスを向上させます。 float4/double4を使用して記述されたコード内の操作OpenCLはこれらのデータ型を組み込み関数として持っていますが、XeonPhi上で実行されるC++コードでは、512ビットSIMDユニットを利用する新しい実装が必要です。AVX float4/double4 struct
1
A
答えて
1
あなたが探しているものは、Agner FogのVector Class Library(VCL)です。私はこれを使ってOpenCLのベクトル型を置き換えました。
VCL float4
はVec4f
であり、double4
はVec4d
です。 OpenCLと同じように、AVXとAVX512を心配する必要はありません。 Vec8d
を使用してAVX用にコンパイルすると、2つのAVXレジスタを使用してAVX512をエミュレートします。
VCLには、*,+,/,-,+=,-=,/=,*=, multiply and divide by scalar
など多くの機能があります。
OpenCLとVCLの主な違いは、OpenCLは基本的にCPUディスパッチャを作成することです。 VCLの場合は、自分でCPUディスパッチャを作成する必要があります(ドキュメントでこれを行うには、いくつかのコード例が含まれています)。 VCLは、SSE2からAVX512のための最適化された機能を備えているので、いくつかの異なる命令セットをターゲットにすることができます。 Knights Corner Xeon Phiのa special version of the VCLもあります。
OpenCLのもう1つの機能は、置き換えのための構文です。 OpenCLでfloat4
のコンポーネントの順序を逆にするにはv.wzyx
を実行しますが、VCLではpermute4f<3,2,1,0>(v)
を実行します。私はcreate this syntax with C++になる可能性がありますが、わかりません。
VCL、OpenMP、およびカスタムCPUディスパッチャを使用して、私は主にCPU上でOpenCLを置き換えました。
関連する問題
- 1. AVXアセンブリファイル
- 2. struct in struct in struct
- 3. struct with struct with struct
- 4. AVX SSEと_mm_load1_ps
- 5. 6要素AVX
- 6. Tensorflow AVX Support
- 7. "struct inside struct"の制限
- 8. AVXレジスタ内のシャッフル要素
- 9. struct
- 10. structのstructにアクセスする方法
- 11. struct c#
- 12. SSEとAVXのSIMD数学ライブラリ
- 13. インテル®AVXインテル®Cコンパイラ_mm256_load_si256の整数演算
- 14. インテルSSEとAVXの例とチュートリアル
- 15. AVX/AVX2のベクトルをインクリメントする方法
- 16. 新しいAVX命令の構文
- 17. SandybridgeとIvyBridgeのsseとavxパフォーマンス
- 18. x86 CPU C++でのSSE/AVXのディスパッチ
- 19. MSVC/arch:[命令セット] - SSE3、AVX、AVX2
- 20. AVXとSSE用のビジュアルスタジオ用のcpuディスパッチャ
- 21. Condaはdlib AVXをインストールします
- 22. python structを使用してstructにstructをパックする方法は?
- 23. typedef structのメモリリーク
- 24. ColdFusion StructとAjax
- 25. json to C++ struct
- 26. char * ptr to struct
- 27. bson.M to struct
- 28. struct in Golang
- 29. Python Struct/Packing errors
- 30. は 'struct tm&
トピックを除外し、不注意です。 SIMDベクトルをベクトルとして使用することは時には妥当ですが、ドット生成と正規化を考慮すると、水平に実行するのは非効率です。もちろん追加は大丈夫です。したがって、ベクトルに対してどのような操作を実行するかによって異なります。 – harold
私はドットの製品はこのアプローチでは悪い知っている。私がしたい操作は*、+、/、 - 、+ =、 - =、/ =、* =、mulitplyでスカラーで割ります。 – user1382302
それでいいです。もちろん、512ビットのSIMDを実際には使用しません.4つの倍精度は、後で256ビットにすぎません – harold