EPIC (Explicitly Parallel Instruction Computing) インテルと 
 Hewlett-Packardが共同開発したCPU Itaniumで使用されている 
  64ビットCPUのアーキテクチュア。 
 基本的に現代の高速CPUはパイプラインという考えを取っています。昔の 
 CPUは命令を1個ずつ読み出しては、必要なデータをメモリーから取り出し 
 ては処理を行い、その結果をまたメモリーに格納するという繰り返しで動 
 作していました。要するにとにかく一人でもくもくと色々な作業を手順通 
 りに実行していたわけです。 
  
 『コンピュータは何万個もの部品から出来ているのに同時に動作している 
 のは1個のみである』 
 とは昔のコンピュータのアーキテクチュアを指して言われた言葉です。 
 さて、パイプラインというのは命令がひとつの管の中を転がっていくよう 
 に処理をする機構です。 
 ひとりの人が手紙を書いて宛名を書き、切手を貼って郵便局に持っていく 
 というのではなかなか効率が上がりませんので、手紙を書く作業、宛名を 
 書く作業、切手を貼る作業、郵便局に持っていく作業、というように分け 
 て、それぞれを別の人が担当して、流れ作業にすることにより、処理速度 
 を上げるというわけです。 
 この流れ作業に従事する人の人数をパイプラインの段数といいます。 
 例えば8段のパイプラインといえば、作業工程が8個に分かれていることを 
 表します。 
  
 (Itaniumのパイプラインは IPG/FET/ROT/EXP/REN/WLD/REG/EXE/DET/WRB 
 という10段になっています) 
 パイプラインの次に出てきたスーパーパイプラインという手法は作業工 
 程を細分化することにより、パイプラインの動作効率を改善しました。 
  
 例えば、手紙を書く作業といっても、文面を考える作業と文字を筆記する 
 作業とに細分化できます。切手を貼る作業も切手を水で濡らす作業と封筒 
 に押しつける作業とに細分化できるかも知れません。こういう考え方によ 
 り、処理の無駄時間が更に減って全体の高速化が可能です。 
  
 次に出てきたスーパースケーラーという手法では、このパイプラインを 
 複数備えることを考えました。 
 上記の手紙の発送の作業でいえば、作業グループを複数作り、それぞれに 
 同時動作をさせるわけです。当然速度が速くなりますが、グループを2倍 
 にすれば必ずしも速度が2倍になるわけではありません。 
  
 要するに、2つの作業グループがどちらも手紙の発送だけやっていられた 
 ら楽なのですが(これは1980年代のスーピーコンピュータで利用された 
 ベクトル演算の考え方)実際には、パイプラインには色々な命令が流れ 
 てきます。一方のグループに渡された仕事が督促状の発送で、一方のグル 
 ープに渡された仕事が入金の処理であったら、気を付けてやらないと既に 
 入金した人にまで督促状を送ってしまう可能性があります。 
  
 実際のスーパースケラーでは、命令を例えば強制的に4個単位で区切り、 
 それが同時に実行して構わないか判断した上で、各パイプラインに作業を 
 割り当てるということを行っています。そのため運が良ければ1サイクル 
 の間に4命令とかが実行されますが、運が悪いと1命令しか実行できない 
 かも知れません。AMDの話題のCPU Athlonは9本のパイプラインを持つ、 
 スーパースケーラーCPUです。これだけの本数のパイプラインを効率よく 
 制御するのはかなり難しいはずです。 
 こういった一連のパイプライン方式にとって、最大の敵は実は「分岐命令」 
 です。つまり、コンピュータの命令は常に順序よく実行されているのでは 
 なく、ときどき条件によって Jump し、別の場所に飛んで命令を実行しつ 
 づけるということを行います。 
  
 これをやられると、折角パイプラインの前行程で準備した作業が無駄にな 
 ることもあります。たとえば、手紙の発送作業でいうと、手紙を発送する 
 ために10人くらいの人が流れ作業をしていたら、突然社長がやってきて、 
 「手紙はやめて今回は電子メールで情報を送ることにしたから」などと 
 宣言することもあります。 
  
 すると、せっかく書いたもののまだ投函していなかった手紙が無駄になり 
 ます。コンピュータの命令の実行においては、こういう処理の分岐による 
 無駄は頻繁に発生します。 
 そこで、よく行われるので例えば分岐予測というのがあります。これは 
 ループ処理などを想定したもので、「そろそろ処理が中断して、あちらの 
 作業をすることににるかも知れないぞ」と思ったら、その準備を始めると 
 いうものです。予測が外れると余計効率が悪くなりますが、現在の最先端 
 のCPUはそんなに予測を間違えません。 
  
 また投機実行というのは、分岐の予測をしたら、準備するだけでなく、 
 実行までしてしまう!!というものです。 
  
 たとえば「そろそろ社長が来て、あの書類をコピーしてくれと言いそうだ」 
 と思ったら、言われる前にコピーして用意しておく、というものです。 
  
 予測が外れると痛いですが、当たればとても効率がよくなるので「投機」 
 と言われます。実際には予測はかなり当たります。 
 ということで、やっと EPIC のシステムを説明できる準備ができました。 
  
 EPICは基本的には上記、パイプラインを何本も持ったスーパースケーラー 
 の構造を想定しています。 
 ただし、従来のスーパースケーラーが命令の実行時点で命令を解析して、 
 パイプラインの割り振りを行っていたのに対して、EPICではコンパイルし 
 てオブジェクトを作る段階で割り振りのための参考情報を埋め込んでおき 
 ます。それによりCPUの処理自体に集中するとともに、回路を単純化する 
 ことで速度向上を図っています。 
  
 なお、ここで、どのパイプラインを使うかを完全に決めておく方法をVLIW 
 といい、スーパーコンピュータでは使われていた技法ですが、それでは 
 CPUが変わるとプログラムをコンパイルし直さなければならないので汎用 
 ソフト向きではありません。EPICでは、両者の折衷案を取って、パソコン 
 に搭載できるCPUにしました。 
 また、分岐の処理ついても、分岐した先の命令列(パス)に predicate とい 
 う符号を振っておき、各パスは同時実行できるように!!!整理しておきます。 
 そして、実際に分岐条件が確定した時に、正しいパスの分の処理を有効に 
 してしまうのです。 
  
 結果的には分岐は形式上発生しないことになります。SFのパラレルワー 
 ルドのような考え方ですね。 
  
 このように、EPICにおいては、従来のCPUの設計思想からはかなり発想の 
 転換が行われたものが多いようです。 

EPO (Emergency Power Off) 停電発生などの緊急時に、いそいでシステム  を止め、マシンを落とすこと。一般には企業システムにおいて、UPS  からの信号により、この処理を行う。特にデータベースの更新が矛盾し  ないように気を付ける必要がある。