インテル® C++ コンパイラー Standard Edition for Embedded Systems with Bi-Endian Technology
この記事は、インテルの The Parallel Universe Magazine 24 号に収録されている、インテル® C++ コンパイラー Standard Edition for Embedded Systems with Bi-Endian Technology に関する章を抜粋翻訳したものです。
インテル® C++ コンパイラー Standard Edition for Embedded Systems with Bi-Endian Technology は、ビッグエンディアン・ソフトウェアの依存性によりレガシー・プラットフォームを使い続けている開発者を支援するために開発されたツールで、レガシー・アプリケーションをビッグエンディアン・アーキテクチャーからリトルエンディアン・アーキテクチャーへ簡単に移行することが可能です。アプリケーションのコードベース全体を書き直すのではなく、最小限のコード変更でコードを再利用し、ビッグエンディアン・アーキテクチャーとリトルエンディアン・アーキテクチャーで共通のコードベースを利用して、スムーズに移行することができます。
インテル® C++ コンパイラー Standard Edition for Embedded Systems with Bi-Endian Technology は、インテル® C++ コンパイラーの長所を活用して、最高のアプリケーション・パフォーマンスを提供します。
この記事では、レガシー・アプリケーションをリトルエンディアン・アーキテクチャーのシステムへ移行するときに注意すべき問題を含む、主な機能の概要を説明します。
はじめに
1990 年代前半から中頃は、ビッグエンディアンの RISC アーキテクチャー (SPARC*、MIPS*、PowerPC* など) が組込み市場を支配しており、コンピューター・ネットワーキング、テレコミュニケーション、セットトップ・ボックス、DSL、ケーブルモデムなどで広く使用されていました。実際、ほとんどのアプリケーションはこれらのシステム向けに開発されていました。しかし、より高速でスケーラブルな新世代の x86 アーキテクチャー・プロセッサーがリリースされたことで、多くの開発者は、これらのアプリケーションをリトルエンディアンの x86 アーキテクチャー・システムに移植する最適な方法のジレンマに直面することになりました。
アプリケーションは標準化された高水準言語 (C/C++) で開発されていますが、従来のコンパイラーは単一エンディアンのアーキテクチャー向けにのみコンパイルすることができます。ソースコードにエンディアン・バイト順の依存性がある場合、ターゲット・アーキテクチャーで実行したときに重大なランタイム問題が発生するため、あるエンディアンのアーキテクチャーから別のエンディアンのアーキテクチャーへの移植は問題となります。これらの依存性に対応するには、開発者は発見が困難なバイト順依存コードを特定して、エンディアン中立コードまたはターゲット・アーキテクチャーのエンディアンに対応するコードに手動で変換する必要があります。
パフォーマンスのほうが市場投入までの時間 (TTM) よりも優先される場合、手動変換による移行は、ミスを引き起こしやすくコストを上昇させます。アプリケーションがすでにエンディアン中立の場合は、エンディアンがあいまいな EEMBC* ベンチマーク・サンプルのようなアプリケーションの再コンパイルのみ問題になります。
エンディアンの依存性を含むアプリケーションの場合は、インテル® C++ コンパイラー Standard Edition for Embedded Systems with Bi-Endian Technology を使用すると、優れたパフォーマンスを保ちながら、正しいコードを生成することができます。移植では、関数プロトタイプや変数宣言などのデータ・エンディアンの種類を調整し、手動による移植プロセスには、ビットフィールド・アクセスやシフト操作などを扱う煩わしい作業が含まれます。
通常のインテル® C++ コンパイラーと異なり、インテル® C++ コンパイラー Standard Edition for Embedded Systems with Bi-Endian Technology は、コンパイラー使用モデルの一部である言語拡張 (後述) により依存データのエンディアン・バイト順を指定することで、開発者がソースコード・ベースのバイト順でアプリケーションをコンパイルできます。コンパイラーは、適切なランタイム実行のため、必要に応じてバイト順依存コードにバイトスワップ命令を挿入して、メモリーにあるネイティブ・エンディアン・アーキテクチャーのデータがターゲット・エンディアン・アーキテクチャーのバイト順に変換されるようにします。
インテル® C++ コンパイラー Standard Edition for Embedded Systems with Bi-Endian Technology は、開発者がビッグエンディアン・アーキテクチャーからリトルエンディアン・アーキテクチャーへアプリケーションを移行できるように特別に設計された、Linux* をホストとし、Linux* をターゲットとする、コマンドライン・ベースのスタンドアロン・コンパイラーです。
続きはこちら (PDF) からご覧いただけます。