- •Гоу впо «Уральский государственный технический университет – упи имени первого Президента России б.Н. Ельцина»
- •Учебное пособие
- •Оглавление
- •1. Применение метода монте-Карло для моделирования физических систем 8
- •1. Задача о диффузии нейтронов через пластину. Решение методом Монте-Карло 22
- •2. Решение задачи о прохождении нейтронов через пластину на графических процессорах архитектуры cuda 31
- •Введение
- •Применение метода монте-Карло для моделирования физических систем
- •1.1.Содержание метода Монте-Карло
- •1.1.1.Метод Монте-Карло на примере вычисления площадей
- •1.1.2.Распределения случайных величин
- •1.1.3.Получение последовательностей случайных чисел с требуемой функцией распределения
- •1.2.Генераторы случайных чисел
- •1.2.1.Требования, предъявляемые к генераторам случайных чисел
- •1.2.2.Типы генераторов случайных чисел
- •1.2.3.Особенности применения генераторов случайных чисел для реализации метода Монте-Карло на графических процессорах
- •1.2.4.Генератор псевдослучайных чисел Mersenne Twister
- •1.2.5.Достоинства генератора Mersenne Twister
- •1.2.6.Применение генератора Mersenne Twister для параллельных расчётов на графических процессорах
- •Задача о диффузии нейтронов через пластину. Решение методом Монте-Карло
- •1.3.Физическая формулировка задачи
- •1.3.1.Вероятности и макросечения взаимодействия нейтронов с веществом
- •1.3.2.Рассеяние нейтронов на ядрах
- •1.4.Численное решение задачи методом Монте-Карло
- •1.4.1.Принцип моделирования
- •1.4.2.Получение необходимых случайных величин
- •1.4.3.Построение траекторий отдельных нейтронов
- •1.4.4.Алгоритм с использованием «веса» нейтронов
- •Решение задачи о прохождении нейтронов через пластину на графических процессорах архитектуры cuda
- •1.5.Графический процессор как система для параллельных вычислений общего назначения
- •1.5.1.Архитектура графического процессора
- •1.5.2.Возможности программирования процессоров архитектуры cuda
- •1.5.3.Конвейерная обработка данных в архитектуре cuda
- •1.6.Простейшее решение задачи о диффузии нейтронов через пластину на графическом процессоре
- •1.6.1.Структура программы
- •1.6.2.Текст программы для центрального процессора
- •1.6.3.Текст программы для графического процессора
- •1.6.4.Быстродействие простейшего алгоритма
- •1.6.5.Возможность оптимизации простейшего алгоритма
- •1.6.6.Соответствие рассмотренных алгоритмов физическому содержанию задачи
- •Заключение
- •Библиографический список
- •Приложение. Оптимизированное вычислительное ядро для моделирования диффузии нейтронов методом Монте-Карло
1.2.5.Достоинства генератора Mersenne Twister
Производительность и ресурсоемкость алгоритма
В работе [11] было проведено сравнение предложенного авторами алгоритма Mersenne Twister с другими популярными генераторами псевдослучайных чисел. Это сравнение показывает, что Mersenne Twister входит в число наиболее быстрых генераторов, производительности которых примерно одинаковы.
Объём памяти, требуемый для генератора Mersenne Twister, определяется длиной инициализирующей последовательности {x0, x1, , xn-1}. В работе [11] при максимальном качестве случайного распределения значение n равнялось 624 числам, что много по сравнению с большинством других генераторов. Однако, при необходимости экономного использования памяти значение n можно уменьшить по крайней мере в 30 раз без принципиального ухудшения качества генератора (см. ниже, [15]).
Качество случайной последовательности
Одной из важных характеристик псевдослучайных последовательностей, создаваемых генератором Mersenne Twister, являются очень большие периоды, уже обсуждавшиеся выше.
Другим необходимым требованием к генератору псевдослучайных чисел являются равномерность и некоррелированность создаваемой им последовательности. Поскольку последовательности псевдослучайных чисел не являются абсолютно случайными, гарантировать применимость генератора для решения любой задачи невозможно. Тем не менее, существуют тесты (см., например, [12-13]), позволяющие обнаружить недостатки генераторов, влияющие на точность решения известных задач. Генератор Mersenne Twister удовлетворяет всем проводившимся тестам [11], в частности, тестам diehard [12], Load Tests и Ultimate Load Tests [13].
Сами авторы Mersenne Twister предлагают для оценки и сравнения качества генераторов псевдослучайных чисел наглядную количественную характеристику, называемую «равномерным распределением в k измерениях с w-битной точностью» [11]. Геометрический смысл этой характеристики состоит в следующем (рис. 1.3):
1. Рассматривается k-мерный куб с рёбрами единичной длины в каждом из измерений;
2. Генерируется последовательность случайных чисел {i} ( [0; 1], i = 0, 1, , P−1) длины P, равной периоду генератора;
3. Для всех i = 0, 1, , P−1 формируется P точек в k-мерном пространстве, таких, что координаты i-ой точки - (i, i+1, , i+k-1), а при i+k > P вместо обычного сложения используется сложение по модулю P.
Рис. 1.3. Иллюстрация критерия равномерного распределения в k измерениях с w-битной точностью
4. Каждая ось единичного куба в k-мерном пространстве разбивается на 2 интервалов, в соответствии с чем объём куба разбивается на 2k маленьких кубиков. Количество интервалов, равное 2, используется потому, что при этом в один и тот же интервал попадают все числа, у которых равны первые -бит. Таким образом, числа сопоставляются с -битной точностью.
5. Последовательность {i} является равномерно распределенной в k измерениях с -битной точностью, если в каждый из 2k кубиков попадает одинаковое число точек, рассмотренных в п. 3 (на одну точку меньше для кубика, расположенного в начале координат).
Чем выше максимальные значения k(), удовлетворяющие критерию п. 5, тем более качественным можно считать генератор псевдослучайных чисел. Как показано в работе [11], для генератора Mersenne Twister максимально достижимые (при наилучших сочетаниях всех параметров) значения k() даются формулой
,
где n, r - параметры генератора, w - длина используемых целых чисел в битах (у нас w = 32), совпадающая с максимальной точностью представления генерируемых случайных чисел. При n = 624, r = 31 (см. список параметров в п. 1.2.4) и = w = 32 получается, что kmax() = 623. Поскольку указанные в п. 1.2.4 значения параметров [11] обеспечивают k(32) = kmax(32), генератор Mersenne Twister оказывается равномерно распределённым в 623 измерениях с 32-битной точностью.