問題タブ [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.

0 投票する
5 に答える
2121 参照

iphone - ゲームのベクトル/行列演算にiPhoneでARMSIMDを利用する正しい方法は何ですか?

iPhone(3GS以降)でSIMDユニットを利用したゲーム用のベクター/マトリックスライブラリーを作成しています。これどうやってするの?私はこれについて検索しました、今私はいくつかのオプションを知っています:

  • Apple(iPhone OS 4)のフレームワーク(BLAS + LAPACK + ...)を高速化
  • ARMのOpenMAX実装ライブラリ
  • GCC自動ベクトル化機能

ゲーム用のベクトル/マトリックスライブラリに最適な方法は何ですか?

0 投票する
2 に答える
4262 参照

visual-studio-2008 - Visual Studio 2008 で SSE3/SSE4.1 命令セットを有効にするにはどうすればよいですか?

私は従おうとしました:

[プロジェクト] > [プロパティ] > [構成プロパティ] > [C/C++] > [コード生成] > [拡張命令セットを有効にする]

しかし、私が得た唯一のオプションは、SSEまたはSSE2でした。

ありがとう。

0 投票する
3 に答える
4496 参照

c - 論理 SSE 組み込み関数の違いは何ですか?

異なるタイプの論理 SSE 組み込み関数に違いはありますか? たとえば、OR 演算を使用する場合、3 つの組み込み関数_mm_or_ps_mm_or_pdあり_mm_or_si128ます。私の質問:

  1. 1つまたは別の組み込みを使用することに違いはありますか(適切な型キャストを使用)。特定の状況で実行時間が長くなるなどの隠れたコストはありませんか?

  2. porこれらの組み込み関数は、3 つの異なる x86 命令 ( 、orps、 ) にマップされますorpd。Intelが同じことを行ういくつかの命令のために貴重なオペコードスペースを浪費している理由を知っている人はいますか?

0 投票する
2 に答える
1347 参照

c++ - 複数の SIMD 命令セットを同時に使用する利点

マルチスレッドの高度に並列化されたアプリケーションを作成しています。私はすでに SSE アクセラレーション スレッド クラスを作成しています。MMX アクセラレーション スレッド クラスを記述した場合、両方を同時に実行すると (コアごとに 1 つの SSE スレッドと 1 つの MMX スレッド)、パフォーマンスは著しく向上しますか?

この設定はメモリの待ち時間を隠すのに役立つと思いますが、時間を費やす前に確認したいと思います.

0 投票する
5 に答える
9049 参照

visual-c++ - ループのSSESIMD最適化

ループ内にいくつかのコードがあります

したがって、uとbは同じ長さのベクトルであり、cとsはスカラーです。このコードは、高速化のためにSSEで使用するためのベクトル化の良い候補ですか?

アップデート

私はベクトル化を学び(組み込み関数を使用すればそれほど難しくないことがわかりました)、SSEにループを実装しました。ただし、VC ++コンパイラでSSE2フラグを設定すると、自分のSSEコードとほぼ同じパフォーマンスが得られます。一方、Intelコンパイラは、私のSSEコードやVC++コンパイラよりもはるかに高速でした。

これが私が参考のために書いたコードです

0 投票する
6 に答える
8833 参照

c++ - C++2つのアレイをすばやく追加する

与えられた配列:

すべての値が0〜100の範囲である場合、C ++でこれらの2つの配列を追加して、キャンバスの各セルがそれ自体にアドオンの対応するセル値を加えたものに等しくなるようにする最も速い方法は何ですか?

IE、私は次のようなことを達成したいと思います:

したがって、canvas [0] [0]=3およびaddon[0][0] = 2の場合、canvas [0] [0] = 5

私はナップザックタイプの問題をブルートフォースする非常に単純なプログラムを書いているので、ここではスピードが不可欠であり、何千万もの組み合わせがあります。

そして、ちょっとした追加の質問として(助けてくれればありがとう!)、canvasの値のいずれかが100を超えているかどうかをチェックする最も速い方法は何でしょうか? ループが遅い!

0 投票する
4 に答える
6192 参照

c - 高速な 24 ビット配列 -> 32 ビット配列変換?

簡単な要約:

24 ビット値の配列があります。個々の 24 ビット配列要素を 32 ビット要素にすばやく拡張する方法について何か提案はありますか?

詳細:

DirectX 10 のピクセル シェーダーを使用して、着信ビデオ フレームをリアルタイムで処理しています。つまずきは、私のフレームが 24 ビット ピクセル (YUV または RGB 画像として) のキャプチャ ハードウェアから受信されていることですが、DX10 は 32 ビットを使用します。ピクセル テクスチャ。そのため、24 ビット値を GPU にロードする前に 32 ビットに拡張する必要があります。

残りの 8 ビットを何に設定したか、または受信した 24 ビットがその 32 ビット値のどこにあるかは気にしません。ピクセル シェーダーですべてを修正できます。しかし、24 ビットから 32 ビットへの変換は非常に迅速に行う必要があります

私は SIMD SSE 操作にあまり詳しくありませんが、読み取りと書き込みのサイズが同じでないことを考えると、ざっと見ただけでは、それらを使用して拡張を実行できるようには見えません。助言がありますか?それとも、このデータセットを順番にマッサージしているのでしょうか?

これは非常にばかげているように感じます。並列処理のためにピクセル シェーダーを使用していますが、その前にピクセルごとの順次操作を行う必要があります。明らかな何かが欠けているに違いない...

0 投票する
2 に答える
934 参照

x86 - すべて 1 を mmx レジスタにロードするにはどうすればよいですか? なぜこれが機能しないのですか?

検索したところ、64/32ビットに関する意見の質問以外は何も見つからなかったようです。

これらの 2 つの命令の後、私の xcode デバッガー (これは C++ のインライン asm) によると、mm2 レジスターは値 0x30500004ffffffff を保持します。今、私は x86 アセンブリに不慣れで、私のアセンブリ クラスはずっと前に取った MIPS で教えられていましたが、32 ビット モードと rbx ( ebx、bx などの 64 ビット バージョンはありませんか?) おそらく技術的には存在しません。0xffffffffful を mm2 と別のレジスタにロードして乗算するなど、すべて 1 を取得するために他の方法を試しましたが、それもうまくいかないようでした。

いくつかの SIMD 命令を使用してプラグインを最適化するように修正していますが、それを理解できないか、目を痛めないドキュメントを見つけることができないようです。どんな助けでも大歓迎です!

0 投票する
2 に答える
2526 参照

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秒かかりました。

0 投票する
3 に答える
621 参照

ruby - Ruby SIMD & SSE

ruby Array 型を拡張して SIMD & SSE ベクトル計算を行う方法があるかどうか疑問に思っています。

つまり、Ruby プログラムで処理タスクに番号を付けるために使用される低水準言語で実装するということです。