День добрый. Есть рассчётное ядро софтины для моделирования (QFrost). Нужно внутри std::vector выполнить некоторый метод каждого его элемента. Порядок выполнения не важен, элементы друг с другом никак не связаны. Так что хочу распараллелить. Потом распараллелю это с помощью CUDA или OpenCL, но пока хочется задействовать хотя бы все ядра процессора.
Пробовал OpenMP с его #pragma omp parallel for, но так как расчёты запускаются гуём и производятся внутри QThread, OpenMP не хочет окуппировать более одного потока. Если делать это в основном потоке, всё ок. Гугл знает об этой проблеме с некоторыми версиями GCC, но решения мной найдено не было.
Как лучше решить эту проблему, если во главе угла — производительность и кроссплатформенность? Пока попробую TBB (parallel_for оттуда). Средства Qt, желательно, не предлагать, т.к. не хочу использовать их в расчётном ядре. С радостью бы воспользовался std::async из C++11, но тогда появится геморрой со сборой в винде. Напоминаю, основная проблема — то, что этот for будет запускаться внутри QThread.