問題タブ [mmx]
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 - EMMS命令実行時間?
The Art of Assembly: The MMX Instruction Set を読んでいます。いくつかの MMX 命令を実行した後、EMMS
命令を実行して FPU をリセットする必要があります。EMMS 命令は非常に遅いと書かれています。
ただし、EMMS
実行時間をプロファイリングしてどれだけ遅いかを確認すると (RDTSC
クロック サイクルをカウントするために使用)、0 サイクルで実行されているように見えます。
どうしたの?どこかで間違いを犯したのでしょうか、それとも Art Of Assembly は古くなっていますか?
assembly - 簡単な組み立て mmx 演習のヘルプ
たとえば、長さが 8 の倍数のバイトのベクトルが与えられた場合、mmx 命令を使用してすべての 2 を 5 に変換するにはどうすればよいでしょうか?
ありがとう。
編集: 2 と 5 は単なる例です。これらは実際にはプロシージャのパラメータです。
assembly - アセンブリ マスク ロジックの質問
これは非常に単純ですが、まだ理解できていません。
この質問はアセンブリ mmx に関するものですが、これは純粋な論理です。
次のシナリオを想像してください。
私が知りたいのは、MM0 のゼロを 02 で埋めることです。ステップ 2 で MM0 レジスタを反転し、FF を 00 に、00 を FF に変更し、and を MM1 に変更し、最後に or をマージする必要があると思います。 2。
私が得ることができた場合:
要約すると、その MM3 レジスタを 00 00 FF FF 00 00 FF として取得するにはどうすればよいですか? ビットを反転して、MMX レジスタで AND、OR、XOR、および NAND 命令しか使用できないことを証明するにはどうすればよいですか?
どんな答えでも大歓迎です。ありがとう。
arm - 一般的な SIMD 手法
一般的な SIMD トリックに関する情報はどこにありますか? 私は命令セットを持っており、トリッキーでない SIMD コードの書き方を知っていますが、SIMD は今でははるかに強力です。複雑な条件分岐のないコードを保持できます。
たとえば ( ARMv6
)、次の一連の命令は、Rd の各バイトを Ra と Rb の対応するバイトの符号なし最小値に等しく設定します。
チュートリアルへのリンク / 珍しい SIMD テクニックも良いです :) ARMv6は私にとって最も興味深いものですが、x86 (SSE、...)/ Neon (ARMv7)/その他も良いです。
c++ - 複数の SIMD 命令セットを同時に使用する利点
マルチスレッドの高度に並列化されたアプリケーションを作成しています。私はすでに SSE アクセラレーション スレッド クラスを作成しています。MMX アクセラレーション スレッド クラスを記述した場合、両方を同時に実行すると (コアごとに 1 つの SSE スレッドと 1 つの MMX スレッド)、パフォーマンスは著しく向上しますか?
この設定はメモリの待ち時間を隠すのに役立つと思いますが、時間を費やす前に確認したいと思います.
c++ - 特別な CPU 機能の C/C++ の使用
新しいコンパイラは、MMX SSE、3DNow! などの新しい CPU に組み込まれた追加機能を使用しますか? など?
つまり、元の 8086 には FPU さえなかったので、古いコンパイラはそれを使用することさえできませんが、FPU はすべての新しい CPU の一部であるため、新しいコンパイラは使用できます。では、新しいコンパイラは CPU の新しい機能を使用しますか?
または、新しい C/C++ 標準ライブラリ関数は新しい機能を使用していますか?
ご回答ありがとうございます。
編集:
わかりましたので、すべてが正しければ、特に浮動小数点数を使用する標準的な操作でさえ、SSE を使用してより高速に実行できます。
これを使用するには、コンパイラでこの機能を有効にする必要があります (サポートされている場合)。もしそうなら、対象のプラットフォームがその機能をサポートしていることを確認する必要があります。
OpenGL、DirectX など、最高のパフォーマンスを必要とする一部のシステム ライブラリの場合、このサポートはシステムでサポートされる場合があります。
デフォルトでは、互換性の理由から、コンパイラはそれをサポートしていませんが、Intel などによって提供される特別な C 関数を使用して、このサポートを追加できます。これは、任意のプラットフォームを直接制御でき、目的のプラットフォームの特別な機能を使用してマルチ CPU をサポートするアプリケーションを作成できるため、最適な方法です。
assembly - MMX 組み込み関数と Microsoft C++ でのスタックの使用
MMX 命令を使用して int32 データ配列から要素を累積的に追加するインライン アセンブラー ループがあります。特に、MMX レジスタが 16 個の int32 に対応できるという事実を利用して、16 個の異なる累積和を並列に計算します。
このコードを MMX 組み込み関数に変換したいと考えていますが、8 つの MMX レジスタを使用して 16 の独立した和を計算するようコンパイラに明示的に指示することはできないため、パフォーマンスが低下するのではないかと心配しています。
誰かがこれについてコメントして、以下のコードを変換して組み込み関数を使用する方法についての解決策を提案できますか?
== インラインアセンブラ (ループ内のみ) ==
- esi はデータ配列の先頭を指します
- edx は、現在のループ反復のデータ配列にオフセットを提供します
- データ配列は、16 個の独立した合計の要素がインターリーブされるように配置されます。
assembly - レイテンシとスループットを含む簡潔な SSE および MMX 命令リファレンス
インライン アセンブリで MMX および SSE 命令セットを使用して、いくつかの演算を最適化しようとしています。ただし、これらの強化された命令セットのタイミングと使用法に関する適切なリファレンスを見つけることができませんでした。スループット、レイテンシ、オペランド、およびおそらく命令の簡単な説明に関する情報を含むリファレンスを見つけるのを手伝ってくれませんか?
これまでのところ、私は見つけました:
Intel 命令リファレンス Intel 64 and IA-32 Architectures Developer's Manual: Vol. 2Aおよび Intel 64 および IA-32 アーキテクチャ開発者マニュアル: Vol. 2B
インテル最適化ガイド http://www.intel.com/Assets/PDF/manual/248966.pdf
整数演算のタイミング http://gmplib.org/~tege/x86-timing.pdf
simd - MMX/SSE命令をAltiVecに移植する
はじめに..私はASMの経験が非常に限られており、SIMDの経験はさらに少ないです。
しかし、次のMMX / SSE最適化コードがあり、PPC/Cellプロセッサで使用するためにAltiVec命令に移植したいと思います。
これはおそらく大きな質問です。数行のコードですが、ここで何が起こっているのかを理解するのに問題はありませんでした。
元の機能:
AltiVec命令を使用するためにこれを書き直す方法に関するヒントはありますか?
私の最初の試み(非常に間違った試み)は次のようになります。しかし、それは完全に(またはリモートでさえ)正しくありません。
optimization - AMD Geode 最適化リファレンス
私は、組み込みの AMD Geode LX でいくつかのマシン ビジョン コードを大幅に最適化する作業を行っています。x86 MMX 命令を多用して、Assembly で計算量の多い部分を書き直すところまで行っています。
基本的な MMX 命令セットには多くのリファレンスがありますが、Geode LX を最適化するための具体的なガイドを探しています。
AMD の Web サイトには、AMD64 と Athlon の最適化ガイドがいくつかありますが、特にジオードに関する情報を見つけることができませんでした。
パイプライン処理、さまざまな命令の速度、およびその他の速度に関する重要な情報など、Geode 固有の情報を探しています。Geode がどのように機能するかについての情報だけでなく、コードを改善するためのヒントも非常に役立ちます。
AMD Geode LX 800 を使用しています。
[編集] AMD Athlon および Opteron プロセッサのみに焦点を当てていることを除いて、この Web サイトはまさに私が探しているものです: http://www.agner.org/optimize/