問題タブ [vector-processing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
gcc - gcc でベクトル化するには?
v4 シリーズのコンパイラーは、AMD Athlon や Intel Pentium/Core チップなどの最新の CPU でSIMDgcc
プロセッサーを使用してループを自動的にベクトル化できます。これはどのように行われますか?
gcc - gcc 以外にコードをベクトル化できるコンパイラは?
特定のオプションが指定され、適切な条件が与えられた場合、GCC はループを自動的にベクトル化できます。同じことができる広く利用可能な他のコンパイラはありますか?
gcc - 自動ベクトル化の実用化?
gcc が実行できる自動ベクトル化を利用した人はいますか? 現実の世界では (コード例とは対照的に)? 利用するには、既存のコードを再構築する必要がありますか? この方法でベクトル化できる実稼働コードにはかなりの数のケースがありますか?
optimization - 自動ベクトル化と手動でベクトル化されたコード
明示的なプラグマを使用して手動でコードをベクトル化するか、自動ベクトル化に依存または使用する方が、ある意味で優れていますか? 自動ベクトル化を使用して最適なパフォーマンスを得るには、コンパイラーの出力を監視して、ループがベクトル化されていることを確認するか、ベクトル化できるようになるまでループを変更する必要があります。
手作業によるコーディングでは、目的の命令が発行されていることは確かですが、コードは (他のアーキテクチャまたは他のコンパイラに) 移植できない可能性があります。
functional-programming - Clojure のプラグイン可能なベクトル処理ユニット
多くのベクトルデータを処理する必要があるClojureでいくつかのシミュレーションソフトウェアを開発しています(基本的には、Java floatの配列へのオフセットとして発生し、通常は10〜10000の範囲の長さです)。これらの多数のベクトルは、ベクトルの正規化、ベクトルの 2 つのストリームの連結、移動平均の計算など、さまざまな処理ステップを経る必要があります。
すべてを命令型スタイルで行うのではなく、次のことを行う、より機能的なスタイルの Clojure ソリューションを作成することを望んでいました。
- 任意のベクトル関数をプラグ可能なモジュールに変換できるようにします。例: (def module-a (make-module some-function))
- これらのモジュールをパイプラインで構成できるようにします。たとえば、(def combined-module (combine-in-series module-a module-b)) は、module-a の出力を module-b の入力にフィードします。
- 補助関数が特定のモジュール内に格納された状態にアクセスできるようにする (get-moving-average some-moving-average-module など)。これは、some-moving-average-module が結合されたパイプラインの奥深くに埋め込まれている場合でも機能する必要があります。
- ベクトル計算用に十分な大きさの一時配列を割り当てるなど、ボイラープレート コードを舞台裏に隠します。
これは賢明なアプローチのように聞こえますか?
もしそうなら、役立つ実装のヒントやライブラリはありますか?
x86 - AVX命令で水平ベクトル和を行う最速の方法
4つの64ビット浮動小数点値のパックされたベクトルがあります。
ベクトルの要素の合計を取得したいと思います。
SSEを使用すると(および32ビットフロートを使用して)、次のことができます。
残念ながら、AVXは_mm256_hadd_pd命令を備えていますが、SSEバージョンとは結果が異なります。これは、ほとんどのAVX命令が、128ビットの境界を越えることなく、128ビットの下位および上位ごとに別々にSSE命令として機能するためだと思います。
理想的には、私が探しているソリューションは次のガイドラインに従う必要があります
。1)AVX/AVX2命令のみを使用します。(SSEなし)
2)2〜3回以内の指示でそれを行います。
ただし、(上記のガイドラインに従わなくても)効率的でエレガントな方法は常に受け入れられています。
助けてくれてありがとう。
-ルイジカステッリ
x86 - 256 ビット AVX ベクトルで水平方向の最大値を見つける方法
4 つの 64 ビット浮動小数点値でパックされた __m256d ベクトルがあります。
ベクトルの要素の水平方向の最大値を見つけて、結果を倍精度スカラー値に格納する必要があります。
私の試みはすべて、ベクトル要素のシャッフルを大量に使用することになり、コードはあまりエレガントでも効率的でもありませんでした。また、AVX ドメインだけにとどまることは不可能であることがわかりました。ある時点で、SSE 128 ビット命令を使用して最終的な 64 ビット値を抽出する必要がありました。ただし、この最後のステートメントで私が間違っていることを証明したいと思います。
したがって、理想的なソリューションは次のとおりです
。1) AVX 命令のみを使用します。
2) 命令の数を最小限に抑えます。(私は 3-4 以上の命令を望んでいません)
そうは言っても、上記のガイドラインに準拠していなくても、エレガントで効率的なソリューションは受け入れられます。
助けてくれてありがとう。
-ルイージ
fortran - Fortran でベクトル プロセッサの最大ベクトル長を見つけることは可能ですか?
プロセッサがベクトルであるかどうかを Fortran でテストし、ベクトルの最大長を調べることは可能ですか?
以下にリストされているようにcpuinfoを確認しました
go - Go を使用して VPP プラグインを実装できますか?
VPP は、ノードのグラフにフックできるカスタム プラグインを開発するための I/S を提供します。私は C 言語で書かれたそのようなプラグインの例しか見たことがないので、他の言語、たとえば Go もそのようなプラグインの作成に使用できるかどうか疑問に思っていました。