次のページ 前のページ 目次へ

5. Linux に搭載されている付加プロセッサ

この方法は最近注目を浴びなくなってきていますが、並列計算機構を付加した Linux システムを使うと、他の並列処理方式では到底不可能な低いコストと 高いパフォーマンスを Linux で実現できます。問題は利用できるソフトウェアが ほとんどないことで、自分でかなりのことを行う必要があります。

5.1 優れたホスト、それは Linux PC

一般的に付加する形で搭載されているプロセッサは、ある種の機能を動作 させることに特化しています。

自分で多少なりとも作業するという事実にがっかりする前に、まず理解して おいて損しないことがあります。Linux PC に特定のシステムを採用するのは 難しいことかもしれませんが、Linux PC はこの種の利用のしかたに向いて いる数少ないプラットフォームの 1 つである、ということです。

PC がホストとして優れている理由は、主に 2 つあります。まず、安価で 簡単に拡張できることです。メモリやディスク、ネットワーク等の資源は 苦労なしに PC へ追加できます。それから、インタフェースが容易に取れる点 もあげられます。ISA や PCI カードを広く利用できるだけでなく、パラレル ポートのように手頃なパフォーマンスをインタフェースを拡張することなく 利用できます。IA32 は入出力空間を分割しているので、ハードウェアの 入出力アドレスの保護を個々の入出力ポートのアドレスのレベルに合わせる ことで、インタフェースを簡単に取ることができます。

Linux は優れたホスト OS でもあります。フリーに利用できるソースコードや 多数の「ハッキング」ガイドがきっと役に立ちます。Linux は、ほぼリアル タイムに近いスケジューリングができますが、真にリアルタイムに動くバージョン として http://www.rtlinux.org/ もあります。もちろん それよりも重要なのは、完璧な UNIX 環境を提供するということです。Linux は Microsoft の DOS や Windows で動作するように書かれた開発用のツールも サポートしています。MSDOS のプログラムは dosemu を使って、Linux のプロセスとして、保護された仮想マシン上で文字通り MSDOS を実行します。 Windows 3.xx に対する Linuxのサポートは、より精巧で、 wine( http://wine.dataparty.no/)のようなフリーソフト では、ほとんどのプログラムが UNIX の X 環境でかなり正しくかつ効率的に動き ます。

下記の 2 つのセクションでは、私が Linux でサポートした付加並列システム の例を見て行きます。

5.2 DSP してみましたか?

