Vì vậy, tôi đã làm một số bài kiểm tra điểm chuẩn với chủ đề và tôi đã viết các đoạn mã sau:Mã nối tiếp chậm hơn nhiều so với chỉ sử dụng một luồng trong C?
resp_threadless [] and resp_threaded [] là mảng int toàn cục và kích thước của chúng là n;
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;
}
}
tôi benchmarked chức năng đầu tiên bằng cách chỉ gọi cô:
function();
Và thứ hai như thế này:
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]);
Hãy ghi nhớ rằng tôi biết rằng gọi nhiều chủ đề sử dụng function_th() sẽ không song song nó, đây chỉ là một thử nghiệm bởi vì tôi đã có kết quả thực sự kỳ lạ, vì vậy tôi quyết định xem điều gì sẽ xảy ra với một luồng và một hàm sử dụng mã SAME.
Tôi đã thử nghiệm này trong Intel Atom N270 và cửa sổ XP với NUMPROC = 1.
Kết quả: đang nối tiếp: 1485 ms Một Chủ đề: 425 ms
Tôi đã có kết quả tương tự sử dụng máy đa xử lý, và thậm chí với mã sử dụng các ẩn dụ để song song công việc được thực hiện bởi các luồng.
Có ai có ý tưởng về những gì có thể xảy ra không?
EDIT
Đảo ngược thứ tự, chạy nhiều lần mỗi người, vv ... -> Không có thay đổi
cao hơn N -> Chủ đề ai là tương thậm chí nhanh hơn
Sử dụng QueryPerformanceCounter () -> Không thay đổi
Chi phí tạo chủ đề -> Nên làm cho luồng thậm chí còn chậm hơn, không nhanh hơn
Mã gốc: http://pastebin.com/tgmp5p1G
Có thể luồng hiện tại của bạn (trong đó bạn gọi hàm '()') có mức độ ưu tiên thấp? – SomeWittyUsername
Bạn có chạy hai lần kiểm tra tuần tự trong một lần thực thi chương trình không? Tôi nghi ngờ hiệu ứng bộ nhớ cache dữ liệu cho truy cập 'vetor []'. – yohjp
1. Bạn đã thử đảo ngược thứ tự, chuỗi đầu tiên và chức năng sau? (hiệu ứng bộ nhớ cache) 2. Bạn đo thời gian như thế nào? – Arno