4

マルチコアシステムがどのように機能するか、そして多くのコアを持つシステムのために効率的なプログラムをプログラムする方法を理解しようとしています。これは非常に難しいトピックですが、可能な限り最速のソリューションに非常に興味があります。

まず第一に、私は糸脱毛がどのように機能するかを理解しようとしています。ほとんどの場合、マルチスレッドによってパフォーマンスが劇的に向上することは明らかです。このページによると、これはマルチスレッドの仕組みです。

ここに画像の説明を入力してください

しかし、なぜNスレッド間の切り替えがNスレッドを1つずつ実行するよりも速いのでしょうか。CPUが1つしかないシステムでスレッド化はどのように機能しますか?

次に、ポイントまたはマルチコアプログラミングとは何ですか?ポイントはコア間でスレッドを分割し、コア間でタスクを分割することだと思いますか?しかし、どうすれば4つのCPUのシステムで8つのスレッドを均等に分割できますか?

CPU間でスレッド/プロセスを分割するためにプロセッサアフィニティcpu_affinity )を使用する必要がありますか?4つのCPUを搭載したシステムでpthread_createを使用して4つのスレッドを作成し、各CPUで各スレッドを実行できますか?

ハイパースレッディングはどのように役立ちますか?それはまったく役立ちますか?マルチコアシステムにCPUキャッシュプログラミングをどのように使用できますか?

たとえばMySQLのような大きな古いプロジェクトでは、多くのCPUシステムの利点を十分に活用するのが難しいのはなぜですか?

この問題の理論と、 Linuxシステムの実用的なソリューション/例/プロジェクト/書籍/記事(Cを使用)にも興味があります。

私はこれがますます重要なトピックであることを知っており、私が興味を持っているのは私だけではないことを願っています。

4

1 に答える 1

5

N個のスレッドを切り替えることとN個のスレッドを1つずつ実行することの違いは、スレッドが一時的にそれ以上前進できない場合に発生することです。N個のスレッドを切り替えて、それらのスレッドの1つが一時的に進行できない場合、たとえば、データがディスクから読み取られるのを待っている場合、別のスレッドが進行する可能性があります。それらを完全に順番に実行すると、スレッドがディスクI / Oの完了を待機している間、CPUが無駄になります。

ハイパースレッディングは、CPUコア実行リソースを最大限に活用できるようにすることで役立ちます。たとえば、スレッドが浮動小数点演算を実行していない場合、そのコアの浮動小数点ユニットは無駄になります。ハイパースレッディングを使用すると、別のスレッドがそれらの実行ユニットを使用できます。

典型的な最新のコアでは、操作には多くのクロックサイクルが必要であり、一度に多数の操作が進行中です。これは、コアには通常、特定の瞬間に使用できない多くの追加の実行リソースがあることを意味します。ハイパースレッディングを使用すると、これらの実行リソース(バレルシフタ、加算器、論理ユニット、分岐ユニットなど)のより高い割合を使用できます。通常、ハイパースレッディングはパフォーマンスを10%から15%向上させる可能性があります。スレッドは相互に実行リソースを盗んだり、キャッシュの使用を相互に汚染したりするため、メリットは大きくありません。

CPUキャッシュは自動的に使用され、通常、使用するために特別なことをする必要はありません。おそらく最も一般的な例外は、偽共有またはキャッシュのピンポン処理を処理することです。

于 2012-05-13T21:06:07.257 に答える