И это всё МОЁ

Вот такая программа:


#include <thread>
#include <vector>
#include <iostream>

using namespace std;

clock_t etime[128];
vector<unsigned> idx[128];

void eval(unsigned n, unsigned m, unsigned i) {
etime[i] = clock();
for (unsigned j = i; j < n; j += m) {
idx[i].push_back(j);
}
etime[i] = clock() - etime[i];
}

int main(int argc, char **argv) {
unsigned M = atoi(argv[1]);

for (unsigned i = 0; i < M; i += 1) {
eval(250000, M, i);
}

for (unsigned i = 0; i < M; i += 1) {
cout << "seq " << etime[i] << endl;
}

vector<thread> threads;
for (unsigned i = 0; i < M; i += 1) {
threads.push_back(thread(eval, 250000, M, i));
}

for (auto &th : threads) {
th.join();
}

for (unsigned i = 0; i < M; i += 1) {
cout << "par " << etime[i] << endl;
}

return 0;
}


По идее, чем больше параметр (число потоков), тем меньше должно быть время выполнения одного потока. На практике получаем, что не так:


./test 1


ТипВремя
seq7737
par8529

./test 4


ТипВремя
seq2756
seq2615
seq1810
seq1675
par12601
par18108
par18546
par15692

Что может быть не так? Может, тут неприменим clock?