プログラムの並列処理時のコーディングを大幅に軽減するだけでなく、プログラムの実行速度も劇的に向上させる、そんな夢の様なチップが開発されたみたいです。マルチスレッドプログラミングは、マルチコアCPUには欠かせないコーディングテクニックのようです。現在主流の4コア8スレッドCPUだと、8つの命令を同時実行出来るようになるので、理論的には同一クロックのシングルコア2スレッドCPUの4倍の処理能力があることになりますが、実際にはそんなにプログラムの実行速度が高速化されることは稀なようです。今回、Massachusetts Institute of Technology (マサチューセッツ工科大学)の Computer Science and Artificial Intelligence Laboratory (CSAIL、計算機科学/人工知能研究室)の研究者が新たに、Swarm(スウォーム)と呼ばれる、新型チップのデザインに成功したようなのです。
マルチコアは理論上は高速
Chip makes parallel programs run faster with less code
In theory, a program on a 64-core machine would be 64 times as fast as it would be on a single-core machine. But it rarely work out that way. Most computer programs are sequential, and splitting them up so that chunks of them can run in parallel causes all kinds of complications.
「理論上、64コアマシン上のプログラムはシングルコアマシンの64倍高速ということになります。しかし、プログラムはまれにしかそのように動きません。殆どのコンピュータプログラムは遂次的で、プログラムを切り分けて並行して実行しようとすると、さまざまな面倒な問題を引き起こします。」
順次的なプログラムを無理に切り分けて並列処理しようとすると、色々厄介な問題が生じてしまうようです。コーディングテクニックが必要になってくるんでしょうが、マルチコアCPUの特徴を生かして、プログラム実行速度の高速化実現は、今のところはプログラマーの腕次第と言った感じなのかもしれません。PS3に使われているCPUのCellがプログラマ泣かせのCPUと聞いたことがありますが、ハードがソフト作りの足を引っ張ったら、ソフト開発者にそっぽを向かれても仕方ありません。
並列プログラムを高速化するチップ
In simulations, the researchers compared Swarm versions of six common algorithms with the best existing parallel versions, which had been individually engineered by seasoned software developers. The Swarm versions were between three and 18 times as fast, but they generally required only one-tenth as much code — or even less. And in one case, Swarm achieved a 75-fold speedup on a program that computer scientists had so far failed to parallelize.
「擬似実験で、研究者は、6つの一般的なスウォーム版アルゴリズムと、熟練ソフト開発者によって個々に書かれた現存している最高の並列版とを比較しました。スウォーム版は3~18倍高速なだけではなく、たった10分の1、あるいは、それより少ないコードが通常必要なだけでした。そして、1つのケースでは、科学者達が今までのところ並列処理に失敗していたプログラム対し、スウォームは75倍のスピードアップを達成しました。」
スウォームやば過ぎです。こんなチップが量産された暁には、連邦などあっという間に叩かれてしまうのではないでしょうか?まぁ、ガンダムネタの冗談はさておいて、物凄い新型チップです。夢のチップと言っても決して過言ではないでしょう。
多コアシステムはコーディングが困難
“Multicore systems are really hard to program,”「マルチコアシステムはプログラムを組むのが本当に大変です。」
素人目に見ても大変そうですが、スウォームには色々な細工が施してあって、マルチスレッドプログラミンが厄介な問題に直面すること無しに、普通のマルチコアCPUよりも簡単に書けるようになっているらしいです。今まではプログラマが気を使わなければいけなかった、メモリへの書き込み優先順位や割り込み処理などを、チップが勝手にやってくれるので、その分コードが飛躍的に短くて済むようになるみたいな感じです。Bloom filter(ブルームフィルタ)と呼ばれている、割り当てられたスペースにデータを詰め込んでいき、それの内容についてのyes/noの質問に答えるフィルターで、もし非常に多くのアドレスがフィルターの中にロードされた場合、時々、”はい、今そのデータを保存中です”を示す偽陽性を発しますが、絶対に偽陰性は発しません。スウォームは、このブルームフィルタを使って、メモリアクセス違反識別をしているようです。プログラマが一旦タスクの優先順位さえ付けておけば、後は勝手にチップがタイムスタンプによる優先順位順にプログラムを実行していき、メモリアクセス(メモリの読み込み書き込み)も優先順位順に実行されるので、メモリアクセスコンフリクトが起きないらしいです。スウォームチップを使えば、難しいマルチコアプログラミングが、今までとは比べ物にならないくらい簡単にできてしまうそうです。まさに夢のチップと言えるでしょう。