Параллельный алгоритм расчета неоклассической модели межотраслевого баланса Мударисов И.М., студент 4 курса кафедры вычислительной математики, математический ф-т УдГУ, г. Ижевск Описание модели Рассматриваемая модель подробно описана в работе: Э.В. Автухович, С.М. Гуриев, Н.Н. Оленев, А.А. Петров, И.Г. Поспелов, А.А. Шананин, С.В. Чуканов «Математическая модель экономики переходного периода», вычислительный центр РАН, Москва 1999. Приведем краткое описание модели. N – число чистых отраслей A – число финансово-промышленных групп (ФПГ) M – число видов первичных ресурсов F j (X j , I j ) – производственная функция, описывающая выпуск продукта j-й отраслью, принадлежащей ФПГ, где X j ( X 1j ,..., X Nj ), I j ( I1j ,..., I Mj ) – векторы продуктов и первичных ресурсов, затрачиваемых в ФПГ для выпуска j-го продукта F0 ( X 0 ) – вогнутая функция полезности, описывающая спрос населения (индекс потребления), где X 0 ( X 10 ,..., X N0 ) – вектор конечного потребления продуктов населением. Описание модели Выпуск j - го продукта отраслью, принадлежа щей ФПГ распределя ется следующим образом : X ij производст венные затраты j - го продукта, которое ФПГ поставляет ФПГ для производст ва i - го продукта.; X 0j поставки населению; G j поставки государств енной администра ции; j ( X 0j ,..., Z ij ,...) затраты на услуги торговых посреднико в. Из количества X ij j - го продукта, которое ФПГ поставляет ФПГ для производст ва i - го продукта, часть величиной Y ji реализуе тся по традицион ным каналам, а часть величиной Z ij по рыночному каналу. За единицу i - го продукта, поставленн ого по традицион ным связям, потребител ь недоплачив ает величину pi , а за каждую единицу m - го первичного ресурса - m . Основная задача модели min f (u ), u R dimU g i (u ) 0, i 1,..., dimW , где функции f (u ), g i (u ) - выпуклые, u { X 0j , X kj , I mj , X ij , X 0j , G j , Y ji , Z ij , pi , m }i , j ,k 1,..., N ; , 1,..., A;m 1,..., M dimU 3N 2 A 2 N 2 A NAM 2NA 2N M dimW 4N 2 A 2 2N 2 A NAM 3NA 2N M A Экономическая интерпретация задачи – это максимизация функции полезности (индекса потребления), при выполнении балансовых соотношений. Описание функций, участвующих в задаче f (u ) F0 ( X 0 ), j j i 0 0 i g1 (u ) F j ( X , I ) X j X j G j j ( X j ,..., Z j ,...) N i, j 11,..., ,..., A g 2 (u ) X kj X kj , j ,k1,...,1,...,A N g 3 (u ) g 2 (u ), g 4 (u ) X 0j X 0j , j 1,..., N g 6 (u ) X ij Y ji Z ij i , j 1,..., N , g 5 (u ) g 4 (u ), g 7 (u ) g 6 (u ), , 1,..., A g 8 (u ) I mj I m , j , m 1,..., M g 9 (u ) pi Yij m I mj p j G j p j Y ji , j ,m j i, j, i , j , 1,..., A g10 (u ) G j j 1,..., N , g11 (u ) I mj g12 (u ) X 0j 1,..., A j 1,..., N 1,..., A , g14 (u ) Z j 1,..., N 1,..., A , m 1,..., M i j i , j 1,..., N , 1,..., A . Метод решения Метод одновременного решения пары двойственных задач [1] 2 w k arg min K ( w), где K ( w) f (u k ) wi g i (u k ) wi 0 ,iI k I k {i : g i (u ) ε} k iI k u k 1 k k u k f (u ) wi g i (u ) iI k k Метод сопряженных градиентов [1] w k 1 w k k p k , k arg min K (w k p k ) 0 , w k p k 0 K ( w k ) i k pik 1 , i I k , p 0, i I k , k 2 k 1 2 ( K ( w ) ) / ( K ( w ) ) , если I k I k 1 , i i iI k k iI k если k 0 или I k I k 1 , 0, {i : wik 0, K ( w k ) i 0}, если k 0 или K ( w k ) i 0 для всех i I k 1 , Ik k I { i : w k 1 i 0}, в остальных случаях . k i [1] – Б.Т. Поляк «Введение в оптимизацию», «Наука», Москва 1983. Оценка размерности задачи Число чистых отраслей N возьмем равным 50, финансовопромышленных групп (ФПГ) – 25, а первичных ресурсов – 10. Тогда dimU = 4765110 ~ 4.5x220, dimW = 6391385 ~ 6x220. Если каждая координата вектора u представляется одним числом типа double (8 bytes), то для хранения вектора u необходимо порядка 40 Mb. N=50 A=25 M=10 => u ~ 40Mb Хранение такого объема информации в оперативной памяти вполне реально для современных ЭВМ. Если же мы захотим разместить в памяти градиенты всех функций ограничений, то потребуется матрица размером dimU x dimW. Ее объем оценивается в 2x105 Gb. Это совершенно нереальный для хранения объем информации. Средства реализации до этапа распараллеливания Mathematica 4.1 Пакет Mathematica использовался для формирования тестовых примеров. Основная ценность реализации в точности получаемых результатов. С++ Основная ценность реализации – это создание основы для параллельного варианта численной реализации методов. Программа на языке C++ характеризуется следующим: исходные данные хранятся на внешнем носителе в файлах, результаты каждой итерации (новые приближения прямых и двойственных переменных и значение целевых функций) включаются в файл отчета. Ведется учет времени по итерациям. Использование языка C++, а не С, обусловлено удобством работы с файлами. Идеи распараллеливания Возможны следующие пути разработки параллельного алгоритма: Первый путь предполагает распараллеливание алгоритма на теоретическом уровне. Ярким примером такого распараллеливания служит параллельный алгоритм умножения матрицы на вектор. Второй путь предполагает анализ работы непараллельной реализации и выявление «узких» мест в работе программы. Нахождение фрагментов именно программной реализации, а не алгоритма, требующих значительных вычислительных ресурсов и поддающихся распараллеливанию. Реализация идей распараллеливания Первый путь привел к распараллеливанию основного алгоритма за счет множителя k Второй путь выявил следующее: расчет градиента квадратичной функции в методе сопряженных градиентов занимает в работе всей программы более 90% времени. Определим причины этого факта. Размерность градиента равна dimW. Вычисление одной координаты градиента требует вычисления значений квадратичной функции в двух точках, что требует порядка dimU*dimW операций. Получаем объем вычислений порядка dimW*dimU*dimW. Никакой другой фрагмент программной реализации не требует такого объема вычислений. В результате распараллеливания, именно этот путь привел к значительному ускорению времени расчета модели. Схема распараллеливания По множителю k Главная (master) задача запускает дочерние (slave) задачи, посылает им необходимые аргументы и множитель(-и) ,получает результаты и k выбирает лучший вариант. Расчета градиента квадратичной функции Главная (master) задача запускает N_task дочерних (slave) задач, посылает им векторы u, wk, множество Ik и индексы Start_k, Finish_k. Slave задача рассчитывает часть градиента, начиная со Start_k-ой координаты по Finish_k-ую. Результатом работы slave задачи являются (Finish_k -Start_k) координат искомого градиента. Во время работы slave задач master работает подобно им. Значение (Finish_k -Start_k) определяется числом запускаемых задач N_task, а именно, (Finish_k -Start_k) = [dimW / (N_task+1)] Так как объем вычислений для всех slave задач получается равным, то прием результатов осуществляется просто по порядку, а не по мере окончания вычислений в slave задачах. Средства распараллеливания В течение 3-го, 4-го курсов учебы на математическом факультете УдГУ студенты кафедры вычислительной математики изучают курсы «Математическая экономика» и «Параллельные алгоритмы». В рамках первого курса была предложена сама задача, а в рамках второго – средства параллельного программирования, в частности PVM (Parallel Virtual Machine). Основная часть программы написана на языке C++ Параллельная часть программы реализована с помощью PVM Отладка и мониторинг производились с помощью XPVM Запуск программ осуществлялся на кластере PARC Кластер включает в себя 5 узлов на каждом из которых имеется 2 процессора Intel Pentium III 800 МГц Результаты распараллеливания Результаты полученные при решении задачи с N=10, A=5, M=5. Приводится график временной зависимости выполнения одного объема вычислений при различном числе запускаемых задач для разного количества узлов кластера Время, с 200 180 160 140 120 100 80 60 40 20 0 один дв а три четыре пять 0 1 3 5 7 9 11 Число запускаемых задач 13 15 17 Вывод: Использование второго процессора на одном узле уменьшает время в 2 раза, что является максимально возможным. Использование двух узлов уменьшает время счета в 3.5 раза при максимально возможном в 4 раза. Использование 3-х, 4-х, 5-ти узлов дает примерно одинаковое ускорение в 5.5 - 6.5 раз Результаты распараллеливания Результаты полученные в XPVM при решении задачи с N=4, A=4, M=2. Запуск на 5 двухпроцессорных узлах кластера PARC. Приводится структура работы программы во времени Оптимальный вариант: Неоптимальный вариант: master + 9 slave задач master + 19 slave задач Вывод: Чрезмерное увеличение числа задач ведет к простою процессоров во время ожидания посылаемых данных Результаты распараллеливания Результаты полученные в XPVM при решении задачи с N=4, A=4, M=2. Запуск на 5 двухпроцессорных узлах кластера PARC. Приводится характеристика работы запускаемых задач во времени Оптимальный вариант: master + 9 slave задач Вывод: При оптимальном подборе числа запускаемых задач удается достичь более эффективной загрузки всех процессоров одновременно. То есть достигается равномерная загрузка процессоров. Неоптимальный вариант: master + 19 slave задач Результаты распараллеливания Результаты полученные в XPVM при решении задачи с N=10, A=5, M=5. Запуск на 5 двухпроцессорных узлах кластера PARC. Приводится структура работы программы во времени Оптимальный вариант: Неоптимальный вариант: master + 9 slave задач master + 19 slave задач Вывод: В оптимальном варианте число запускаемых задач равняется числу используемых процессоров кластера. Результаты распараллеливания Результаты полученные в XPVM при решении задачи с N=10, A=5, M=5. Запуск на 5 двухпроцессорных узлах кластера PARC. Приводится характеристика работы запускаемых задач во времени Оптимальный вариант: master + 9 slave задач Вывод: Данные результаты показывают эффективность распараллеливания расчета градиента квадратичной функции. Видно, что работа остальной части программы занимает значительно меньше времени. Неоптимальный вариант: master + 19 slave задач Выводы Изучены и освоены средства создания и мониторинга параллельных программ. Создана параллельная реализация метода решения поставленной задачи Проведен мониторинг работы тестовых примеров Полученные результаты показали высокую степень распараллеливания задачи расчета на кластере неоклассической балансовой модели