問題タブ [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.
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:
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を実行しますか?エンディアンに問題がありますか?それは価値がありますか?
同等のものを見つけることができなかったので、最後の部分はムーブマスクです。誰かが何かを提案できますか?
c++ - SSE2 コードの最適化
アプリケーションのボトルネックを最適化するために SSE2 組み込み関数を使用していますが、次の質問があります。
__m128i
Microsoft C++ コンパイラでは、型とunsigned int
(命令に渡される_mm_sll_epi32
) は交換できないため、これはコンパイルされません。
これはなぜですか? また、任意のunsigned int
値をに渡すにはどうすればよい_mm_sll_epi32
ですか?
_m128i
は:
x86-64 - Xcode4: x86_64 アーキテクチャの nasm 経由で sse2 アセンブルをコンパイルできない
現在、Xcode4 でコーデック プロジェクトを 32 ビットから 64 ビット アーキテクチャに切り替えています。*cpp パーツ ファイルは正常にコンパイルされていますが、.asm (すべての sse2 アセンブル) ファイルは、nasm 経由でオブジェクト ファイルにまったくコンパイルできないようです ( 32 ビット アーキテクチャでは問題ありません)。sse2関数本体をリンクするときにclangリンカーがエラーを表示し(sse2実装が見つかりません)、obj出力フォルダーにオブジェクトファイル出力が見つかりません。これについて何か提案はありますか?私のnasmバージョンは2.10で、64ビットがサポートされています。
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を正しく翻訳したことに疑問があります。
コメントや提案をいただければ幸いです。
ありがとう。
c++ - md5 ベクトル化された sse* && avx
ベクトル化を使用した md5 アルゴリズムの実装に関する情報を探しています。SSE* と AVX 命令の詳細に興味があります。ベクトル化をサポートする既製のライブラリーはありますか?
c++ - SSE 命令セットが有効になっていません
「SSE instruction set not enabled」というエラーで問題が発生しています。どうすればこれを理解できますか?
私はACER i7、Ubuntu 11.10を持っています。誰か助けてください。
どんな助けでも大歓迎です!
また実行中:
与えます:
実際、gazebo-1.0.0-RC2-x86_64 をインストールしようとして、このエラーが発生しました。
私のcmakefileにはすでにこのオプションがあります
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フラグなしでプログラムを実行することは問題ありません。
誰かが私に何ができるかについて何か考えがありますか?
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
ありがとう!