2017-10-15 13 views
1

私はPHPでマルチコア最適化機能を研究しています。私のテストプログラムは4つのプロセスをフォークするので、各プロセスは前回と同じ2倍の時間で実行する必要があります。 コードは次のとおりです。 enter image description here 時には3つのコアを同期しようとすると、その負荷は約落ちる:pcntl_fork()の予期しないコア同期

$iters = 20000000; 

for ($c = 0; $c < 4; $c++) { 

    $pid = pcntl_fork(); 

    if ($pid == 0) { 

     for ($i=0; $i < $iters * (pow(2,$c)); $i++) 
      $x = $i << 2; 

     exit(0); 
    } 
} 

今すぐCPUコアの負荷のグラフを見た後、私は2つのコアがほぼ同時に仕事を終えることに気付きました同じ時に。

質問です - なぜPHPのテストスクリプトに従って、前のコアの2倍の時間がかかった後に、各コアがジョブを終了しないのですか?そしてなぜ2つのコアがほぼ同時に仕事を終えるのか?

マシン仕様(lscpu output)

CPU(S):4

オンラインCPU(S)リスト:コアあたり0-3

スレッド(S):2

ソケットあたりのコア数:2

ソケット:1

このエフェクトは、テストマシンに実際のコアが2つしかないことに関連している可能性があります。そのため、この影響はハイパースレッディングに関係していますか?

答えて

0

4つの物理コアを持つマシンで実験を繰り返す機会がありました。マシンのCPU仕様約lscpu出力:

CPU(S):4

オンラインCPU(S)リスト:コアあたり0-3

スレッド(S):1

ソケットあたり

コア(S):4

ソケット(S):1

実験実行しているとき、私は、このようなCPU負荷のグラフを持っている: enter image description here

をだから、このケースでは交差コア同期が存在しないことがわかると、各コアが前の約2倍の仕事がロードされています。 上記の効果は、テストマシンが4つの仮想コア(2つの物理x 2つのハイパースレッド)を持ち、4つの物理コアだけではなく関連していることを確認しました。

関連する問題