2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Библиотека для оптимизации с помощью видеокарты
Сообщение27.10.2014, 14:19 


15/01/12
215
Здравствуйте.
Есть сложная функция, записанная в виде алгоритма. Надо найти её экстремум.
Искать собираюсь с помощью метода градиента спуска.
Есть мысль воспользоваться видеокартой для распарралеливания вычислений.
Какая библиотека для этого подходит?

 Профиль  
                  
 
 Re: Библиотека для оптимизации с помощью видеокарты
Сообщение27.10.2014, 14:33 
Заслуженный участник


09/05/12
25179
Igor_Dmitriev в сообщении #923466 писал(а):
Какая библиотека для этого подходит?
На самый общий вопрос можно дать только самый общий ответ: CUDA или OpenСL (это, правда, не совсем библиотеки, но...).

Однако, вообще говоря, идея кажется сомнительной. Что именно Вы собираетесь распараллеливать?

 Профиль  
                  
 
 Re: Библиотека для оптимизации с помощью видеокарты
Сообщение27.10.2014, 15:30 


15/01/12
215
Собираюсь распараллеливать вычисление функции в разных точках: чтобы значения функции в разных точках вычислялись не друг за другом, а параллельно.

 Профиль  
                  
 
 Re: Библиотека для оптимизации с помощью видеокарты
Сообщение27.10.2014, 16:02 
Заслуженный участник


09/05/12
25179
Igor_Dmitriev в сообщении #923492 писал(а):
Собираюсь распараллеливать вычисление функции в разных точках: чтобы значения функции в разных точках вычислялись не друг за другом, а параллельно.
Вот это и кажется неудачным. Графическое ядро - не универсальное, оно совсем не все умеет делать. По большому счету, это очень эффективный инструмент для умножения матриц. А вот считать сложную функцию в точке... подозреваю, что обычный процессор попросту будет эффективнее.

 Профиль  
                  
 
 Re: Библиотека для оптимизации с помощью видеокарты
Сообщение27.10.2014, 16:33 
Аватара пользователя


31/12/13
148
Код самой функции можете привести?

 Профиль  
                  
 
 Re: Библиотека для оптимизации с помощью видеокарты
Сообщение27.10.2014, 16:38 


15/01/12
215
Код сильно длинный, но суть его в том, что функция проделывает линейные и квадратичные операции с массивом, после чего выдаёт результат.
Распараллелить надо не внутренность функции, а вычисление функции в разных точках.

 Профиль  
                  
 
 Re: Библиотека для оптимизации с помощью видеокарты
Сообщение27.10.2014, 16:43 


10/04/12
705
Pphantom в сообщении #923501 писал(а):
Вот это и кажется неудачным. Графическое ядро - не универсальное, оно совсем не все умеет делать. По большому счету, это очень эффективный инструмент для умножения матриц. А вот считать сложную функцию в точке... подозреваю, что обычный процессор попросту будет эффективнее.


Система команд на видеокарте обьічно чуть несколько более расширена, по сравнению с процессором. Узкое место ветвления. Другое дело, что градиентньій спуск как бьі не заточен под параллельньіе вьічисления, потому как новая точка вьічисляется по предьідущей.

 Профиль  
                  
 
 Re: Библиотека для оптимизации с помощью видеокарты
Сообщение27.10.2014, 16:49 
Аватара пользователя


31/12/13
148
А конкретней, что за операции?
Если массив большой, то видеокарточка будет его молоть быстрей цпу.

 Профиль  
                  
 
 Re: Библиотека для оптимизации с помощью видеокарты
Сообщение27.10.2014, 17:03 


15/01/12
215
Массив от 10 тыс. до 100 тыс. элементов.
Таких массивов от 3 до 10.
Все они одинаковой длины.
Массив проходится последовательно, операции -- сложение, умножение, сравнение, целочисленное деление. Тип - double (но можно и int сделать, если это сильно ускорит).

 Профиль  
                  
 
 Re: Библиотека для оптимизации с помощью видеокарты
Сообщение27.10.2014, 19:00 
Аватара пользователя


31/10/08
1244
Igor_Dmitriev
Для распараллеливания нет. А вот для параллельного исполнения да.
Сходу не назову ищите библиотеку GpGPU с методами оптимизации.
Алгоритм градиентного спуска плохо распалится, так что его надо менять. Либо,
так как параметров в функции более 1000, то лучше делать распараллеливание вычисления самой функции.


