スレッドでいくつかのベンチマークテストを行いましたが、これらのコードを書きました。シリアルコードはC言語で1つのスレッドを使用するよりもはるかに遅いですか?
resp_threadless []とresp_threaded []はグローバルint配列であり、サイズはnです。
function();
そして、このような第二1:
HANDLE hThreadArray[1];
DWORD dwThreads[1];
hThreadArray[0] = CreateThread(NULL, 0, function_th, NULL , 0, &(dwThreads[0]));
WaitForMultipleObjects(1, hThreadArray, TRUE, INFINITE);
CloseHandle(hThreadArray[0]);
私はfunction_thを使用して複数のスレッドを呼び出すことを知っていることに注意してくださいを
int n = 100000;
void function() {
for (long j = 0; j < n; ++j) {
int count = 0;
double x = vetor[j];
while (x > 1.0) {
x = sqrt(x);
++count;
}
resp_threadless[j] = count;
}
}
DWORD WINAPI function_th(LPVOID lpParam) {
for (long j = 0; j < n; ++j) {
int count = 0;
double x = vetor[j];
while (x > 1.0) {
x = sqrt(x);
++count;
}
resp_threadless[j] = count;
}
}
は、私はちょうど彼女を呼び出すことにより、第一の機能をベンチマーク()はそれを並列化しません。これは本当に奇妙な結果が出ていたため、これは単なるテストなので、SAMEコードを使用して1つのスレッドと1つの関数で何が起こるかを確認することにしました。
私はNUMPROC = 1
結果とインテルAtom N270、およびWindows XPでこれをテストした:私は使用して同様の結果を持っていた425ミリ
: シリアルコード:1485ミリ秒 つのスレッドセマフォを使用するコードであっても、スレッドによって行われた作業を並列化することができます。
誰が何が起こっている可能性について考えていますか?順序を反転
EDIT
、複数回にそれぞれ1を実行している、等... - >変更なし
高いNは - >スレッド1は、(QueryPerformanceCounterのを使用して、さらに高速比例
ではありません) - >変更なし
スレッド作成オーバーヘッドは - >スレッドの一つでも、遅くない速く作るべきではありません
元のコード:http://pastebin.com/tgmp5p1G
あなたの現在のスレッド(あなたが 'function()'を呼び出す)に優先度が低いのでしょうか? – SomeWittyUsername
1回のプログラム実行で2つのテストを連続して実行しましたか?私は 'vetor []'アクセスのためのデータキャッシュ効果を疑う。 – yohjp
1.注文を元に戻してみましたか? (キャッシュ効果)2.どのように時間を測定しましたか? – Arno