2017年2月25日土曜日

Very Long Instruction Word (VLIW)

平成28年秋季 問10. メモリインタリーブ

問題文「プロセッサの実行効率を上げる、VLIWの説明はどれか。」

解答群
ア. 依存関係のない複数の命令を、プログラム中で出現順序とは異なる順序で一つずつ実行する。
イ. 各命令フェッチ、デコード、実行、演算結果の出力などの各段階を並列に処理する。
ウ. 同時に実行可能な複数の動作をまとめて一つの命令として、同時に実行する。
エ. 複数のパイプラインを用いて複数の命令を同時に実行させる。

この問題というか、Very Long Instruction Wordというものを調べ始めて、何故だか壁にぶつかったような感じを受けた。

というのも、端的に「このようなところで使われているよ」というものが見つかりにくかったからだ。

一番内容がまとまっていたのは、大塚商会さんのこのサイトだった。

簡単にかみ砕いてみると、結局は複数の違う処理を行うプロセッサに対して、それぞれの処理を同時に実行できる組み合わせで一つの長い命令を作り、実行させるような処理をするマイクロプロセッサ、と言ってみてかみ砕けていないことに気がついた。

ここも大塚商会さんからだが、
********<引用ここから>********
一般に整数/論理演算ユニット向けの処理と、浮動小数点演算ユニット向けの処理、分岐処理ユニット用処理、ロード・ストアユニット向けの処理などの組み合わせからなる・・・
********<引用ここまで>********
とあるように、それぞれの得意とする処理をプロセッサ上に並列化させておき、それに対してそれぞれを一つの命令で同時実行することで処理性能を向上させようとする試みだったようだ。

過去形になっているのは、やはり大塚商会さんによると、
********<引用ここから>********
・・・1980年半ばごろ、さかんに行われたが、その後、下火になっていた。・・・2000年以降、米トランスメタのCrusoeや・・・が、VLIW型のアーキテクチャを採用して再び注目された。・・・(それぞれの会社で課題となっていたプログラムの再利用性や他のプロセッサとの互換性についてクリアにはなったものの)普及面では後れを取っている。
********<引用ここまで>********

つまり結局はあまり普及していないということだったようだ。

ざっくりとした理解なのだが、おそらく複雑な処理を前提として設計されたPC (Personal Computer)とは相反するプロセッサ省力化の考え方だったからだと思うのだが、例えば富士通さんでは「システムLSI用VLIWプロセッサコア(2001)」のように家電などの組み込みシステムなどに利用して省エネ設計を試みたりなど、どちらかというと用途を限定したところで採用されやすいもののように思われる。

ではなぜ普及面で後れを取ったのか?という疑問が当然出てくるのだが、プロセッサにある程度単純化した命令を出すために、コンパイラ側で一つの命令で複数の処理の組み合わせを考えてあげる必要があるところに課題が集中しているようで、以下のサイトで例示してくれているようになかなか一つの命令を都合よく作るのが難しいからだと言う風に理解した。

University of Massachusetts Amherst, College of EngineeringよりApplications of VLIW

上のリンクでは、いくつの命令で、どのような処理を組み合わせるかを実際に単純な例で置き換えて見せてくれるのだが、なかなか綺麗にまとまった組み合わせを作るのが難しいのがわかってもらえるかと思う(残念ながら英語のみのサイト)。

また、上の例で綺麗にまとまらない場合、ダミーの処理を命令に抱き合わせることで命令を固定の長さにするということをするらしい。が、それもまた無駄になるのとコンパイラの複雑さを助長しているようにも思われる。

また、これも英語のサイトだが、IBMさんが公開しているVLIWに関するリサーチのサイトも役に立つのではないかと思う。

IBM ResearchよりVLIW Architecture

結局色々調べた割には身にならない情報だったのはなんだか腰砕けである。

0 件のコメント:

コメントを投稿