問題タブ [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 投票する
3 に答える
3508 参照

c++ - キャリー付きの Visual C++ x64 加算

ADC の組み込み関数がないようで、Visual C++ で x64 アーキテクチャ用のインライン アセンブラを使用できないため、add とキャリーを使用して関数を記述し、それを C++ 名前空間に含めたい場合はどうすればよいですか?

(比較演算子でエミュレートすることはオプションではありません。この 256 メガビットの追加は、パフォーマンスが重要です。)

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

c - SSE の読み込みと追加

それぞれのサイズが 2の type の 2 つの配列で表される 2 つのベクトルがあるとdoubleします。対応する位置を追加したいと思います。ですから、ベクトルi0とを仮定して、とi1を足し合わせたいと思います。i0[0] + i1[0]i0[1] + i1[1]

タイプがdoubleであるため、2 つのレジスタが必要になります。トリックは、 i0[0]and i1[0]、 and i0[1]andi1[1]を別のものに入れ、レジスタをそれ自体に追加することです。

私の質問は、私が呼び出し_mm_load_ps(i0[0])てからを呼び出した場合_mm_load_ps(i1[0])、それらを下位と上位の 64 ビットに別々に配置するか、それともレジスタを 2 番目に置き換えるかということloadです。後で呼び出すことができるように、両方の double を同じレジスタに配置するにはどうすればよいadd_psですか?

ありがとう、

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

optimization - 128 ビット SSE カウンター?

周期が 2^128 の __m128i 変数の関数が必要です。(カウンターのように) 単調に増加する必要はありませんが、各値に 1 回アクセスします。

私が考えることができる最も単純な例は、実際には 128 ビットのカウンターですが、SSE で実装するのは難しいことがわかりました。よりシンプルで高速なソリューションはありますか?

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

assembly - 16 個の 8 ビット データをロードし、それらを 4 つの unsigned int に連結する方法は?

16個の8ビットデータをロードし、それらを4つの unsigned int に連結するエレガントな方法はありますか?

次のように:

次の配列 (16 epi8) を _mm_load_si128() で __m128i にロードします

0x00、0x11、0x22、0x33、0x44、0x55、0x66、0x77、0x88、0x99、0xaa、0xbb、0xcc、0xdd、0xee、0xff

次に、レジスタ(__m128i)が4つのepi32になるような操作を行います。

0x33221100、0x77665544、0xbbaa8899、0xffeeddcc

ありがとう!

0 投票する
0 に答える
371 参照

character - SSE Intrinsics を使用した文字列内の文字数のカウント

私は C で文字頻度関数を実装しようとしています。もちろん、このタスクは非常に単純です。文字列をループして次のようにインクリメントするだけです。

これを10億回以上行うと(私のファイルはそれほど大きいです)、配列に10e8 *の長さの時間アクセスする必要があるため、プログラムのこの部分はかなり時間がかかります。

私はしばらくの間グーグルで検索し、レジスタを使用して加算、乗算、除算などを行う方法の十分な例を見つけましたが、SSE、MMX などに少しでも精通していないため、文字を実装する方法がわかりません。これらの関数を使用してカウントします。

4 文字を同時に読み取ることができるので、この関数にかかる時間を短縮したいと考えています。正しい方向に私を見せてください、またはコードを提示してください。

前もって感謝します。マーク

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

arm - Arm Neon Intrinsic vs ハンド アセンブリ

https://web.archive.org/web/20170227190422/http://hilbert-space.de/?p=22

かなり古いこのサイトでは、手書きの asm が組み込み関数よりもはるかに大きな改善をもたらすことを示しています。2012年の今でもこれが真実なのか疑問です。

では、gnu クロス コンパイラを使用した組み込み関数のコンパイルの最適化は改善されましたか?

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

c++ - _ReadBarrier()が呼び出されないためにバグがあるサンプルプログラムは何ですか?

_ReadBarrier()が呼び出されないためにバグがあるサンプルプログラムは何ですか?

_ReadBarrier()に関するMSDNの記事:http://msdn.microsoft.com/en-us/library/z055s48f(v = vs.120) .aspx

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

assembly - 128 ビット レジスタにパックされた任意の 16 ビット要素へのアクセス

Intel コンパイラの組み込み関数を使用して、128 ビットのレジスタが与えられ、8 つの 16 ビット要素がパックされている場合、レジスタ内から任意の要素に (安価に) アクセスして、後で_mm_cvtepi8_epi64(下位にパックされた 2 つの 8 ビット要素を符号拡張する) を使用するにはどうすればよいですか?レジスタの 16 ビットから 2 つの 64 ビット要素まで)?


私が尋ねる理由を説明します:

  1. 入力: k バイトのメモリ内バッファ。それぞれ 0x0 または 0xff です。
  2. 必要な出力: 入力の連続する 2 バイトごとに、2 つのクワッド ワード (64 ビット) をそれぞれ0x0および0xffff ffff ffff ffffでパッキングするレジスタ。
  3. 最終的な目標: 入力バッファーのエントリに従ってマスクされた、k 個の double のバッファーを合計します。

注: 入力バッファの値0x0と値0xffは、合計前のマスキングの効果が残っている限り、最も役立つものに変更できます。

私の質問から明らかなように、私の現在の計画は次のとおりで、入力バッファ全体にストリーミングします。

  1. 入力マスク バッファーを 8 ビットから 64 ビットに拡張します。
  2. 拡張マスクを使用して倍精度バッファーをマスクします。
  3. マスクされた double を合計します。

ありがとう、アサフ

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

c++ - _mm_stream_si64x() を呼び出すことでパフォーマンスの向上を実現するサンプル プログラムは何ですか?

_mm_stream_si64x() を呼び出すことでパフォーマンスの向上を実現するサンプル プログラムは何ですか?

_mm_stream_si64x に関する MSDN の記事: http://msdn.microsoft.com/en-us/library/35b8kssy.aspx

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

fortran - Fortranget_environment_variable組み込み関数は何も返しません

Fortran 2003に組み込みサブルーチンget_environment_variableが含まれていることは知っていますが、必要な変数を返すように取得できません。テストプログラムは次のとおりです。

次に、シェルでt = 2010010100(または何か)を設定し、コンパイルして実行します。書き込まれるのは空白行だけです。わかりません。フラグが-std=f2003のgfortranを使用していますが、これは単純なはずですが、何がハングアップしているのでしょうか。それは非常に単純で、答えは私の無知を明らかにするだろうと私は思う....しかしとにかくありがとう!