宇都宮大学 大学院地域創生科学研究科 工農総合科学専攻 横田・大津研究室

PearLab, Utsunomiya Univ.

Japanese/ English

鋼システム

私たちが研究・開発している「鋼」はマルチコア・マルチスレッドプロセッサ向けバイナリ変換システムです。

このページではマルチスレッドやバイナリ、鋼システムについて簡単に説明していきます。

最近のCPUはすごい

コンピュータの性能はすごい速さで向上しています。
数年前の最新モデルと、現在の最新モデルのスペックにはとんでもない性能差があります。
ケータイやスマホなどでも同じことが言えますね。

突然ですが、みなさんは「CPU」「コア(プロセッサ・コア)」という言葉をご存じでしょうか?
CPUは、パソコン内部でいろいろな計算をしてくれている人です。(人ではありませんが・・・)
ネットサーフィンしたりゲームをやったりできるのも彼ががんばってくれているからでっす。
そしてCPUは1つ以上のコアで構成されています。

最近のCPUのほとんどは複数のコアを搭載したマルチコアプロセッサです。(少し前はコアが1つのシングルコアプロセッサが主流でした・・・。いい時代になったもんだ)
今までは、1人(シングルコア)だったのが2人以上(マルチコア)になってきているのです。
シングルコアのときは1つのことしかできませんでしたが、マルチコアでは同時にいろいろなことができるようになりました。

わかりやすいようにイメージ図を描いてみました。


マルチにスレッドを実行します

それでは、マルチスレッド実行の説明をしようと思います。
「いきなり何のこっちゃ???」なんて思うかもしれません。
まぁ聞いてくださいな。

パソコンで何かするとき、司令塔であるCPUはそれに応じたお仕事をします。
このときのCPU利用の単位をスレッドと呼びます。
まぁお仕事のある程度の一区切り部分とでも思ってください。
これまでは一人だったので、次々と処理しなければいけないお仕事(スレッド)を一人で順番道りにこなしていました(シングルスレッド実行)。

しかし、先程述べたように二人(またはそれ以上)いると、次々とやってくるお仕事を割り振ってこなしていくことができます(マルチスレッド実行)。
一人より大勢で仕事をしたほうが明らかに早そうだよね。
かなり簡単な説明になってしまいましたが、基本はこんなところです。

スレッドについてはWikipediaとか参考にしてみるといいかもしれません。
Wikipediaのスレッドの項目

バイナリ読めて一人前

次は「マルチコア・マルチスレッドプロセッサ向けバイナリ変換システム」のバイナリについて説明しましょう。
バイナリとはコンピュータが直接解釈して実行できるように2進化したファイルのことです。
ですから、正式にはバイナリファイルといったほうがいいかも知れません。
でも、このホームページでは、以下バイナリはバイナリファイルということにします。
2進数とは、0と1だけで表現される数です。

なぜコンピュータは0と1だけの世界なのかというと、機械は2つの状態しか認識できないからなのです。
その2つの状態というのが電圧が高い(HI)か低い(LOW)かです。
それで、電圧が高い状態(HI)を1、低い状態(LOW)を0とするとあっという間に0と1の世界が作り出せます。

さて、コンピュータの世界が0と1から成り立っていることはなんとなくわかりましたか?
わかんなかったら、もう自分で本とか買って勉強してください。きっと将来役に立つと思います。
なんでも、自分で調べないと成長しませんよ!!
次は、コンピュータがどうやって動いているかを本当に軽~~~く説明します。

コンピュータはとっても便利なんですが、すっごいバカなので言われたことしかやりません。
だから、コンピュータにはいちいち命令してやらないといけないのです。
でも、命令されたことはめちゃくちゃ早くできるので○○とはさみは使いようということで使う側の腕にかかってくるわけですね。
で、命令をしてやらなきゃいけないのですが、ここで問題が1つ出てくるわけですね。

コンピュータの世界は0と1ですから、当然命令も0と1で書かれていないといけないわけです。つまりバイナリですね。
私が日本語以外わからないのと同じようなもので(英語なんて嫌いです!)、コンピュータもバイナリしかわからないのです。
でも、人が0と1の世界を理解するのはとっても大変ですから(できなくはないけどね)、普通は人が書きやすい言葉を使って命令(プログラム)を書きます。
この言葉を高級言語といいます(C言語とかJAVAとかがあります)。
そして、高級言語で書かれた命令をコンピュータがわかるようにバイナリに翻訳するわけです。
この翻訳することはコンパイルするといい、翻訳するソフトウェアをコンパイラといいます。

参考までにバイナリのイメージを載せておきます。これが読めて一人前です。


バイナリの例。コンピュータはこれを読んで処理を行うのです

鋼システムについて

いよいよ、『鋼』とはなにかを説明します。
トップにも書いてあるように鋼はマルチコア・マルチスレッドプロセッサ向けバイナリ変換システムです。
これまでの内容をきちんと読んできた人ならマルチスレッドやバイナリといった言葉の意味はもうわかりますね?
マルチスレッドプロセッサはマルチスレッド実行できるCPUのことです。
わからなかったらもう一度前の項目を読み直しましょう!

下の図が鋼システムのイメージになります。

鋼システムの概要

まず、バイナリコードを実行する前に解析を行い、マルチスレッド実行用の変換コードを生成します。
生成されたコードはマルチスレッドで並列に実行出来るよう変換されているのですが、これで十分とはいえません。実際にプログラムを実行しないと分からない情報もあるためです。
そこで、実行時の情報をフィードバックさせ、実行時にもマルチスレッド実行向けのコードに変換を行います。
こうして普通のバイナリコードを元に、並列実行を実現するのです。

では、どうしてこのようなシステムを作ろうとしているのかを説明していきましょう。
今、プロセッサの数が1つから複数個あるのが当たり前と なってきていてマルチスレッド実行による高速化が注目されています。 でも、プロセッサが増えたから簡単にマルチスレッド実行ができるわけではありません。 前の項目でもいったようにコンピュータはバカなのできちんとマルチスレッド実行向けにプログラムを書かないと複数のプロセッサを使えないのです。 でも、マルチスレッド実行向けにプログラムを書くのは実は結構難しいという問題があります。 そこで、マルチスレッド実行向けに命令を変換してくれる研究がいろいろと行われてきました。鋼もそのうちの1つというわけです。

そして、鋼の最大の特徴はバイナリに対して変換するシステムであることです。プログラマは普通は高級言語を使ってプログラムを書きます。それをコンパイルしてコンピュータが実行できるバイナリを生成するわけです。世の中にはたくさんのプログラムがあります。でも、コンパイル前の高級言語で書かれたプログラム(ソースコード)は入手できないことも多くてバイナリしか入手できないこと もあるわけです。だから、バイナリに対してマルチスレッド実行向けにプログラムを変換できるようになればどんなプログラムにも対応できるわけで、ものすごい便利なのです。