Хочу организовать параллельные вычисления, к примеру расчет определенного многомерного интеграла. Какие соображения будут у знатоков? Вроде понятно, что нужно создавать потоки и в них считать, а как оптимально распределить расчеты между потоками? Ах да, проц как минимум с Hyper-Treading.
Если считать интеграл методом Монте-Карло (т.е. вводить заряд на траекториях марковской цепи, и его считать), то глубоко наплевать, как эти вычисления организовывать: каждый поток просто обсчитывает свою реализацию случайной величины, а потом результаты усредняются. PS: Другие варианты подсчета я не рассматриваю, т.к. интеграл предполагается многомерным.
не совсем понятно, что имеется в виду. Если ты про простаиващий поток, которому вдруг повезло и он сосчитал быстрее, то надо разбить область интегрирования на... ну скажем 100*n_threads кусков. Чтобы каждый поток, обсчитав один кусок, брал следующий, до тех пор пока все куски не будут обсчитаны. Как разбить тебе виднее, а коэффициент 100 взят с потолка, имеет смысл поиграться с ним, когда оно будет работать. А если ты про уменьшение общения HT процессора с памятью, то, как бы тут на синхронизации не потерять больше, чем можно сэкономить.