sse

    10

    2答えて

    アトミックに16バイトの読み書きが必要です。私はcmpxchg16だけを使って書き込みを行います。これは、わかりにくいAMDのものを除いて、すべてのx64プロセッサで利用できます。 ここで問題となるのは、整列した16バイトの値で、cmpxchg16(完全なメモリバリアのように動作する)を使用して変更した場合、16バイトの位置を半分古いデータと半分の新しいデータで読み取ることは可能ですか? 私はSS

    2

    3答えて

    私はOS開発クラスの宿題プロジェクトに取り組んでいます。 1つのタスクは、割り込み時にSSEレジスタのコンテキストを保存することです。今、コンテキストの保存と復元は簡単です(fxsave/fxsave)。しかし、私はテストに問題があります。同じサンプルの日付をレジスタの1つに入れたいのですが、エラー割り込み6が表示されます。コードは // load some SSE registers stru

    12

    2答えて

    12832レジスタの左に論理シフトを行いますが、即値シフト値に制限され、ビットではなくバイトでシフトします。 __m128iレジスタ内の値のセットを左にシフトするには_mm_sll_epi64または_mm_sll_epi32のような組み込み関数を使用できますが、これらは "オーバーフロー"ビットを持ちません。 _mm_sll_epi64 _mm_srr_epi64(ビットのために私が実行したい:低

    6

    3答えて

    これを行うC++の方法は、here(Windowsの場合)です。 same answerしかし、LinuxではGCCを使用しています。私はそれを理解し、関連のasmコードの 抜粋: mov eax, 1 cpuid mov features, edx 私はBASMで非常に快適ではありませんよ。 私の質問: 私は私を助けてください function IsSSE2: Boolean; b

    7

    2答えて

    期間2^128の変数__m128iが必要です。単調増加(カウンターのように)する必要はありませんが、各値を一度訪れてください。 私が考えることができる最も単純な例は、実際には128ビットのカウンタですが、SSEで実装するのが難しいことがわかりました。よりシンプルで高速なソリューションはありますか?

    3

    1答えて

    __m128に4 intsをロードするためのgccの組み込み関数と、__m256(揃えられた/整列していない)に8個のintが入っていますか? unsigned intsはどうですか?

    2

    1答えて

    SSE(AVX)でintとfloatの両方を扱うときは、すべてのintを浮動小数点数に変換して浮動小数点数でのみ動作させることをお勧めしますか? それ以降はほんの少しのSIMD命令が必要なので、私たちが使用する必要があるのは、この変換を完全に保持する必要がある加算命令と比較命令(<, <=, ==)です。

    1

    2答えて

    私はCコードをリバースエンジニアリングしようとしていますが、この部分のアセンブリは本当に理解できません。私はそれがSSE拡張の一部であることを知っています。しかし、何かは実際に私がx86命令で慣れていたものとはまったく異なります。 static int sad16_sse2(void *v, uint8_t *blk2, uint8_t *blk1, int stride, int h) {

    3

    1答えて

    SLMATH libraryに問題があります。誰かがそれを使っているのか、それとも以前に使ったのかは分かりません。とにかく、問題は、SSE最適化を有効にして(VS 2010で)コンパイルすると、明らかにSSEタイプのオブジェクトに対して正しいバイトアライメントを持つコンテナを提供する必要があるということです。これは整列したベクトルであるSLMATHに少しのクラスがあるので、問題ありません。ベクトル

    3

    3答えて

    私のnehalem cpuで、アプリケーションのパフォーマンス異常を検出するためのシングルスレッドFPピークパフォーマンスに到達しようとしていますが、到達できないようです。クロック速度は3.2GHzです。SSE命令とマルチスレッドを使用せずにCPUのピークFP性能を達成したいと考えています。 単精度FPの加算と乗算を各クロックサイクルで並列に行うことができますので、2 * 3.20 = 6.4 G