Igor_DmitrievДля распараллеливания нет. А вот для параллельного исполнения да.
Сходу не назову ищите библиотеку GpGPU с методами оптимизации.
Алгоритм градиентного спуска плохо распалится, так что его надо менять. Либо,
так как параметров в функции более 1000, то лучше делать распараллеливание вычисления самой функции.
Вот это и кажется неудачным. Графическое ядро - не универсальное, оно совсем не все умеет делать.
Ошибаетесь оно умеет всё. И обладает базовыми операциями: сложение умножение вычитание, битовые операциями циклами и условными переходами.
Из этого базиса сотрется любой алгоритм. - Собственно поэтому нет ничего удивительного, что NVidia пишет об универсальных ядрах в своих видеокартах.
Система команд на видеокарте обьічно чуть несколько более расширена, по сравнению с процессором.
Это смотря какой процессор с какой видео картой сравнивать. В х86 команд больше. Хотя в современных видео картах команд прибавилось. Так что скорее их число близкое. Малое число команд должно как раз позволять сделать много, кучу простых процессоров на одном кристалле.
-- Пн окт 27, 2014 20:15:48 --Другое дело, что градиентньій спуск как бьі не заточен под параллельньіе вьічисления, потому как новая точка вьічисляется по предьідущей.
Согласно теории(практики) распараллеливания это не является достаточным условием. Надо добавить, что нет эффективного метода вычисления следующего шага минуя предыдущий. Так как он в конечном счёте как раз зависит от функции которая нам неизвестна. А следовательно в среднем (по всему многообразию функций) алгоритм градиентного спуска плохо распаралеливаетс.
С другой стороны у нас есть априорные данные, что для поиска экстремума функции надо сделать много шагов. Иначе бы и параллель не надо было.
Так что имея эти данные вполне можно предположить, что всё же существует достаточно эффективный алгоритм оптимизации работающий параллельно на определенном многообразии функций. Более того это может быть и градиентный спуск.
-- Пн окт 27, 2014 20:21:48 --Массив проходится последовательно, операции -- сложение, умножение, сравнение, целочисленное деление. Тип - double (но можно и int сделать, если это сильно ускорит).
Так как в функции есть условия, то она скорее всего не является гладкой. Вы уверенны что градиентный метод вообще работает? Применим к данной функции?
Как правило снижение точности ускоряет вычисления. Double имеет 52 значащих бита, int - 32 бита.