ソフトウェア移行設計ガイド

このガイドでは、PowerPC* (PPC) のコードからインテル® アーキテクチャー・プラットフォームへの移行手順と、インテル® ソフトウェア開発製品を使用するタイミングについてご案内します。状況に応じた決定も含まれているため、移行ソリューションおよび計画の大まかな流れとしてご利用ください。

各手順における詳細な設計情報については、インテル® エンベデッド・デザイン・センターまでお問い合わせください。

移行には、5 つの手順があります。以下の手順を踏んで、対象となるインテル® アーキテクチャー・プラットフォームでオペレーティング・システム (OS) の要件、ハードウェアの差分、ソフトウェア最適化に対応します。

手順 1 – 対象となるオペレーティング・システムにコードを移植する

アーキテクチャーの移行に、異なるオペレーティング・システムへの移植を伴う場合は、新しいオペレーティング・システムに移植してから、PPC ソフトウェアをインテル・アーキテクチャー・ハードウェアに移行してください。

この手順の目標は、ソフトウェアを新しい OS で予想どおりに正しく動作させることです。この手順では、対象 OS で動作する同じコードの安定性が求められるため、この段階でその他のソフトウェアの設計変更は行わないでください。詳細については、ホワイトペーパー:PowerPC* からインテル® アーキテクチャーへの移行 - パブリックの OS のセクションを参照してください。

手順 2 – 1 つのインテル® アーキテクチャー・コア上での正しくコードを実行する

インテル・アーキテクチャーのオペレーティング・システム関連のコードを更新します

現在および対象の OS が同じかそうでないかにかかわらず、デバイスドライバー、ライブラリー、ソフトウェア開発ツールがインテル・アーキテクチャーで利用可能かどうかを調べる必要があります。

デバイスドライバーまたはライブラリーがインハウスで開発されている場合は、インテル・アーキテクチャー用に書き直す必要があります。

サードパーティー製ドライバーまたはライブラリーが必要な場合は、相当するインテル・アーキテクチャー製品についてサードパーティー・ベンダーにお問い合わせください。

インテル・アーキテクチャー用の開発ツール インテルのツールについては、インテル® ソフトウェア開発製品のセクションを参照し、OS サポートについては、製品のウェブサイトを参照してください。インテル・アーキテクチャー用のオンチップ・デバッグ・ツールは、American Arium* または Macraigor* Systems LLC によってサポートされています (2009年2月)。

システム初期化の方法を選びます

BIOS – 設計が複数の標準インターフェイスと拡張スロットをサポートするか、幅広いプリ OS 機能を備え、複数のアプリケーションを実行できるメインストリームの OS を使用する場合には、BIOS や UEFI ファームウェアを選択します。

ブートローダー – スピード、サイズ、または具体的なシステム要件への最適化が要求される場合や、最小限のアップグレードまたは拡張機能をサポートする場合は、最小限または専用のファームウェア・スタック用のブートローダーを選択します。QNX* Fastboot Technology は、インテル® Atom™ プロセッサーでご利用になれます。

組み込み機器向けインテル・アーキテクチャーの設計では、CPU コア、メモリー、I/O、周辺機器、グラフィックスを初期化するファームウェア・スタックを搭載し、オペレーティング・システムのランタイムサポートを提供します。これらのファームウェア・テクノロジーの概要については、ホワイトペーパー:「組み込み機器向けインテル® アーキテクチャー設計におけるファームウェアの実装」を参照してください。

コードのいずれかの部分がアセンブリー言語で書かれている場合には、インテル・アーキテクチャーの命令に更新します

基本アセンブリー命令インテル® 64 および IA-32 アーキテクチャー・ソフトウェア・デベロッパーズ・マニュアルを使用して、基本アセンブリー命令を手動で更新します。

N.A.Software*/PowerPC*/AltiVec* - インテル®/SSE 変換ツールを使用して、ベクター指向コードを変換します。

Vector Signal Image Processing Library (VSIPL) – これは、信号および画像処理アプリケーション用の効率的な計算ミドルウェアです。VSIPL は、組み込み機器向け信号および画像処理ソフトウェア / ハードウェア・ベンダーのオープンスタンダードです。ハードウェア実装の詳細を抽象化するので、ソフトウェアを書き換えることなく、アプリケーションはプロセッサーの種類や世代を越えて移植できます。このツールは VSIPL ライブラリー、または変換を要するインハウス・ライブラリー用のプレーン C 版、C-VSIPL として提供されます。N.A.Software もカスタム・インハウス DSP ライブラリーをインテル・アーキテクチャーに移植します。

AltiVec.h include file for Intel® architecture – これは PPC AltiVec.h と同じですが、AltiVec ではなくインテル® SSE 命令セットを対象にしています。 このアプリケーションの DSP コードは変更ありません。