高性能な DSP(Digital Signal Processing)プロセッサの市場は盛況です。 普通これらのチップは特定のアプリケーションを対象とした組込みシステム 用に設計してありますが、素晴らしい付加並列コンピュータでもあります。 どうしてでしょうか?

  • Texas Instruments( http://www.ti.com/)の TMS320 や Analog Devices( http://www.analog.com/)の SHARC DSP ファミリーのような多くのチップは、「グルー」ロジックが無いもしくは ほんのわずかな数で並列マシンを構築できるように設計されている

    【訳註:グルー・ロジック(glue logic)とは、構成部品間のインタフェース となって両者間を仲立ちする論理回路やプロトコルを意味します】

  • 安価でありながら、1 つで 100 万命令、もしくは 100 万浮動小数点 演算の性能がある。基本命令ロジックのコストを入れても、DSP プロセッサは 1/10 のコストで PC 用のプロセッサに匹敵するパフォーマンスを出すことが 知られている
  • 電気をくわないかつ発熱も少ない。つまり、これらのチップをまとめ 使ってもこれまで使っている PC の電源で十分で、PC ケースの中に格納 しても PC 内がオーブンの中のようにはならない
  • DSP 命令セットのほとんどは、高水準言語用のコンパイラ(例えば、C 用) では解釈しにくく使いやすいとは言い難い。例えば、「ビット反転アドレッシ ング」がそれに当る。付加並列システムを使うと、大部分のホスト用コード を素直にコンパイルして実行し、数は少ないが最も時間を食うアルゴリズム を慎重に人間がコードをチューンして DSP で実行する
  • これらの DSP プロセッサは、実際は UNIX のような OS 向けに設計して あるわけではないし、プロセッサとして単独に汎用的なコンピュータとは言い 難い。例えば、メモリ管理のためのハードウェアを持たないものが多い。視点 を変えると、DSP プロセッサはより汎用的なマシンに搭載されてこそ実力を 発揮できる。Linux PC もその 1 つである

オーディオカードやモデムの中には、Linux のドライバでアクセスできる DSP プロセッサを搭載しているものがいくつかありますが、4 つ以上の DSP プロセッサ搭載する付加並列システムで効果が大きく見込まれます。

Texas Instruments の TMS320 シリーズ ( http://dspvillage.ti.com/docs/dspproducthome.html)は長い間に 渡って人気があり、簡単に TMS320 ベースで並列システムを構築でき、かなり 多くのシステムがすでに存在しています。 TMS320 には、整数演算専用のものと浮動小数点演算も可能なバージョンが あります。古い設計のものは、多少変わった単精度浮動小数点フォーマットを 採用していますが、新しいモデルは IEEE フォーマットをサポートしています。 旧 TMS320C4x(別名 'C4x)は、TI 独自の単精度浮動小数点フォーマットを使って、 80 MFLOPS を達成します。それに引き換え 'C67x は、単精度浮動小数点演算で 1 GFLOPS を達成し、IEEE の浮動小数点を使った倍精度計算では、420 MFLOPAS を達成します。これには VelociTI という VLIW ベースのチップ・ アーキテクチャを使っています。これらのチップをマルチプロセッサとして構成 するのは容易であるだけでなく、単独のチップである 'C8x マルチプロセッサは、 IEEE の浮動小数点で 100 MFLOPS を実現します。このプロセッサは、2 もしくは 4 つの整数演算用の子 DSP をともなう RISC プロセッサです。

【訳註:VLIW(Very Long Instruction Word 超長命令)は、コンパイラに よって依存関係のない複数の命令(整数演算や浮動小数点演算、メモリアクセス等) を 1 つの長い命令として、それを並列に実行する方法です。プロセッサの構造が 単純になる反面、コンパイラが複雑になります。ただし VLIW な プロセッサである Transmeta の Crusoe のように、コンパイラをいじることなく VLIW を効率よく 動かそうとする方法も出てきています。詳しくは Crusoe Technology を参照してください】

この他の DSP プロセッサファミリーで、最近かなりの割合で付加並列システム に利用されてきているものに SHARC(別名、ADSP-2106x)という Analog Devices ( http://www.analog.com/)から出ているものがあります。これらの チップは、6 つのプロセッサで共有メモリを利用したマルチプロセッサで、 グルー・ロジックを必要としません。これより大規模なシステムも構築でき、 その場合は、6 つの 4 ビットのリンクとチップを利用します。大規模な システムの大部分は、軍事用のアプリケーションをターゲットにしているようで、 少々割高になっています。しかし、Integrated Computing Engines, Inc.( http://www.iced.com/)は、GreenICE という小さな PCI カードを 2 枚 セットにしたおもしろい製品を出しています。このユニットは、16 個の SHARC プロセッサをアレイ状に配置しており、IEEE フォーマットの単精度計算をピーク 性能で約 1.9 GFLOPS 出せます。 GreenICE は、5,000 ドル以下のコストです。

私見ですが、付加並列 DSP は、もっと Linux 並列処理のコミュニティ から注目を浴びてもいいと思っています…。

5.3 FPGA と 再構成可能な論理計算回路

並列処理がひたすら速さを求めるなら、カスタム・ハードウェアではなぜ いけないのでしょうか? そうですね、それに対する回答は、あまりにも コストが高いこと、開発するのに時間がかかり過ぎること、またと少しでも アルゴリズムが変更になると役に立たなくなってしまうこと等があげられ ます。しかし近年、電気的に再プログラミング可能な FPGA(Field Programmable Gate Array)の進歩によって、これらの欠点の大部分が無意味になってきて います。現状ではゲート密度も高くなっていて、1 つの FPGA だけで単機能の プロセッサを十分に作成可能です。FPGA の再設定(再プログラミング)も敷居 が低くなってきており、アルゴリズムがある段階から次の段階へ移行するような 場合でも、無理なく再設定できます。

これは根気強い人向けの方法です。FPGA を設定するのには、VHDL のような ハードウェア記述言語を使わざるを得ません。それと同様に Linux ホスト システム上で、FPGA とのインタフェースのために低レベルなコードを書く必要 があります。しかし FPGA のコストは低く、特に精度が低くてかまわない整数 データの演算に適しています(実際、SWAR の小規模なサブセットとして具合が良い)。 FPGA は、複雑な演算をデータを入力するのと同じくらいの速度で実行できます。 例えば、シンプルな FPGA ベースのシステムでもスーパーコンピュータより高速 に遺伝子データベースの検索を実現できています。

FPGA ベースの専用ハードウェアを作成している企業はいろいろありますが、 素晴らしいサンプルが、下記の 2 つの企業から出ています。

Virtual Computer Company は Xilinx の SRAM ベースの FPGA を使って、 動的に再設定可能な 製品をいろいろ出しています。8 ビットと 16 ビットの 「Virtual ISA Proto Board」 ( http://www.vcc.com/prod1.html)は、2,000 ドル以下で購入できます。

Altera の ARC-PCI(Altera Reconfigurable Computer, PCI bus) ( http://www.altera.com/cgi-bin/indexhtml.pl) は、Virtual ISA Proto Board と同じタイプのカードですが、Altera の FPGA と ISA ではなく PCI バスを使っている点が異なります。

設計ツールやハードウェア記述言語、コンパイラ、ルーター、マッパ等は、 Windows や DOS 上のみで動作するオブジェクト・コードが付いてくる場合 がほとんどです。ホスト PC 上に DOS や Windows のディスク・パーティション を残しておいて、必要になったらリブートするという手も使えますが、Linux 上で dosemuwine のような Windows のエミュレータ を使えば、これらのソフトウェアの多くが動作します。

【訳註:マッパ(mapper)は、回路を FPGA の論理ブロックに分割し、FPGA 上でその回路を実装する働きを持ちます】


次のページ 前のページ 目次へ

[