問題タブ [sse2]

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

assembly - SSE2 assembly-overflow using intrinsics

I am new to SSE and SSE2, and I wrote a small C sample (allocating two counters, one increasing other decreasing than adding the two), which is working as expected. I used intrinsics and Microsoft Visual Studio 10 C++ Express. As second step I wanted to understand what's going on under the hood, but I'm puzzled now. For example the assignment operation in the for loops compiles to:

I understand that the first two lines gets the components of a_aligned's address, and the third line copies it to the xmm0 register. But I don't understand why it's copied back to memory, than to xmm0 again (than to a_ptr). I though that the _mm_load_si128 intrinsic should copy a_aligned[i]'s 128 bits to xmm0 and nothing more. Why is this happened? Am I wrong theoretically? If not how should I hint the compiler? Is my sample code correct (in sense that it doesn't have unnecessarities)? Here is my full sample code:

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

kinect - SSE2を移行してNEONの本質を武装させる

私はSSE2の組み込みに次のコードを持っています。Kinectからの入力を処理します。

これは基本的に、SSEレジスタ内の11 uint8_t(r0-r10​​)から8 uint16_tをアンパックします(mmaskは定数であり、以前に作成されています)。次に、境界として機能する2つの配列から、対応する要素を含む2つのレジスタをロードします。それらをチェックし、ゼロ化された基準に適合しない要素を持つレジスタを作成します。次に、それらを保存し、各要素をさらに処理します。movemaskは、どの要素も通過しない場合に最適化として機能します。その場合、処理をスキップできます。

これはうまく機能し、今度はNEONにも移植したいと思います。2つの部分を除いて、そのほとんどは簡単です。SSE2コードからのアセンブラー出力(gcc)を見ると、_mm_setr_epi16で8つのuint16_t移動を実行する代わりに、シフトしてuint32_tに移動し、最後に4つの移動を実行することがわかります。それは効率的だと思われ、コンパイラがそれを処理するので、私はコードを変更しませんでした。NEONの場合は手動で適用する必要がありますか?8 vsetq_lane_u16の代わりに、シフトを実行して4 vsetq_lane_u32を実行しますか?エンディアンに問題がありますか?それは価値がありますか?

同等のものを見つけることができなかったので、最後の部分はムーブマスクです。誰かが何かを提案できますか?

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

c++ - SSE2 コードの最適化

アプリケーションのボトルネックを最適化するために SSE2 組み込み関数を使用していますが、次の質問があります。

__m128iMicrosoft C++ コンパイラでは、型とunsigned int(命令に渡される_mm_sll_epi32) は交換できないため、これはコンパイルされません。

これはなぜですか? また、任意のunsigned int値をに渡すにはどうすればよい_mm_sll_epi32ですか?


_m128iは:

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

x86-64 - Xcode4: x86_64 アーキテクチャの nasm 経由で sse2 アセンブルをコンパイルできない

現在、Xcode4 でコーデック プロジェクトを 32 ビットから 64 ビット アーキテクチャに切り替えています。*cpp パーツ ファイルは正常にコンパイルされていますが、.asm (すべての sse2 アセンブル) ファイルは、nasm 経由でオブジェクト ファイルにまったくコンパイルできないようです ( 32 ビット アーキテクチャでは問題ありません)。sse2関数本体をリンクするときにclangリンカーがエラーを表示し(sse2実装が見つかりません)、obj出力フォルダーにオブジェクトファイル出力が見つかりません。これについて何か提案はありますか?私のnasmバージョンは2.10で、64ビットがサポートされています。

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

visual-c++ - GCCインラインasm(SSE2、SSSE3)をMSVC組み込み関数に変換します

VLCからビデオプレーヤーにMSVC++2010で記述されたコードを借りていますが、GPUメモリからコンベンショナルメモリへのデコードされたビデオフレームの抽出に関連するインラインasmsに相当するものが見つかりません。特に、この指示を翻訳する方法がわかりません。

SplitUVこれは、ファイルの関数で確認できますvlc/modules/codec/avcodec/copy.c

MSDNによると、の組み込み関数はmovq、、_mm_move_epi64および_mm_loadl_epi64です_mm_storel_epi64。ただし、__m128i引数が必要であり、へのポインタに1を追加すると__m128i、16バイトのオフセットが得られますが、8バイトが必要です。

アセンブラコード全体は次のとおりです。

私は1行ずつ翻訳を開始しましたが、今では次のコードがあります(不完全です)。

次の指示はそれです

そして、8バイトのオフセットを指定する方法がわかりません。また、PSHUFBを正しく翻訳したことに疑問があります。

コメントや提案をいただければ幸いです。

ありがとう。

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

c++ - md5 ベクトル化された sse* && avx

ベクトル化を使用した md5 アルゴリズムの実装に関する情報を探しています。SSE* と AVX 命令の詳細に興味があります。ベクトル化をサポートする既製のライブラリーはありますか?

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

c++ - SSE 命令セットが有効になっていません

「SSE instruction set not enabled」というエラーで問題が発生しています。どうすればこれを理解できますか?

私はACER i7、Ubuntu 11.10を持っています。誰か助けてください。

どんな助けでも大歓迎です!


また実行中:

与えます:

実際、gazebo-1.0.0-RC2-x86_64 をインストールしようとして、このエラーが発生しました。


私のcmakefileにはすでにこのオプションがあります

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

java - ValgrindとJava

Valgrind 3.7.0を使用して、Javaネイティブコードのメモリリークを見つけたいと思います。jdk1.6.0._29を使用しています。

そのためには、-trace-children=yesフラグを設定する必要があります。そのフラグを設定すると、次のようなコマンドであっても、Javaアプリケーションでvalgrindを実行できなくなります。

エラーメッセージが表示されます:

私はこのリンクを見ました:https ://bugs.kde.org/show_bug.cgi?id = 249943 、しかしそれは役に立ちませんでした。

Valgrindなしまたは--trace-childrenフラグなしでプログラムを実行することは問題ありません。

誰かが私に何ができるかについて何か考えがありますか?

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

ありがとう!