AltiVec assembler to Intel® assembler-compiler – このツールは、PPC AltiVec アセンブラーの比較的小さいブロックを C コードに変換し、これにより、SSE アセンブラー・コードにコンパイルできます。このツールは現在、開発中です。

ソフトウェアはプロセッサーのメモリー・アーキテクチャーを抽象化しますか?

はい – コードはエンディアン・ニュートラルです。変更は必要ありません。

いいえ – コードはリトルエンディアン・メモリー・アーキテクチャーに更新する必要があります。手動でコードのエンディアンネスの差分を更新します。必要な変更には、インテルのエンディアンネスに関するホワイトペーパーを参照してください。

表 1. PPC とインテル® ハードウェア・アーキテクチャーの違い

命令セット
装着手順 PPC およびインテル® アーキテクチャーの命令はかなり異なるものです。一部の命令については、1 対 1 (PPC 対 インテル® アーキテクチャー) の対応がありません。インテル® ソフトウェア開発マニュアルと命令セットに関する情報、およびアセンブリー・コードの移植に役立つツールを参照してください。
アライメント PPC の命令はすべて 4 バイトのサイズなので、4 バイト・バウンダリーでそろえなければなりません。インテル® アーキテクチャーの命令はサイズが異なるため、アライメントは不要です。
PPC では、ブールが 4 バイトです。インテル® アーキテクチャーでは、ブールは 1 バイトです。PPC のブーリアン・データを符号なしの 32 ビット整数に変更することで、コードを移植できるようになります。
ベクター指向命令 PPC は AltiVec* 命令を使用しています。インテル® アーキテクチャーはストリーミング SIMD 拡張命令 (SSE) を使用しています。AltiVec から SSE 命令への移行の詳細については、ベクター指向コードのセクションを参照してください。
処理
0 による除算 整数の 0 による除算については、PPC は単純に 0 を返します。インテル® アーキテクチャーでは、この処理を実行することは致命的です。コードは、除算処理を実行する前に必ず、0 の分母を確認しなければなりません。PPC とインテル® アーキテクチャーの 0 による浮動小数点除算処理には違いはありません。
ハードウェア・デバイス
ドライバーおよびライブラリー PPC ドライバーまたはライブラリーがサードパーティー・ベンダー製である場合は、相当するインテル® アーキテクチャー製品についてベンダーにお問い合わせください。デバイスドライバーまたはライブラリーがインハウスで開発されている場合は、インテル® アーキテクチャー用に書き直す必要があります。
チップセットおよびグラフィックス・ドライバーに関する情報は、PowerPC* からインテル® アーキテクチャーへの移行のデバイスドライバーのセクションを参照してください。
レジスター
アプリケーション・バイナリー・インターフェイス (ABI) によって指定された呼び出し規則 PPD では、引数がレジスターで渡されます。インテル® アーキテクチャーでは、引数がスタックで渡されます。
インテル® アーキテクチャーでは、PPC よりもレジスターが少ないため、ローカル変数もスタックで格納されます。
メモリー
バイトオーダー (エンディアンネス) エンディアンネスは、多バイトのデータがコンピューター・システムによってどのように表現されるかを示すものであり、システムの CPU アーキテクチャーで決まります。インテル® アーキテクチャーはリトルエンディアンを使用し、PPC はビッグエンディアンを使用して多バイトのデータを格納します。エンディアン・アーキテクチャーの違いは、ソフトウェアやデータをコンピューター・システム間で共有する場合に問題になります。詳細については、PowerPC* からインテル® アーキテクチャーへの移行のエンディアンネスのセクションを参照してください。
ビットフィールド メモリーにおけるビットフィールドの順番は、アーキテクチャー間で逆になる場合があります。詳細については、エンディアンネスに関するホワイトペーパーのビットフィールドおよびビットマスクのセクションを参照してください。

手順 3 – 1 つのインテル・アーキテクチャー・コア上でパフォーマンスにコードを最適化する

最終製品がマルチコア・アーキテクチャーで動作するとしても、パフォーマンス・チューニングの手法では、まずシリアルコードをシリアル・パフォーマンスに最適化する必要があります。

トップダウンの閉ループ・パフォーマンス手法を使用します。

該当する場合は、適切なインテル® ソフトウェア開発製品を使用します。

コード・パフォーマンスを解析します

インテル® VTune™ パフォーマンス・アナライザーを使用して、利用可能なコア間で処理が分散されるコードのホットスポットを正確に特定します。

インテル® スレッド・プロファイラーを使用してスレッドの不均衡を特定します。

代わるものを生成してコードの変更を実装します

インテル® C++ コンパイラーを使用します。機能を選択して、プロファイルに基づく最適化 (PGO) を使用した高度な最適化、実行可能なサイズ、消費電力を実装します。

インテル® パフォーマンス・ライブラリーを使用して、インテル・アーキテクチャーに高度に最適化された各種 API でパフォーマンスを高めます。

