問題タブ [intrinsics]

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 投票する
4 に答える
1432 参照

c++ - VS2008 64 ビット ビルドで __asm jno no_oflow を組み込み型に置き換えるにはどうすればよいですか?

私はこのコードを持っています:

次の素晴らしい警告が生成されます。

エラー C4235: 非標準の拡張子が使用されています: '__asm' キーワードはこのアーキテクチャではサポートされていません

その前に発生した減算演算のオーバーフローをチェックするために、このコードの等価/許容可能な代替は何ですか?

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

assembly - x86 max / min asm命令?

Corei7アーキテクチャーでdouble/integersのベクトルの最小/最大の計算を高速化できるasm命令はありますか?

アップデート:

こんなに豊富な答えは期待していませんでした、ありがとうございます。したがって、最大/最小は分岐せずに実行できることがわかります。サブ質問があります:

配列内の最大のdoubleのインデックスを取得する効率的な方法はありますか?

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

c++ - VC++ SSE 固有の最適化の奇妙さ

ファイルから 8 ビット データの分散読み取りを実行しています (64 チャンネルの Wave ファイルのインターリーブ解除)。次に、それらを結合して単一のバイト ストリームにします。私が抱えている問題は、書き出すデータの再構築にあります。

基本的に、私は 16 バイトを読み取り、それらを単一の __m128i 変数に構築し、_mm_stream_ps を使用して値をメモリに書き戻しています。ただし、いくつかの奇妙なパフォーマンス結果があります。

最初のスキームでは、_mm_set_epi8 組み込み関数を使用して __m128i を次のように設定します。

基本的に、最高のパフォーマンスを得るためにどのように最適化するかはコンパイラに任せています。これにより、最悪のパフォーマンスが得られます。MY テストは ~0.195 秒で実行されます。

2 番目に、4 つの _mm_set_epi32 命令を使用してマージし、それらを圧縮しようとしました。

これにより、パフォーマンスが多少向上します。私のテストは現在、約 0.15 秒で実行されます。とにかくこれがまさに _mm_set_epi8 が行っていることだと思いますので、これを行うことでパフォーマンスが向上するという直感に反するようです...

私の最後の試みは、4 つの CC を昔ながらの方法で (シフトと or を使用して) 作成し、単一の _mm_set_epi32 を使用してそれらを __m128i に配置したコードを使用することでした。

これにより、さらに優れたパフォーマンスが得られます。テストの実行に約 0.135 秒かかります。私は本当に混乱し始めています。

そこで、単純な読み取りバイト書き込みバイト システムを試してみましたが、最後の方法よりもわずかに高速です。

それで、何が起こっているのですか?これはすべて直感に反するように思えます。

データの供給が速すぎるため、_mm_stream_ps で遅延が発生しているという考えを検討しましたが、何をしてもまったく同じ結果が得られます。最初の 2 つの方法は、16 の負荷がループを介して分散されず、レイテンシが隠蔽されていないことを意味している可能性はありますか? もしそうなら、これはなぜですか?確かに、組み込み関数により、コンパイラーは好きな場所で最適化を行うことができます..それが全体のポイントだと思いました...また、16回の読み取りと16回の書き込みを実行すると、SSEジャグリングの束で16回の読み取りと1回の書き込みよりもはるかに遅くなります。命令...結局のところ、読み取りと書き込みが遅いビットです!

何が起こっているのかアイデアを持っている人なら誰でも大歓迎です!:D

編集:以下のコメントに加えて、バイトを定数としてプリロードするのをやめ、これに変更しました:

これにより、パフォーマンスが最大 0.143 秒に向上しました。そのままの C 実装ほど良くはありません ...

もう一度編集:これまでに得た最高のパフォーマンスは

これにより、約 0.095 秒で処理できます。これはかなり優れています。私はSSEに近づくことができないようですが...私はまだそれに混乱していますが..うーん。

0 投票する
1 に答える
18289 参照

c++ - Linux/gccでのInterlockedIncrementに相当

非常に単純な質問ですが(重複する可能性があります)、見つかりませんでした。

Win32 APIは、 x86コードInterlockedIncrementを出力するなど、非常に便利な一連のアトミック操作(組み込み関数として)を提供します。lock addまた、InterlockedCompareExchangeにマップされlock cmpxchgます。

しかし、私はLinuxでgccを使ってそれをやりたいと思っています。私は64ビットで作業しているので、インラインアセンブリを使用することはできません。gccの組み込み関数はありますか?

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

c++ - 組み込み関数とは

それらが何であり、なぜ私がそれらを必要とするのかを誰か説明できますか? 組み込み関数を使用する必要がある場合、どのような種類のアプリケーションを構築していますか?

0 投票する
1 に答える
718 参照

atomic - _mm_mwait はどのように機能しますか?

どのよう_mm_mwaitpmmintrin.h働くのですか?(asm ではなく、アクションと、このアクションが NUMA システムでどのように実行されるかを意味します。store監視は、バスのスヌーピングを備えたバスベースの SMP システムでのみ簡単に実装できます。)

どのプロセッサがそれを実装していますか?

一部のスピンロックで使用されていますか?

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

arm - ARM Neon 組み込み関数を使用してベクトル データを並べ替えるにはどうすればよいですか?

これは特に ARM Neon SIMD コーディングに関連しています。ビデオデコーダーの特定のモジュールにARM Neon instrinsicsを使用しています。次のようなベクトル化されたデータがあります。

Neon レジスタには 4 つの 32 ビット要素 (Q0 など) があり、サイズは 128 ビットです。

他の Neon レジスタには、サイズが 128 ビットの Q1 など、さらに 4 つの 32 ビット要素があります。

以下に示すように、最終データを整理したいと思います。

目的のデータ順序を実現できる Neon 組み込み関数はどれですか?

0 投票する
1 に答える
2175 参照

c++ - Intel AVX組み込み関数:互換性ライブラリはありますか?

Intel AVX組み込み関数ライブラリはありますか?コンパイル時にSSE2整数組み込み関数が使用できない場合に、MMX組み込み関数にフォールバックする「sse2mmx.h」ヘッダーに似たものを探しています。したがって、AVX用の同様のライブラリがあれば、AVX拡張機能が利用できない場合にほぼ最適な速度になる、新しいハードウェア用に最適化されたコードを記述できます。グーグルはこれまであまり役に立たなかった:(

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

c++ - インライン関数への参照によって __m128i オブジェクトを渡すと、これらのオブジェクトがスタックに移動されますか?

SSE2組み込み関数を使用して、8x16ビットベクトルの転置関数を作成しています。その関数には 8 つの引数 (8x8x16 ビット サイズの行列) があるため、参照で渡す以外に何もできません。それはコンパイラによって最適化されますか (つまり、これらの __m128i オブジェクトはスタックではなくレジスタで渡されますか)?

コードスニペット:

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が同じことを行ういくつかの命令のために貴重なオペコードスペースを浪費している理由を知っている人はいますか?