Переменная len всегда равна 32, поэтому делю на 4 потока, каждый из которых по идее должен выполнить по 8 вычислений, но получается так, что время вычислений увеличивается по сравнению с одним потоком. Что делаю не так?
Сам цикл:
vector<thread> thds;
for (int i = 0; i < len; i = i+4) { // основной цикл умножения
thds.emplace_back(thread (multi, x, y, ref(res), len, i));
thds.emplace_back(thread(multi, x, y, ref(res), len, i+1));
thds.emplace_back(thread(multi, x, y, ref(res), len, i+2));
thds.emplace_back(thread(multi, x, y, ref(res), len, i+3));
thds[i].join();
thds[i+1].join();
thds[i+2].join();
thds[i+3].join();
//cout << i << endl;
}
Функция:
void multi(vector<int>& x, vector<int>& y, vector<int>& res, int len, int i) {
for (auto j = 0; j < len; ++j)
res[i + j] += x[i] * y[j];
}
PS За реализацию прошу сильно не ругать, первый раз работаю с потоками.