Особенности численного решения эволюционных задач

Архитектура NUMA (Non Uniform Memory Access) определяет класс параллельных вычислительных систем с логически общей, но физически раздельной памятью . Существует достаточно много вариантов реализации такой архитектуры. В частности, компания Advanced Micro Devices ввела подход, при котором чипы RAM подключаются непосредственно к чипу CPU, содержащему встроенный контроллер памяти. В случае использования MultiCPU- платформ каждый CPU подключается к своему набору планок RAM. При этом память остается логически общей благодаря наличию шины HyperTransport, имеющей существенно больший пропускной канал, чем связка CPU-RAM. Более того, серверные процессоры AMD имеют N-1 HyperTransport каналов (N — число процессоров (чипов) в одном вычислительном узле (материнской плате)) и каждый чип CPU соединен с каждым. Таким образом, достигается реализация логически общей памяти. При этом скорость доступа данного CPU к памяти любого нода (связки СPU-RAM) одинакова, если требуемая память не занята другим запросом. Таким образом, в NUMA ширина канала увеличивается во столько же раз, сколько нодов имеется на вычислительном узле. В настоящее время архитектура NUMA поддерживается и на персональных компьютерах, в частности, использующих платформу Nehalem . В настоящей статье рассматриваются особенности реализации задачи эволюционного (по координате z ) численного моделирования распространения лазерного импульса A(z, ?, r ) с широким спектром: 90 ИЗВ. ВУЗОВ. ПРИБОРОСТРОЕНИЕ. 2011. Т. 54, № 10 2 2 1 A r A 0 c z r r r ? ? ? ? ? + ? ? = ??? ? ? ? ? . (1) Такое соотношение может быть получено из уравнений Максвелла для условий малоуглового распространения короткого импульса вдоль оси z , где ? = t ? z c — сопутствующее время. В фурье-пространстве уравнение (1) перейдет в следующее: 2 i B 1 r B 0 c z r r r ? ? ? ? ? ? ? + ? ? = ? ? ? ? ? , (2) которое, в свою очередь, аппроксимируется посредством NT независимых конечно-разностных уравнений: n ? 0, , i B LB n N z ? ? ? + = ? ? ? (3) где оператор ?L аппроксимирует дифференциальный оператор в соотношении (2). Данный оператор может быть записан в трехдиагональном виде как обобщение обычного двумерного пятиточечного лапласиана. Уравнение (3) решается численно методом Крэнка-Никольсона для каждой гармоники ?n . С точки зрения эффективного использования архитектуры NUMA элементы массива A(ri , ? j ) целесообразно расположить так, чтобы соседние элементы по второй (временной) координате оказались соседними в памяти. Это удобно для выполнения преобразования Фурье, которое при таком размещении данных может выполняться построчно. Пусть далее в системе есть NNUMA нодов, тогда все массивы A , B размером NR ? NT разбиваются на NNUMA отдельных частей размером (NR NNUMA )? NT . На рисунке, а представлено параллельное выполнение преобразования Фурье; б — первая часть прогонки (прямая прогонка) с конфликтом памяти; в — прямая прогонка без конфликта памяти. Для выполнения преобразования Фурье по строкам достаточно запустить NNUMA независимых нитей — thread (а). В соответствии с предложенным расположением массивов в памяти соседние по r элементы оказываются удалены на NT элементов в памяти. Более того, элементы из разных подмассивов оказываются на разных нодах, поэтому простейший цикл по столбцам матрицы B , реализуемый при выполнении прогонки, оказывается неоптимальным, так как при этом физические процессоры будут синхронно обращаться к памяти одного нода, как это представлено на рисунке, б. а) б) в) Выходом в данном случае может быть „лестничная процедура, представленная на рисунке, в. Процесс прямой прогонки (обнуление одной из боковых лент матрицы обращаемого оператора) можно начинать выполнять на одном ядре (CPU0), после того как элементы Особенности численного решения эволюционных задач распространения лазерных импульсов 91 ИЗВ. ВУЗОВ. ПРИБОРОСТРОЕНИЕ. 2011. Т. 54, № 10 ( 0 , 0 ), …, ( / CPU , 0 ) r rNR N B ? B ? обработаны, можно переходить к обработке элементов ( 0 , 1), …, ( / CPU , 1) r rNR N B ? B ? , а CPU1 может начать обработку элементов ( / CPU , 0 ), …, ( 2 / CPU 1, 0 ) rNR N r NR N ? B ? B ? . Таким образом, все члены CPU будут задействованы с некоторой задержкой. Однако большую часть данных ядра будут обрабатывать одновременно, не обращаясь к данным чужого нода. Если окажется что блок памяти, привязанный к данному ядру, помещается в собственный кэш ядра то конфликт между CPU0, CPU1 и CPU2, CPU3 будет также разрешен. Вторая часть (обратная прогонка) выполняется так же, только процесс начинается с последнего вычислительного ядра. Для практической реализации предложенной выше процедуры необходима некоторая модификация. Так как обращение к любому элементу памяти, отсутствующему в кэше, вызывает считывание целой кэш-линии первого уровня (L1 cache line), следует выполнять модифицированную прогонку, реализующую один шаг с номером i сразу для 16 элементов (A(ri , ? j ), …, A(ri , ? j+16 ) ). При этом время ожидания в начале предложенного „лестничного процесса несколько возрастает, однако если выполнять прогонку для каждого столбца отдельно, неоптимальное обращение к памяти приведет к еще большей потере производительности. Дополнительной особенностью моделирования распространения лазерного импульса является необходимость оптимизации распределения нагрузки, поскольку в области слабых полей вычисления можно не производить. Но в таком случае возникает простой отдельных вычислительных узлов на каждом эволюционном шаге. Одним из способов создания равномерной нагрузки может быть варьирование размеров подмассивов, рассчитываемых на отдельных CPU. При этом размер массива NT по координате ? остается прежним, изменяется только количество строк NRk в подмассиве (исходно NRk = NR / NCPU , ?k ). Так как при каждом изменении размера подмассива выделяются и высвобождаются большие объемы памяти, данную операцию следует производить через некоторое, достаточно большое, число эволюционных шагов. Рассмотренные подходы являются достаточно перспективными благодаря разработке NUMA-систем. На данный момент на рынке широко представлены системы с максимальным числом нодов 2-4. В условиях увеличения числа ядер на один NUMA-нод (до 12 в последних предложениях от AMD) эти системы остаются, на наш взгляд, по-прежнему несбалансированными по соотношению вычислительная производительность-пропускная способность памяти. Эксперименты с вычислительной станцией на базе Intel Nehalem 2 CPU X5550 показали, что увеличение каналов памяти (3 канала в Nehalem) не оправдывает заявленной производительности и при этом не допускает контроля со стороны программиста. В этом смысле использование особенностей NUMA более эффективно, чем применение в рамках модели глобальной общей памяти, разделяемой между ядрами. 1. A NUMA API for LINUX* 2005 : developer.amd.com/assets/LibNUMA-WP-fv1.pdf . 2. : .