並列処理を行うときは常に、いくらかのオーバーヘッドがあります (これは、特にデータ構造のロックと呼び出しのブロックの場合に重要です)。小さなバッチ ジョブの場合、1 つのコアまたは 2 つのコアで実行すると、そのオーバーヘッドが発生しないため、はるかに高速になります。
ジョブのサイズはわかりませんが、システムの最大コア数 (通常は、常にプロセッサー数を 2 倍にします)。編集: 4 つのコアしか使用していないように見えるので、1、2、および 4 で時間を計ってください。
コア数ごとに最大 32 回の試行のタイミング結果を実行し、信頼区間を取得すると、すべてのコアで実行することが適切かどうかを確実に判断できます。ジョブに時間がかかる場合は、試行回数を 5 回程度まで減らしますが、試行回数が多いほど信頼度が高くなることを覚えておいてください。
詳しく説明するには:
スチューデントの t 検定は、基本的に「このコア数の平均時間を計算しましたが、それは真の平均ではありません。真の平均を取得できるのは、無数のデータ ポイントの平均が得られた場合のみです。計算された真の平均は、実際には計算された平均の周りにある間隔にあります」
有意性の t 検定は、基本的に 2 つのデータポイントの真の平均付近の間隔を比較し、それらが有意に異なるかどうかを示します。したがって、ある平均時間が別の平均時間よりも短い場合がありますが、標準偏差が十分に高いため、実際に短いとは言えません。真の平均は同じかもしれません。
したがって、この検定の有意性を計算するには、次のようにします。
- タイミング実験を実行する
- コア数ごとに:
- 平均と標準偏差を計算します。標準偏差は、母集団分散の平方根である母集団標準偏差である必要があります。母分散は (1/N) * summation_for_all_data_points((datapoint_i - mean)^2) です。
これで、各コア カウントの平均偏差と標準偏差が得られます: (m_1, s_1)、(m_2, s_2) など。 - コア カウントのすべてのペアについて: - t 値を計算します: t = (mean_1 - mean_2) /(s_1/sqrt(#データポイント))
ここで示した t 値の例では、コア数 1 の平均タイミング結果がコア数 2 のタイミング結果と大きく異なるかどうかをテストしています。
t = (m_2 - m_1)/(s_2/ sqrt(#dataPoints))
これらの t 値を計算したら、重要値の表を見て、それらが有意であるかどうかを判断できます。ここで、それをクリックする前に、さらに 2 つのことを知っておく必要があります。
自由度
これは、所有しているデータポイントの数に関連しています。データポイントが多いほど、平均前後の間隔が小さくなる可能性があります。自由度は、計算された平均の移動能力を測定するものであり、それは #dataPoints - 1 (私が提供したリンクのv ) です。
アルファ
アルファは確率のしきい値です。ガウス (通常、釣鐘曲線) 分布では、アルファは左右の釣鐘曲線をカットします。カットオフの中間にある確率はしきい値内にあり、重要でない結果です。アルファが低いほど、有意な結果を得ることが難しくなります。つまり、アルファ = 0.01 は確率の上位 1% のみが重要であることを意味し、アルファ = 0.05 は上位 5% を意味します。ほとんどの人は alpha = 0.05 を使用します。
リンク先の表では、1-alpha によって、重要な値を探して下に移動する列が決まります。(したがって、alpha = 0.05 は 0.95、つまり 95% の信頼区間を与えます)、vは自由度、つまり注目する行です。
臨界値が計算されたt (絶対値)より小さい場合、結果は重要ではありません。臨界値が計算されたt (絶対値)より大きい場合、統計的有意性があります。
編集: スチューデントの t 検定では、比較される 2 つの平均値の間で分散と標準偏差が同じであると想定されます。つまり、真の平均の周りのデータ ポイントの分布が等しいと仮定します。この仮定をしたくない場合は、わずかに異なるWelch の t-testを探しています。wiki ページには、このテストの t 値を計算するための適切な式があります。