Разработка методов дискретной оптимизации, ориентированных на графические ускорители и гибридные системы
Подробное описание алгоритма полного перебора на GPU. Основная характеристика метода ветвей и границ Горовица-Сахни. Управление вычислениями на видеокарте. Главная особенность выполнения одного набора команд на большом объеме различных входных данных.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 15.09.2018 |
Размер файла | 186,1 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ «ВЫСШАЯ ШКОЛА ЭКОНОМИКИ»
Московский институт электроники и математики
Выпускная квалификационная работа
«Системы управления и обработки информации в инженерии» наименование образовательной программы
Разработка методов дискретной оптимизации, ориентированных на графические ускорители и гибридные системы
Попов Михаил Владимирович
Москва 2018
1. Тема работы
Разработка методов дискретной оптимизации, ориентированных на графические ускорители и гибридные системы
2. Цель работы
Опираясь на ранее полученные результаты, реализовать другие алгоритмы получения точного решения задачи о ранце, реализовать гибридный алгоритм, провести сравнение полученных результатов на разных конфигурациях ЭВМ
3. Формулировка задания
1) Реализовать алгоритм полного перебора на CPU, GPU
2) Реализовать алгоритм метода «ветвей и границ» на основе алгоритма
Горовица-Сахни на CPU
3) Реализовать гибридный алгоритм, совмещающий переборный метод и метод ветвей и границ
4) Провести сравнение реализованных алгоритмов на разных конфигурациях
ЭВМ и разных исходных наборах данных
5) Провести анализ полученных результатов, сформулировать выводы
Проект ВКР должен быть предоставлен студентом в срок до «___»__________20__г.
Научный руководитель ВКР «___»_________ 20__ г. ______________ И.О. Фамилия
Первый вариант ВКР предоставлен студентом в срок до «___»__________20__г.
Научный руководитель ВКР «___»_________ 20__ г. ______________ И.О. Фамилия
Итоговый вариант ВКР предоставлен студентом в срок до «___»__________20__г.
Научный руководитель ВКР «___»_________ 20__ г. ______________ И.О. Фамилия
Задание выдано студенту «___» _________ 20__ г. ______________ И.О. Фамилия научного руководителя ВКР
Задание принято к исполнению студентом «___» _________ 20__ г. ______________ И.О. Фамилия
- Оглавление
Глава 1. Постановка задачи
Глава 2. Алгоритмы
2.1 Метод полного перебора
2.2 Метод ветвей и границ Горовица-Сахни
2.3 Гибридный алгоритм
Глава 3. Тестирование
3.1 Тест 1
3.2 Тест 2
3.3 Тест 3
3.4 Сравнение эффективности
Выводы
Список литературы
Аннотация
Глава 1. Постановка задачи
В рамках выпускной квалификационной работы, рассмотрена задача об одномерном ранце, являющаяся классической задачей в области дискретной оптимизации. Данная задача - одна из задач класса NP-полных задач комбинаторной оптимизации. Комбинаторная оптимизация это область теории оптимизации, рассматривающая задачи о поиске оптимального элемента из конечного множества элементов. Под NP-полной задачей понимается тип задач, время решения которых превышает полиномиальное, относительно размерности входных данных. Исходя из гипотезы о неравенстве классов задач P и NP, исследования эффективности различных алгоритмов решения типовой задачи о ранце могут помочь в разрешении гипотезы.
Выбранная в рамках работы задача о ранце имеет следующую постановку: из конечного множества элементов с параметрами «вес» и «стоимость», необходимо найти некоторое подмножество, обладающее наибольшей суммой стоимостей, при этом не превосходящее ограничение по суммарному весу. Реализация различных способов решения задачи о ранце является актуальной на сегодняшний день, поскольку решение данной задачи активно используется при решении более сложных прикладных проблем в различных сферах: планировании, управлении, инвестициях, логистике, моделировании экономических процессов, криптографии, и т.д.
Данная задача была выбрана в рамках работ, проводимых в ФИЦ ИУ РАН в отделе «Прикладных проблем оптимизации». В процессе изучения возможных способов получения решения задачи, было проведено исследование возможности использования графических ускорителей, а также комбинирования алгоритмов, реализованных на гибридных системах - совместном использовании центрального процессора и графической карты.
Таким образом, поставленная задача заключается не только в реализации различных алгоритмов, но и в исследовании возможностей графических карт и сравнении результатов. Для параллельных вычислений на графической карте была выбрана технология CUDA от Nvidia.
Решения задачи о ранце в рамках комбинаторной оптимизации начали появляться во второй половине 20 века. Большинство методов решения данной задачи было сформулировано и реализовано в 1970-х годах. Реализации этих решений основывались на достаточно старых вычислительных технологиях. С развитием компьютерных систем, на сегодняшний день имеется множество различных технологий, языков и стандартов, для современных реализаций алгоритмов решения задачи. В 2006 году в рамках проекта GPGPU -( General-purpose computing for graphics processing units) - проекта, посвящённому использованию графических карт не только для обработки графической информации в приложениях, но и для обычных расчётов, которыми обычно занимается центральный процессор. Данный проект изменил представления о вычислениях, открыв новую эру вычислений на графических картах. Благодаря особой архитектуре, видеокарты обладают огромным вычислительным потенциалом, благодаря высокому параллелизму операций. Современные суперкомпьютеры, обладающие производительностью, оцениваемой в петафлопсах, по большей части строятся на основе графических ускорителей.
Таким образом, было принято решение об использовании графических карт для вычислений в рамках данной ВКР. Использование новых технологий позволит добиться более высокой производительности, чем на центральном процессоре. Время решения задач оптимизации для получения точного результата является главным фактором, благодаря которому можно оценить эффективность алгоритма. Поэтому использование новых технологий при реализации решения задачи о ранце является актуальной и важной задачей.
Для реализации параллельных алгоритмов, вычисляемых на видеокарте, была выбрана технология CUDA от Nvidia. Первый выпуск датируется 23 июня 2007 года. С того момента архитектура графических процессоров существенно улучшилась. Если первые видеокарты обладали порядком сотни независимых вычислительных ядер, то на сегодняшний день лучшие графические ускорители обладают более чем 5000 ядер.
Вычисления на видеокартах строятся по принципу SIMD - Single Instruction, Multiple Data - что означает выполнение одного набора команд на большом объёме различных входных данных. Архитектура видеокарты (Рис. 1) устроена следующим образом: существует некоторое число потоковых мультипроцессоров, работающих с вычислительными потоками. Вычисления на каждом потоке делаются независимо от других потоков на мультипроцессоре и от работы других мультипроцессоров.
Рис. 1. Архитектура видеокарты
Управление вычислениями на видеокарте происходит с ядер центрального процессора. Они передают необходимые данные мультипроцессорам, которые в свою очередь распределяют данные по вычислительным блокам потоков. По окончании вычислений данные необходимо вернуть обратно из памяти видеокарты в оперативную память ПК. Данный способ вычислений хорошо подходит под нерекурсивные алгоритмы, такие как метод полного перебора, произведение матриц, работа нейронных сетей. Для задачи о ранце в её изначальной постановке, очевиден самый простой способ - перебрать все возможные комбинации элементов для поиска оптимального.
В силу отсутствия рекурсивных вычислений, данный алгоритм хорошо подходит для реализации на GPU. Одна из основных идей данной работы заключается в том, чтобы выяснить возможности применения графических ускорителей для различных методов решения задачи о ранце, а также сравнить их с рекурсивными методами, такими, как метод ветвей и границ. В том числе, интересна возможность комбинирования параллельных вычислительных и оптимизированных рекурсивных алгоритмов. Данная идея в работе обозначена как «Гибридный алгоритм».
Прежде, чем приступить к анализу алгоритмов, необходимо провести математическую формализацию поставленной задачи о ранце:
· Имеется “n” элементов.
· Каждый элемент обладает свойствами: вес - , стоимость - .
· Задано ограничение вместимости W.
· Необходимо максимизировать функцию суммы стоимостей , при заданном ограничении суммарного веса (вместимости) W, ? W
· Вектор представляет собой набор из 0 и 1, т.е. - коэффициент наличия элемента.
В данной постановке, задача о ранце «Рюкзак 0-1», поскольку каждый предмет существует в единственном экземпляре, а конечное решение представляет собой вектор длины «n», состоящий из 0 и 1. Данный вид задачи является одним из самых распространённых и простых для реализации.
Также существует множество других задач о ранце, отличающихся по постановке, например: элементы могут существовать в наборе не в единственном экземпляре, вплоть до неограниченного количества, или элементы сгруппированы, и требуется наличие в конечном наборе по 1 элементу из каждой группы. В данной работе рассматриваются способы решения задачи «Рюкзак 0-1».
Глава 2. Алгоритмы
2.1 Метод полного перебора
Для решения задачи о ранце было придумано и реализовано огромное количество различных методов, реализующих получение точного результата, либо приближенного за меньшее время. Среди точных методов, самый очевидный - метод полного перебора. По количеству операций, необходимых для получения решения, данный алгоритм является не оптимальным, поскольку сложность алгоритма составляет O(), где n - количество элементов (размерность задачи). Преимущество алгоритма полного перебора заключается в том, что легко оценить количество операций, а соответственно заранее просчитать время выполнения на конкретном устройстве. Также, очень важно, что данный алгоритм абсолютно не зависит от входных коэффициентов.
Описание последовательного алгоритма:
1) Вычисляется общее число операций ;
2) В цикле от 0 до каждое число переводится из десятичной системы в двоичную, то есть превращается в бинарный набор длины n;
3) Каждый коэффициент стоимости и веса умножается на соответствующий его индексу 0 или 1 из бинарного набора, производится сложение полученных значений для данного набора.
4) Если сумма веса не превосходит вместимость W, то сумма стоимостей сравнивается с максимально достигнутым на данном шаге (если есть, иначе записывается вместо максимального);
5) По окончании цикла, выводится максимальное значение суммарной стоимости, достигнутого веса, номера набора. Из номера набора путём бинаризации можно получить искомый вектор (Вместо поиска набора по числу, можно сохранять набор, полученный на шаге 4)
При параллельной реализации с использованием технологии CUDA, первые 3 этапа алгоритма поддаются небольшим изменениям, относительно последовательной версии, и выполняются на потоках графической карты, а дальше алгоритм меняется в силу особенностей архитектуры:
1) Вычисляется общее число операций ;
2) Исходя из этого числа, определяется количество используемых в вычислениях блоков потоков;
3) Вызывается функция на GPU, которая, исходя из значения номера потока и блока потоков на видеокарте, вычисляет свой собственный уникальный бинарный набор;
4) Каждый коэффициент стоимости и веса умножается на соответствующий его индексу 0 или 1 из бинарного набора, производится сложение полученных значений для данного набора.
5) Если сумма веса, полученная на потоке не превосходит вместимость W, то сумма стоимостей записывается в память видеокарты;
6) По окончании вычислений одного блока потоков, производится редукционный поиск максимального значения в блоке;
7) Из множества полученных максимальных значений для каждого блока потоков, путём редукции, определяется единственное максимальное число.
Редукция на CUDA - аналог алгоритма бинарного поиска, который, благодаря особенностям архитектуры видеокарты, позволяет найти максимальное значение в блоке потоков, максимально быстрым способом, относительно перебора и попарного сравнения значений. Редукционный поиск максимального значения заключается в том, что всё множество полученных значений на блоке потоков делится пополам. После этого, левая половина значений попарно сравнивается с правой, и, если значение из правой части превосходит соответствующее ему значение из левой части, оно записывается в левую часть. Таким образом, количество операций для поиска максимального значения сокращается до , где t - количество обрабатываемых значений.
Рис. 2. Редукция.
Вычисления на видеокарте производятся каждым потоком независимо, однако за 1 раз 1 потоковый мультипроцессор может обработать «warp» - небольшой блок, состоящий из 32 потоков. Таким образом, за выполнение одного warp'a будет получено 32 значения суммарный весов и стоимостей на 1 мультипроцессоре, следовательно, при наличии только 1 мультипроцессора, количество операций сокращается с до . При наличии «k» процессоров на графическом ускорителе, данное число сокращается до операций.
Подробное описание алгоритма полного перебора на GPU
Реализованный на CUDA алгоритм адаптирован так, что программа выполнится, вне зависимости от используемой видеокарты Nvidia и её параметров, поскольку максимально допустимое количество выполняемых блоков и потоков автоматически извлекается из показателей графического ускорителя.
cudaDeviceProp deviceProp;
cudaGetDeviceProperties(&deviceProp, 0);
int threads_per_block = deviceProp.maxThreadsDim[0];
int max_blocks = deviceProp.maxGridSize[0]/2 + 1;
«threads_per_block» - максимальное количество потоков в блоке;
«max_blocks» - максимальное количество блоков на 1 мультипроцессор.
Используемые данные - коэффициенты веса, стоимости и вместимость, вводятся вручную либо перенаправлением потока ввода из файла. В первоначальной реализации коэффициенты копировались в глобальную память видеокарты, однако в ходе исследований и тестирования было получено, что копирование данных коэффициентов в «constant memory» видеокарты, даёт прирост производительности около 10%, поскольку скорость обращения к константной памяти на видеокарте является самой быстрой. Также на копирование коэффициентов в константную память повлияло тот факт, что коэффициенты не изменяются в ходе работы программы.
Далее выполняется функция, отвечающая за выполнение 1 блока потоков. Запускается блок из максимального (обычно 1024) числа потоков. В разделяемой памяти видеокарты создаётся 2 массива - один для значений сумм стоимостей потока, второй для записи номера потока.
extern __shared__ float sh_array[];
float* sh_maxs = (float*)sh_array;
long int* indices = (long int*)&sh_maxs[threads_per_block];
indices[threadIdx.x] = threadIdx.x;
«extern» - означает, что количество выделяемой памяти задаётся в вызове функции.
«sh_maxs» - суммы стоимостей каждого потока, записываемые в разделяемую память видеокарты.
«indices» - индексы потоков в блоке; используются в процессе редукции для поиска оптимального набора - вектора
Разделяемая память (shared memory) является второй по скорости обращения, но её объём очень мал, в сравнении с объёмами глобальной памяти, обращение к которой идёт намного дольше. Поэтому имеет смысл помещать в разделяемую память те данные, с которыми будут постоянно происходить изменения, либо обращения к ним. Соответственно, выгодно поместить туда массивы сумм и индексов в блоке, поскольку при редукции они будут постоянно перемещаться по выделенным участкам разделяемой памяти. Далее идёт синхронизация потоков, после чего каждый поток вычисляет свой бинарный набор, исходя из номера потока, и номера блока потоков, после чего перемножает коэффициенты весов и стоимостей на двоичный вектор:
#pragma unroll
for (uint i = 0; i < arraySize; i++)
{
th_bin[i] = ((num_to_bin) >> i) % 2;
th_w_sum += th_bin[i] * coefs[i];
th_v_sum += th_bin[i] * coefs[i+arraySize];
}
«#pragma unroll» - выражение, которое после прочтения компилятором, «разворачивает» цикл, т.е. все операции будут произведены одновременно, а на в цикле.
«th_bin[i]» - массив размерности n (число предметов), вектор
«th_w_sum» - сумма весов на наборе потока.
«th_v_sum» - сумма стоимостей на наборе потока.
«coefs» - коэффициенты веса или стоимости, в зависимости от индекса. Находятся в константной памяти GPU.
Далее идёт отсев «лишних» значений:
sh_maxs[threadIdx.x] = (th_w_sum > coefs[arraySize*2]) ? 0:th_v_sum;
В разделяемую память блока записываются только те значения, которые удовлетворяют условию ограничения вместимости. Иначе записывается 0.
После синхронизации потоков, начинается редукционный поиск максимума на блок:
for (uint offset = blockDim.x >> 1; offset >= 1; offset >>= 1)
{
if (threadIdx.x < offset)
{
if (sh_maxs[threadIdx.x] < sh_maxs[threadIdx.x + offset])
{
sh_maxs[threadIdx.x] = sh_maxs[threadIdx.x + offset];
indices[threadIdx.x] = indices[threadIdx.x + offset];
}
}
__syncthreads ();
}
«blockDim» - размер блока - количество потоков в блоке.
«offset» - сдвиг для сравнения элементов; равен половине размера рассматриваемого блока.
После проведения цикла операций, в ячейках разделяемой памяти с индексом 0 оказываются максимальная сумма стоимостей из блока и номер потока, после чего они записываются в глобальную память видеокарты, поскольку разделяемая память существует только на протяжении работы одного блока.
В данном случае мы не можем «развернуть» цикл, поскольку он является рекурсивным из-за перезаписи значений.
После выполнения данных операций на всех блоках, производится повторная редукция по полученным максимальным значениям блоков, которые перезаписываются из глобальной памяти видеокарты в разделяемую, для увеличения скорости работы. Вместе с максимальными значениями в разделяемой памяти находятся сохранённые индексы, от которых в процессе редукции остаётся единственный оптимальный индекс. Итоговое значение максимального значения и его индекса возвращается в оперативную память ПК для последующего сохранения и вывода. По полученному индексу восстанавливается искомый бинарный вектор оптимальный набор элементов, удовлетворяющий поставленным условиям.
2.2 Метод ветвей и границ Горовица-Сахни
Метод Горовица-Сахни - один из способов решения задачи о ранце. В отличие от алгоритма полного перебора, считается более оптимизированным, благодаря отсеву заранее неподходящих наборов элементов, однако заранее просчитать количество операций и время работы невозможно. Это происходит из-за того, что данный алгоритм очень сильно зависит от коэффициентов элементов и вместимости ранца. Также, достоинством является то, что выполнение алгоритма использует очень мало памяти, поскольку вся работа производится на одном двоичном векторе. В изначальном виде алгоритм является рекурсивным, из-за чего возможности распараллеливания достаточно ограничены.
Описание алгоритма:
1) Все элементы сортируются в порядке уменьшения удельной стоимости - отношения цены к весу предмета;
2) Начинается «движение вперёд» - аналог «жадного алгоритма» - поместить как можно больше предметов подряд, до того, как сумма весов превысит вместимость ранца. Элементы вектора, «положенные в ранец», помечаются цифрой 1;
3) Когда суммарный вес превышает вместимость, делается «шаг назад» (backtrack) - выбрасывается последний положенный элемент, вершина помечается как 0, и проверяется, какие элементы после него могут поместиться в рюкзак, и улучшит ли это достигнутое максимальное значение суммы стоимостей. Проверка возможности улучшения достигнутого максимума, задача линейной релаксации, заключается в том, что берётся не весь элемент, а его часть, умещающаяся в остаточную вместимость рюкзака.
4) Алгоритм продолжается до тех пор, пока станет невозможным сделать «шаг назад».
Чем больше разница у очередной пары «удельных стоимостей», тем эффективнее работа алгоритма, и наоборот. Если коэффициенты отношения стоимости к цене будут близки к друг-другу, алгоритм показывает меньшую эффективность. Для реализации решения задачи о ранце методом ветвей и границ, существует критический вариант набора коэффициентов, предложенный Ю.Ю. Финкельштейном. Эти условия заключаются в том, что все коэффициенты (и стоимости и веса) равны 2, а вместимость определяется по формуле , где n - количество предметов. Таким образом, первоначальная постановка задачи о ранце превращается в следующую:
В данном случае, когда все коэффициенты чётные, а вместимость - нечётная, решение задачи релаксации будет вызываться на каждом «шаге назад», из-за чего не происходит отсева заведомо неоптимальных наборов, совершается в несколько раз больше действий, а эффективность становится меньше, чем у алгоритма полного перебора.
Не смотря на рекурсивность алгоритма, существуют способы распараллеливания вычислений. Идея распараллеливания заключается в том, чтобы выбрав одно направление обхода бинарного дерева, распределять «подзадачи» на другие вычислительные юниты (потоки, ядра, процессоры). В такой реализации алгоритм будет отличаться от изначального, добавлением дополнительной метки «2». Данную идею реализации алгоритма, предложили и реализовали М.А. Посыпкин и И.Х. Сигал в 2008 году в рамках трудов 4 международной конференции «Параллельные вычисления и задачи управления». Суть дополнительной метки заключается в том, чтобы пометить некоторую вершину данным значением, а вершины, следующие после неё, передать для анализа на другое вычислительное устройство. После вычислений, проверить, улучшает ли данная ветка достигнутый в основном потоке вычислений рекорд значения суммы стоимостей, и не превышает ли данная ветвь суммарную вместимость.
Иллюстрации к работе данного алгоритма (Рис. 3) показывают организацию бинарного дерева, направления обхода, а также разницу между последовательной и параллельной реализацией. Параллельная реализация позволяет в процессе вычислений разбить первоначальную задачу на множество подзадач, которые можно независимо передавать для обработки на другие вычислительные модули.
Рис. 3а. Вектор 110 Рис. 3б. Вектор 120
Рис. 3. Метод Горовица-Сахни. а) - последовательный рекурсивный алгоритм; б) - параллельная реализация с разбиением на подзадачи.
Такой способ хорошо подходит для вычислений на CPU, а не на GPU, в силу особенностей архитектуры. Для реализации параллельной версии с использованием графической карты была изучена идея совмещения переборного алгоритма с данным методом, названная в данной работе «Гибридный алгоритм».
2.3 Гибридный алгоритм
Данный алгоритм совмещает в себе алгоритм полного перебора и метод ветвей и границ Горовица-Сахни. Идея заключается в том, чтобы «зафиксировать» некоторый начальный набор элементов, после чего вычесть из общей вместимости полученную сумму веса, а на оставшихся предметах использовать метод Горовица-Сахни.
Фиксированная часть. Нефиксированная часть.
Решение методом полного перебора. Решение методом Горовица-Сахни. ветвь граница видеокарта данный
Подобные идеи комбинированного алгоритма рассмотрены в главе 2.2, однако предложенный алгоритм подразумевал использование параллелизма на центральном процессоре, без применения технологий вычисления на графических картах.
В рамках ВКР, мной был рассмотрен и реализован комбинированный (гибридный) алгоритм, использующий для вычислений возможности GPU.
Реализация метода Горовица-Сахни на одном потоке GPU не отличается от её реализации на CPU, поэтому параметры решения данной задачи на GPU зависят только от количества элементов, обрабатываемых методом полного перебора.
Описание алгоритма:
1) Определяется номер элемента «k» для деления набора;
2) Каждый поток видеокарты создаёт часть бинарного набора от 0 до k;
2.1) В разделяемую память блока записывается индекс потока;
3) Производятся операции перемножения коэффициентов веса и стоимости на первых k элементов;
4) Каждый поток вычисляет свою «остаточную» вместимость - разность общей вместимости, и полученной суммы веса на шаге 3;
5) Начиная с «k + 1»-го до «n»-го элемента выполняется алгоритм метода ветвей и границ Горовица-Сахни для остаточной вместимости;
6) Полученные значения потоков записываются в разделяемую память;
7) Производится поблоковая редукция для поиска максимальной суммы стоимостей;
7.1) При поиске максимального значения в блоке, записывается номер потока, получившего максимальное значение;
7.2) Полученный оптимальный бинарный набор на потоке с максимумом, записывается в глобальную память видеокарты.
8) Проводится последняя редукция для определения максимальной суммы стоимостей и определения искомого набора элементов - вектора
Пункта 7.2 не было в параллельной реализации алгоритма полного перебора, поскольку бинарный набор можно было получить путём перевода номера потока из десятичной системы в двоичную. В данном же случае он необходим, поскольку каждый поток вычисляет только часть бинарного набора, а остальное перебирается методом ветвей и границ. Поэтому получить этот набор путём перевода из 10 в 2 систему счисления невозможно, и приходится записывать каждый оптимальный набор отдельно. При этом запись идёт в глобальную память, что позволяет хранить большое количество таких наборов.
Реализация гибридного алгоритма поможет при решении задач с «неудачными» с точки зрения стандартного алгоритма метода ветвей и границ, коэффициентами. Это происходит благодаря тому, что фиксация некоторой части вектора позволяет уменьшить размерность подзадачи, решаемой методом ветвей и границ. Одновременно с тем, как не зависящая от коэффициентов часть переборного алгоритма будет всегда выполняться за стабильное количество времени, и можно гарантировать, что «лишних» операций на данной, фиксированной, части, выполняться не будет, мы уменьшаем количество возможных «лишних» операций в процессе вычислений методом ветвей и границ.
Глава 3. Тестирование
Тестирование реализованных алгоритмов проводилось на 3 разных конфигурациях ЭВМ. Наборы коэффициентов генерировались по способу, предложенному в книге «Knapsack problems. Algorithms and Computer implementations» авторов Silvano Martello и Paollo Toth. Коэффициенты генерировались 3 способами с разными параметрами:
Без корреляции:
и - случайные числа в диапазоне .
Слабая корреляция:
- случайное число в диапазоне ;
случайное число в диапазоне [.
Сильная корреляция:
- случайное число в диапазоне ;
число равное
Ограничение вместимости вычислялось 2 способами:
,
,
Для каждого способа генерации использовалось по 3 разных диапазона генерации случайных чисел, что должно дать большую чистоту проводимым исследованиям. Помимо данных способов задания коэффициентов, были проведены эксперименты с использованием условий задачи Финкельштейна.
Для тестирования использовалась размерность задачи в 31 предмет. Данное число стало переходным в решении задачи, поскольку индексы/количество операций перешли с int на long (с 4 байт на 8).
Далее будут приведены средние показатели времени выполнения программ на различных конфигурациях ЭВМ для различных наборов коэффициентов. Для каждого набора указывается 2 показателя времени в зависимости от способа вычисления ограничения вместимости ранца.
3.1 Тест 1
Первая конфигурация ЭВМ:
GPU - Nvidia GeForce 610m, 1 SM, 48 cores, 1024 threads, Architecture - Fermi
CPU - Intel Core I3, 2.3GHZ, single thread
Compiler - gcc 5.4
Cuda compute capability 2.0, Toolkit v7.5
Первый тест - последовательный полный перебор. Поскольку количество операций переборного алгоритма всегда известно заранее, исходя из размерности задачи, тестирование проводилось не на всех наборах, поскольку время работы не отличалось вне зависимости от коэффициентов.
Среднее время работы составило около 600 секунд, то есть порядка 10 минут.
Второй тест - параллельный полный перебор на GPU. Этот алгоритм также не зависит от коэффициентов и выдаёт стабильное время работы. Оно составило в среднем 28,9 c. Отклонение от среднего времени составило не более 0,015с.
Ускорение относительно последовательной версии составляет около 21,5 раз.
Третий тест - реализация метода ветвей и границ Горовица-Сахни на CPU:
А) Данные не коррелируют:
3,45с
0,443с
Б) Данные обладают слабой корреляцией:
2,293с
0,4с
В) Данные сильно коррелируют:
0,37с
1,17с
Г) Условия Финкельштейна:
Около 1600с - около 26 минут.
Четвёртый тест - гибридный алгоритм.
А) Данные не коррелируют:
2,73с
0,93с
Б) Слабая корреляция:
0,73с
0,51с
В) Сильная корреляция
1,75с
0,97с
Г) Условия Финкельштейна:
81,26с
3.2 Тест 2
Вторая конфигурация ЭВМ:
GPU - Nvidia GeForce GTX 1060, 10 SM, 1152 cores, 1024 threads, Architecture - Pascal
CPU - Intel Core I7, 2.8-3.8GHZ, single thread
Compiler - clang 4.0
Cuda compute capability 6.1, Toolkit v9.1
Полный перебор на одном потоке CPU:
360 c. - около 6 минут.
Перебор на GPU:
В среднем около1,25с.
Алгоритм Горовица-Сахни на CPU:
А) Данные без корреляции:
1,347с
0,3с
Б) Слабая корреляция:
1,38с
0,35с
В) Сильная корреляция:
0,49с
0,72c
Г) Условия Финкельштейна:
900с. - 15минут
Гибридный алгоритм:
А) Без корреляции:
0,28с
0,31с
Б) Слабая корреляция:
0,24с
0,11с
В) Сильная корреляция:
0,37с
0,87с
Г)Условия Финкельштейна:
6,093с
3.3 Тест 3
Третья конфигурация ЭВМ:
GPU - Nvidia GeForce GTX 1070, 15 SM, 1920 cores, 1024 threads, Architecture - Pascal
CPU - AMD Ryzen 5, 1,6-3.2GHZ, single thread
Compiler - gcc 4.0
Cuda compute capability 6.1, Toolkit v9.1
Полный перебор на CPU:
420с - 7 минут
Параллельный полный перебор:
0,873с
Горовиц-Сахни на CPU:
А) Без корреляции:
3,954с
1,732с
Б) Слабая корреляция:
1,49c
0,39с
В) Сильная корреляция:
0,55с
0,83с
Г) Финкельшетйна:
1000с - около 16 минут
Гибридный алгоритм:
А) Без корреляции:
0,309с
0,255с
Б) Слабая корреляция:
0,24с
0,069с
В) Сильная корреляция:
0,22с
0,81с
Г) Условия Финкельштейна:
5,7с
3.4 Сравнение эффективности
Полученные данные собраны в таблицы в порядке исследуемых алгоритмов, для более удобного сравнения. Таблицы находятся в порядке анализируемых алгоритмов.
Пояснения к таблицам:
ПК1-ПК3 - конфигурации тестовых ЭВМ, перечисленные в главе 3.1-3.3
Б.К. - «без корреляции»
Сл.К. - «слабая корреляция»
Сил.К. - «сильная корреляция
Финк. - «задача Финкельштейна»
Цифры 1 и 2 после типа данных указывают на используемое ограничение по весу (указано в главе 3)
В ячейках таблицы указано время выполнения в секундах.
В ходе агрегации полученных результатов в ходе исследования эффективности, были созданы следующие таблицы:
Таблица 1. Полный перебор на CPU. Время в секундах.
Б.К.1 |
Б.К.2 |
Сл.К.1 |
Сл.К.2 |
Сил.К.1 |
Сил.К.2 |
Финк. |
||
ПК1 |
600 |
600 |
600 |
600 |
600 |
600 |
600 |
|
ПК2 |
360 |
360 |
360 |
360 |
360 |
360 |
360 |
|
ПК3 |
420 |
420 |
420 |
420 |
420 |
420 |
420 |
Для данного алгоритма время выполнения не зависит от коэффициентов, поэтому всё время усреднено для каждого тестового ПК.
Таблица 2. Полный перебор на GPU. Время в секундах.
Б.К.1 |
Б.К.2 |
Сл.К.1 |
Сл.К.2 |
Сил.К.1 |
Сил.К.2 |
Финк. |
||
ПК1 |
28,9 |
28,9 |
28,9 |
28,9 |
28,9 |
28,9 |
28,9 |
|
ПК2 |
1,25 |
1,25 |
1,25 |
1,25 |
1,25 |
1,25 |
1,25 |
|
ПК3 |
0,87 |
0,87 |
0,87 |
0,87 |
0,87 |
0,87 |
0,87 |
Данный алгоритм также не зависит от коэффициентов задачи.
Таблица 3. Метод ветвей и границ Горовица-Сахни на CPU. Время в секундах.
Б.К.1 |
Б.К.2 |
Сл.К.1 |
Сл.К.2 |
Сил.К.1 |
Сил.К.2 |
Финк. |
||
ПК1 |
3,45 |
0,44 |
2,29 |
0,4 |
0,37 |
1,17 |
1600 |
|
ПК2 |
1,37 |
0,3 |
1,38 |
0,35 |
0,49 |
0,72 |
900 |
|
ПК3 |
3,95 |
1,73 |
1,49 |
0,39 |
0,55 |
0,83 |
1000 |
Время работы программ в реализации данного алгоритма очень сильно зависит от коэффициентов, поэтому в некоторых случаях алгоритм может оказаться менее эффективным, чем метод полного перебора, распараллеленный на GPU. Не смотря на то, что метод ветвей и границ считается более оптимальным, при «неудачном» наборе коэффициентов, производятся дополнительные («лишние») действия в силу особенностей алгоритма, относительно стабильного числа операций при полном переборе. Особенно явно эта проблема выражена показателями времени работы при выполнении задачи Финкельштейна.
Таблица 4. Гибридный алгоритм. Время в секундах.
Б.К.1 |
Б.К.2 |
Сл.К.1 |
Сл.К.2 |
Сил.К.1 |
Сил.К.2 |
Финк. |
||
ПК1 |
2,73 |
0,93 |
0,73 |
0,51 |
1,75 |
0,97 |
81,2 |
|
ПК2 |
0,28 |
0,31 |
0,24 |
0,11 |
0,37 |
0,87 |
6,09 |
|
ПК3 |
0,31 |
0,25 |
0,24 |
0,07 |
0,22 |
0,81 |
5,7 |
В среднем, алгоритм на обычных (псевдослучайных) данных работает эффективнее, чем метод Горовица-Сахни. На задаче Финкельштейна среднее ускорение времени работы составляет более 15 раз. Более подробно ускорение описано в таблицах 5-8.
Таблица 5. Относительное ускорение на случайных данных.
Полный перебор на CPU (А) |
Полный перебор на GPU (Б) |
Метод Горовица-Сахни (В) |
Гибридный алгоритм (Г) |
|||||||||||
П.К.1 |
П.К.2 |
П.К.3 |
П.К.1 |
П.К.2 |
П.К.3 |
П.К.1 |
П.К.2 |
П.К.3 |
П.К.1 |
П.К.2 |
П.К.3 |
|||
А |
П.К.1 |
1 |
1,67 |
1,43 |
20,76 |
480 |
689,6 |
437,9 |
771,2 |
402,7 |
472,4 |
1666 |
1818 |
|
П.К.2 |
0,6 |
1 |
0,86 |
12,46 |
288 |
413,8 |
262,7 |
462,7 |
241,6 |
283,5 |
1000 |
1090 |
||
П.К.3 |
0,7 |
1,17 |
1 |
14,53 |
336 |
482,8 |
306,6 |
539,8 |
281,9 |
330,7 |
1167 |
1273 |
||
Б |
П.К.1 |
0,05 |
0,08 |
0,069 |
1 |
23,12 |
33,21 |
21,09 |
37,14 |
19,39 |
22,75 |
80,27 |
87,57 |
|
П.К.2 |
21Е-4 |
35Е-4 |
3Е-3 |
0,043 |
1 |
1,44 |
0,91 |
1,61 |
0,84 |
0,98 |
3,47 |
3,78 |
||
П.К.3 |
14Е-4 |
24Е-4 |
21Е-4 |
0,03 |
0,69 |
1 |
0,63 |
1,12 |
0,58 |
0,68 |
2,42 |
2,63 |
||
В |
П.К.1 |
23Е-4 |
38Е-4 |
32Е-4 |
0,047 |
1,1 |
1,57 |
1 |
1,76 |
0,92 |
1,08 |
3,81 |
4,15 |
|
П.К.2 |
13Е-4 |
21Е-4 |
18Е-4 |
0,026 |
0,62 |
0,89 |
0,57 |
1 |
0,52 |
0,61 |
2,16 |
2,36 |
||
П.К.3 |
24Е-4 |
41Е-4 |
35Е-4 |
0,051 |
1,19 |
1,71 |
1,09 |
1,92 |
1 |
1,17 |
4,14 |
4,51 |
||
Г |
П.К.1 |
21Е-4 |
35Е-4 |
0,003 |
0,04 |
1,02 |
1,47 |
0,925 |
1,64 |
0,85 |
1 |
3,53 |
3,84 |
|
П.К.2 |
6Е-4 |
0,001 |
8,6Е-4 |
0,012 |
0,29 |
0,41 |
0,26 |
0,46 |
0,24 |
0,28 |
1 |
1,09 |
||
П.К.3 |
5,5Е-4 |
9,1Е-4 |
7,8Е-4 |
0,01 |
0,26 |
0,38 |
0,24 |
0,42 |
0,22 |
0,26 |
0,92 |
1 |
Данная таблица содержит отношение среднего времени работы на всех наборах в зависимости от сравниваемых конфигураций ЭВМ (П.К.1-П.К.3) . Эти показатели ускорения работы позволяют оценить возможности применения алгоритмов на обычных, близких к реальным прикладным задачам, данных. Помимо изменения эффективности работы самих алгоритмов, таблица позволяет изучить используемые архитектуры и оценить возможности конкретных частей используемых для тестирования ЭВМ. Поскольку программный комплекс может быть запущен на любом ПК с видеокартой, поддерживающей технологию CUDA, можно оценивать вычислительные возможности конкретных ПК для использования в решении подобных задач.
Если исключить фактор влияния конфигурации тестового ПК, обобщив результаты работы каждого алгоритма, можно получить следующую таблицу (таблица 6):
Таблица 6. Обобщённое ускорение по алгоритмам на случайных данных.
Полный перебор на CPU |
Полный перебор на GPU |
Метод Горовица-Сахни |
Гибридный алгоритм |
||
Перебор на CPU |
1 |
304,9 |
617,76 |
1011,17 |
|
Перебор на GPU |
32,79Е-4 |
1 |
9,25 |
22,73 |
|
М. Горовица-сахни |
16,18Е-4 |
0,108 |
1 |
2,66 |
|
Гибридный алгоритм |
9,89Е-4 |
0,044 |
0,3759 |
1 |
Данная таблица наглядно показывает, что на обычных (псевдослучайных) данных, алгоритмы в порядке быстродействия располагаются следующим образом:
1) Полный перебор на CPU;
2) Полный перебор на GPU;
3) Метод ветвей и границ Горовица-Сахни;
4) Гибридный алгоритм.
Таким образом, неоптимизированный алгоритм полного перебора на одном пооке центрального процессора оказался наименее эффективным для обычных задач. Метод полного перебора с реализацией на графическом ускорителе оказался намного быстрее, но оптимизированный алгоритм метода ветвей и границ на основе алгоритма Горвица-Сахни работает эффективнее на реальных данных. Однако, комбинирование алгоритма полного перебора и метода Горвица-Сахни оказалась быстрее, поскольку метод перебора на GPU выполняет заранее известное количество команд, благодаря чему размерность метода ветвей и границ уменьшается, а соответственно, уменьшается количество «лишних» действий алгоритма. Количество операций, выполняемых на методе перебора в гибридном алгоритме, зависит от номера элемента, на котором происходит разделение задачи на 2 части. Оно равно , k - номер разделяющего элемента. Оценить количество операций метода ветвей и границ при гибридной реализации - очень сложная задача, поскольку одновременно выполняется огромное количество подпроцессов на видеокарте, при котором суммирование количества итераций не даст объективной оценки.
Теперь рассмотрим эффективность алгоритмов при коэффициентах, предложенных Ю.Ю. Финкельштейном. (Таблица 7)
Таблица 7. Относительное ускорение на задаче Финкельштейна
Полный перебор на CPU (А) |
Полный перебор на GPU (Б) |
Метод Горовица-Сахни (В) |
Гибридный алгоритм (Г) |
|||||||||||
П.К.1 |
П.К.2 |
П.К.3 |
П.К.1 |
П.К.2 |
П.К.3 |
П.К.1 |
П.К.2 |
П.К.3 |
П.К.1 |
П.К.2 |
П.К.3 |
|||
А |
П.К.1 |
1 |
1,67 |
1,43 |
20,76 |
480 |
689,6 |
0,375 |
0,67 |
0,6 |
7,39 |
98,52 |
105,3 |
|
П.К.2 |
0,6 |
1 |
0,86 |
12,46 |
288 |
413,8 |
0,225 |
0,4 |
0,36 |
4,43 |
59,11 |
63,15 |
||
П.К.3 |
0,7 |
1,17 |
1 |
14,53 |
336 |
482,8 |
0,262 |
0,47 |
0,42 |
5,17 |
68,96 |
73,68 |
||
Б |
П.К.1 |
0,048 |
0,08 |
0,069 |
1 |
23,12 |
33,21 |
0,018 |
0,032 |
0,029 |
0,356 |
4,75 |
5,07 |
|
П.К.2 |
0,002 |
35Е-4 |
29Е-4 |
0,043 |
1 |
1,44 |
7,8Е-4 |
14Е-4 |
12Е-4 |
0,015 |
0,205 |
0,219 |
||
П.К.3 |
14Е-4 |
24Е-4 |
20Е-4 |
0,03 |
0,69 |
1 |
5,4Е-4 |
9,6Е-4 |
8,7Е-4 |
0,011 |
0,143 |
0,153 |
||
В |
П.К.1 |
2,66 |
4,44 |
3,82 |
55,5 |
1282 |
1852 |
1 |
1,77 |
1,6 |
19,70 |
262,7 |
280,7 |
|
П.К.2 |
1,49 |
2,5 |
2,12 |
31,25 |
714,2 |
1042 |
0,56 |
1 |
0,9 |
11,08 |
147,8 |
157,9 |
||
П.К.3 |
1,67 |
2,77 |
2,38 |
34,48 |
833,3 |
1149 |
0,625 |
1,1 |
1 |
12,32 |
164,7 |
175,4 |
||
Г |
П.К.1 |
0,135 |
0,22 |
0,19 |
2,8 |
66,6 |
90,9 |
0,05 |
0,09 |
0,08 |
1 |
13,33 |
14,24 |
|
П.К.2 |
0,01 |
0,016 |
0,014 |
0,21 |
4,88 |
6,99 |
38Е-4 |
67Е-4 |
6Е-3 |
0,075 |
1 |
1,07 |
||
П.К.3 |
0,009 |
0,015 |
0,013 |
0,19 |
4,57 |
6,54 |
35Е-4 |
63Е-4 |
57Е-4 |
0,07 |
0,934 |
1 |
Из данной таблицы очевидно, что метод ветвей и границ оказывается наименее эффективным при решении задачи о ранце на условиях примера Финкельштейна. Стоит отметить, что даже метод полного перебора на одном потоке центрального процессора, который на случайных данных оказался неэффективен, превосходит метод ветвей и границ в несколько раз. Для большей наглядности, проведём такую же операцию агрегирования и усреднения производительности вне зависимости от конфигурации вычислительной системы, чтобы оценить быстродействие самих алгоритмов. Данные обобщения производительности приведены в таблице 8:
Таблица 8. Обобщённое ускорение по алгоритмам на примере Финкельштейна.
Полный перебор на CPU |
Полный перебор на GPU |
Метод Горовица-Сахни |
Гибридный алгоритм |
||
Перебор на CPU |
1 |
304,15 |
0,4202 |
53,412 |
|
Перебор на GPU |
0,00329 |
1 |
0,00914 |
1,2135 |
|
М. Горовица-сахни |
2,3798 |
109,409 |
1 |
136,922 |
|
Гибридный алгоритм |
0,0187 |
0,8240 |
0,0073 |
1 |
Полученная таблица показывает, что параллельная реализация на GPU алгоритма полного перебора оказалась намного быстрее оптимизированного алгоритма метода ветвей и границ. В свою очередь, гибридный алгоритм, совмещающий в себе перебор и алгоритм Горовица-Сахни, реализованный на графическом ускорителе, оказался наиболее эффективным.
Таким образом, для примера Финкельштейна, алгоритмы можно упорядочить по увеличению производительности следующим образом:
1) Метод ветвей и границ на основе алгоритма Горвица-Сахни;
2) Полный перебор на CPU;
3) Полный перебор на GPU;
4) Гибридный алгоритм.
Не смотря на то, что метод Горовица-Сахни является одним из самых оптимальных при решении обычных задач, в некоторых случаях он может оказаться крайне неэффективным, что стоит учитывать при выборе метода решения прикладной задачи, основанной на задаче о ранце.
Предположим, что если усреднить полученное ускорение, вне зависимости от коэффициентов, будет получена средняя эффективность, которая будет характеризовать исследуемые реализации алгоритмов, то эти коэффициенты объективно покажут производительность алгоритмов по количеству операций, не смотря на «лишние операции» метода Горовица-Сахни. Средние значения отображены в таблице 9:
Таблица 9. Усреднённая эффективность алгоритмов.
Полный перебор на CPU |
Полный перебор на GPU |
Метод Горовица-Сахни |
Гибридный алгоритм |
||
Перебор на CPU |
1 |
304,525 |
309,0901 |
523,291 |
|
Перебор на GPU |
0,00328 |
1 |
4,629 |
11,9175 |
|
М. Горовица-сахни |
0,00323 |
0,2160 |
1 |
69,791 |
|
Гибридный алгоритм |
0,00191 |
0,08391 |
0,01433 |
1 |
Данные показатели являются наиболее объективными, при предположении, что начальные условия типа задачи Ю.Ю. Финкельштейна используются с такой же частотой, как и реальные (псевдослучайные) данные. Из этой таблицы следует, что:
1) Наиболее эффективным алгоритмом для решения задачи о ранце является «Гибридный алгоритм», совмещающий в себе метод ветвей и границ и метод полного перебора с использованием вычислительных возможностей графических ускорителей;
2) Применение метода ветвей и границ на основе алгоритма Горовица-Сахни является более эффективным, чем метод полного перебора на видеокарте. Однако показатели ускорения достаточно близки, что позволяет предположить равноценность данных алгоритмов при неизвестных условиях, то есть, при условии того, что вероятность появления начальных условий примера типа Ю.Ю. Финкельштейна примерно равна вероятности использования случайных данных.
3) Метод полного перебора, реализованный на одном потоке центрального процессора, является самым простым по реализации, но самым неэффективным, при тех же условиях равных вероятностей типа задачи. Но стоит отметить, что данный алгоритм является базовым в рамках реализации задач, касающихся проблем дискретной оптимизации. Поскольку его реализация наиболее проста, с него стоит начинать исследования оптимизационных процессов, что позволит определить сложность задачи и её тип, и позволит построить на его основе эффективные методы решения.
Выводы
Задача о ранце может быть решена большим количеством способов. В данной работе были рассмотрены 2 самых известных способа - метод полного перебора и метод ветвей и границ, и 2 алгоритма, использующие возможности графических ускорителей для вычислений. Было получено, что использование видеокарты для вычислений значительно увеличивает эффективность работы алгоритмов, вне зависимости от постановки задачи. Метод полного перебора, реализованный на центральном процессоре являлся отправной точкой в исследовании, однако, при проведении тестов, выяснилось, что метод ветвей и границ может работать менее эффективно, поскольку он очень сильно зависит от начальных условий задачи.
Чтобы компенсировать скорость работы оптимизированного метода ветвей и границ, было принято решение реализовать комбинированный алгоритм, совмещающий в себе метод полного перебора с алгоритмом Горвица-Сахни, использующий для вычислений возможности графических ускорителей. Было проведено множество различных тестов на разных начальных условиях, результаты которых подтвердили начальную гипотезу - совмещение передовых вычислительных технологий и отлаженных оптимизированных алгоритмов, позволит добиться более эффективных реализаций алгоритмов в области дискретной оптимизации.
Список литературы
1 Лекции по комбинаторной оптимизации М.А. Посыпкин, Москва, 2017г, ВЦ ФИЦ ИУ РАН
2 Сигал И.Х., Иванова А.П. Введение в прикладное дискретное программирование: модели и вычислительные алгоритмы. Изд. 2-е, исп. И доп. М.: ФИЗМАТЛИТ, 2007.
3 Keller H., Pfershy U., Pisinger D. Knapsack Problems. Springer Verlag, 2004
4 Официальное руководство по программированию на CUDA, вер. 1.1 // CUDA Programming Guide. Chapter 1. Introduction to CUDA > 1.2 CUDA: A New Architecture for Computing on the GPU
5 Параллельные вычисления на GPU. Архитектура и программная модель CUDA: Учебное пособие. А. В. Боресков и др. Предисл.: В. А. Садовничий Издательство Московского университета, 2012
6 Левитин А. В. Алгоритмы. Введение в разработку и анализ -- М.: Вильямс, 2006.
7 Роберт Седжвик. Фундаментальные алгоритмы на C++. Части 1-4. Анализ. Структуры данных. Сортировка. Поиск = Algorithms in C++. Parts 1-4. Fundamentals. Data Structures. Sorting. Searching. -- 3-е. -- Россия, Санкт-Петербург: «ДиаСофт», 2002
8 Martello S., Toth P. Knapsack Problems: Algorithms and Computer Implementations. John Wiley & Sons, 1990.
9]Финкельштейн Ю.Ю. Приближенные методы и прикладные задачи дискретного программирования. М.: Наука, 1976.
10 Посыпкин М. А., Сигал И.Х. Исследование алгоритмов параллельных вычислений а задачах дискретной оптимизации ранцевого типа // ЖВМиМФ. 2005. Т. 45, No 10. С. 1801-1809.
11 Kellerer H., Pferschy U., Pisinger D. Knapsack Problems. Berlin, Germany: pringer, 2004.
Аннотация
В данной работе рассматриваются методы решения задач глобальной оптимизации с применением графических ускорителей, анализ различных алгоритмов и их реализаций. В качестве основной задачи оптимизации выбрана задача о ранце. В первой главе описана постановка задачи, а также рассмотрены различные методы решения данной задачи. Во второй главе предложены алгоритмы решения поставленной задачи с реализацией на ЦП и графических ускорителях с применением технологии CUDA. Проведён анализ возможностей алгоритмов. В третьей главе приведены результаты тестирования реализованного программного комплекса, а также проведено сравнение эффективности реализованных методов на различных конфигурациях вычислительных систем и с разными начальными условиями. В четвёртой главе содержатся итоги проведённой исследовательской работы и общие выводы всей работы.
In this paper, we consider methods for solving global optimization problems with the use of graphic accelerator...
Подобные документы
Концептуальная модель операции. Математическая постановка задачи. Описание метода ветвей и границ, прямого перебора. Проектирование сценария диалога. Описание структур данных. Ручная реализация решения задачи с помощью алгоритма Литла и перебора.
курсовая работа [202,6 K], добавлен 14.12.2013Постановка и решение дискретных оптимизационных задач методом дискретного программирования и методом ветвей и границ на примере классической задачи коммивояжера. Этапы построения алгоритма ветвей и границ и его эффективность, построение дерева графов.
курсовая работа [195,5 K], добавлен 08.11.2009Особенности метода ветвей и границ как одного из распространенных методов решения целочисленных задач. Декомпозиция задачи линейного программирования в алгоритме метода ветвей и границ. Графический, симплекс-метод решения задач линейного программирования.
курсовая работа [4,0 M], добавлен 05.03.2012Сущность и особенности выполнения метода динамического программирования. Решение математической задачи, принцип оптимальности по затратам, ручной счёт и листинг программы. Применение метода ветвей и границ, его основные преимущества и недостатки.
курсовая работа [38,9 K], добавлен 15.11.2009Описание алгоритма решения задачи графическим способом. Вывод элементов массива. Описание блоков укрупненной схемы алгоритма на языке Pascal. Листинг программы, а также ее тестирование. Результат выполнения c помощью ввода различных входных данных.
контрольная работа [150,4 K], добавлен 03.05.2014Основные способы решения задач целочисленного программирования: округление решений до целого, метод полного перебора, применение оптимизационных алгоритмов. Алгоритм метода ветвей и границ. Пример с оптимизацией побочного производства лесничества.
презентация [323,6 K], добавлен 30.10.2013Обзор существующих методов межпроцедурного анализа. Получение входных и выходных данных подпрограмм с помощью графа алгоритма. Описание входных и выходных данных подпрограммы в терминах фактических параметров. Определение параллелизма по графу алгоритма.
учебное пособие [77,5 K], добавлен 28.06.2009Нахождение рационального порядка следования запросов для обеспечения максимального критерия эффективности использования компонентов вычислительного процесса в системе. Метод ветвей и границ для максимально быстрого выполнения вычислительного процесса.
курсовая работа [196,3 K], добавлен 23.08.2009Особенности метода неопределенных множителей Лагранжа, градиентного метода и метода перебора и динамического программирования. Конструирование алгоритма решения задачи. Структурная схема алгоритма сценария диалога и описание его программной реализации.
курсовая работа [1010,4 K], добавлен 10.08.2014Назначение и область применения, технические характеристики, постановка задачи, описание алгоритма и организация входных и выходных данных для программы. Разработка, описание логической структуры, используемые технические средства и условия выполнения.
курсовая работа [969,3 K], добавлен 26.03.2009Классификация методов оптимизации. Обзор и выбор языка C#. Алгоритмический анализ задачи, описание алгоритма решения. Графические схемы разработанных алгоритмов. Разработка приложения и результаты тестовых испытаний. Интерфейс пользователя, тестирование.
курсовая работа [1,6 M], добавлен 08.03.2016Изучение базовых команд ПК на базе МП i286 и их форматов. Изучение прямых способов адресации данных. Наработка практических навыков работы с командами. Разработка регистровой модели выполнения операций передачи данных. Программа реализации команд.
контрольная работа [42,2 K], добавлен 12.03.2011Разработка алгоритма и программы на языке Assembler для подсчёта функции. Возможность ввода данных в шестнадцатеричной системе счисления и формы представления чисел при выводе. Использование в программе набора команд арифметического сопроцессора.
курсовая работа [195,0 K], добавлен 04.05.2015Структурная схема моделируемой системы и её описание. Временная диаграмма и Q-схема системы. Укрупнённая и детальная схема моделирующего алгоритма. Описание машинной программы решения задачи. Описание возможных улучшений и оптимизации в работе системы.
курсовая работа [69,2 K], добавлен 02.07.2011Способы дискретной коррекции систем управления. Порядок расчета корректирующего звена для дискретной системы. Особенность методов непосредственного, последовательного и параллельного программирования. Реализация дискретных передаточных функций.
реферат [69,2 K], добавлен 27.08.2009Типы команд, синтаксис ассемблера и код операции, по которому транслируется команда. Команды вычисления и непосредственной пересылки данных между регистрами. Поле для определения операции вычисления. Управление последовательностью выполнения программы.
реферат [29,1 K], добавлен 13.11.2009Разработка эскизного и технического проектов программы, моделирующей игру "Кости". Постановка задачи, описание алгоритма; написание программы, организация входных и выходных данных; выбор программных средств; спецификация, текст, условия выполнения.
курсовая работа [93,8 K], добавлен 11.02.2012Характеристика методов нечеткого моделирования и изучение системы кластеризации в пакетах прикладных программ. Разработка и реализация алгоритма для оптимизации базы правил нечеткого классификатора с помощью генетического алгоритма аппроксимации функции.
дипломная работа [1,9 M], добавлен 21.06.2014Разработка программы с использованием языка программирования Pascal для выполнения алгебраических действий с действительными числами без знака в шестнадцатеричной системе счисления. Описание хода выполнения, схема алгоритма, листинг программы, ее функции.
реферат [687,5 K], добавлен 28.10.2011Изучение элементов структуры микропроцессора i80386 и алгоритмов выполнения множества команд. Разработка проекта структуры АЛУ и структуры микро-ЭВМ на базе гипотетического процессора. Описание и создание программы эмуляции по выполнению заданных команд.
курсовая работа [484,4 K], добавлен 07.09.2012