Попытка упорядочить вычислительный метод, затем дождаться сбора результатов всех вычислений и сохранить их в std :: list с другим вводом данных, поэтому не вижу улучшений производительности. Может быть, если я знаю 'num_results', я смогу каким-то образом объединить оба цикла и сохранить данные в списке только с помощью процедуры блокировки (мьютекса) записи (push_back)? Другое дело, как сохранить порядок (если на некоторых [i] вычисления выполняются быстро) Выполнение этого за один цикл в одном ядре слишком медленное.
// here is pseudocode
void SomeClass::SomeMethod() {
size_t num_results = request_list.size();
std::list<result_t> some_results;
float *result = new float[num_results];
// linearly I do one for in where one parameter of list pushing are long computing function
// so I create array of function results and try to store data same time then wait and collect in list with other data
for (size_t i(0); i < num_results; i++) {
// Calculate is hard function and may vary in times depending on imput
// use temporary thread object and labda function to acces class members data
thread t([&]() { result[i] = Calculate(request_list[i]); });
// where or how to wait for all results stored in array only then push them to list?
t.join(); // where or how to wait for all result[] for next cycle or merge both?
}
// conjugate result with some other data from static list with same id's
for (std::size_t i(0); i < num_requests; i++) {
some_results.push_back( result_t(result[i], other_data[i], ...) );
}
delete [] result; // free memory
// Continue job with some_results list
}
Неправильно ли выполняется паррализм?