ハードウェアマルチスレッド
さて、先ほど解説したスーパースカラーのように、シングルコアプロセッサであってもプロセッサ内には並列化されている部分がいくつかあります。
また、ここでは解説しませんでしたが、パイプライン実行も一種の並列実行とみなせますし、名前だけ紹介したメモリコントローラなどもプロセッサとは独立して動作できるので、これも一種の並列実行であるといえます。
このように考えると、1つのコアの中にも並列実行できる個所がかなりあることが分かります。しかし、すべてのプログラムが常に並列実行できるわけではありません。
プログラム中の依存性や例外などが原因で処理が並列に実行がされない場合があります。その場合、本来ならば並列実行できるだけの能力を持つプロセッサ内のハードウェアが有効活用されないことになります。
なんとかしてこれを有効活用できないだろうか、ということで考えられたのが、ハードウェアマルチスレッドという仕組みです。ハードウェアマルチスレッドは、architectural stateを並列化したものです。ハードウェアマルチスレッドのブロック図を図6に示します。
architectural stateには、OSのスレッドを実行するために必要な状態がすべて、例えば、全レジスタの値、プログラムカウンタ、メモリ保護の状態などが含まれています。
ここにはメモリ保護の状態なども含まれているため、ハードウェアマルチスレッドを実装したプロセッサ上では、一度に複数のOSスレッド、プロセスを実行することができます。
ここで実行される複数のスレッドは実際には同じプロセッサコア上で動作するのですが、1つのスレッドでは使い切れなかった余分なリソースを活用できるようになるため、シングルスレッドでの処理と比較して速くなる場合があるのです。
例えば、Intelのハードウェアマルチスレッド技術であるHyper-Threading Technologyを実装したPentium 4は、Hyper-Threading Technologyを実装しないPentium 4に比べ、30%の性能向上があるといわれています。
ハードウェアマルチスレッドは、ソフトウェアから見た場合、マルチコアやマルチプロセッサと同じように見えます。その利用方法も同じで、OSが用意するインターフェイスを使います。
次回は、Intel Core i7やCell/B.E.など、具体的なプロセッサにみられる並列ハードウェアを紹介します。
3/3 |
Index | |
現代のプロセッサと並列実行 | |
Page1 マルチプロセッサ概説 いまどきのプロセッサの構成 スーパースカラー |
|
Page2 Single Instruction Multiple Data マルチコア・マルチプロセッサ |
|
Page3 ハードウェアマルチスレッド |
Think Parallelで行こう! |
- プログラムの実行はどのようにして行われるのか、Linuxカーネルのコードから探る (2017/7/20)
C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。最終回は、Linuxカーネルの中では、プログラムの起動時にはどのような処理が行われているのかを探る - エンジニアならC言語プログラムの終わりに呼び出されるexit()の中身分かってますよね? (2017/7/13)
C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。今回は、プログラムの終わりに呼び出されるexit()の中身を探る - VBAにおけるFileDialog操作の基本&ドライブの空き容量、ファイルのサイズやタイムスタンプの取得方法 (2017/7/10)
指定したドライブの空き容量、ファイルのタイムスタンプや属性を取得する方法、FileDialog/エクスプローラー操作の基本を紹介します - さらば残業! 面倒くさいエクセル業務を楽にする「Excel VBA」とは (2017/7/6)
日頃発生する“面倒くさい業務”。簡単なプログラミングで効率化できる可能性がある。本稿では、業務で使うことが多い「Microsoft Excel」で使えるVBAを紹介する。※ショートカットキー、アクセスキーの解説あり
|
|