私はPHPでマルチコア最適化機能を研究しています。私のテストプログラムは4つのプロセスをフォークするので、各プロセスは前回と同じ2倍の時間で実行する必要があります。 コードは次のとおりです。 時には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つしかないことに関連している可能性があります。そのため、この影響はハイパースレッディングに関係していますか?