Есть такая задача... нужно сосчитать кое-для чего интеграл монте-карло. Как подсчитывать - тут всё понятно... никаких вопросов нет. Более того, написал готовую программу - всё работает.
Один нюанс. Для неё нужны псевдослучайные числа. Чтобы получать псевдослучайные числа, воспользовался библиотекой GSL, функцией gsl_rng_uniform_int, если точнее.
И всё замечательно считается... но! Подсчёт интегральной суммы несложно распараллелить. А вот как сгенерировать параллельно (на нескольких нитях) случайные числа? Если просто вызывать функцию gsl - то так не проходит =) облом. ибо, я так понял, результат следующего вызова этой функции зависит от предыдущего.
Правильно ли я понял, что для этого придётся как-то самому этот алгоритм реализовывать? %)
Просто так уж и получается... что значительная часть времени тратится на генерацию случайных чисел, чем на подсчёт суммы (при большем количестве потоков). Узкое место.