問題タブ [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.
c - C でインライン アセンブリを使用した場合のエラー
私はこれまで実際に使用したことのないベクトル演算を使用するためにアセンブリを試みていますが、構文の一部を把握するのに少し苦労していることは確かです。
関連するコードは以下です。
この単純な例では、配列内の各要素に対して "3" の 16 ビット比較を実行しようとしています。出力が「0 0 65535 0」になることを願っています。でも、まとまりません。
最初のアセンブリ命令で次のエラーが表示されます。
エラー: メモリ入力 0 は直接アドレス指定できません
2 番目の命令では、別のエラーが表示されます。
エラー: `pcmpeqw' のサフィックスまたはオペランドが無効です
どんな助けでも大歓迎です。
c - Cの単一命令サイクルで100個の整数要素の配列を追加する方法は?
100 個の要素の配列があり、これらの 100 個の要素すべてを追加したいと考えています。以下と同じようにCコードを使用しています
プロセッサが 100 命令サイクルを使用して 100 個の要素を追加すると仮定すると、アプリケーションの速度が低下します。したがって、アプリケーションを高速化するために、1 つの命令サイクルで 100 個の要素を追加する命令があるかどうかを知りたいです。
gcc - -g フラグは、プログラムのランタイムとコンパイルを変更します
SSE および AVX SIMD 命令を使用してトップ K フィルタリング アルゴリズムを高速化しようとするプログラムを作成しています。フラグ -o3、-msse3、および -lrt を指定して icc を使用してプログラムをコンパイルしていますが、実行時間は約 30ms です。ただし、最後に -g フラグを付けて vtune または gdb を使用すると、プログラムの実行にかかる時間が ~100ms に跳ね上がります。
誰かがなぜこれが起こっているのか説明できますか? -g がプログラムのコンパイルを変更する理由について、私は非常に混乱しています。
performance - インライン ASM: MMX を使用するとタイマーで NaN 秒が返される
問題
配列の要素を別の配列にコピーするのにmmx
、またはレジスタの方が速いかどうかを調べようとしています(私は知っていますが、非常に特定の目的のためにこの関数が必要です)。xmm
memcpy()
私のソースコードは以下です。関連する関数はcopyarray()
. mmx
またはxmm
レジスタをmovq
またはでそれぞれ使用できmovsd
、結果は正しいです。ただし、mmx
レジスタを使用する場合、操作の時間を計るために ( または のいずれclock()
かでQueryPerformanceCounter
) 使用するタイマーはいずれも を返しますNaN
。
以下でコンパイル:gcc -std=c99 -O2 -m32 -msse3 -mincoming-stack-boundary=2 -mfpmath=sse,387 -masm=intel copyasm.c -o copyasm.exe
これは非常に奇妙なバグであり、まったく同じコードでレジスタを使用すると有効な時間値が返されるのに、レジスタを使用mmx
するとタイマーがNaN
秒を返す理由がわかりませんxmm
編集
xmm
レジスタを使用した結果:
mmx
レジスタを使用した結果:
ソースコード
assembly - mmx経由で3つの整数の平均を数える方法は?
私は問題を抱えています。あなたが助けてくれることを願っています。mmx、xmm、または sse コマンドを使用して、(Java から送信された) 画像のグレースケールを実行するタスクがあります。私はすでに C と asm でこれを行っています (ロジックを使用して R、G、および b を取得し、次に avg を見つける)。今度は mmx/xmm/sse AND を使用してパフォーマンスを向上させる必要があります (そうしないと、教授はそれを拒否し、明日試験日です)。
グレースケールとは、1ピクセルのR,G,Bを取って、R,G,Bの平均値に置き換えることです。これは単純に3つを組み合わせてidivを行うだけで簡単に実行できますが、mmxでは除算がないため、即興で行う必要があります。そして私にはアイデアがありません。
xmm の問題は、単純な「movaps xmm0, [rel v1]」でクラッシュすることです。これを調べる時間がないので、mmx のみでこれを行うとよいでしょう。
昨日、私は mmx を使用するものを書きましたが、C コードよりも 30 倍遅く動作しました :( まあ、私は壮大なパフォーマンスも必要としません。
何か案は?たぶん、シフトなどで除算を行うことができますか?助けていただければ幸いです。
sdl - SDL2 に SDL_HasMMXExt がない理由
SDL 1.2 には がありSDL_HasMMXExt
ます。ここを参照してください。ファイルの完全なソースは、ここで見ることができます。
SDL 2 では、その機能がありません。なんで?同じファイルの SDL2 の完全なソースは、ここで見ることができます。
SDL 1.2 の関連コードは次のとおりです。
CPU_getCPUIDFeaturesExt
SDL2にもありません。なぜ削除されたのですか?
c++ - ASM - 拡張命令で (int + int)* float 定数を実行する最良の方法は何ですか?
WM_MOUSEMOVE に応答して、opengl アプリケーションでカメラを移動する関数を実行しています。
関数は、STARTING POINT (wm_lbuttondown コマンドからの古い lParam) を取得し、STARTING POINT から CURRENT POINT を引き、その結果に浮動小数点係数を掛けます。
わかりました、動作しますが、私は asm とこれらすべての優れたレジスタを使用して練習しようとしています。だから、これは同じことのための私のコードですが、mmxレジスタを使用しています
問題は、これはそのような単純な体温測定を行うための迅速な方法ですか、それとも他の方法でそれらを行うことができるでしょうか? ありがとう
c# - 画像処理のために C# で MMX コードを使用する方法
C# で 128 ビットの計算が多すぎるアプリを作成しています。(画像処理 - 16bit R、16bit G、16bit B、16bit A)
この 2 つの 64 ビット RGBA カラーを1 サイクルで計算できますか?
その計算を行うためにアセンブリ(MMX)コードを使用する方法はありますか?
c - アセンブリ MMX ドット積セグメンテーション違反
アセンブリ言語を使用して、2 つの小さな配列の単純な内積計算を実行しようとしています。これが私のコードです:
makefile からコンパイル:
結果:
gdb を使用して原因を分析すると、次のようになります。
結果をレジスタに戻すことができない理由がわかりません。どんな提案でも大歓迎です。
何度もありがとうございます。
ヴィンセント