Cell Broadband Engine 用の IBM SDK for Multicore Acceleration Version 3.1 (以下 SDK 3.1) がリリースされました。多数の機能強化、機能追加が行われ、また一部の機能についてはプロトタイプ提供が終了しています。本記事では、SDK 3.1 の内容を、SDK 3.0 からの変更点を中心にご紹介いたします。
SDK 3.1 では、倍精度演算能力が強化されたプロセッサ PowerXCell8i が搭載された IBM BladeCenter QS22 が新たにサポートされるようになりました。この組合せにより倍精度演算においても Cell プロセッサの極めて高い演算能力を活用することが可能になりました。
SDK 3.1 では、 Red Hat Enterprise Linux (RHEL) 5.2 および Fedora 9 がサポートされています。SDK 3.0 では RHEL 5.1 および Fedora 7 がサポートされていましたので、 SDK 3.1 のリリースにより最新のオペレーティングシステム環境での使用が可能になりました。
- プロトタイプ GCC
- SDK 3.1 では、 GCC 4.3.2 ベースのコンパイラがテクノロジープレビュー版として提供されています。
- LAPACK ライブラリ
- CBEA 向けに最適化が施された LAPACK ライブラリが新たに追加されています。単精度実数および倍精度実数の行列の因数分解、特異値分解、固有値計算のための関数が提供されています。
- 三次元 FFT ライブラリ
- SDK 3.1 では、プロトタイプレベルのコードとして単精度および倍精度の三次元 FFT ライブラリが提供されています。
- セキュリティライブラリ
- 新たにプロトタイプの暗号ライブラリが追加されています。
- GCC toolchain
- GCC コンパイラのバージョンが 4.1.1 に、Binutils のバージョンが 2.18.50 に、Newlib のバージョンが 1.16.0 に、GDB のバージョンが 6.8.50 になりました。これらの toolchain によって、以下のような性能や機能面での向上がもたらされています。
- クロス環境/リモート環境でのデバッグが容易になるような改善が施されました。具体的にはホストシステム側にもデバッグターゲットのライブラリなどが存在していなければならないという必要条件がなくなりました。
- 新たな GNU Profiler (gprof) が SPU コードのためにサポートされています。
- オーバーレイマネージャの Runtime 性能が改善されています。
- 大きなデータエリアを SW マネージドキャッシュを経由してアクセスできる有効なアドレス空間へと自動的に移します。
- Newlib が統合された SPU timer ライブラリを含んでいます。
- GCC SPU コンパイラ (spu-gcc) により新たな自動ベクタ化拡張を利用することができます。
- GFortran が VMX 組み込み関数のためにサポートされています。
- Eclipse IDE
- Eclipse IDE は PTP (Parallel Tools Platform) へと移植され、 Eclipse 3.3 および CDT 4.0 がサポートされています。またより良いコード補完機能など IDE の使い勝手が向上しています。
- PDT および PDTR パフォーマンスツール
- PDT および PDTR パフォーマンスツール機能の使い勝手や性能が向上しています。具体的には、追跡したイベントの新規グループを PDT コードの変更なしに追加可能、グループ毎の簡易レポート機能、 Eclipse IDE への統合などが挙げられます。
- DaCS
- Fortran バインディング、PDT trace hooks、C および Fortran で DaCS を使ったデモンストレーションのサンプルコードが追加されています。また Cell/B.E. 側での DaCS のパフォーマンスが改善され、SPU ライブラリのサイズが小さくなっています。プロトタイプレベルだった DaCS for Hybrid (x86_64) がベータレベルになり、アクセラレータ側のプロセスを開始する際にローカルとリモートのファイルを混在させることが可能な機能が加えられ、トポロジー構成ファイルの使い勝手が改善されています。
- ALF
- SDK 3.1 では、新たに軽量タスクモデルが追加されました。このタスクモデルは LIBSPE2 の上の薄いレイヤーとなっており、 SPE や共有 ALF ハンドルを通じてより柔軟な制御を望むライブラリ開発者たちのために提供されています。 ALF 内部の性能が向上しており、ALF ライブラリを使ったコードとハンドチューンされたコードの性能のギャップを埋めるような最適化が施されています。また SDK 3.1 では SDK 2.1 でプロトタイプとして提供されていた work block barrier が再度提供されています。
- サンプルコード
- DMA などのサンプルコードが改善されています。
- BLAS ライブラリ
- SDK 3.1 では、 BLAS ライブラリに含まれている単精度実数もしくは倍精度実数を用いた関数に更なる最適化が施されています。
- 乱数生成ライブラリ
- SDK 3.1 でモンテカルロ乱数生成ライブラリは製品レベルのコンポーネントとなりました。
- 一次元 FFT / 二次元 FFT ライブラリ
- SDK 3.1 で一次元および二次元 FFT ライブラリは製品レベルのコンポーネントとなり、性能/精度/機能が向上しました。10000 個以上の要素を持つベクターと単精度矩形行列が新たにサポートされています。
- SIMD Math ライブラリ
- SDK 3.1 では、 SIMD Math ライブラリの性能および精度が向上しています。
- MASS/MASSV ライブラリ
- SDK 3.1 では、最適化された倍精度用の関数が MASS/MASSV ライブラリに加えられています。
- フルシステムシミュレータの sysroot イメージ
- SDK 3.1 では、フルシステムシミュレータの sysroot イメージが Fedora 9 用に更新されています。
- XL C/C++ Multicore Acceleration Single Source Compiler
- XL C/C++ Multicore Acceleration Single Source Compiler (以下 XL C/C++)は、SDK 3.0 まではプロトタイプ版が含まれていましたが、SDK 3.1 では含まれなくなりました。今後 XL C/C++ は IBM 製品としてリリースされる予定です。
- IBM フルシステムシミュレータ
- IBM フルシステムシミュレータは SDK から抜き出されましたが、alphaworks の Web サイト http://www.alphaworks.ibm.com/tech/cellsystemsim からダウンロードすることができます。
- Cell SDK インストールスクリプトの GUI オプション
- SDK 3.0 でサポートされていた --gui オプションが SDK 3.1 ではサポートされなくなりました。そのため GUI による SDK インストールを行う際には Pirut ではなく gnome-packagekit もしくは Yumex を使うことになります。
多数の新機能のなかでも特に注目の機能についてピックアップして詳しくご紹介します。
SDK 3.1では、新たに SPU 暗号ライブラリ (SPU Cryptographic Library) の利用が可能になりました。このライブラリでは、非対称暗号方式として RSA と DSA 、対称暗号方式では AES, DES 、一方向ハッシュ関数には MD5 , SHA-1 , SHA-2 がサポートされています。これらの暗号方式に対して、 OPENSSL を利用した PPU サンプルプログラムと SPU に暗号処理をオフロードしたサンプルプログラムが付属しており、それぞれの処理を比較することが可能です。表 1 に本暗号ライブラリの基本性能をまとめます。また、 SDK 3.0 より擬似アイソレーションモード (実際のアイソレーションモードにはなりません) をサポートしており、アイソレーションモードでのアプリケーション実行の様子を試すことができます。これらのパッケージは Extras パッケージとして提供されています。
表 1. 暗号ライブラリ基本性能
| SPE (Gb/sec) | Leading Brand CPU with SIMD (Gb/sec) | SPE Performance Advantage | |
|---|---|---|---|
| AES ECB Encrypt - 128 bit key | 2.059 | 1.029 | 2.002 |
| AES CBC Encrypt - 128 bit key | 0.795 | 0.968 | 0.821 |
| AES ECB Decrypt - 128 bit key | 1.499 | 1.035 | 1.448 |
| AES CBC Decrypt - 128 bit key | 1.507 | 0.966 | 1.560 |
| MD5 | 2.448 | 2.862 | 0.855 |
| SHA-1 | 2.116 | 0.902 | 2.347 |
| SHA-256 | 0.854 | 0.518 | 1.649 |
さらに詳細な解説はこちらをご覧ください。
ALF の新しいフレームワークとして、軽量タスク (Lightweight Task) が追加されました。
軽量タスクは、基本的には LIBSPE2 の薄いラッパーであり、非常に少ないオーバーヘッドで SPE を制御することが可能になります。さらに、 LIBSPE2 を直接使用する場合に必要な PPU 側の様々な処理、たとえば SPU の個数分だけ pthread を作成しなければならないことや、 PPE から SPE への指令を含んだ「コンテキスト」の転送処理、または処理完了をチェックする機構などをすべてサポートしていますので、これまで毎回書いていたお決まりのコードを書くことなく大変短いコードで SPE を使い始めることができます。
代わりに、これまでの ALF の特徴であったデータ転送の自動実行やワークブロック間の自動リダクション機能などは使用できません。軽量タスクでは、これらの仕事は DMA 転送や同期機構を用いてプログラム側で対処することになります。
リスト1. ALF 軽量タスクの PPE コード
#include <stdlib.h>
#include <alf.h>
int main(int argc __attribute__ ((unused)), char *argv[] __attribute__ ((unused)))
{
alf_handle_t handle;
alf_task_desc_handle_t task_desc_handle;
alf_task_handle_t task_handle;
alf_init(NULL, &handle);
alf_num_instances_set(handle, 1);
alf_task_desc_create(handle, 0, &task_desc_handle);
alf_task_desc_set_int64(task_desc_handle, ALF_TASK_DESC_ACCEL_LIBRARY_REF_L,
(unsigned long long) "alf_hello_world_lts_cell_spu.so");
alf_task_desc_set_int64(task_desc_handle, ALF_TASK_DESC_ACCEL_IMAGE_REF_L,
(unsigned long long) "alf_hello_world_lts_spu");
alf_task_desc_set_int64(task_desc_handle, ALF_TASK_DESC_ACCEL_LTS_MAIN_REF_L,
(unsigned long long) "task_main");
alf_task_desc_set_int32(task_desc_handle, ALF_TASK_DESC_TASK_TYPE,
ALF_TASK_TYPE_LIGHTWEIGHT);
alf_task_desc_set_int32(task_desc_handle, ALF_TASK_DESC_MAX_STACK_SIZE, 4096);
alf_task_create(task_desc_handle, NULL, 1, 0, 0, &task_handle);
alf_task_finalize(task_handle);
alf_task_wait(task_handle, -1);
alf_exit(handle, ALF_EXIT_POLICY_FORCE, 0);
return 0;
}
|
リスト2. ALF 軽量タスクの SPE コード
#include <stdio.h>
#include <alf_accel.h>
int task_main(void *p_task_ctx __attribute__ ((unused)),
int instance_id __attribute__ ((unused)),
int number_of_instance __attribute__ ((unused)))
{
printf("Hello World from task_main!\n");
return 0;
}
ALF_ACCEL_EXPORT_API_LIST_BEGIN;
ALF_ACCEL_EXPORT_API("", task_main);
ALF_ACCEL_EXPORT_API_LIST_END;
|
SDK 3.1 の内容をご紹介しました。SDK の新しい機能でますます使いやすくなった Cell/B.E. をどんどん利用してください。
学ぶために
- RSS feedを使って、Cell Broadband Engine関連記事の更新をチェックしましょう。(
developerWorks Japan RSS フィードについてはこちら.)
- Cell/B.E.プログラミングを学ぶには、次のdeveloperWorksシリーズに挑戦しましょう:
- "Programming high-performance applications on the Cell/B.E. processor"
- "PS3 fab-to-lab"
- "The little broadband engine that could"
- The IBM Semiconductor Solutions Technical Library のCell Broadband Engine documentation セクションには、ダウンロードマニュアルや、仕様書などたくさんの有益な情報があります。
- developerWorks ニュースレターに登録すると、最新の開発者向けニュースと Cell/B.E. に関する最新情報を毎週メールで受け取れます。ニュースレターで Cell/B.E. 関連のニュースを受信するには、登録する際にPower Architecture® にチェック・マークを付けてください。
製品や技術を入手するために
- IBM SDK for Multicore Acceleration 3.1を入手しましょう。また、Cell/B.E. 資料のライブラリーにも情報が網羅されています。
- GNU Toolchain 4.3のテクノロジープレビュー版はBarcelona Supercomputing Center から入手することができます。
- 全ての Cell/B.E. 関連記事、ディスカッションフォーラム、ダウンロードなどは IBM developerWorks の Cell Broadband Engine resource center にあります。
- Cell/B.E.カスタム製品やカスタムプロセッサを用いたソリューションのお問い合わせはこちら: Contact us about Cell Broadband Engine technology.
議論するために
- ディスカッション・フォーラムに参加してください。
- 質問はIBM developerWorks Power Architecture Cell Broadband Engine discussion forum へ投稿してください。フォーラムに投稿された興味深い問題と答えは、定期的に集められたこちらの"Forum watch" ブログシリーズでハイライトされています。
- Cell Broadband Engine/Power Architecture ブログにアクセスして、Cell/B.E. やその他の Power Architecture 関連技術に関するニュース、ダウンロード、資料、イベント通知を参照してください。人気の高い"Forum watch"ブログ・シリーズ (Q&A 要約) と"FixIt"技術更新情報、それに Infobomb の技術要約も用意されています。


