x32 ABI


X32_ABI
X32 ABIは、あるアプリケーションバイナリインタフェース(ABI)とのLinuxカーネルのインターフェース。これにより、プログラムは、32を使用しながら、x86-64命令セットの利点(CPUレジスタの数が多い、浮動小数点パフォーマンスの向上、位置に依存しないコードの高速化、共有ライブラリ、レジスタを介して渡される関数パラメータ、syscall命令の高速化)を利用できます。ビットポインタは、したがって、64ビット・ポインタのオーバーヘッドを回避します。

コンテンツ
1 詳細
2 歴史
3 参考文献
4 外部リンク

詳細
x32 ABIは、プログラムを4 GiBの仮想アドレス空間に制限しますが、ポインターを小さくすることにより、プログラムのメモリフットプリントも削減します。これにより、より多くのコードとより多くのデータをキャッシュに組み込むことで、実行速度を上げることができます。 テスト中の最良の結果は、181.mcf SPEC CPU 2000ベンチマークを使用した場合で、x32 ABIバージョンはx86-64バージョンよりも40%高速でした。 SPEC CPU整数ベンチマークでは、x86-64と比較して平均してx32が5〜8%高速です。SPEC CPU浮動小数点ベンチマークでは、x86-64を超える速度の利点はありません。
ABI比較
特徴 i386 ABI x32 ABI x86-64 ABI
ポインタ 4バイト 8バイト
最大 プロセスあたりのメモリ 4 GiB 128 TiB
整数レジスタ 6(PIC) 15
FPレジスタ 8 16
64ビット演算
番号 はい
浮動小数点演算 x87 SSE 呼び出し規約 メモリー レジスター
PICプロローグ
2〜3の手順 なし

歴史
主にILP32モードでコンパイルされ、64ビットCPU命令へのプリンシパルアクセスも持つプログラムで構成されるユーザースペースを実行することは、特に「クラシックRISC」チップの分野では珍しいことではありません。たとえば、Solarisオペレーティングシステムは、SPARCとx86-64の両方でこれを行います。上のLinux側、Debianのも船ILP32ユーザ空間。根本的な理由は、x86-64で示されているように、LP64コードのやや「より高価な」性質です。その点で、x32 ABIは、ILP32-on-64bitの概念をx86-64プラットフォームに拡張します。
いくつかの人々は、以来、年間で32ビット・ポインタとx86-64のABIのメリットを議論していたのAthlon 64 2003年のリリース、特にドナルド・クヌース2008年にを、このようなモードを実装に向けて少し公に目に見える進展がありました2011年8月27日、Hans Peter AnvinがLinuxカーネルメーリングリストに、彼とHJLuがx32ABIに取り組んでいたことを発表するまで。
その同じ日、Linus Torvaldsは、x32ABIで32ビットの時間値を使用すると将来問題が発生する可能性があることを懸念して回答しました。 これは、32ビットの時間値を使用すると、2038年に時間値がオーバーフローするためです。 この要求に続いて、x32ABIの開発者は時間値を64ビットに変更しました。
2011年9月7日に開催されたLinuxPlumbers Conferenceでのプレゼンテーションでは、x32ABIが取り上げられました。
x32 ABIは3.4リリースのLinuxカーネルにマージされ、バージョン2.16でGNUCライブラリにサポートが追加されました。
2018年12月に、2020年11月の時点では発生していないx32ABIを廃止することが検討されました。

参考文献
^ Thorsten Leemhuis(2011-09-13)。「カーネルログ:x32ABIには64ビットの欠点があります」。www.h-online.com。2011年10月28日にオリジナルからアーカイブされました。
^ “x32-x86-64用のネイティブ32ビットABI”。linuxplumbersconf.org 。
^ “x32-abi”。Googleサイト。
^ “181.mcf SPECCPU2000ベンチマーク記述ファイル”。Standard PerformanceEvaluationCorporation。1999-10-14 。
^ HJ Lu; H.ピーターアンビン; ミリンド・ガーカー。「X32-X86-64用のネイティブ32ビットABI」。
^ トニーバーク(2004-01-22)。「64ビットバイナリは本当に32ビットバイナリよりも遅いのですか?」。
^ ドナルドクヌース。「最近のニュース:64ビットポインタについての炎」。検索された5月15 2012。
^ H.ピーターアンビン(2011年8月27日)。「RFD:x32ABIシステムコール番号」。検索された5月15 2012。
^ Jonathan Corbet(2011-08-29)。「x32システムコールABI」。LWN.net 。
^ Linus Torvalds(2011-08-26)。「Re:RFD:x32ABIシステムコール番号」。LWN.net 。
^ Lu、HJ(2011-11-24)。「X32プロジェクトステータスの更新」。libc-alpha(メーリングリスト)。
^ オドネル、カルロス(2012年6月30日)。「GNUCライブラリバージョン2.16が利用可能になりました」。libc-alpha(メーリングリスト)。取得した27年12月2016。
^ 「アップストリームのLinuxx32サポートを削除できますか?」。LKML 。

外部リンク
icon"
 Linuxポータル
x32ABI開発Webサイト
Linux配管工会議からのx32ABIプレゼンテーションスライド”