superPrac2 (mpi openmp, mpi cuda) (Практикум), страница 3
Описание файла
Файл "superPrac2 (mpi+openmp, mpi+cuda)" внутри архива находится в следующих папках: Практикум, 2016 Практикум (Дирихле, Пуассон), дз 2. 2-й и 3-й поток. Решение (avasite). PDF-файл из архива "Практикум", который расположен в категории "". Всё это находится в предмете "суперкомпьютерное моделирование и технологии" из 11 семестр (3 семестр магистратуры), которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 3 страницы из PDF
Точное решение диф. уравненияТочное решение дифференциального уравнения совпадает с функцией граничного условия.Достаточно подставить u(x,y) = ln(1+x*y)8. Графическое изображение функции, погрешности вычислений8.1.Графическое изображение точного аналитического решения и вычисленногорешения дифференциального уравненияРисунок приближённого решения для сетки размером 2000x2000 (визуально изображение совпадает прииспользовании любых, из приведённых выше технологий):Рисунок точного решения (100x100 точек):138.2.Графическое изображение абсолютной погрешностиДля всех архитектур (NVIDIA Tesla X2070, Lomonosov Intel Xeon X5570, BlueGene/P PowerPC 450)графические изображения визуально не отличаются.Сравнивались изображения для решений, вычисленных со следующими конфигурациями: Ломоносов (nvidia tesla и intel xeon) – 32 процесса, матрица 1000x1000 BlueGene/P (PowerPC) – 128 процессов, матрица 1000x1000(количество процессов, для данной оценки не имеет значения)Графическое изображение абсолютной погрешности:Заметим, что несмотря на то, что рассчёты велись пока шаг итерации не изменит значение функции менее,чем на 0.0001, само итоговое решение имеет погрешность гораздо большую (на 2 порядка).КонфигурацияLomonosov, p=32, n=1000Lomonosov (cuda), p=32, n=1000BlueGene/P, p=128, n=1000Макс.значениепогрешности0.006529792675740.00652979319770.00652979267574абс.
Мин. значение абс. погрешности-0.0155494946188-0.015549494123-0.0155494946188Из значений видно, что процессора nvidia считают числа с плавающей точкой, с другой точностью.Однако возможно это связано с тем, что некоторые операции видеокарта Tesla X2070 не может делатьнад числом типа double, преобразуя их в float (например, операция взятия логарифма).8.3.Графическое изображение относительной погрешностиКонфигурации, для которых вычислялась относительная погрешность, полностью совпадают сконфигурациями, использованными для вычисления абсолютной погрешности.Аналогично, разница в графическом представлении неотличима для различных конфигураций.Графическое изображение относительной погрешности (граничные точки обрезаны, так как функцияпринимает в этих точках значение ноль):14КонфигурацияLomonosov, p=32, n=1000Lomonosov (cuda), p=32, n=1000BlueGene/P, p=128, n=1000Макс.значениепогрешности0.07835273108990.07835272984420.0783527310899отн.
Мин. значение отн. погрешности0.02.02627890593e-110.0В данном случае для архитектуры nvidia и её точности справедливы аналогичные рассуждения, как и впараграфе оценки абсолютной погрешности.8.4.Графическое изображение скорости сходимости.После каждой итерации выполнения алгоритма, рассчитывалась квадратичная норма разностиприближённой функции и точного решения дифференциального уравнения.В следствие чего были нарисованы графики сходимости при выполнении программы для разныхконфигураций с использованием разных технологий.Графический вид сходимости для конфигураций (BlueGene/P, p=128, n=1000) и (Lomonosov, p=32,n=1000) – совпадает:15Графическое изображение сходимости для конфигурации, соответствующее вычислениям награфической карте (Lomonosov (cuda), p=1, n=1000), также ничем не отличается:169.
Профилирование и анализ работы с графическим ускорителемПрофилирование проводилось для разбиения сетки 5000x5000, одной gpu карты NVIDIA Tesla X2070 наLomonosov и первых 3-х итераций алгоритма.Общий вид загрузки графического ускорителя:Следующие 3 изображения иллюстрируют асинхронную работу графического ускорителя (какпараллельное копирование данных, так и выполнение ядер):17По результатам профилирования можно отметить, что все задачи разделяются на 2 категории: очень большие (рассчёты, которые ведутся на всей внутренней области сетки) очень маленькие (рассчёты, которые ведутся для краёв разбиения (краёв сетки))Между большими операциями во многих местах есть задержка в выполнении примерно до 0,5миллисекунд, - это связано с тем, что между различными этапами расчётов, у меня производитсяcudaAllStreamsSynchronize, чтобы дождаться выполнения данного этапа, и уже дальше начать подготовкук следующему этапу (например, рассчёт размера грида), и уже последующий запуск дальнейшихвычислений на графическом ускорителе.18Однако внутри одного этапа, не зависящие друг от друга задачи успешно вычисляются в асинхронномрежиме (как это проиллюстрировано на картинках выше).При вычислении скалярного произведения (stream1), ядра выполняются без описанной выше задержки(потому что там отсутствует работа cpu между вызовами ядер, просто подряд запускаются gpu ядра).Работа с памятью почти полностью отсутствует, так как почти все вычисления в моей программепроизводятся на gpu и данные туда/оттуда почти не пересылаются.В stream21 можно видеть выполнение очень короткой задачи counting_5star_nxm_corners.
Она хорошопоказывает, что после старта задачи в stream12 counting_5star_insides, cpu продолжает свою работу (тамв частности происходит небольшая работа с mpi (небольшая, т.к. профилирование происходило для 1процесса, и поэтому там холостые waitall, а также несколько проверок, которые не пошлют данныесоседним процессам (так как их нету))), и уже после того, как cpu отработает часть своих задач, онозапустит на выполнение короткую задачу, которая выполнится параллельно основной долгой задаче.Как случилось, что задача смогла вклиниться в параллельное выполнение с другой задачей, прямо всередину этой другой задачи: это связано с тем, что задача очень мала и умещается буквально в нескольковарпов, в то время как большая задача из-за своих размеров не пользует абсолютно все варпы (это связанос распределением между мультипроцессорами, которое было описано в параграфе с особенностямииспользования технологий (подпараграф про cuda) (т.к.
по сути, можно попытаться перетащитьнесколько задач с загруженных нитей на пустые варпы (на дополнительный блок), но мы не сможемразгрузить все нити ровно на 1 задачу, чтобы они одновременно закончили своё выполнение на один шаграньше, а разгружать не все нити - не имеет смысла, т.к. ядро будет ждать выполнения всех нитей))В завершении вычислений присутствует одна долгая операция копирования памяти с устройства на хост- это для дальнейшего вывода вычисленной функции в файл (в начале также есть часть вычисленийотвечающая за инициализацию) - это не повторяющиеся многократно операции и по времени выполнениясравнимы с одной итерацией алгоритма, так что их скорость выполнения - не очень важна.19.