УДК: 004.942 ГРНТИ: 20.23.17
РЕАЛИЗАЦИЯ ПАРАЛЛЕЛЬНОГО ГЕНЕТИЧЕСКОГО АЛГОРИТМА НА АРХИТЕКТУРЕ NVIDIA CUDA
Р. А. Жуков, П. В. Плехов*
Пермский национальный исследовательский университет Россия, 618404, г. Березники, ул. Тельмана, 7 * email: onim@rambler.ru
Описана реализация параллельного генетического алгоритма на основе островного метода с применением архитектуры CUDA. Произведен анализ производительности вычислений на графических процессорах. Показано преимущество применения CUDA именно для генетических алгоритмов, в том числе, для островного метода. Построена модель островного генетического алгоритма, применимая для архитектуры CUDA. Уточнены параметры генетических операторов для такой модели. Определены границы применения архитектуры CUDA для подобных задач.
Ключевые слова: генетический алгоритм, архитектура CUDA, островная модель.
REALIZATION OF ISLAND MODEL GENETIC ALGORITHM ON NVIDIA CUDA ARCHITECTURES
R. A. Zhukov, P. V. Plekhov*
Perm national polytechnic research university 7 Telmana St., 618404, Berezniki, Russia * email: onim@rambler.ru
Realization of island model genetic algorithm on NVidia CUDA architectures is described. Analysis of numerical efficiency of graphic processor units is made. Features of CUDE using exactly for genetic algorithms and for island model practically is shown. An island model suitable for CUDA is designed. Parameters of genetic operators for such model are precised. Scopes of CUDA applying for such tasks is determined.
Keywords: genetic algorithm, CUDA architectures, island model.
Генетические алгоритмы являются мощным предметно независимым методом поиска решения, основанные на теории Дарвина. Генетические алгоритмы базируются на таких свойствах живой природы как отбор, мутация и кроссинговер для поиска точки в пространстве состояний. Генетический алгоритм начинается с набора особей, что формирует популяцию. Обычно начальная популяция генерируется случайным образом с использованием равномерного распределения. На каждой итерации алгоритма особь очинивают с помощью функции полезности. Алгоритм заканчивается если приемлемое решение было найдено или вычислительные ресурсы были закончены. В противном случае особей в популяции изменяют путем применения операторов мутации и кроссовера. Особей из предыдущей популяции называют родителями, особей, которые получаем путем применения эволюционных операторов называют потомками.
Хотя генетические алгоритмы очень эффективны в решении многих практических задач, их время выполнения может стать ограничивающем фактором, так как необходимо обработать очень много вариантов решений. Но большинство трудоемких оценок пригодности может быть выполнено не зависимо для каждого индивида в популяции, используя различные методы распараллеливания.
Существуют различные способы параллелизма в генетических алгоритмах такие как модель рабочий и хозяин, модель диффузии, островная модель и гибридная модель.
Один из наиболее перспективных вариантов параллелизма является островная модель. Так как она может в полной мере использовать всю доступную вычислительную мощность компьютеров. При использовании данной модели популяции делятся на острова их еще можно на-
звать подпопуляции, и каждая из них развивается отдельно друг от друга. Острова популяций свободно сходятся к различным оптимумам. Применение оператора миграции позволяет смешивать хорошие черты возникающих на различных островах популяций.
В настоящее время современные графические ускорители, разработанные для ускорения 3d рендеринга в режиме реального времени можно рассматривать как систему с высокой степенью параллелизмами, и, следовательно, можно с пользой применять их для ускорения расчёта генетических алгоритмов.
Обусловлено постоянно растущим требованиям индустрии видео игр, графические процессоры эволюционировали в очень мощные и гибкие процессоры. Они сейчас проводят вычисления с плавающей точкой намного быстрее, чем сегодняшние центральные процессоры и, помимо графических приложений, они очень хорошо подходят для решения общих проблем, которые могут быть выражены в виде данных - параллельные вычисления (т. е. один и тот же код может выполняется с различными элементами данных).
Более того, несколько общецелевых языков высокого уровня для графических процессоров стали доступны в таких технологиях как CUDA и OpenCL. Таким образом, разработчикам не нужно больше осваивать дополнительно методы программирования графических процессоров через API - интерфейсы.
Современные видеокарты являются на самом деле очень мощными массивно-параллельными компьютерами с один главным недостатком: все элементарные процессоры на карте организуются в более крупные мультипроцессоры. Они должны выполнить одну и туже инструкцию
COMPUTER SCIENCE | Juvenis scientia 2016 № 3
9
одновременно, но с разными потоками данных.
Генетические алгоритмы необходимы для выполнения одинаковых функции оценки с разными индивидами (что можно рассматривать как разные данные), это и наводит на мысль о том, что применение графических процессоров в расчетах поможет в их ускорении.
Основная идея, которая приходит на ум, когда необходимо распараллелить эволюционный алгоритм состоит в том, чтобы запустить механизм развития последовательным способом на центральном процессоре, и когда новое поколение было бы создано заставить из оцениваться на компьютере с массовым параллелизмом. Этот подход был исследован в [12]. Предложенный эволюционный алгоритм достигает ускорения приблизительно в 100 раз. Однако, узким местом может быть в медленной передаче данных от памяти центрального процессора до графического и назад, особенно для небольших операций [7].
Существует еще один способ распараллеливания генетического алгоритма, который переносит весь алгоритм выполнения на графический процессор. При использовании языка программирования Cg [10, 11], который не предоставляет доступ к некоторым функциям графического процессора, такие как создание потоков вручную или блокировка управления. Параллельный генетический алгоритм, предназначенный для численной оптимизации представлен в [13]. К сожалению эта реализация достигла лишь небольшого ускорения между 1,36 и 5,30 в зависимости от численности популяций. Несколько интересных изданий можно найти в [9].
Для реализации генетического алгоритма на графическом процессоре (GPU) была выбрана платформа CUDA. Этот инструмент обещает достичь высокого ускорения на GPU. CUDA приложения может выполнятся на любой видеокарте NVIDIA начиная с GeForce 8 как на Linux системах так и на Windows. Естественный параллелизм на GPU выражен несколькими директивами компилятора добавленные к известному языку программирования C.
Как отмечалось ранее NVIDIA GPU состоит из мультипроцессора способного выполнять задачи параллельно. Потоки, работающие в этих процессорах очень маленькие и способны синхронизироваться, используя барьеры так чтобы целостность данных сохранялась. Это может быть сделано с очень низким влиянием на производительность в мультипроцессоре, но не между мультипроцессорами. Это ограничение вынуждает нас создавать острова или абсолютно независимые, или выполнять миграцию между ними асинхронно.
Память, используемая в видеокартах, разделена на два уровня — оперативная память и память на микросхеме. Оперативная память имеет большую емкость (сотни Мбайта) и содержит полный набор пользовательских программ, а также данных. Она также выступает как точка записи/вывода во время связи с ЦП. К сожалению, большая емкость перевешивается с высокой задержкой. С другой стороны, память на микросхеме очень быстра, но имеет очень ограниченный размер. Кроме локальных регистров на каждом потоке, память микросхемы содержит особенно полезные совместно используемые сегменты мультипроцессора. Этот массив 16 КБ действия как пользовательское управление кэшем L1. Размер памяти на микросхеме - строго ограничивающий фактор для разработки эффективного генетического алгоритма, но существующие приложения CUDA значительно извлекают выгоду из этого.
На рисунке 1 представлена модель генетического алгоритма на платформе CUDA. Идея заключается в создании островов, с миграцией вдоль однонаправленного кольца. Каждым индивидом управляет единственный поток CUDA. Популяции сохраняются в совместно используемой памяти на микросхеме на определенных мультипроцессорах GPU (блоки CUDA). Это гарантирует и в вычислительном отношении интенсивное выполнение и крупный параллелизм, необходимый для GPU.
Предложенный алгоритм начинается с инициализации популяции на стороне ЦП. Затем хромосомы и параметры генетического алгоритма передаются в оперативную память GPU, используя системную шину. Затем запускается ядро CUDA, выполняющее генетический алгоритм для GPU. В зависимости от параметров ядра популяции распределяются на несколько блоков (острова) потоков (индивидов). Все потоки на каждом острове читают свои хромосомы из оперативной памяти в быструю память на микросхеме в мультипроцессоре. С этого момента общая память помогает сохранить популяцию острова. Затем процесс развития продолжается с определенным количеством поколений в изоляции, в то время как острова и индивиды эволюционируют на графическом процессоре параллельно. Каждое поколение включает в себя фитнес функцию и отбора индивидов, кроссовера и мутации. Операторы разделены барьерами блока CUDA для обеспечения целостности данных.
Рис. 1 Модель генетического алгоритма на платформе CUDA
Чтобы смешать генетический материал с разных островов применяется функция миграции. Так как миграция требует межостровной коммуникации используется более медленная оперативная память. Поскольку CUDA блоки (острова) не могут быть синхронизированы без потери производительности, процесс миграции выполняется асинхронно, то есть не ждет пока выполнятся предыдущие операции. Это неприемлемо для обычных применений где требуется согласованность данных, но она хорошо работает на стохастических системах таких как генетический алгоритм.
Выполнение турнирного отбора и арифметического кроссовера тесно связанны как видно из рис.2. Таким образом использование разделяемой памяти эффективней.
Рис. 2 Схема турнирного отбора с кроссовером
Потоки (индивиды) сгруппированы в пары с помощью общих переменных и барьеров, так чтобы кроссовер мог выполнятся параллельно для целой популяции острова. Во-первых, каждый поток из пары случайным образом выбирает одного родителя, чтобы выполнить кроссовер и фитнес функцию для сравнения. Затем индекс лучшего записывается в общую память (общий массив 1), чтобы уведомит другой поток в паре о более подходящим партнере для выполнения кроссовера. Далее выполняется параллельная генерация случайных чисел на всем острове и результаты записываются в общий массив 2. Потом пара потоков ищут свое случайное число из этого массив и сравнивает его с вероятностью кроссовера, чтобы решит выполнять кроссовер или нет. Эта задача потребляет первую половину массива 2. Вторая половина используется во время арифметического кроссовера как веса агрегации:
(1)
(2)
где йг и O2 представляют потомков, Рг и P2 представляют родителей и обозначают веса агрегации. Такой подход тратит в пустую выбор индивидов в случае невыполнения кроссовера.
Процесс миграции представлен на рисунке 3. Острова соединены однонаправленным кольцом, что позволяет острову принимать индивидов от одного соседнего острова. Обмен выполняется асинхронно используя оперативную память GPU. Число перемещений индивидов определенно параметром M.
Во-первых, локальная популяция острова отсортирована согласно фитнес функции. Затем, M лучшие индивиды записываются в часть оперативной памяти принадлежащей покинутому острову в то время как худшие индивиды M записываются как мигранты из оперативной памяти принадлежащей фактическому острову. Сортировка и миграция выполняются параллельно для всех индивидов.
Для реализации подобного алгоритма необходимо
Рис. з Схема миграции между островами
применить библиотеку NVIDIA CUDA Toolkit 7.5 и Visual
Studio 2012. Для проведения полномасштабных экспериментов необходимо использовать графические ускорители от компании NVIDIA, с разным количеством ядер CUDA.
ЛИТЕРАТУРА
1. Cant-Paz, E.: Efficient and Accurate Parallel Genetic Algorithms. Kluwer Academic Publishers, Dordrecht (2000)
2. Galoppo, N., Govindaraju, N.K., Henson, M., Manocha, D.: LU-GPU: Efficient Algorithms for Solving Dense Linear Systems on Graphics Hardware. In: Proceedings of the ACM/IEEE SC 2005 Conference, vol. 3 (2005)
3. Harris, M., Luebke, D.: GPGPU: General-purpose computation on graphics hardware. In: Proceedings of the International Conference on Computer Graphics and Interactive Techniques: ACM SIGGRAPH 2005 Courses, Los Angeles, California (2005)
4. Holland, J.H.: Adaptation in Natural and Artificial Systems. University of Michigan Press (1975)
5. Jiang, C., Snir, M.: Automatic Tuning Matrix Multiplication Performance on Graphics Hardware. In: Proceedings of the 14th International Conference on Parallel Architectures and Compilation Techniques, pp. 185-196 (2005)
6. Li, J.-M., Wang, X.-J., He, R.-S., Chi, Z.-X.: An efficient fine-grained parallel genetic algorithm based on gpu-accelerated. In: IFIP International Conference on Network and Parallel Computing Workshops, NPC Workshops, pp. 855-862 (2007)
7. Maitre, Q., Baumes, L.A., Lachiche, N., Corma, A., Collet, P.: Coarse grain parallelization of evolutionary algorithms on GPGPU cards with EASEA. In: Proceedings of the 11th Annual conference on Genetic and evolutionary computation table of contents, Montreal, Qubec, Canada, pp. 1403-1410 (2009) ISBN 978-1-60558-325-9
8. Matthew, W.: GAlib: A C++ Library of Genetic Algorithm Components. Massachusetts Institute of Technology (1996)
9. Munshi, A.: The OpenCL specification version 1.0. Khronos OpenCL Working Group (2009)
10. Nguyen, H.: GPU gems 3. Addison-Wesley Professional, Reading (2007)
11. Nvidia CUDA — неграфические вычисления на графических процессорах [Электронный ресурс] - режим доступа: http://www. ixbt.com/video3/cuda-1.shtml
12. NVIDIA, C.: Compute Unified Device Architecture Programming Guide. NVIDIA: Santa Clara, CA (2007)
13. Pelikan, M., Sastry, K., Cant^u-Paz, E.: Scalable Optimization via Probabilistic Modeling: From Algorithms to Applications. Studies in Computational Intelligence. Springer, Heidelberg (2006)
14. Pharr, M., Fernando, R.: GPU Gems 2: Programming Techniques for High-Performance Graphics and General-Purpose Computation. Addison-Wesley Professional,Reading (2005)
15. Wong, M.L., Wong, T.T.: Implementation of Parallel Genetic Algorithms on Graphics Processing Units. In: Intelligent and Evolutionary Systems, vol. 187, pp. 197-216. Springer, Heidelberg (2009)
16. Yu,Q., Chen,C., Pan,Z.: Parallel genetic algorithms on programmable graphics hardware. In: Wang, L., Chen, K., S. Ong, Y. (eds.) ICNC 2005. LNCS, vol. 3612, pp. 1051-1059. Springer, Heidelberg (2005)
17. Боресков А. В., Харламов А. В. Основы работы с технологией CUDA. — М.: ДМКПресс, 2010. — 232 с.
18. Боресков А.В., Харламов А.А., Марковский Н.Д. Параллельные вычисления на GPU. Архитектура и программная модель CUDA. Учебное пособие. - / Предисл.: В. А. Садовничий. - М.: Издательство Московского университета, 2012. - 336 с., илл.
19. Генетические алгоритмы [Электронный ресурс] - режим доступа: https://ru.wikipedia.org/wiki/Генетический_алгоритм
20. Гладков Л.А., Курейчик В.В., Курейчик В.М. Генетические алгоритмы [Текст]/ Под ред. В.М. Курейчика. — 2-е изд., испр. и доп.
— М.: ФИЗМАТЛИТ, 2006. — 320 с. — ISBN 5-9221-0510-8.
21. Затонский А.В., Копотева А.В. Алгоритм нахождения произведения четких и нечетких вероятностей и его программная реализация // Программные продукты и системы. 2014. № 106. С. 84-88
Поступила в редакцию 09.03.2016