дайте погонять прогу под CUDA на мощной nvidia видюхе
вычисления под core 2 duo 2.2 ghz - 113 секунд
вычисления под nVidia 8600M GT - 23 секунды
вычисления под nVidia 8800 GTS - 4.7 секунд
вычисления под nVidia Quadro FX 3500 - 5.6 секунд
скоро будут еще результаты
А можешь кратенько описать какой именно алгортим у тебя так ускоряется. Какие основные операции там используются?
Ну и ещё пара вопросов к тем, кто с CUDA плотно работает. Я так понимаю, что на распространённых железках в работе с числами с плавающей точной можно только single использовать? какие-нибудь железки уже позволяют использовать double?
Насколько сложно в технологии CUDA работать со сложными структурами данных, например обход дерева, поиск в бинарном дереве и т.п.?
Насколько сложно в технологии CUDA работать со сложными структурами данных, например обход дерева, поиск в бинарном дереве и т.п.?Насколько я понимаю, эти видеокарты показывают такие результаты не из-за высокой скорости каждого чипа, а из-за того, что этих чипов - много, десятки, если не сотни.
Соответственно, работать с CUDA имеет смысл только на тех задачах, которые очень хорошо параллелятся.
кратко - обучаю нейронные сети в пакетном режиме, размер данных - 21000 примеров * 1638 входных переменных. за счет того, что все 21000 примеров можно пускать параллельно - и получается ускорение.
в nVidia-евском SDK есть поддержка BLAS, через которую я все и делал. обычный си язык, я прогу написал за два дня. отлаживать, правда, специфично, но ничего. профайлер есть, то-се.
Насколько сложно в технологии CUDA работать со сложными структурами данных, например обход дерева, поиск в бинарном дереве и т.п.?скачай с nvidia.com примеры, там есть примеры того, что под CUDA можно написать.
могу погонять твою прогу на 8800gtx sli
ты с какого факультета и лабы?
Я сам когда-то писал сортировку на gpu. Со сложными структурами думаю хрен поработаешь.
итерации по времени
построить матрицу A и правую часть b, используя сложные структуры
решить систему Ax=b
конец итерации
Если предположить, что решалку СЛУ удастся сильно ускорить, а составлялку матрицы не удастся ускорить вообще, то можно ли получить итоговый выигрыш, используя gpu?
Или на передачу информации туда-сюда уйдёт больше времени?
Для определённости: матрица A разреженная, n порядка 10млн, пусть на обычном PC решалка занимает 50% работы всего шага. Построение матрицы на след. шаге зависит от решения на пред., то есть параллельно решать матрицу, и строить следующую нельзя.
На передачу информации уйдет не много времени - но будет ли выигрыш по времени вопрос сложный, поскольку узкое место здесь - память. Так что нужно просто смотреть быстрее ли память на gpu, чем на cpu.
Для чистоты эксперимента хотелось бы узнать каким компилятором ты пользовался когда прогал под CPU?
Знаешь ли ты что есть родной интеловский компилятор, а также родной интеловский BLAS. Какой результат в этом случае?
На Графиконе представитель видии сказал, что эмуляция даблов на старых сериях (<=8ххх) на через флоты будет в 24 (двадцать четыре!) раза медленнее чем аналогичные алгоритм для флотов. Более того, на новейшем чипе Ж200 пиковые даблы в 8 (восемь) раз медленнее чем пиковые флоты. Т.е. даже если ты в пике на флотах имеещь 1 терафлопс на Ж200, аналогичные алгоритм на даблах будет в 8 (восем) раз медленнее или 125гигафлопа.
Кстати, если ты уж реально занялся GPGPU, то ты должен знать что во всех синтетический тестах ATI лидирует. + их последний R700 вообще очень хорош. Можешь получить 1.2 терафлопса в пике на флотах. BLAS у них тоже готов уж пол года как.
ты с какого факультета и лабы?
если ты с ВМК (братское сердце!) знай, что на матфизе GPGPU очень плотно занимается младший Березин. + там есть толковые ребята аспиры. рекомендую.
могу дать доступ по ssh. В личку/8800gtx и 8800gts 512. В обоих случах quad q6600 и 4gb оперативы.
Если предположить, что решалку СЛУ удастся сильно ускорить, а составлялку матрицы не удастся ускорить вообще, то можно ли получить итоговый выигрыш, используя gpu?первым наперво отметим, что производительность всей цепочки равна производительности самого слабого звена.
в твоем случае - это расчет матрицы. это стандартная ситуация при решении разностных схем в матфизе: всё время тратится на вычисление правой части (сложные фукцнции типа экпоненты, степеней и т.п.) типа сил взаимодействий частиц или напряженности полей в точке или типа того.
есть несколько приемов обхода этой проблемы. например табулирование функций (сил, потенциалов и т.п. т.е. расчитываешь один раз в самом начале все "тяжелые" фукнции, заносишь значение в таблицу, а потом во время счета просто дергаешь нужные значения из массива.
для систем с разреженными матрицами есть свои алгоритмы. какой структуры матрица? Симметричная, диагональная, циклическая и т.п.?
Для определённости: матрица A разреженная, n порядка 10млн, пусть на обычном PC решалка занимает 50% работы всего шага. Построение матрицы на след. шаге зависит от решения на пред., то есть параллельно решать матрицу, и строить следующую нельзя.
например прогонка для трехдиагоналоной матрица размера N будет требовать кол-во действий порядка О(N).
У нас ещё и сама матрица на каждом шаге меняется Матрица непростая насколько я знаю (точно не трёх-диагональная, скорее всего несимметричная) Сейчас мы используем BiCGstab, возможно с предобуславливателем ilu(2).
У нас ещё и сама матрица на каждом шаге меняетсяну я ж тебе и грю. у тебя как то сложно на каждом шаге вычисляется матрица. много времени отжирает.
елси бы там каждый элемент расчитывался как несколько операций сложения и уножения - это одно.
но в твоем случае каждый элемент матрица расчитывается с использование каких-нть мат функций типа экпоненты, логорифма, косинуса и т.п.
математические фукции считаются существенно дольше чем несколько элементарных операций.
поэтому предлагается все значения (ну почти все , на некотором интервале) этих функций вычислить с каким то шагом на вполне определенной интервале. а затем, когда твоя матрица на каждом шаге пересчитывается брать уже готовые значения этих функций из таблицы, а не считать заново.
Сейчас мы используем BiCGstab, возможно с предобуславливателем ilu(2).бррр. так вы на матлабе шоль считаете? а какой производительности тогда речь идет
или сами реализацию этого метода написали?
Решаем своей решалкой, основанной на blas'е
итерации по времениа кто мешает часть программы написать под CPU, а часть - под GPU? берешь свою прогу и кусок Ax=B пусть обсчитывает GPU (через cuBLAS, например cublasStrsm смотришь, что получается. требуется замена всего одной процедуры, если грамотно написан код, делов на 5 минут
построить матрицу A и правую часть b, используя сложные структуры
решить систему Ax=b
конец итерации
Вот это и интересует, я примерно так и думал. Осталось только два вопроса. Между gpu и cpu придётся гонять большие объёмы памяти, и не ясно, хватит ли видео-памяти вообще. И второе, считать всё же хочется в doubl'ах, а они медленные
считать всё же хочется в doubl'ахА зачем такая точность, если не секрет?
Я так думаю, что если считать неточно, то довольно быстро всё развалится
А вообще код/проект не мой, я деталей не знаю, просто мы недавно обсуждали возможность использования CUDA для того проекта, но тогда среди нас специалистов не оказалось
Я так думаю, что если считать неточно, то довольно быстро всё развалитсяА вот это еще и от математического алгоритма зависит. Если алгоритм хороший, то он должен спокойно перенести переход от double-ов к float-ам. Если же ему настолько критична машинная точность, то это достойный повод подумать об изменении используемой численной схемы.
я что-то не верю, что такая точность действительно необходима.
Возможно, я тогда уточню, может там на самом деле и float'ы будут приемлемы
можно попробовать прогнать тот же алгоритм с меньшей точностью, без КУДы - и проверить, каконо.
Оставить комментарий
NataNata
ко владельцам мощных nvidia видюх и заинтересованнымвычитал в статье что с помощью CUDA (см. сайт nvidia или гуглить gpgpu) ребята смогли работать с нейронными сетями на 8800 GTX в 100 раз быстрее, чем на p-4 3 ghz. Написал свою прогу для тренировки нейросетей. Однако на своей видюхе 8600M смог получить увеличение скорость всего раз в 7 (по сравнению с 2.2 core duo ибо видюха слабая. Хочу проверить прогу на чем-нибудь типа 9800 gtx или GTX260 без траты денег . Кто может запустить разок прогу на машине с крутой видюхой (надо поставить драйвера от nvidia, у меня есть если что) - напишите, реально очень надо, вычислений проводить тонну. Мне просто проверить, если будет результат - купим в лабу видеокарт.