architect

スレッドって何?をアセンブリレベルで理解する。そしてマルチコアとは。

投稿日:

まず

スレッドっていうのは、

CPUのレジスタを一掃して、一旦スタックに記憶しておいて、

別の処理をした跡で (このレジスタ退避処理をコンテキストスウィッチとよぶ)

再び、以前の処理を再開するために、スタックから情報と処理状態をレジスタに戻して

処理を再開させることだ。

 

 

これがスレッドで、

単一コアでこれのなんの意味があるのか?それはI/Oとか関連する処理の場合は

大幅に、これだけで、処理時間の短縮になる。

 

なるほど、

コンテキストスウィッチがスレッドの本質だということがわかった。

さらに

 

じゃあ、複数コアだったら、マジの並列処理が可能なのか?

はい、そうです。

さらに最近のCPUって1コア2スレッドみたいな

表現してる

と思いますが

これは、おそらく、レジスタがたくさんあって、もともと

スレッド2つくらいを並列処理できる、機構になっているんだと思う。

ただ、コアは一項だしクロックもコアひとつで、一つなので、マジの並列処理ではなくて、

コンテキストスウィッチがスレッド2つならいらない

くらいのものである。

 

以上です。

 

参考

スレッドの仕掛け1をよむと、コンテキストスウィッチとアセンブリの関連がわかる

4コア上で、OpenMPスレッド並列の効果が思った程、上がらない!?のレジスタ<->メモリ間の移動コストのほうが高いんじゃね?という1説。も面白い

上記リンク、きっかけでOpenMPで並列処理を、勝手につくってくれる、ライブラリがあるこを知った

 

-architect

Copyright© CTOを目指す日記 , 2024 All Rights Reserved.