関数には、ビデオ、画像処理、圧縮、暗号化、オーディオ、音声認識、信号処理の関数と、デジタルメディアおよびデータ処理アプリケーション用のコーデック・コンポーネントの関数があります。

コードをデバッグします

インテル® スレッド・チェッカーを使用して、データレースやデッドロック状態などのスレッド化のバグを特定します。

オペレーティング・システム・ベンダー (OSV) も、ソフトウェア開発ツールセットを提供しているはずです。OSV に利用可能なツールを確認してください。

ハードウェアレベルでの低レベルデバッグや、高レベルデバッガーがタイミングを重視するコードに干渉する可能性がある場合には、オンチップ・デバッグ・ツール (JTAG) を使用します。

手順 4 – マルチコア・ソフトウェア設計のアップデートを適用する

インテル® マルチコア・プロセッサーは、インテル® Core™ マイクロアーキテクチャーをベースにしています。

マルチコアの恩恵を得る方法はいくつかあります。PPC の移行は、シリアルコード・ベースから始まる可能性が最も高いでしょう。したがって、対象となるソフトウェア設計では移行要件を満たせるソリューションを見極める必要があります。

SMP (Symmetric Multiprocessing) は、アプリケーションのパフォーマンスを高めることができ、プロセッサーの数とともに拡張するように設計することができます。

注: SMP では、コードで並列化の機会を特定するための解析と、マルチスレッド化を採用して並列化を導入するためのソースの書き換えが必要になります。CPU に負荷がかかるコードについては、SMP やマルチスレッド化を用いて並列処理用に再設計するのは困難なので、AMP (Asymmetric Multiprocessing) が代替ソリューションとなります。

AMP、SMP、仮想化の詳細については、ホワイトペーパー:PowerPC* からインテル® アーキテクチャーへの移行 - パブリックを参照してください。

アプリケーションに適したマルチコア設計を選択します

AMP – 移行要件として、アプリケーションやオペレーティング・システムに変更を加えられないということであれば、AMP を選択します。

SMP – 1 つのオペレーティング・システムを動かし、すべてのコアを同等のプロセシング・リソースとして使用し、アプリケーションの並列処理を実現して SMP システムの恩恵を受けられる場合には、SMP を選択します。SMP アフィニティーは、特定のタスクを特定のコアにピニングすることでデータの局所性を高め、マルチプロセッサー・システムにおけるキャッシュのヒット率を引き上げる場合があります。

仮想化 – システム統合、OS コロケーションのほか、セキュリティー、サービス品質 (QoS)、高可用性 (HA)、負荷分散といった機能によるさらなる効果を求める場合は、仮想化を選択します。

手順 5 – マルチコアのインテル・アーキテクチャー・パフォーマンスにソフトウェアを最適化する

設計が SMP であっても AMP であっても、マルチコア・ソフトウェアの設計には専用のソフトウェア開発ツールが必要です。

SMP では、ツールを用いることで、コードに並列化を特定・実装し、レース状態、デッドロック、スレッド負荷の不均衡といったスレッド化の問題を正確に特定することができます。複数のコアで複数のプロセッサーやスレッドを正しく効率的に同時実行することを目標とする場合を除いて、チューニング方法はユニプロセッサーと同じです。マルチコア・ツールを用いることで、並列化を実装し、並列化されたコードのチューニングやデバッグを実行することができます。

トップダウンの閉ループ・パフォーマンス手法を使用します。

該当する場合は、以下のインテル・ソフトウェア開発製品を使用します。

インテル® VTune™ パフォーマンス・アナライザー – このツールは、利用可能なコア間で処理が分散されるコードのホットスポットを正確に特定します。

Intel® C++ コンパイラー – マルチコア機能には、OpenMP や自動並列があります。

インテル® パフォーマンス・ライブラリー – インテル・アーキテクチャー・マルチコアに高度に最適化されたパフォーマンス・スレッド API により、並列化が向上します。

インテル® スレッド化ツール – インテル® スレッド・ビルディング・ブロックを使用してスレッドを実装します。インテル® スレッドチェッカーでスレッドのデバッグを行います。インテル® スレッド・プロファイラーにより、ワークロードの不均衡やスレッドのロック競合を特定します。

OSV も、マルチコア開発ツールセットを提供しているはずです。OSV に利用可能なツールを確認してください。

ハードウェアレベルでの低レベルデバッグや、高レベルデバッガーがタイミングを重視するコードに干渉する可能性がある場合には、オンチップ・デバッグ・ツール (JTAG) を使用します。

インテルへのお問い合わせ

  • ご質問サポートをご利用ください。サポートオプション >

    一般サポートチャット

  • 設計支援 >

    組み込み機器プロジェクトに関して、インテルの担当者からの連絡を希望。

  • ライブサポート

    英語でのチャットは、平日に終日受付
    簡体字中国語による受付可
    平日: 9 AM ~ 5 PM 北京時間

高度検索

詳しくはこちら