ハードウェア

従来よりも18倍高速&効率的な64コアの並列処理専用チップ搭載CPU「Swarm」をMITが開発


MITの研究者が、マルチコア(メニーコア)のCPUを従来比18倍も速く計算できる並列プログラム用の専用ハードウェアチップを搭載するCPU「Swarm」を開発しました。

Parallel programming made easy | MIT News
http://news.mit.edu/2016/parallel-programming-easy-0620

MIT's Swarm chip architecture boosts multi-core CPUs
http://www.gizmag.com/mit-swarm-parallel-processing/43942/

MIT creates chip that makes parallel programming faster, easier
http://www.newelectronics.co.uk/electronics-news/mit-creates-chip-that-makes-parallel-programming-faster-easier/142378/

MITのコンピュータ科学・人工知能研究所の研究者は、「Swarm」と呼ばれる並列プログラムを効率的に書くことのできる専用チップを内蔵するCPUを発表しました。Swarmの大きな特長は、数多くのCPUコアを搭載するにもかかわらず、並列処理を極めて効率的に行える点にあります。


CPUの演算速度を向上させるためにはクロック数を上昇させる手法が用いられてきましたが、約10年ほど前からクロック数改善はほぼ限界に達しており、複数のコアで並列的に演算する「マルチコア」化が進められてきました。しかし、複数のCPUコアが並列的に演算処理を行うときに、他のコアが処理しているメモリデータにアクセスする必要がある場合には、たとえタスク処理が完了したとしても他のコアのタスク処理を待つ必要があり、無駄な待機時間である「オーバーヘッド」が生じてしまい、処理速度が大きく下がるという欠点がありました。このマルチコア化にともなうオーバーヘッドの弊害は、コア数が増えれば増えるほど大きくなり、また、並列プログラムが複雑化するために、「演算速度向上のためにコア数を増やせば増やすほどよい」というような簡単な図式は成り立たなかったとのこと。

Swarmは、タスクの優先順位を決める専用のハードウェアチップを搭載することでマルチコアによる並列処理を効率化しています。タスクにはタイムスタンプがつけられるため優先度の高いタスクから処理が行われます。これによって、あるコア処理を終えたタスクが、他のコアによって処理されて上がってきたタスクよりもタイムスタンプが早い場合には、コンフリクトを生じることなく即座にメモリに結果を書き込めるとのこと。また、優先度の高いタスク(大きなタスク)は、自分のタスク内に優先度の低い小さなタスクを作り出すことで、並列処理の効率性を高める仕組みも採られています。

Swarmはタスク優先度を処理するための専用チップを搭載しているため、並列プログラムを書く作業量が極めて少なくなるそうで、専用チップを備えていない従来型のマルチコアCPUでの並列プログラムに比べて、プログラミングの作業量を劇的に軽減できるというメリットも兼ね備えています。

MITの研究者たちは、64コアのSwarmを試作して6つのアルゴリズムを使って演算試験を行ったところ、従来通りのマルチコアCPUに比べて最大で18倍高速であることが確認できたとのこと。また、そのときに必要だった並列プログラムのコードの量はわずか10分の1だったという結果を明らかにしています。Swarm開発を主導したダニエル・サンチェス准教授は、「マルチコアCPUの開発が思うように進まない一因は、並列処理プログラムを効率的に書くことが難しいことにあったのではないか」と考えており、Swarmはこの問題を解消して、膨大な数のコアを持つ汎用CPU開発の道を開く可能性があると述べています。

・関連記事
「36コアチップ」の試作品をMITの研究者が開発 - GIGAZINE

知られざるCPUの過去40年における性能向上と進化の歴史 - GIGAZINE

Intel CPUの10年分の進化を数値で徹底的に比較するとこうなる - GIGAZINE

IBMが10nm世代を飛び越えて7nmプロセスの半導体チップ試作に成功しムーアの法則が堅持される見込み - GIGAZINE

「ムーアの法則」の終焉は何を意味するのか? - GIGAZINE

中国産のCPUのみを使ったスーパーコンピュータ「神威」が世界最速に - GIGAZINE

in ハードウェア, Posted by logv_to