問題タブ [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.
c++ - キャリー付きの Visual C++ x64 加算
ADC の組み込み関数がないようで、Visual C++ で x64 アーキテクチャ用のインライン アセンブラを使用できないため、add とキャリーを使用して関数を記述し、それを C++ 名前空間に含めたい場合はどうすればよいですか?
(比較演算子でエミュレートすることはオプションではありません。この 256 メガビットの追加は、パフォーマンスが重要です。)
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
ですか?
ありがとう、
optimization - 128 ビット SSE カウンター?
周期が 2^128 の __m128i 変数の関数が必要です。(カウンターのように) 単調に増加する必要はありませんが、各値に 1 回アクセスします。
私が考えることができる最も単純な例は、実際には 128 ビットのカウンターですが、SSE で実装するのは難しいことがわかりました。よりシンプルで高速なソリューションはありますか?
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
ありがとう!
character - SSE Intrinsics を使用した文字列内の文字数のカウント
私は C で文字頻度関数を実装しようとしています。もちろん、このタスクは非常に単純です。文字列をループして次のようにインクリメントするだけです。
これを10億回以上行うと(私のファイルはそれほど大きいです)、配列に10e8 *の長さの時間アクセスする必要があるため、プログラムのこの部分はかなり時間がかかります。
私はしばらくの間グーグルで検索し、レジスタを使用して加算、乗算、除算などを行う方法の十分な例を見つけましたが、SSE、MMX などに少しでも精通していないため、文字を実装する方法がわかりません。これらの関数を使用してカウントします。
4 文字を同時に読み取ることができるので、この関数にかかる時間を短縮したいと考えています。正しい方向に私を見せてください、またはコードを提示してください。
前もって感謝します。マーク
arm - Arm Neon Intrinsic vs ハンド アセンブリ
https://web.archive.org/web/20170227190422/http://hilbert-space.de/?p=22
かなり古いこのサイトでは、手書きの asm が組み込み関数よりもはるかに大きな改善をもたらすことを示しています。2012年の今でもこれが真実なのか疑問です。
では、gnu クロス コンパイラを使用した組み込み関数のコンパイルの最適化は改善されましたか?
c++ - _ReadBarrier()が呼び出されないためにバグがあるサンプルプログラムは何ですか?
_ReadBarrier()が呼び出されないためにバグがあるサンプルプログラムは何ですか?
_ReadBarrier()に関するMSDNの記事:http://msdn.microsoft.com/en-us/library/z055s48f(v = vs.120) .aspx
assembly - 128 ビット レジスタにパックされた任意の 16 ビット要素へのアクセス
Intel コンパイラの組み込み関数を使用して、128 ビットのレジスタが与えられ、8 つの 16 ビット要素がパックされている場合、レジスタ内から任意の要素に (安価に) アクセスして、後で_mm_cvtepi8_epi64
(下位にパックされた 2 つの 8 ビット要素を符号拡張する) を使用するにはどうすればよいですか?レジスタの 16 ビットから 2 つの 64 ビット要素まで)?
私が尋ねる理由を説明します:
- 入力: k バイトのメモリ内バッファ。それぞれ 0x0 または 0xff です。
- 必要な出力: 入力の連続する 2 バイトごとに、2 つのクワッド ワード (64 ビット) をそれぞれ
0x0
および0xffff ffff ffff ffff
でパッキングするレジスタ。 - 最終的な目標: 入力バッファーのエントリに従ってマスクされた、k 個の double のバッファーを合計します。
注: 入力バッファの値0x0
と値0xff
は、合計前のマスキングの効果が残っている限り、最も役立つものに変更できます。
私の質問から明らかなように、私の現在の計画は次のとおりで、入力バッファ全体にストリーミングします。
- 入力マスク バッファーを 8 ビットから 64 ビットに拡張します。
- 拡張マスクを使用して倍精度バッファーをマスクします。
- マスクされた double を合計します。
ありがとう、アサフ
c++ - _mm_stream_si64x() を呼び出すことでパフォーマンスの向上を実現するサンプル プログラムは何ですか?
_mm_stream_si64x() を呼び出すことでパフォーマンスの向上を実現するサンプル プログラムは何ですか?
_mm_stream_si64x に関する MSDN の記事: http://msdn.microsoft.com/en-us/library/35b8kssy.aspx
fortran - Fortranget_environment_variable組み込み関数は何も返しません
Fortran 2003に組み込みサブルーチンget_environment_variableが含まれていることは知っていますが、必要な変数を返すように取得できません。テストプログラムは次のとおりです。
次に、シェルでt = 2010010100(または何か)を設定し、コンパイルして実行します。書き込まれるのは空白行だけです。わかりません。フラグが-std=f2003のgfortranを使用していますが、これは単純なはずですが、何がハングアップしているのでしょうか。それは非常に単純で、答えは私の無知を明らかにするだろうと私は思う....しかしとにかくありがとう!