問題タブ [x87]
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 - x87FILDおよびSSECVTSI2SD命令に相当する署名されていないものはありますか?
uint
Cのto-castに相当するものをGHCHaskellコンパイラに実装したいと思いdouble
ます。すでにint
-to- double
usingFILD
またはを実装していCVTSI2SD
ます。これらの操作の署名されていないバージョンがありますか、それとも変換前の最上位ビットをゼロにすることになっていますuint
か(したがって範囲が失われます)?
visual-c++ - EXCEPTION_FLT_STACK_CHECKの理由を検出する
数学の計算が重い複雑なCおよびC++コードがあります。コンパイルする最新のアップデートであるIntelC++を使用しています。私は最適化を使用していますが、アプリケーションは期待される答えを提供しません。長い間、私は問題をEXCEPTION_FLT_STACK_CHECK0xc0000092を取得するように減らすことができました。最適化せずにコンパイルした場合-プログラムは期待どおりに動作します。
これは、Winxp64のシングルスレッドコードです(アプリケーションは32ビットです)。
MSVC 2010は、デバッグビルドまたはリリースビルドで同じ結果を提供します。(つまり、Good =期待される結果)
誰かがどこを見ればいいのか教えてもらえますか?現在、コンパイラのバグが疑われます。自分のアセンブリコードがないため、コンパイラで生成されたコードのみです。アセンブラを調べたところ、SSE/x87混合コードです。
探すべき道順を探しています。(インテル®コンパイラーの)試用版を使用しているので、調査する時間があまりありません。
/ Qfp-stack-check tommorowを使用して、コードに問題があるかどうかを確認します。
*更新* インテル®コンパイラーにバグが見つかりました。関数はst(0)に値を返しますが、呼び出し元の関数はそれを削除しません。そうすれば、スタック例外が発生します。回避策は、常に必要とは限らない場合でも、戻り値を使用することです。共有できるコードで再現してみます。
この回避策の後、同じコードでIntelはmsvc2010よりも35%高速でした。-それが主な結果です。
モーディ
assembly - x86のxmmレジスタに定数値を追加します
レジスター(double)に追加1
または追加するにはどうすればよいですか?2
xmm0
私はこのようにそれを行うことができますが、もっと簡単な方法があるはずです:
また、浮動小数点x87命令でこれを行うことは可能でしょうか?
これは私にはうまくいきません:
assembly - コプロセッサーコマンドの問題(グラフィックモードでf(x)= x * sin(1 / x)曲線を描きたい)
私はアセンブリのプログラミングの初心者です。グラフィックモードでf(x)= x * sin(1 / x)曲線を描きたい。f(x)= sin(x)曲線を描くことはできますが、f(x)= x * sin(1 / x)を描くことはできません。どうすればこれを行うことができますか?
以下に、私の動作するf(x)= sin(x)コードを示します。それは機能しており、正弦曲線を完全に描画しています。
このコードを変更して、f(x)= x * sin(1 / x)曲線を描画したいと思います。
上記のコードの次のセクションを変更するために、いくつかのことを試みました。
しかし、これまでのところ何の結果もありません。
私を手伝ってくれますか?
===========編集済み:====================
私はあなたのコードを試しました。これで、私のコードは次のようになります。
ただし、このコードは、予想されるx * sin(1 / x)曲線ではなく、1本の線のみを描画します。何が問題なのかを理解するのを手伝ってくれませんか。
x86 - x86: 超越関数のレイテンシーとスループット
インテル® 64 および IA-32 アーキテクチャー最適化リファレンス・マニュアルには、さまざまな CPU 命令のレイテンシーとスループットの数値がリストされています。
超越関数 (FSIN
など) については、数値の一部が範囲としてリストされています (ページ C-29)。脚注 4 は次のように説明しています。
超越命令のレイテンシとスループットは、動的な実行環境では大幅に異なる場合があります。これらの指示については、おおよその値または値の範囲のみが示されています。
私の質問は、そのような命令のスループットとレイテンシに影響を与える要因は何ですか? 引数の値が 1 つの要因であると思います。他にもありますか?
assembly - アセンブリ x86-64 で longfloat と int を分割する
ユーザーが Y (はい) を入力している限りループするプログラムがあります。次に、ユーザーは long float 型のデータを入力します。また、長いフロートを入力するたびにカウントするカウンター r14 もあります。ループが終了したら、平均を計算したいと思います。私がこれを行う場合:
それを表示すると、セグメンテーション違反が発生します。私は他にもたくさんのことを試しましたが、常にセグが表示されます。分割して表示しようとするとエラーが発生します。問題は、r14がintであり、そのようにFPUスタックに入れて除算できないことだと思います。しかし、私は別の方法を理解できません。
誰か助けてくれませんか?前もって感謝します。
.net - SSE浮動小数点演算は再現可能ですか?
x87 FPUは、内部80ビット精度モードを使用していることで注目に値します。これにより、コンパイラーやマシン間で予期しない再現不可能な結果が生じることがよくあります。.NETで再現可能な浮動小数点演算を検索したところ、.NETの両方の主要な実装(MicrosoftとMono)が64ビットモードでx87ではなくSSE命令を出力することがわかりました。
SSE(2)は、32ビットフロートには厳密に32ビットレジスタを使用し、64ビットフロートには厳密に64ビットレジスタを使用します。適切な制御ワードを設定することにより、オプションで非正規化数をゼロにフラッシュできます。
したがって、SSEはx87の精度関連の問題に悩まされておらず、唯一の変数は制御可能な非正規化動作であるように見えます。
超越関数(x87とは異なりSSEによってネイティブに提供されない)の問題は別として、SSEを使用すると、マシンとコンパイラ間で再現可能な結果が保証されますか?たとえば、コンパイラの最適化は異なる結果につながる可能性がありますか?私はいくつかの矛盾する意見を見つけました:
SSE2をお持ちの場合は、それを使用して、その後も幸せに暮らしてください。SSE2は32bと64bの両方の操作をサポートし、中間結果はオペランドのサイズになります。--Yossi Kreinin、http://www.yosefk.com/blog/consistency-how-to-defeat-the-purpose-of-ieee-floating-point.html
..。
SSE2命令(...)はIEEE754-1985に完全に準拠しており、他のプラットフォームとの再現性(静的な丸め精度のおかげで)と移植性が向上します。Muller et aliis、 浮動小数点演算ハンドブック-p.107
でも:
また、浮動小数点にSSEまたはSSE2を使用することはできません。これは、指定が少なすぎて決定論的ではないためです。-John Watte http://www.gamedev.net/topic/499435-floating-point-determinism/#entry4259411
assembly - FMULはステータスレジスタのオーバーフローをクリアしません
私はこのWin32コードを持っています:
fmul
FPUステータスレジスタビットをクリアしていないようです。つまり、オーバーフローがすでに設定されている場合( ax
&8)、その後も設定されたままになりfmul
ます。それは正しい振る舞いですか?FPU運用後または運用前にステータスをクリアする必要がありますか?
fmul
つまり、このビットを設定すると思いますが、リセットする必要がありますか?オンラインで答えが見つかりませんでした。
assembly - ASM 浮動小数点ユニットが間違った数値を与える
浮動小数点ユニット ASM を使用してより大きなプログラムを作成していますが、数値が間違っています。私は単純なコードを作成しましたが、これも誤った数値を示しています。誰でも理由がわかりましたか?ここで何が問題なのですか?Ubuntu 32b を使用しています。
私はgdbを使用していますが、「print a」の後、1ではなく巨大な数が表示され、他の2つの変数(b、test1)と同じです。
ここで何が問題なのですか?