0

プロジェクトでインラインyasmを使用して実装しました。現在、プロジェクトはopenMPを使用してタスクを並列化し、パフォーマンスを向上させています。x86 プラットフォームでは、openMP が実行できません。理由は、x86 環境に十分なメモリがないためです。したがって、x64環境を使用してコンパイルすると、実行できます。しかし、パフォーマンスを最適化するために yasm コードを使用すると、うまく機能しません (yasm のコードは x86 環境で記述されています)。

私はそれについてすべて検索しましたが、この問題を解決するための有用な情報が見つかりません.

問題を解決する方法を教えてくれる人。関連情報を含むドキュメントを見たいです。

ご協力ありがとうございました。

4

1 に答える 1

0

コードがなければ、AMD64 ABI についてこれを読んで、x64 プラットフォームの呼び出し規約標準を参照する必要があると思います。これはあなたのために働くべきだと思います。そのドキュメントでは、次のようにパラメータを渡す必要があると述べています(ABI標準で記述されているメソッドで最初に引数を分類する必要があることに注意してください):

  1. クラスが MEMORY の場合、引数をスタックに渡します。
  2. クラスが INTEGER の場合、シーケンス%rdi%rsi%rdx%rcx%r8およびの次に使用可能なレジスタ%r9が使用されます。
  3. クラスが SSE の場合、次に使用可能なベクトル レジスタが使用され、レジスタは から の順に取得され%xmm0ます%xmm7

...

于 2015-02-09T18:13:03.300 に答える