Pphantom в сообщении #923501 писал(а):
Вот это и кажется неудачным. Графическое ядро - не универсальное, оно совсем не все умеет делать.

Ошибаетесь оно умеет всё. И обладает базовыми операциями: сложение умножение вычитание, битовые операциями циклами и условными переходами.
Из этого базиса сотрется любой алгоритм. - Собственно поэтому нет ничего удивительного, что NVidia пишет об универсальных ядрах в своих видеокартах.

mustitz в сообщении #923519 писал(а):
Система команд на видеокарте обьічно чуть несколько более расширена, по сравнению с процессором.

Это смотря какой процессор с какой видео картой сравнивать. В х86 команд больше. Хотя в современных видео картах команд прибавилось. Так что скорее их число близкое. Малое число команд должно как раз позволять сделать много, кучу простых процессоров на одном кристалле.

-- Пн окт 27, 2014 20:15:48 --

mustitz в сообщении #923519 писал(а):
Другое дело, что градиентньій спуск как бьі не заточен под параллельньіе вьічисления, потому как новая точка вьічисляется по предьідущей.

Согласно теории(практики) распараллеливания это не является достаточным условием. Надо добавить, что нет эффективного метода вычисления следующего шага минуя предыдущий. Так как он в конечном счёте как раз зависит от функции которая нам неизвестна. А следовательно в среднем (по всему многообразию функций) алгоритм градиентного спуска плохо распаралеливаетс.
С другой стороны у нас есть априорные данные, что для поиска экстремума функции надо сделать много шагов. Иначе бы и параллель не надо было.
Так что имея эти данные вполне можно предположить, что всё же существует достаточно эффективный алгоритм оптимизации работающий параллельно на определенном многообразии функций. Более того это может быть и градиентный спуск.

-- Пн окт 27, 2014 20:21:48 --

Igor_Dmitriev в сообщении #923528 писал(а):
Массив проходится последовательно, операции -- сложение, умножение, сравнение, целочисленное деление. Тип - double (но можно и int сделать, если это сильно ускорит).

Так как в функции есть условия, то она скорее всего не является гладкой. Вы уверенны что градиентный метод вообще работает? Применим к данной функции?
Как правило снижение точности ускоряет вычисления. Double имеет 52 значащих бита, int - 32 бита.

 Профиль  
                  
 
 Re: Библиотека для оптимизации с помощью видеокарты
Сообщение27.10.2014, 19:39 


10/04/12
705

(Оффтоп)

Pavia в сообщении #923582 писал(а):
mustitz в сообщении #923519 писал(а):
Система команд на видеокарте обьічно чуть несколько более расширена, по сравнению с процессором.

Это смотря какой процессор с какой видео картой сравнивать. В х86 команд больше. Хотя в современных видео картах команд прибавилось. Так что скорее их число близкое. Малое число команд должно как раз позволять сделать много, кучу простых процессоров на одном кристалле.


Да хотя-бьі старенькую Tahiti можно взять. Там операций пободее x86 будет. Включая хитрьіе командьі вьічисления hash для bitcoin. И много много еще чего (см. AMD Open CL extensions).

 Профиль  
                  
 
 Re: Библиотека для оптимизации с помощью видеокарты
Сообщение27.10.2014, 20:05 


15/01/12
215
Паметров в функции 10-20, оптимизироваться она будет не по тому, что задано в массивах, а по этим 10-20 параметрам.
Какой алгоритм поиска экстремума лучше тогда использовать для параллельных вычислений?

 Профиль  
                  
 
 Re: Библиотека для оптимизации с помощью видеокарты
Сообщение27.10.2014, 20:14 
Аватара пользователя


31/12/13
148
Igor_Dmitriev
Какой язык вы используете?
Профилирование проводили? Неужели большую часть времени занимает не вычисление функции, а что-то другое?
Сколько времени вы готовы потратить на освоение GPGPU?)

 Профиль  
                  
 
 Re: Библиотека для оптимизации с помощью видеокарты
Сообщение27.10.2014, 20:17 


17/10/08

1313
Есть GPU-пакеты для R. Не уверен, что это то, что надо, но народ пользуется.

 Профиль  
                  
 
 Re: Библиотека для оптимизации с помощью видеокарты
Сообщение28.10.2014, 01:43 


15/01/12
215
C# или C++.
Изучать досконально я не собирался, я расчитываю на то, что есть оболочка C# или C++ для видеокарт.
Распараллелить функцию не получится, наверное.
Есть ли алгоритмы поиска экстремума для параллельных вычислений?

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group