Comments
Description
Transcript
HP C
GNU CC と HP C の比較 PA-RISC 版 HP-UX 上での C コンパイラの選択に関する開発者ガイド(第 1 版) white paper 目次 1.0 要約 ........................................................................................................................................................... 2 2.0 はじめに ..................................................................................................................................................... 2 3.0 機能 ........................................................................................................................................................... 3 3.1 共通の機能 ............................................................................................................................................. 3 3.1.1 ANSI 標準のサポート ........................................................................................................................ 3 3.1.2 複数レベルの最適化の実行(O1、O2、O3) ..................................................................................... 3 3.1.3 32 ビット・アプリケーションと 64 ビット・アプリケーションのコンパイル.................................................... 3 3.1.4 一般的に使用される C コンパイラ・オプションのサポート...................................................................... 3 3.1.5 WDB デバッガの使用 ........................................................................................................................ 3 3.1.6 最適化コードのデバッグ..................................................................................................................... 4 3.1.7 インクリメンタル・リンク....................................................................................................................... 4 3.1.8 活発な開発とサポート........................................................................................................................ 4 3.1.9 両コンパイラの組み合わせ ................................................................................................................ 4 3.2 HP C のみが提供する機能 ....................................................................................................................... 5 3.2.1 プロファイルベースの最適化 .............................................................................................................. 5 3.2.2 ヒュージ・データ................................................................................................................................. 5 3.2.3 修正と継続(Fix and Continue)........................................................................................................... 5 3.2.4 オブジェクト・モジュールのみでデバッグ .............................................................................................. 5 3.2.5 並列処理オプションとプラグマ ............................................................................................................ 5 3.2.6 スレッド・ローカル記憶領域 ................................................................................................................ 5 3.2.7 Softbench .......................................................................................................................................... 5 3.2.8 プラグマ ........................................................................................................................................... 6 3.3 GNU CC のみが提供する機能 ................................................................................................................. 6 3.3.1 無料のコンパイラ .............................................................................................................................. 6 3.3.2 さまざまなオペレーティング・システムにわたる高い移植性 ................................................................... 6 4.0 パフォーマンス ............................................................................................................................................ 7 4.1 最適化.................................................................................................................................................... 7 4.2 ベンチマーク・パフォーマンス .................................................................................................................... 7 4.2.1 SPEC INT 2000.................................................................................................................................. 8 4.2.2 SPEC FP 2000 ................................................................................................................................... 8 4.2.3 SPEC の結果..................................................................................................................................... 9 5.0 結論........................................................................................................................................................... 9 6.0 付録 I コンパイラ・オプション ...................................................................................................................... 10 6.1 共通のオプション ................................................................................................................................... 10 6.2 HP C 固有のオプション........................................................................................................................... 11 6.3 GNU CC オプション ............................................................................................................................... 11 7.0 付録 II 最適化 .......................................................................................................................................... 12 7.1 HP C による最適化 ................................................................................................................................ 12 7.2 GNU CC による最適化 .......................................................................................................................... 13 8.0 付録 III SPEC の結果................................................................................................................................. 15 8.1 HP C の結果 ......................................................................................................................................... 15 8.2 GNU CC の結果 ................................................................................................................................... 16 1.0 要約 HP-UX 上では、HP C と GNU CC という 2 つの C1コンパイラを使用できます。どちらのコンパイラを開発に使用すべき かを判断するために、両者の機能、最適化、およびパフォーマンスについて比較調査を行いました。しかし残念ながら、 すべてのケースにあてはまる答えを得ることはできませんでした。例えばパフォーマンスが重視されるアプリケーション については HP C の方が適していますが、これは一般に HP-UX 上では HP C の方がより高性能なコードを生成できる ためです。一方、複数のプラットフォーム上で実行する必要があり、パフォーマンスがそれほど重視されないアプリケー ションについては、移植性に非常に優れた GNU CC の方が適しています。また、HP C のみがサポートする特殊な機能 を使用するアプリケーションの場合は、当然ながら HP C が唯一の選択肢になります。パフォーマンスがそれほど重要 でなく、主として HP-UX 上で開発するアプリケーションの場合は、どちらのコンパイラを使用しても構いません。 2.0 はじめに 現在 HP-UX 上では、HP C と GNU CC という 2 つの C コンパイラを使用できます。HP C は Hewlett-Packard が開発 したコンパイラで、PA-RISC アーキテクチャを最大限活用できるように調整されています。一方 GNU CC は GNU プロ ジェクトの一環として開発されたもので、無料で使用できるオープン・ソース・ツールです。この 2 つのコンパイラには多 くの共通点があります。つまり、両者とも C プログラムのコンパイラであり、ANSI 標準をサポートし、最適化を実行でき、 32 ビット版 HP-UX 上では SOM オブジェクトを、64 ビット版 HP-UX 上では ELF オブジェクトを生成し、デバッグ時に は HP の WDB デバッガと組み合わせて使用できます。この 2 つのコンパイラのいずれか一方を選択するのは、必ずし も容易ではありません。HP C という高速かつ高品質なコンパイラがあるのに、なぜ GNU CC についても検討が必要な のでしょうか。逆に無料で問題なく動作する GNU CC というコンパイラがあるのに、なぜ有料のソフトを購入する必要が あるのでしょうか。以下では 2 つのコンパイラを比較し、異なる機能の一覧、および 2 つのツール・セットのパフォーマ ンス値を掲載しています。これらの値は、HP-UX 上での開発に使用するコンパイラを選択する際の参考資料としてお役 立てください。 HP C と GNU CC の機能比較 1 2 特徴 HP C GNU CC 64 ビット・サポート ◎ ○ ANSI 準拠 ◎ ◎ ビルド時のパフォーマンス ◎ ○ ソフトウェアのコスト ○ ◎(無料) ほかの開発ツールとの相互運用性 ◎ ◎ パフォーマンス ◎ ○ 移植性 ○ ◎ 信頼性 ◎ ◎ 使いやすさ ◎ ◎ サポート HP オープン・ソース・コミュニティ 本ドキュメントはC言語のみを対象としており、C++機能は調査の対象外です。 3.0 機能 3.1 共通の機能 HP C と GNU CC はコンパイラとして類似した機能を提供しています。例えば、C プログラムのコンパイル、最適化の 実行、ANSI 標準のサポート、デバッガ用のデバッグ情報の生成など、多数の機能が共通しています。以下では、両コ ンパイラに共通する主な機能について説明します。 3.1.1 ANSI 標準のサポート 米国標準規格 9899:1990 (ANSI C) は、C プログラミング言語の形式および解釈を規定したドキュメントです。C プ ログラムは標準に従うことにより、異なるプラットフォームへの移植性を獲得できます。HP C と GNU CC は、いずれも ANSI モードで起動できます。C99 は改良された新しい ANSI 標準であり、どちらのコンパイラでも C99 への対応が現 在進行中です。 3.1.2 複数レベルの最適化の実行(O1、O2、O3) HP C と GNU CC は、いずれも主要な最適化レベルを最大 O3 までサポートしています。両者を比較すると、GNU CC では-O1 と-O は同じ意味になり、HP C が+O1 レベルで行う大部分の最適化が実行されます。O2 レベルでは、 GNU CC でも HP C とほぼ同等の最適化が実行されますが、関数のインライン展開とループのアンロールは行われま せん。O3 レベルでは、どちらのコンパイラでも同等の最適化が実行されます。HP C ではさらに+O4 レベルを使用で きますが、これは GNU CC にはない機能です。最適化はコンパイラにおける非常に重要な評価基準であるため、後ほ どさらに詳しく説明します。 3.1.3 32 ビット・アプリケーションと 64 ビット・アプリケーションのコンパイル PA-RISC 2.0 は 64 ビット・アーキテクチャを持っており、64 ビット・モードで呼び出された HP-UX カーネルは、32 ビッ ト・アプリケーションと 64 ビット・アプリケーションの両方をサポートできます。デフォルトのモードは、32 ビットです。HP C と GNU CC は、いずれも 32 ビット・モードのコードと 64 ビット・モードのコードを生成できます。HP C で 64 ビット・ アプリケーションを生成するには、+DD64 オプションを使用します。また GNU CC の場合は、32 ビット用と 64 ビット 用の 2 つの実行可能ファイルが用意されています。 3.1.4 一般的に使用される C コンパイラ・オプションのサポート コンパイラ・オプションの中には、オブジェクト・ファイルのみを生成するための-c オプション、プリプロセッサ変数名を定 義するための-D オプション、デバッグ情報を生成するための-g オプションなど、多数の標準的な C オプションがありま す。これらのオプションは HP C と GNU CC で共通していますが、形式は多少異なっている場合があります。共通オプ ションの完全な対応表は、付録 I を参照してください。 3.1.5 WDB デバッガの使用 HP WDB デバッガは、HP が実装、サポートする GDB デバッガです。HP C および GNU CC はいずれも-g オプション を使用することにより、WDB 用のデバッグ情報を生成できます。一部のデバッグ機能ではコンパイラのサポートは必要 なく、両コンパイラともこれらの機能を自動的に使用できます。例えば、ユーザー・スペース・アプリケーションにおけるメ モリ・チェック機能がこれに該当します。WDB デバッガは、メモリ・リークを追跡したり、配列の上下限の超過などを チェックしたりすることができます。一方、デバッグ機能の中にはコンパイラのサポートを必要とするものもありますが、 GNU CC ではこのサポートを提供できない可能性があります。HP C のみが提供する機能は、セクション 3.2 で説明し ます。 3 3.1.6 最適化コードのデバッグ DOC (Debugging of Optimized Code: 最適化コードのデバッグ) は、長い時間をかけて WDB に結実した重要な機能 です。両コンパイラとも-g と-O を同時に指定することにより、この機能を使用できます。 3.1.7 インクリメンタル・リンク インクリメンタル・リンクと呼ばれるリンカ機能は、ビルド時間の短縮に役立ちます。インクリメンタル・リンク機能を使用 すると、アプリケーションの作成時以降に再コンパイルされたファイルのみをリンクすることが可能になります。つまり、 あるアプリケーションが数千のファイルから構成されており、このうち 1 つのファイルのみを更新したような場合に、アプ リケーションを完全に再リンクする必要がありません。この機能に対応して、リンカには 2 つの新しいオプション+ild お よび+ildrelink が追加されています。コンパイラ側には、これらの新しいオプションをリンカに渡す機能のみが求められ ます。HP C および GNU CC は、いずれもコマンド行で-Wl オプションと共に指定することにより、この機能に対応でき ます。 3.1.8 活発な開発とサポート HP では HP C を活発に開発およびサポートしており、新しいリリースやパッチを定期的に発表しています。また HP で はさまざまな経路でサポートを提供しており、HP のサポート契約をご購入いただくと、問題発生時にレスポンス・セン ターへのお問い合わせが可能になるほか、Software Development Discussion Forum にご登録いただくと、最新の ニュースをご覧いただけます。またレスポンス・センター経由で障害レポートをご提出いただくと、パッチまたは将来のリ リースで対応させていただきます。 一方 GNU CC は無料のソフトウェアで、GNU CC のソース・コードは誰もが自由に入手できます。GNU CC の改良に 興味があればソースに手を加えることもでき、また結果をソース・ツリーに戻して公開することも可能です。そのため GNU プロジェクトに魅力を感じた多くの人々が、世界各地でコンパイラの改良、バグの修正、新しい最適化機能の追 加、実行時ライブラリの改良などに取り組んでいます。GNU CC の新しいリリースは、GCC 運営委員会により定期的 に発表されます。この無料のソフトウェアに関するヘルプは、メーリングリスト、GNUCC のサポートを提供している企業 または個人など、さまざまな方面から得られます。なお、HP 社は GNU CC のサポートを提供していません。 3.1.9 両コンパイラの組み合わせ HP C および GNU CC は、いずれも 32 ビット版の HP-UX 上では SOM オブジェクトを、64 ビット版の HP-UX 上では ELF オブジェクトを生成します。一方のコンパイラでコンパイルしたオブジェクトまたはライブラリは、もう一方のコンパイ ラでコンパイルしたオブジェクトまたはライブラリと問題なくリンクできます。 4 3.2 HP C のみが提供する機能 以下の機能は、HP C でのみ使用可能です。 3.2.1 プロファイルベースの最適化 ピーク・パフォーマンスを必要とするアプリケーションのために、HP では HP C コンパイラにプロファイルベースの最適 化機能を追加しています。これはプログラムのコンパイル時に、プロファイル用のコードを組み込むというものです。サ ンプル・データを使用して、このプロファイル機能が組み込まれたアプリケーションを実行すると、アプリケーション内で どのコードが実行されたかを示すデータ・ファイルが生成されます。その後、このデータ・ファイルと共にリンカを再度使 用し、どのコードが実行されたかの情報に基づいて最適化を行います。 3.2.2 ヒュージ・データ ヒュージ・データ・サポートは、HP-UX 11.0 の初期リリース後に追加された機能です。この機能は 64 ビット・モードの場 合にのみ必要です。32 ビット・モードでは、ヒュージ・データに対する特別なサポートは必要ありません。ヒュージ・デー タがサポートされている場合は、2GB を超える初期化されていないデータの作成およびアクセスが可能になります。こ のような GNU CC と HP C の比較 2001 年 4 月 20 日 5 データとしては、初期化されていないスタック、動的な割り 当てデータ、または静的なデータなどが考えられます。このサポートは、PA-RISC アーキテクチャ対応のすべての HP コ ンパイラと HP-UX カーネルに追加されています。 3.2.3 修正と継続(Fix and Continue) WDB 2.0 には、修正と継続と呼ばれる新しい機能が追加されています。この機能を使用するとデバッガをいったん終 了したり、デバッグ・セッションから抜けたりすることなく、ソース・ファイルを開いて問題を修正し、再コンパイルし、アプリ ケーションを再リンクし、さらにプログラムを再実行することができます。 3.2.4 オブジェクト・モジュールのみでデバッグ +objdebug 機能を使用すると、デバッグ情報が、最終的な実行可能ファイルにはコピーされずに、オブジェクト・モ ジュール内に残されます。これは、コード・サイズの縮小とアプリケーションのビルド時間短縮に役立ちます。 3.2.5 並列処理オプションとプラグマ HP C では、並列実行可能なコードを生成できます。このためには最適化オプションおよびプラグマのいずれか、または 両方を使用します。 3.2.6 スレッド・ローカル記憶領域 HP C では__thread キーワードを使用して、スレッド・ローカル記憶領域を指定します。つまり各スレッド別に静的データ 項目または外部データ項目のコピーを作成するために使用します。 3.2.7 Softbench HP C は、アプリケーション開発のための IDE (Integrated Development Environment: 統合開発環境) を提供する HP Softbench に含まれています。 5 3.2.8 プラグマ HP C にはさまざまなプラグマが用意されており、それぞれが最適化、共有ライブラリのパフォーマンスの向上、ソース・ コードのリスティング、整列などの様々な目的に使用されます。ANSI 標準では、プラグマの使用は処理系依存に分類 されています。そのため GNU CC のマニュアルでは、プラグマも使用可能ですが、__attribute__機能を使用する方が 望ましいと書かれています。大部分の HP C プラグマは、GNU CC ではサポートされていません。 3.3 GNU CC のみが提供する機能 3.3.1 無料のコンパイラ GNU CC はオープン・ソース・コミュニティにより開発される無料のソフトウェアです。ユーザーはこのソフトウェアを実行、 コピー、配布、研究、変更、および改良する権利を有します。 このソフトウェアには、次の 4 つの自由があります。 • 目的を問わず、GNU CC をインストールして実行する自由。 • GNU CC が機能する仕組みを研究し、個々の目的に合わせて改良する自由。ソース・コードが公開されているた め、このようなことが可能になります。 • ほかの開発者にも役立つように、コピーを再配布する自由。 • GNU CC を改良し、コミュニティ全体が恩恵を得られるように、その改良版を公開する自由。 3.3.2 さまざまなオペレーティング・システムにわたる高い移植性 GNU CC はプラットフォームから独立しており、さまざまな UNIX プラットフォーム、NT、および Linux 上で使用可能で す。このために、各プラットフォーム間で共通のインタフェースが提供されており、それぞれのプラットフォーム上で類似 のコンパイラ・オプションを使用できます。あるプラットフォーム上で GNU CC を使用してコンパイルしたアプリケーション は、大きな変更をすることなく別のプラットフォーム上で GNU CC を使用して簡単に再コンパイルできます。その他の GNU 開発ツール(gdb、gas、gmake など) も同様に、これらのプラットフォーム上で使用できます。さらに、あるプラッ トフォーム上の開発環境全体を、別のプラットフォーム上に移すことも可能です。このように、HP-UX 上の開発環境とし て GNU ツールを選択した場合は、HP-UX アプリケーションを NT や Linux などに簡単に移植でき、その逆も同様です。 プラットフォーム独立型のアプリケーションは、再コンパイルする手間だけで移植が完了します。このことは、オープン・ ソース・アプリケーションを HP-UX に移植する場合に特に便利です。複数のプラットフォームに対応する必要がある場 合は、多くのソフトウェア開発者が、開発ツールとして GNU CC を選択しています。 6 4.0 パフォーマンス 4.1 最適化 HP C および GNU コンパイラ・ツール・チェーンは、いずれも最大でレベル O3 までの最適化機能を提供できます。HP C とは異なり、GNU CC の場合はその性質上、HP-UX 向けのマシン依存型の最適化機能はそれほど多くありません。 HP C コンパイラは、HP-UX 上で実行されるアプリケーションに最適なパフォーマンスを提供するよう調整されています。 パフォーマンスの実現には、さまざまなオプションやプラグマ、および高度な最適化技法が使用されます。 付録 II の最初のセクション(7.1) では HP C のみが提供する最適化機能について、付録 II の 2 番目のセクション (7.2) では GNU CC のみが提供する最適化機能について説明しています。 4.2 ベンチマーク・パフォーマンス HP C は PA-RISC アーキテクチャを最大限活用するよう調整されているため、一般にパフォーマンスは GNU CC よりも 優れています。以下では、HP C および GNU CC について収集したパフォーマンス・データを示します。ここではベンチ マークとして、SPEC CPU2000 を使用しています。SPEC (Standards Performance Evaluation Corporation) ベンチ マークは、コンピュータ・パフォーマンスの測定に広く使用されています。SPEC ベンチマークは 2 つのセクションに分か れており、SPEC INT は整数のパフォーマンス測定に、SPEC FP は浮動小数点のパフォーマンス測定に使用されます。 測定に使用したマシンは HP 9000/785/C3000 (400 MHZ、メモリ 1024MB、CPU 1 基) で、オペレーティング・システ ムは HPUX-B.11.0 64 ビット版です。またコンパイラは、HP C B.11.01.20 および GNU Pro CC 2.9 を使用しています。 以下に示す数値は実行時間比率であり、GCC でコンパイルしたコードの実行時間/ HP C でコンパイルしたコードの実 行時間、を示しています。 N/A は、GCC ではコードを正しくコンパイルできなかったことを意味します(aCC が失敗した場合を除く)。 幾何平均比率は、GNU CC の幾何平均/ HP C の幾何平均、を示しています。幾何平均比率が 1 より小さい場合は、 GNU CC の方が HP C よりもパフォーマンスに優れており、値が小さいほど GNU CC の方が優れていることを意味し ます。逆に幾何平均比率が 1 を超える場合は、HP C の方が GNU CC よりもパフォーマンスに優れており、値が大き いほど HP C の方が優れていることを意味します。 ここでは、次の 7 つの異なるオプション設定で SPEC を測定しています。 1. 32 ビット GCC -O、HP C -O 2. 32 ビット GCC -O2、HP C -O 3. 32 ビット GCC -O3、HP C +O3 4. 32 ビット GCC -O -mpa-risc-2-0 -mschedule=8000、HP C -O 5. 32 ビット GCC -O3 -mpa-risc-2-0 -mschedule=8000、HP C +O3 6. 64 ビット GCC -O -mpa-risc-2-0 -mschedule=8000、HP C -O 7. 64 ビット GCC -O3 -mpa-risc-2-0 -mschedule=8000、HP C +O3 7 4.2.1 SPEC INT 2000 SPEC INT 2000 には、次の 12 個のベンチマーク・アプリケーションが含まれています。 • gzip 圧縮 • vpr FPGA 回路の配置と経路指定 • gcc C プログラミング言語コンパイラ • mcf 組合せ最適化 • crafty ゲーム(チェス) • parser 文書処理 • eon 計算機による可視化2 • perlbmk Perl プログラミング言語 • gap 群理論、インタプリタ • vortex オブジェクト指向データベース • bzip2 圧縮 • twolf 配置および経路指定のシミュレータ SPEC FP 2000 の結果 オプション 1 2 3 4 5 6 7 幾何平均比率 1.14 1.15 1.10 1.11 1.09 1.18 1.14 gzip 1.07 1.09 1.09 1.05 1.06 1.48 1.33 vpr 1.07 1.04 1.08 1.06 1.06 N/A N/A gcc 1.09 1.11 1.10 0.98 1.00 N/A N/A mcf 0.99 1.05 1.05 0.99 1.05 N/A N/A crafty 1.02 N/A N/A 1.02 N/A 0.97 0.94 parser 1.20 1.18 1.23 1.18 1.22 1.07 1.03 eon 1.74 1.72 N/A 1.53 N/A N/A N/A perlbmk 1.03 1.04 1.00 N/A N/A N/A N/A gap 1.22 1.22 1.16 1.16 1.11 1.12 1.15 vortex 1.07 1.07 1.12 1.08 1.11 1.20 1.15 bzip2 0.98 0.95 1.01 0.98 1.00 1.31 1.32 twolf 1.36 1.35 1.24 1.34 1.23 1.19 1.14 4.2.2 SPEC FP 2000 SPEC FP 2000 には、次の 4 つの C アプリケーションが含まれています。 • mesa 3-D グラフィックス・ライブラリ • art 画像認識/ニューラル・ネットワーク • equake 地震波伝搬シミュレーション • ammp 計算化学 SPEC FP 2000 の結果 オプション 1 2 3 4 5 6 7 幾何平均比率 1.03 1.02 1.03 0.96 0.94 1.29 1.29 mesa 1.20 1.16 1.18 1.14 1.11 1.41 1.26 art 1.00 0.99 0.96 0.89 0.90 1.48 1.48 equake 1.10 1.06 1.13 1.04 1.01 1.19 1.15 ammp 0.86 0.89 0.89 0.80 0.76 1.13 N/A a 2 eon は C++アプリケーションで、aCC および g++を使用してコンパイルされており、結果リストは参照用です。このアプリケーションを aCC の最新リリースの+O3 レベ ルでコンパイルすると、32 ビットおよび 64 ビットのいずれの場合もコンパイルに失敗します。この問題は将来のリリースでは修正される予定です。 a 研究によれば、HP C ではその処理時間の多くがライブラリ呼び出し sqrt() に費やされているのに対し、GNU CC ではライブラリ呼び出しではなく組み込みの sqrt() 呼び出しが使用されています。HP C の場合は+Olibcalls オプションを使用するとパフォーマンスが大幅に向上しますが(GNU CC の 1.05 倍高速)、これは GNU CC の組み込み関数に似た働きをします。 8 4.2.3 SPEC の結果 上の結果からわかるとおり、GNU CC では一部の最適化レベルおよびアプリケーションでコンパイルに失敗しています。 まず-O2 レベルから問題が生じ始め、64 ビット・アプリケーションではさらに問題が発生するケースが増えています。 一般に HP C は、特に整数アプリケーションの場合に、GNU CC よりも高速で、その差は最大で 35%にも上っています。 一方 GNU CC の方が多少高速な場合もありますが、その差は最大でも 5%程度です。 HP C を使用して SPEC の 32 ビット・アプリケーションをコンパイルする場合は、個々のベンチマーク・アプリケーション について、最も高速な実行可能ファイルを生成するためのオプションのセット(「ピーク・オプション」と呼ばれる) が用意 されています。これらのオプションを使用するとパフォーマンスは大幅に向上します。行った実験では、ピーク・オプショ ンを使用してコンパイルした実行可能ファイルは、-O オプションを使用した場合よりも 40%高速で、+O3 を使用した場 合よりも 35%高速でした。各アプリケーションのピーク・オプションは、SPEC の Web サイト(http://www.spec.org/) で 確認してください。HP-UX 上の GNU CC 向けのピーク・オプションはまだ特定されていません。 HP C は、GNU CC と比較してビルド時のパフォーマンスにも優れており、コンパイルおよびリンクのいずれも高速です。 -g のみを指定した場合、HP C のコンパイル時間は SPEC FP 2000 では GNU CC の 2.42 倍、SPEC INT 2000 では GNU CC の 1.80 倍高速になります。また-O2 のみを指定した場合の HP C のコンパイル時間は、SPEC FP 2000 で は GNU CC の 1.49 倍、SPEC INT 2000 では GNU CC の 1.66 倍高速になります。HP C のリンク時間は、GNU CC に比べて多少高速な程度です。 5.0 結論 GNU CC が HP-UX に移植されるまでは、長い間、HP C が HP-UX における唯一の C コンパイラでした。多くの場合、 この 2 つのコンパイラは相互に置き換え可能です(ただし、オプション名は多少異なっています)。HP C を使用すると HP-UX に最適なコードが生成され、PA-RISC アーキテクチャを最大限活用できます。一方 GNU CC には、複数のプ ラットフォームにわたる移植性に優れているという利点があります。ユーザーはそれぞれの目的に合ったコンパイラを自 由に選択できます。例えばパフォーマンスが重視されるアプリケーションについては、HP C の方が適しています。一方 複数のプラットフォーム上で実行する必要があり、パフォーマンスがそれほど重視されないアプリケーションについては、 GNU CC の方が適しています。また、HP C のみがサポートする特殊な機能を使用するアプリケーションの場合は、当 然ながら HP C が唯一の選択肢になります。パフォーマンスがそれほど重要でなく、主として HP-UX 上で開発するアプリ ケーションの場合は、どちらのコンパイラを使用してもよく、また両方のコンパイラを同時に使用することも可能です。 GNU CC の詳細は、http://www.gnu.org/software/gcc/gcc.html をご覧ください。 9 6.0 付録 I コンパイラ・オプション 6.1 共通のオプション 10 HP C オプション GNU CC オプション 説明 -Aa -Ac -c ansi –pedantic -traditional -c -C -D name -D name=def -dynamic -E -g -G -C -D name -D name=def -fpic または-Wl,-dynamic -E -g -pg -I dir -I dir -l x -l x -L dir -L dir -n -Wl,-n または-shared -fpic -N -noshared -o filename -Wl,-N -Wl,-noshared または-static -o filename -O、+O2 -p -O2 -p -q -Wl,-q -Q -Wl,-Q -s -S -U name -v -w -Wx, arg1 [,arg2,...] -z -Z +DA model -s -S -U name -v -w -Wx, arg1 [,arg2,...] ANSI への厳密な準拠を有効化します。 ANSI への準拠を無効化します。 ソースをコンパイルしてオブジェクト・ファイルを生成します が、実行可能ファイルにはリンクしません。 プリプロセッサによるコメントの削除を防止します。 プリプロセッサ変数 name を定義します。 プリプロセッサ変数 name を def の値で定義します。 PIC オプションを有効化します。 前処理のみを実行し、出力を標準出力に送ります。 デバッグ情報をオブジェクト・ファイル内に挿入します。 gprof プロファイラに必要な情報をオブジェクト・ファイル内に 挿入します。 dir に指定されたディレクトリをインクルード・ファイルの検索 パスに挿入します。 /lib/libx.a ライブラリおよび/usr/lib/libx.a ライブラリをリンク します。 デフォルト検索パス内のライブラリより前に、dir 内のライブラ リをリンクします。 リンカからの出力に、共有可能マークが付加されるようにしま す。 共有不能なコードを生成します。 静的にリンクされる実行可能ファイルを作成します。 実 行 可 能 フ ァ イ ル ま た は オ ブ ジ ェ ク ト ・ フ ァ イ ル の 名 前を filename に変更します。 レベル 2 で最適化します。 prof プロファイラに必要な情報をオブジェクト・ファイル内に挿 入します。 実行可能ファイルにデマンド・ロード可能マークを付加しま す。 実行可能ファイルにデマンド・ロード不能マークを付加しま す。 実行可能ファイルからシンボル・テーブルを削除します。 アセンブリ言語ソース・ファイルを生成します。 プリプロセッサ内で name の定義を削除します。 詳細モードを有効化します。 警告メッセージが出力されないようにします。 argN に指定した引き数を、サブプロセス x に渡します。 +DS model -Wl,-z -Wl,-Z -march=1.0 -march=2.0 -march=1.1 -mschedule=cpu_type +e -ansi -D_HPUX_SOURCE +f -fallow-single-precision +M -Wtraditional +r +sb -fallow-single-precision -fsigned-bitfield +uc -funsigned-char ヌル・ポインタの実行時参照を無効化します。 ヌル・ポインタの実行時参照を許可します。 特定バージョンの PA-RISC アーキテクチャ向けのオブジェク ト・コードを生成します。 特定の PA-RISC モデル向けの命令スケジューリングを実行し ます。 ANSI C モードでのコンパイル時に、HP の付加価値機能であ る、サイズ指定された enum 型、long long 型、long 型ポイン タ、組み込み呼び出しの引き数が不足している場合のコンパ イラによるデフォルト値の補充、$付き識別子の HP C 拡張な どを有効化します。 関数呼び出しと復帰を除き、式の評価時に浮動小数点演算 を倍精度に自動的に昇格させません。 -Ac でコンパイルした場合と-Aa でコンパイルした場合で動作 の異なるコードに関して、ANSI 移行警告を出力します。 浮動小数点演算を倍精度に自動的に昇格させません。 32 ビット・モードと 64 ビット・モードの両方で、ビット・フィール ドをデフォルトで符号付きにします。 無修飾の char データ型を符号なしにします。 HP C オプション GNU CC オプション 説明 +w n -Wa +W n1 +We n1 +Ww -Wno-name -Werror -Wname -W name +z,+Z -fpic 警告メッセージのレベルを指定します。n には 1~3 の値が入 ります。 特定の警告が出力されないようにします。 特定の警告をエラーにします。 -w または+w3 を使用してすべての警告が出力されないよう にしている場合に、特定の警告のみが出力されるようにしま す。 共有ライブラリ・オブジェクト・コードを生成します。 6.2 HP C 固有のオプション オプション -Ae -V -Wd,-a または+a -y -Y +DCapptype +dfname +DOosname +FPflags +help +hugesize +k +L +m +M1 +M2 +o +ubytes 説明 ANSI C への準拠、HP の付加価値機能(+e オプションの説明を参照)、および名前空間マクロ _HPUX_SOURCE を有効化します。 サブプロセスが標準エラー出力にバージョン情報を書き込むようにします。 リンカが要求する HP 提供のプレフィックス・ファイルを省略します。 HP SoftBench の静的解析ツールが使用する情報を生成します。 NLS (Native Language Support: 母国語サポート) を有効化します。 移植可能または埋め込みアプリケーション用のコードを生成します。 プロファイルベースの最適化で使用するプロファイル・データベースを指定します。 コンパイラのターゲットとなるオペレーティング・システムを設定します。 浮動小数点トラップを制御します。 Web ブラウザを起動し、HTML 版の HP C/HP-UX オンライン・ヘルプを表示します。 ヒュージ・データに対するしきい値を下げます。 プログラムが、共有ライブラリ内に物理的に配置されている大量のグローバル・データを参照 できるように、長いディスプレースメントのコード・シーケンスを生成します。 任意のプラグマ・リスティング指令およびリスティング機能を有効化します。 ソース・コード・リスティング内の識別子マップを表示します。 将来のリリースでサポートされない可能性がある機能について、プラットフォーム移行警告を 出力します。 コードをデータモデル ILP32 から LP64 へ移行することに伴う警告を出力します。 ソース・コード・リスティング内の 16 進コード・オフセットを表示します。 ポインタ境界を、1、2、4 バイトの位置になるよう制御します。 6.3 GNU CC オプション オプション -fall-virtual -fcheck-new -fcond-mismatch -fno-builtin -glevel -H -nodefaultlibs -nostartfiles -nostdlib -print-file-name= library -print-libgcc-file-name -print-prog-name= program -print-search-dirs -Q -specs=file -V version -Wname 説明 可能な限りのメンバ関数を、暗黙のうちに仮想関数として取り扱います。 割り当てられた記憶域の変更を試みる前に、演算子 new から返されたポインタがヌル値で ないことを確認します。 条件式の第 2 引き数と第 3 引き数に、異なる型を使用できるようにします。 前の先頭が 2 つのアンダースコアで始まっていない組み込み関数は認識しません。 デバッグ情報を要求し、どの程度の情報が必要かを level に指定します。 通常の処理に加えて、使用した個々のヘッダ・ファイルの名前を表示します。 リンク時に標準システム・ライブラリを使用しません。 リンク時に標準システム・スタートアップ・ファイルを使用しません。 リンク時に標準のシステム・スタートアップ・ファイルやシステム・ライブラリを使用しません。 リンク時に使用されるライブラリ・ファイル library の完全な絶対パス名を表示します(これ以 外の処理は一切行いません)。 ‘-print-file-name=libgcc.a’ と同じです。 ‘-print-file-name’ と似ていますが、この場合は‘cpp’ などのプログラムが検索されます。 構成されたインストール・ディレクトリの名前と、gcc が検索するプログラム・ディレクトリやラ イブラリ・ディレクトリの一覧を表示します(これ以外の処理は一切行いません)。 コンパイラに、コンパイル中の個々の関数の名前を出力させると共に、終了時には個々の パスについての統計情報を出力させます。 コンパイラが標準の‘specs’ ファイルを読み込んだ後で、file の処理を行います。 実行する GNU CC のバージョンを、version 引き数に指定します。 name に指定した警告メッセージを有効にします。 a GNU CC には、HP C のような警告レベルがありません。特定の警告名を付加して-W オプションを指定すると、その警告の出力を有効化できます。すべての警告を有 効化するには-Wall と指定します。 11 7.0 付録 II 最適化 7.1 HP C による最適化 オプション +O4 -fast +ESconstlit +I +P +pa +pal +pgmname +O[no]data_prefetch +O[no]entry-sched +O[no]extern[= name1, name2,..., nameN] +Bextern +O[no]fail_safe +O[no]fastaccess +O[no]moveflops +O[no]multiprocessor +O[no]pipeline +O[no]procelim +O[no]promote_indirect_calls +O[no]ptrs_to_globals [=name1,name2,...,nameN] +Oreusedir=directory 12 説明 レベル 3 のすべての最適化に加えて、アプリケーション・プログラム全体にわたる完 全な最適化を実行します。 このオプションは、コンパイラ・オプションのセットとして展開され、ビルド時間を増大 させることなく、アプリケーションの実行時性能を向上します。展開されるセットに含 ま れ る オ プ シ ョ ン は 、 +O3 、 +Onolooptransform 、 +Olibcalls 、 +FPD 、 +Oentryschedule、および+Ofastaccess です。これらのオプションは、コマンド行で -fast の後に指定したオプションにより上書きできます。 const 修飾されたオブジェクトとリテラルを読み取り専用メモリに保存します。 プロファイルベースの最適化データを収集するためのオブジェクト・コードを準備し ます。 プロファイルベースの最適化を実行します。 CXperf を使用したルーチンレベルのプロファイリングを要求します。 CXperf を使用したルーチンレベルおよびループレベルのプロファイリングを要求し ます。 オプティマイザーが使用する実行プロファイル・データ・セットを指定します。 メモリからデータ・キャッシュにデータを明示的にプリフェッチするために、HP C が最 内部のループに命令を挿入することを許可します。このオプションは、データ・ キャッシュ・ミス・オーバーヘッドの大きいアプリケーションで使用してください。デ フォルト値は+Onodata_prefetch です。 プロシージャの開始および終了シーケンスに対する命令スケジューリングを最適化 します。このオプションは最適化レベル 1~4 で使用可能です。デフォルト値は +Onoentrysched です。 このオプションを使用すると、実行可能ファイルまたは共有ライブラリ内のどのシン ボルへのアクセスを最適化可能にするかを指定できます。ただし、コンパイルされ るモジュール外にあるシンボルは最適化できません。デフォルト値の+Oextern は、 すべてのシンボルがコンパイルされるモジュール外にあり、最適化できないことを 意味します。 内部的な最適化エラーが発生した場合も警告メッセージを発行し、+O0 レベルでコ ンパイルを再開することにより、コンパイルを継続します。デフォルト値は +Ofail_safe です。 グローバル・データ項目へ高速にアクセスするための最適化を行います。最適化レ ベル 0~3 の場合のデフォルト値は+Onofastaccess、最適化レベル 4 の場合のデ フォルト値は+Ofastacess です。 条件付き浮動小数点命令のループ外への移動を可能/不可能にします。このオプ ションは最適化レベル 2~4 で使用でき、デフォルト値は+Omoveflops です。 マルチプロセッサ・マシン上の複数の異なるプロセス内で実行するのに適した形 に、実行可能ファイルまたは共有ライブラリを最適化するようコンパイラに指示しま す。このオプションは最適化レベル 2~4 で使用でき、デフォルト値は +Onomultiprocessor です。 ソフトウェア・パイプライン化を有効/無効にします。デフォルトでは、ソフトウェア・パ イプライン化が実行されます。このオプションは最適化レベル 2~4 で使用可能で す。 +Oprocelim を指定した場合は、アプリケーションで参照されていない関数は実行 可能ファイルから削除されます。+Onoprocelim オプションを指定した場合は、参照 されていない関数も実行可能ファイル内に保持されます。最適化レベルが 0~2 の 場合のデフォルト値は+Onoprocelim、最適化レベルが 4 の場合のデフォルト値は +Oprocelim です。 このオプションは、プロファイル・ベースの最適化により入手したプロファイル・デー タを使用して、可能な範囲で間接呼び出しを直接呼び出しに変更します。最適化さ れたコードは、直接呼出しができたかどうかをテストし、できていなければ間接呼び 出しを実行します。デフォルト値は+Onopromote_indirect_calls です。 ポインタを介して変更されることのないグローバル変数を指定することにより、オプ ティマイザーがコピーの伝搬および共通の部分式の削除を取り入れて、プログラム をより効率よく実行できるようにします。デフォルト値は+Optrs_to_globals で、この 場合は、グローバル変数がプログラム内の任意の箇所で変更される可能性がある と想定されます。このオプションは、最適化レベル 2~4 で使用可能です。 +O4 またはプロファイルベースの最適化を使用する場合に、中間オブジェクト・ファ イルから生成されたオブジェクト・ファイルをリンカが保存するディレクトリを指示しま す。デフォルトではオブジェクト・ファイルは再使用されません。 オプション 説明 +O[no]regreas-soc レジスタの再関連付けを可能/不能にします。レジスタを使用してアドレス表現の値 を追跡すると、配列参照のためのアドレス計算にかかるコストを減少できます。デ フォルト値は+Oregreassoc です。このオプションは、最適化レベル 2~4 で使用可能 です。 この+Onosideeffects オプションでは、グローバル変数を変更しない関数を指定しま す。デフォルトでは、オプティマイザーにより副次作用がないと判断できた場合を除 き、すべての関数に副次作用があると想定されます。関数に副次作用があると、オ プティマイザーによるグローバル変数の最適化に制約が生じます。このオプション は、最適化レベル 2~4 で使用可能です。 ポインタを符号付きの値として処理することによる最適化を実行するかどうかを指定 します。デフォルトでは最適化されません。このオプションは、最適化レベル 0~4 で 使用可能です。 PA-RISC 2.0 ターゲットの静的分岐予測を使用可能にします。この場合は動的予測 が無効化されますが、これはハードウェアの履歴機構を使用して、過去 3 回の実行 から将来的な分岐を予測するものです。静的分岐予測を有効にすると、分岐命令自 体の中にコード化された暗黙的なヒントに基づいて、各分岐が予測されます。デフォ ルトでは、動的予測が実行されます。このオプションは、最適化レベル 0~4 で使用 可能です。 このオプションを指定すると、特定のループがベクトル・ルーチン呼び出しに置き換 えられます。デフォルトではループのベクトル化は行われません。このオプションは、 最適化レベル 0~4 で使用可能です。 このオプションは最適化レベル 4 で使用でき、このオプション付きでコンパイルされ たファイルが、それらのファイルで定義されたグローバルな変数および手続きを直 接参照することを指定します。これは、グローバルな変数や手続きに対する未知の アクセスが存在しないことを意味します。デフォルト値は+Onowhole_program_mode です。 +O[no]sideeffects [= name1, name2,..., nameN] +O[no]signed-pointers +O[no]static_prediction +O[no]vectorize +O[no]whole_program_mode 7.2 GNU CC による最適化 オプション 説明 -Os 通常ではコード・サイズを大きくすることのないすべての“-O2” レベルの最適化が有 効化されます。また、コード・サイズを小さくする目的で設計されたその他の最適化も 実行されます。 関数からの復帰直後に、その関数呼び出しに対する引き数を常にポップします。 メモリ・オペランドに対する算術演算が実行される前に、オペランドをレジスタに強制 的にコピーします。 メモリ・アドレス定数に対する算術演算が実行される前に、定数をレジスタに強制的 にコピーします。 フレーム・ポインタを必要としない関数については、フレーム・ポインタをレジスタ内に 保持しません。 sibling および tail の再帰呼び出しを最適化します。 加算、減算、乗算に対する符号付きのオーバーフローに対するトラップを生成しま す。 inline キーワードを無視します。 ある関数に対する呼び出しがすべて統合され、かつ static 宣言されている場合でも、 実行時に呼び出し可能な個別の関数を出力します。このスイッチは、externinline 関 数には影響を与えません。 最適化が有効になっていない場合は、static const 宣言された変数を、たとえその変 数が参照されていなくても出力します。このオプションはデフォルトで有効化されま す。 レジスタに関数アドレスを入れず、ある決まった関数を呼び出す命令の1つ1つに、 その関数のアドレスを明示的に持たせます。 ループ強度の減少と反復変数の削除による最適化を実行します。 ジャンプの分岐先において、最初の比較に包含される別の比較があるかどうかを チェックすることによる最適化を実行します。 共通の部分式を削除するときに、ジャンプ命令のジャンプ先がほかの経路から到達 されないものを、ジャンプ命令を使って走査します。 このオプションは‘-fcse-follow-jumps’ と似ていますが、条件に応じてブロックをス キップするジャンプを CSE に追跡させます。 ループ最適化の実行後に、共通の部分式の削除を再度実行します。 ループ・オプティマイザーを 2 度実行します。 グローバルな共通の部分式削除のパスを実行します。このパスではグローバルな定 数およびコピーの伝播も行われます。 -fno-defer-pop -fforce-mem -fforce-addr -fomit-frame-pointer -foptimize-sibling-calls -ftrapv -fno-inline -fkeep-inline-functions -fkeep-static-consts -fno-function-cse -fstrength-reduce -fthread-jumps -fcse-follow-jumps -fcse-skip-blocks -frerun-cse-after-loop -frerun-loop-opt -fgcse 13 オプション -fdelete-null-pointer-checks -fexpensive-optimizations -foptimize-register-move -fregmove -ffunction-sections -fdata-sections -fcaller-saves -fmove-all-movables -freduce-all-givs -fno-peephole -fssa -fdce -fsingle-precision-constant 14 説明 グローバル・データフロー分析を使用して、不要なヌル・ポインタ・チェックを特定し、 これを削除します。 比較的コストのかかる、比較的重要ではない各種の最適化を実行します。 move 命令内で、およびその他の単純な命令におけるオペランドとして、レジスタとの 結合量を最大化するためのレジスタ番号の再割り当てを試みます。 ターゲット・マシンで任意のセクションがサポートされていれば、個々の関数または データ項目を、出力ファイル内の個別のセクション内にそれぞれ配置します。 関数呼び出しによって内容が破壊されるレジスタに値を割り当てられるようにしま す。これは、このような関数呼び出しの前後に、レジスタの待避命令と復元命令を追 加することにより実現します。 ループ内のすべての不変計算を、ループ外へ強制移動します。 ループ内のすべての一般誘導変数の強度を減少します。 マシン固有ののぞき穴の最適化をすべて無効にします。 SSA (Static Single Assignment) 形式で最適化を実行します。 SSA 形式でデッドコードの削除を行います。‘-fssa’ が指定されていることが必要で す。 浮動小数点定数を、倍精度定数に暗黙的に変換するのではなく、単精度定数として 取り扱います。 8.0 付録 III SPEC の結果 8.1 HP C の結果 幾何平均値: 対象となる数値と比較して、値が大きいほど HP C の方が優れていることを意味します。 コンピュータ: 9000/785/C3000、400 MHz、メモリ 1024MB、CPU 1 基 OS: HPUX-B.11.0 64 ビット コンパイラ: HP C B.11.01.20 オプション: 1. 32 ビット-O 2. 32 ビット+O3 3. 32 ビットピーク・オプション 4. 64 ビット-O 5. 64 ビット+O3 オプション 幾何平均 gzip vpr gcc mcf crafty parser eon perlbmk gap vortex bzip2 秒 比 秒 比 秒 比 秒 比 秒 比 秒 比 秒 比 秒 比 秒 比 秒 比 秒 比 オプション twolf 幾何平均 mesa art equake ammp 秒 比 秒 比 秒 比 秒 比 秒 比 1 230 614 228 523 268 351 314 632 285 484 207 954 189 593 219 949 190 821 134 719 264 699 215 1 910 330 228 1083 129 626 416 554 234 1024 215 2 236 618 226 502 279 351 313 608 296 468 213 829 217 N/A N/A 986 182 855 129 681 279 662 227 2 977 307 230 1070 131 648 401 530 245 1019 216 3 325 504 278 407 344 261 422 607 297 291 344 649 277 399 326 532 338 629 175 344 552 490 306 3 819 366 375 569 246 427 608 333 391 650 338 4 189 602 232 633 221 423 260 823 219 476 210 1807 99.6 754 172 1092 165 912 121 787 241 779 193 4 1384 217 257 789 177 663 392 631 206 722 305 5 192 617 227 592 236 409 269 784 230 486 206 1700 106 N/A N/A 1289 140 891 123 799 238 723 207 5 1441 208 262 758 185 674 386 596 218 726 303 15 8.2 GNU CC の結果 幾何平均値: 対象となる数値と比較して、値が大きいほど GNU CC の方が優れていることを意味します。 コンピュータ: 9000/785/C3000、400 MHz、メモリ 1024MB、CPU 1 基 OS: HPUX-B.11.0 64 ビット コンパイラ: GNU Pro CC 2.9 オプション: 1. 32 ビット-O1 2. 32 ビット-O1 -mpa-risc-2-0 -mschedule=8000 3. 32 ビット-O2 4. 32 ビット-O2 -mpa-risc-2-0 -mschedule=8000 5. 32 ビット-O3 6. 43 ビット-O3 -mpa-risc-2-0 -mschedule=8000 7. 64 ビット-O -mpa-risc-2-0 -mschedule=8000 8. 64 ビット-O3 -mpa-risc-2-0 -mschedule=8000 オプション 幾何平均 gzip vpr gcc mcf crafty parser eon perlbmk gap vortex bzip2 twolf 幾何平均 mesa art equake ammp 16 秒 比 秒 比 秒 比 秒 比 秒 比 秒 比 秒 比 秒 比 秒 比 秒 比 秒 比 秒 比 秒 比 秒 比 秒 比 秒 比 1 202 660 212 557 251 381 289 628 287 495 202 1142 158 1032 126 981 183 1000 110 768 247 683 220 1234 243 221 1297 108 629 413 608 214 884 249 2 210 644 217 553 253 345 319 626 288 494 202 1128 160 907 143 N/A N/A 949 116 778 244 683 219 1223 245 238 1236 113 555 469 575 226 822 268 3 202 670 209 545 257 388 284 661 272 N/A N/A 1130 159 1019 128 990 182 1004 110 770 247 663 226 1232 244 223 1255 112 622 418 590 220 912 241 4 212 654 214 536 261 351 313 669 269 N/A N/A 1110 162 879 148 N/A N/A 947 116 745 255 678 221 1206 249 241 1184 118 613 424 538 242 788 279 5 205 671 209 543 258 385 286 641 281 N/A N/A 1019 177 1027 127 985 183 996 110 760 250 666 225 1208 248 222 1258 111 624 417 597 218 912 241 6 216 654 214 530 264 352 312 636 283 N/A N/A 1015 177 865 150 N/A N/A 944 117 756 251 665 225 1203 249 245 1185 118 583 446 538 242 777 283 7 152 893 157 N/A N/A N/A N/A N/A N/A 463 216 1927 93.4 N/A N/A N/A N/A 1022 108 942 202 1023 147 1642 183 199 1115 126 978 266 750 173 817 269 8 158 818 171 N/A N/A N/A N/A N/A N/A 457 219 1749 103 N/A N/A N/A N/A 1022 108 918 207 955 157 1640 183 194 955 147 996 261 685 190 N/A N/A お問い合わせはカスタマー・インフォメーションセンターへ 03-5304-6660 月~金 9:00~19:00 土 10:00~18:00(日、祝祭日、年末年始および 5/1 を除く) HP-UX 製品に関する情報はhttp://www.hp.com/jp/hpux 記載されている会社名および商品名は、各社の商標または登録商標です。 記載事項は 2003 年 9 月現在のものです。 本書に記載された内容は、予告なく変更されることがあります。 本書中の技術的あるいは校正上の誤り、省略に対して、いかなる責任も 負いかねますのでご了承ください。 © Copyright2003 Hewlett-Packard Development Company,L.P. 日本ヒューレット・パッカード株式会社 〒140-8641 東京都品川区東品川 2-2-24 天王洲セントラルタワー PDFHS03-028-01