Прочитав очередную новость про использование видюхи в качестве суперкомпьютера для расчетов, мне пришла в голову мысль, а почему бы мне не написать что нибудь, используя видюху для расчетов? (программа-максимум написать архиватор, но не знаю хватит ли духу) Проблема в том, что я понятия не имею как это все программируется (никогда 3д графикой не занимался). Понятно, что пишется шейдер, но результат выполнения не отображается на экране как в играх, а как то используется, но как его писать, в чем, — не представляю.
Advanced member
Статус: Не в сети Регистрация: 16.11.2006 Откуда: Всегда!
Afx писал(а):
Понятно, что пишется шейдер, но результат выполнения не отображается на экране как в играх
Ну и результатработы шейдера не отображается . Отображением на экран шейдеры вообще не занимаются, это блок растеризации делает.
А пишется просто. В DX9 в нормальном режиме на вход карты подается, как правило, информация из вершинных буферов для обработки по программе вершинного шейдера. После этой обработки дипетчер карты эту информацию согласует с другими данными (вершинный шейдер понятия не имеет, что он обрабатывает - потоковая обработка), производится ряд других операций (клиппинг и т.д.) и информация после этого обрабатывается пиксельным шейдером. Ну и далее по конвейру. Для Nvidia c SM3, для ATI c SM2 появилась возможность выполнения вершинного шейдера не над данными из буфера вершин, а над произвольными данными, которые могут храниться в формате текстур, и после рендеринга в специальную поверхность (фактически, в ту же текстуру, например) направлять снова как данные на вход вершинного шейдера. А когда вся обработка закончена, можно итоговую информацию считать из этой текстуры, то есть это могут быть любые произвольные данные, и направить куда угодно. DX10 еще более упростил задачу, узаконив операции, не имеющие прямого отношения к графике, легализовав streamout в память результатов работы шейдера и выделив графическому ядру виртуальное системное адресное пространство для хранения и обмена данными и ядро ОС Vista поддерживает эту работу ГПУ, в том числе и переключение задач на ГПУ.
Так что, флаг тебе в руки, исходники 7Zip И.Павлова ( на С++ и С# ) - на сайте. Да и у НВидиа SDK под CUDA для 8 серии под С++ в наличии.
Но полгодика минимум все-таки придется 3Д поизучать. Хотя, Ньютону и одного яблока по башке хватило, все от человека зависит.
zauropod спасибо за объяснения, но можно с самого начала - как вообще этот шейдер пишется? Я в ОпенГЛе немного пытался разобраться, а в D3D - вообще полный ноль... Какой там набор команд, формат данных и т.д. (в асме немного шарю, если чё.)
Цитата:
Так что, флаг тебе в руки, исходники 7Zip И.Павлова ( на С++ и С# ) - на сайте. Да и у НВидиа SDK под CUDA для 8 серии под С++ в наличии. Но полгодика минимум все-таки придется 3Д поизучать. Хотя, Ньютону и одного яблока по башке хватило, все от человека зависит.
Ну, до архиватора мне еще как до Китая раком. Мне бы хоть простелькую прогу написать типа сложения 2 чисел... Добавлено спустя 6 минут, 2 секунды З.Ы. из этой статьи http://www.3dnews.ru/video/radeon_hd2900xt/index4.htm я понял что на видюхе можно вообще любые расчеты выполнять, а не только над векторами. Но вот как писать это все?
Advanced member
Статус: Не в сети Регистрация: 16.11.2006 Откуда: Всегда!
Afx Скачиваешь DX SDK и читаешь папирус - там все в теории подробно написано, и туториалы степ бай степ. Для начала забудь про неграфические расчеты, научись выводить графические примитивы и делать их трансформацию с помощью вершинного шейдера, разбершься с командами и форматами данных HLSL, ничего сверхсложного, просто нужно самому все прощупать и потренироваться.
Изучать шейдеры можно и без написания вызывающей основной программы - RenderMonkey от ATI и FX Composer от NVidia позволяют работать напрямую с шейдерами, правда у них нацеленность на графику прежде всего, но код шейдера будет доступен и можно все изучать и модифицировать.
Но для неграфических расчетов важно не само знание шейдеров, ведь по большому счету, в плане математики, там то же самое (имеется в виду сами математические операции), а правильно организовать ввод - вывод информации для использования ее процессором и разделение процессорного времени ГПУ (если у тебя не специально выделенная под твою задачу видеокарта, но и при выделенной не особо легче).
У тебя ведь 8800, поэтому псевдоработу через карты смещений в DX9 можно не заморачиваться, научись после работы шейдера нужную инфу гнать в память, то есть для тебя останется продумать форматы входных и выходных данных, но к тому времени ты уже сам все поймешь. Не случайно ведь SDK пишутся.
Advanced member
Статус: Не в сети Регистрация: 16.11.2006 Откуда: Всегда!
Afx писал(а):
Мне бы хоть простелькую прогу написать типа сложения 2 чисел
Да, кстати, о двух числах. Надо вообще понимать, что архитектура современных видеокарт оптимизирована под ПОТОКОВЫЕ вычисления. Вычислять на ней сложение двух чисел никакой выгоды не несет, кроме вреда. Нужна хорошая распараллеливаемость вычислительной задачи и разработка специальных алгоритмов плюс организация работы в мультипроцессорном мультитрединге со всеми вытекающими сложностями обмена и синхронизации. Это вообщем-то и есть камень преткновения, а наработки пока еще совсем молодые.
Да я понимаю, что изврат . Но начинать то с чего то надо. Основной принцип понять. 2 числа это я условно сказал, можно например че-нибудь типа сложения 2-х массивов например.
Member
Статус: Не в сети Регистрация: 14.03.2004 Откуда: Москва
Кстати, а что сказано о точности вычеслений и вероятности ошибки (точнее меня интересуеть вероятность возникновения ошибки в зависимости от величины самой ошибки)
_________________ ФИЗТЕХ- рулез, ФАКИ - сила, Кванты тоже хорошо
FLOATING POINT STANDART
The Geforce 8800 Series and Quadro FX 5600/4600 follow the IEEE-754 standart for single precision binary floating-point arithmetic.
Т.е. стандартный формат single.
Так же сказано, что не поддерживаются разне типы округлений (как в 87х сопроцессорах), а только к ближайшему и к нулю (к + и - бесконечности не поддерживается). Еще пишут что нет механизма обрабатывать исключения при выполнении операций с плавающей точкой.
Advanced member
Статус: Не в сети Регистрация: 16.11.2006 Откуда: Всегда!
nickyoz Ну вероятность ты, как математик, и сам посчитаешь. А про ошибки - все по 754 стандарту, add и mul 0.5 ULP, для функций типично 0-4, до 16 при pow. Но про функции оговорено - интенсивное тестирование на момент публикации не проводилось, так что возможны варианты. Для случаев, не определенны в 754, в ряде трактовок представления результата имеются отличия по математике, принятой в x86. Добавлено спустя 4 минуты, 41 секунду
Afx писал(а):
FLOATING POINT STANDART The Geforce 8800 Series and Quadro FX 5600/4600 follow the IEEE-754 standart
Ты где это такую цитату выхватил? По английски пишется STANDARD, только русскоговорящие коверкают D на T. Неужели это у НВидии так написано?
Member
Статус: Не в сети Регистрация: 14.03.2004 Откуда: Москва
Хм. Ну все это понятно. Если процессор работает правильно, то точность ну более или мнее по стандартку
А откуда следует что он так уж праивльно работает. Известно ведь, что отобраения а экран высокая точность не особо и нужна --- значит мы может допустить большую вероятность ошибки, и на этом значительно упростить расчетную схему, а так увеличить скорость
Была бы хоть одна у меня карточка с шейдерами --- проверил бы... А то доступ есть только к процессорам
_________________ ФИЗТЕХ- рулез, ФАКИ - сила, Кванты тоже хорошо
Ты где это такую цитату выхватил? По английски пишется STANDARD, только русскоговорящие коверкают D на T. Неужели это у НВидии так написано?
Это я не копировал, а ручками набивал, вот и ошибся. (Ступил: в некоторых ПДФ не выделяется текст, мне показалось, что и в этой так же. Но оказалось можно.)
Вот вся цитата:
Floating-Point Standard
The GeForce 8800 Series and Quadro FX 5600/4600 follow the IEEE-754 standard for single-precision binary floating-point arithmetic with the following deviations:
Addition and multiplication are often combined into a single multiply-add instruction (FMAD);
Division is implemented via the reciprocal in a non-standard-compliant way;
Square root is implemented via the reciprocal square root in a non-standard-compliant way;
For addition and multiplication, only round-to-nearest-even and round-towards-zero are supported via static rounding modes; directed rounding towards +/- infinity is not supported;
There is no dynamically configurable rounding mode;
Denormalized numbers are not supported; floating-point arithmetic and comparison instructions convert denormalized operands to zero prior to the floating-point operation;
Underflowed results are flushed to zero;
There is no mechanism for detecting that a floating-point exception has occurred and floating-point exceptions are always masked, but when an exception occurs the masked response is standard compliant;
Signaling NaNs are not supported.
The result of an operation involving one or more input NaNs is not one of the input NaNs, but a canonical NaN of bit pattern 0x7fffffff. Note that in accordance to the IEEE-754R standard, if one of the input parameters to min() or max() is NaN, but not the other, the result is the non-NaN parameter.
The conversion of a floating-point value to an integer value in the case where the floating-point value falls outside the range of the integer format is left undefined by IEEE-754. For the GeForce 8800 Series and Quadro FX 5600/4600, the behavior is to clamp to the end of the supported range. This is unlike the x86 architecture behaves
Advanced member
Статус: Не в сети Регистрация: 16.11.2006 Откуда: Всегда!
nickyoz писал(а):
Была бы хоть одна у меня карточка с шейдерами
да, немилитаризованная наука всегда была на остаточном фмнансировании... . Копи на 8300GS хотя бы, сейчас уже Нвидия опробует мобильные чипсеты, версия Куды 1.0 будет поддерживать всю 8-ю серию. Может, договоряться они и с МС, чтобы те убрали 5-секундный watchdog из ОС, тоже проблема. Кстати, сами Нвидиевцы работают по Куде на Asus P5N-E SLI с тремя установленными 8800GTX. А вообще, рекомендуется для некластерных расчетов использовать для вычислений 8800, не подключенную к монитору.
Кстати, еще DPVM забыли упомянуть. Она-таки карточки менее современные требует.
Еще я бы посоветовал достать какую-нибудь книжку по сабжу типа Борескова (хотя у него примеры не очень удобные) - там разбирается, как обрабатывать изображения на GPU - а это фактически GP GPU.
Насчет любых расчетов на видюхе - это очень сильно сказано: ограничений довольно много, в частности, процессы должны быть независимы и ветвлений (даже на 8ой нвидии) должно быть как можно меньше.
Advanced member
Статус: Не в сети Регистрация: 16.11.2006 Откуда: Всегда!
Aekold писал(а):
Кстати, еще DPVM забыли упомянуть. Она-таки карточки менее современные требует
О мертвых - или хорошо, или ничего. Атишная продукция опять запоздала. Упомянули на Сисграфе 2006, а в на том же Сисграфе 2007 - тишина (Кудой подавились, наверное - 2900 у них тогда еще не вышла). У карт DX9 задействуются только пиксельные процессоры. Ни доступного СДК, ни открытого форума, ни демок, только жалкое упоминание на официальном сайте. Вот о продукции французской компании GPU-TECH стоило упомянуть, только вот после анонса к ним на сайт непробиться.
Aekold писал(а):
Насчет любых расчетов на видюхе - это очень сильно сказано: ограничений довольно много
А кто про это говорил? Но, с другой стороны, принципиально - возможны любые, эффективно - конечно же, нет.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения