問題タブ [simd]
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.
iphone - ゲームのベクトル/行列演算にiPhoneでARMSIMDを利用する正しい方法は何ですか?
iPhone(3GS以降)でSIMDユニットを利用したゲーム用のベクター/マトリックスライブラリーを作成しています。これどうやってするの?私はこれについて検索しました、今私はいくつかのオプションを知っています:
- Apple(iPhone OS 4)のフレームワーク(BLAS + LAPACK + ...)を高速化
- ARMのOpenMAX実装ライブラリ
- GCC自動ベクトル化機能
ゲーム用のベクトル/マトリックスライブラリに最適な方法は何ですか?
visual-studio-2008 - Visual Studio 2008 で SSE3/SSE4.1 命令セットを有効にするにはどうすればよいですか?
私は従おうとしました:
[プロジェクト] > [プロパティ] > [構成プロパティ] > [C/C++] > [コード生成] > [拡張命令セットを有効にする]
しかし、私が得た唯一のオプションは、SSEまたはSSE2でした。
ありがとう。
c - 論理 SSE 組み込み関数の違いは何ですか?
異なるタイプの論理 SSE 組み込み関数に違いはありますか? たとえば、OR 演算を使用する場合、3 つの組み込み関数_mm_or_ps
が_mm_or_pd
あり_mm_or_si128
ます。私の質問:
1つまたは別の組み込みを使用することに違いはありますか(適切な型キャストを使用)。特定の状況で実行時間が長くなるなどの隠れたコストはありませんか?
por
これらの組み込み関数は、3 つの異なる x86 命令 ( 、orps
、 ) にマップされますorpd
。Intelが同じことを行ういくつかの命令のために貴重なオペコードスペースを浪費している理由を知っている人はいますか?
c++ - 複数の SIMD 命令セットを同時に使用する利点
マルチスレッドの高度に並列化されたアプリケーションを作成しています。私はすでに SSE アクセラレーション スレッド クラスを作成しています。MMX アクセラレーション スレッド クラスを記述した場合、両方を同時に実行すると (コアごとに 1 つの SSE スレッドと 1 つの MMX スレッド)、パフォーマンスは著しく向上しますか?
この設定はメモリの待ち時間を隠すのに役立つと思いますが、時間を費やす前に確認したいと思います.
visual-c++ - ループのSSESIMD最適化
ループ内にいくつかのコードがあります
したがって、uとbは同じ長さのベクトルであり、cとsはスカラーです。このコードは、高速化のためにSSEで使用するためのベクトル化の良い候補ですか?
アップデート
私はベクトル化を学び(組み込み関数を使用すればそれほど難しくないことがわかりました)、SSEにループを実装しました。ただし、VC ++コンパイラでSSE2フラグを設定すると、自分のSSEコードとほぼ同じパフォーマンスが得られます。一方、Intelコンパイラは、私のSSEコードやVC++コンパイラよりもはるかに高速でした。
これが私が参考のために書いたコードです
c++ - C++2つのアレイをすばやく追加する
与えられた配列:
すべての値が0〜100の範囲である場合、C ++でこれらの2つの配列を追加して、キャンバスの各セルがそれ自体にアドオンの対応するセル値を加えたものに等しくなるようにする最も速い方法は何ですか?
IE、私は次のようなことを達成したいと思います:
したがって、canvas [0] [0]=3およびaddon[0][0] = 2の場合、canvas [0] [0] = 5
私はナップザックタイプの問題をブルートフォースする非常に単純なプログラムを書いているので、ここではスピードが不可欠であり、何千万もの組み合わせがあります。
そして、ちょっとした追加の質問として(助けてくれればありがとう!)、canvasの値のいずれかが100を超えているかどうかをチェックする最も速い方法は何でしょうか? ループが遅い!
c - 高速な 24 ビット配列 -> 32 ビット配列変換?
簡単な要約:
24 ビット値の配列があります。個々の 24 ビット配列要素を 32 ビット要素にすばやく拡張する方法について何か提案はありますか?
詳細:
DirectX 10 のピクセル シェーダーを使用して、着信ビデオ フレームをリアルタイムで処理しています。つまずきは、私のフレームが 24 ビット ピクセル (YUV または RGB 画像として) のキャプチャ ハードウェアから受信されていることですが、DX10 は 32 ビットを使用します。ピクセル テクスチャ。そのため、24 ビット値を GPU にロードする前に 32 ビットに拡張する必要があります。
残りの 8 ビットを何に設定したか、または受信した 24 ビットがその 32 ビット値のどこにあるかは気にしません。ピクセル シェーダーですべてを修正できます。しかし、24 ビットから 32 ビットへの変換は非常に迅速に行う必要があります。
私は SIMD SSE 操作にあまり詳しくありませんが、読み取りと書き込みのサイズが同じでないことを考えると、ざっと見ただけでは、それらを使用して拡張を実行できるようには見えません。助言がありますか?それとも、このデータセットを順番にマッサージしているのでしょうか?
これは非常にばかげているように感じます。並列処理のためにピクセル シェーダーを使用していますが、その前にピクセルごとの順次操作を行う必要があります。明らかな何かが欠けているに違いない...
x86 - すべて 1 を mmx レジスタにロードするにはどうすればよいですか? なぜこれが機能しないのですか?
検索したところ、64/32ビットに関する意見の質問以外は何も見つからなかったようです。
これらの 2 つの命令の後、私の xcode デバッガー (これは C++ のインライン asm) によると、mm2 レジスターは値 0x30500004ffffffff を保持します。今、私は x86 アセンブリに不慣れで、私のアセンブリ クラスはずっと前に取った MIPS で教えられていましたが、32 ビット モードと rbx ( ebx、bx などの 64 ビット バージョンはありませんか?) おそらく技術的には存在しません。0xffffffffful を mm2 と別のレジスタにロードして乗算するなど、すべて 1 を取得するために他の方法を試しましたが、それもうまくいかないようでした。
いくつかの SIMD 命令を使用してプラグインを最適化するように修正していますが、それを理解できないか、目を痛めないドキュメントを見つけることができないようです。どんな助けでも大歓迎です!
performance - 乗算-加算演算でのHaskell数学のパフォーマンス
私はHaskellでゲームを書いていますが、UIでの現在のパスには、多くの手続き型のジオメトリ生成が含まれています。私は現在、1つの特定の操作(C-ish疑似コード)のパフォーマンスを特定することに焦点を当てています。
つまり、4つのフロートのボグ標準の乗算加算であり、SIMD最適化に適したものです。
結果はOpenGL頂点バッファに送られるため、最終的にはフラットC配列にダンプする必要があります。同じ理由で、計算はおそらくC'float'タイプで実行する必要があります。
Haskellでこの種のことをすばやく行うためのライブラリまたはネイティブの慣用的なソリューションを探しましたが、私が思いついたすべてのソリューションは、パフォーマンスの約2%(つまり、50倍遅い)に留まっているようです。適切なフラグを持つGCCからのC。確かに、私は数週間前にHaskellを始めたので、私の経験は限られています。それが私が皆さんのところに来る理由です。より高速なHaskellの実装に関する提案や、高性能のHaskellコードの記述方法に関するドキュメントへのポインタを提供できる人はいますか?
まず、最新のHaskellソリューション(約12秒のクロック)。このSO投稿のbang-patternsを試しましたが、AFAICTに違いはありませんでした。'multAdd'を'(\ iv-> v * 4)'に置き換えると、実行時間が1.9秒に短縮されたため、ビット単位の処理(およびその結果としての自動最適化への挑戦)に問題はあまりないようです。
これが私がCで持っているものです。ここのコードにはいくつかの#ifdefがあり、それがまっすぐにコンパイルされるのを防ぎます。テストドライバーを下にスクロールします。
このスクリプトは、いくつかのgccフラグの組み合わせを使用してテストをコンパイルおよび実行します。最高のパフォーマンスは、私のシステムでcmath-64-native-O3-restrict-vector-nocopyによって得られ、0.22秒かかりました。
ruby - Ruby SIMD & SSE
ruby Array 型を拡張して SIMD & SSE ベクトル計算を行う方法があるかどうか疑問に思っています。
つまり、Ruby プログラムで処理タスクに番号を付けるために使用される低水準言語で実装するということです。