Junior
Статус: Не в сети Регистрация: 30.08.2003 Откуда: г. Новокузнецк
Слышал, что GPU можно использовать с помощью шэйдеров
для посторонних целей, например, для кодирования mp3-шек
или математических расчетов.
Хотелось бы поглазеть на пример такого использования.
Advanced member
Статус: Не в сети Регистрация: 09.06.2003 Откуда: USSR
Цитата:
Слышал, что GPU можно использовать с помощью шэйдеров для посторонних целей, например, для кодирования mp3-шек или математических расчетов. Хотелось бы поглазеть на пример такого использования.
Мдя уж.
Сравни скорость центрального процессора и скорость GPU и желание само по себе отпадет.
Member
Статус: Не в сети Регистрация: 30.01.2003 Откуда: Москва
Ray Adams частота тут не главное главное то, сколько GPU может сделать за один такт - а сделать оно может немало.
GPU можно эффективно использовать только для трехмерных расчетов. Собственно команды ассемблера для GPU (ps v1.1) в основном состоят из операций над векторами, матрицами и сэмплингом текстур. Какие-то математические расчеты делали, а вот кодирование MP3...даже не представляю, как это можно организовать. то-то более определенное насчет шейдеров версий 2 и 3 сказать не могу, вроде в 3-х циклы появились...
Добавлено спустя 11 минут, 3 секунды: Кажется, шейдеры v2 - это появление языка высокого уровня...
Member
Статус: Не в сети Регистрация: 30.01.2003 Откуда: Москва
Ray Adams В любом случае, глупой эту идею я бы не назвал. Она не ко всему применима, но вот использовать доп. аппаратные мощности - это очень большой плюс. А заодно можно посчитать. Пусть ядро какой-нибудь видеокарточки работает на 400 MHz. Возьмем процесор, пусть он работает на частоте 2400, т.е. в 6 раз больше.
За один такт GPU может сложить/вычесть 3хзначный вектор. Без особых оптимизаций CPU понадобится на это минимум 5 тактов (загрузить 3 float - 3 такта, сложить/вычесть каждый float - 3 такта, но благодаря конвейру это займет не 9, а те самые 5 тактов). Выигрыш? Да, некоторый.
За тот же один такт GPU может умножить вектор на скаляр. Благодаря все тому же конвейеру, CPU потребуется 8 тактов только на вычисления + 4 на загрузку чисел. Опять-таки выигрыш.
Если не ошибаюсь, скалярное произведение векторов на GPU также делается за 1 такт (но может быть и за два). На CPU это займет на менее 12. Снова выигрыш
Так что идея не настолько глупая. Даже если на передачу туда-сюда данных уйдет значимая часть времени, получить 50% прирост к процессору не так уж и глупо. А чем длиннее и сложнее шейдерная программа тем больше прирость.
Чуть не забыл Сколько там пиксельных конвейеров за такт обрабатывается? Умножаем скорость обработки программ на их число - и получаем смачный выигрыш GPU перед CPU
Advanced member
Статус: Не в сети Регистрация: 09.06.2003 Откуда: USSR
Asteroid Ты забыл , что у CPU также есть математический сопроцессор, это раз, а второе. GPU чаще принимает данные нежели их выдает. Сужу по HLSL под OGL там можно писать и читать данные в шейджер , но только по одному занчению! Теперь посотри твоие потери
1. передача данных в шейдер
2. Выполенени шейдера
3. Чтение данных из шейдера
Цитата:
Чуть не забыл Smile Сколько там пиксельных конвейеров за такт обрабатывается? Smile Умножаем скорость обработки программ на их число - и получаем смачный выигрыш GPU перед CPU
Насколько хорошо ты разбираешся в графических процессорах и приципах работы шейдерной системы?
Asteroid писал(а):
Даже если на передачу туда-сюда данных уйдет значимая часть времени, получить 50% прирост к процессору
Member
Статус: Не в сети Регистрация: 30.01.2003 Откуда: Москва
Ray Adams Смотрим 1. Записать все в текстуру, отдать ее на съедение.
2. Пока выполняется шейдер заняться своими делами, например, подготовкой следующей текстуры.
3. Считать все обратно из текстуры или экрана.
Ты знаешь, что такое raytracing и сколько он требует вычислительных ресурсов? Некоторые усиленно переводят его на GPU: http://www.clockworkcoders.com/oglsl/rt/index.html. Там же есть ссылка исходники.
Опять-таки, я не говорю, что всегда можно занять видеокарту работой. Но там где можно - это выгодно
Ray Adams писал(а):
Насколько хорошо ты разбираешся в графических процессорах и приципах работы шейдерной системы?
Не настолько Но прошу ткнуть носом, если это не так.
Advanced member
Статус: Не в сети Регистрация: 09.06.2003 Откуда: USSR
Asteroid писал(а):
1. Записать все в текстуру, отдать ее на съедение. 2. Пока выполняется шейдер заняться своими делами, например, подготовкой следующей текстуры. 3. Считать все обратно из текстуры или экрана.
Мдя вот тут потеряеш столько, что лучше забыть об этом. И не забывай, речь шла о посторонних для 3D графики расчетов, а ты привел пример расчета именно для 3D графики
Member
Статус: Не в сети Регистрация: 30.01.2003 Откуда: Москва
Ray Adams 3-й пост сверху:
Asteroid писал(а):
GPU можно эффективно использовать только для трехмерных расчетов.
:)
GPU сложно использовать для чего-либо другого, просто потому что он не создан для этого Я отнюдь не уверен, что можно нормально выполнить FFT на видюхе, следовательно под большим вопросом все кодирование MP3 и видео на GPU. А что если запрячь под это дело ресурсы звуковой карты? Кончено, не сейчас, а в отдаленном будущем, когда звуковым тоже понадобится мощный процессор
Что касается расчета различных физико-химико-фармакологических вещей, я опять-таки не знаю, как они проводятся %) Но (ИМХО) оно имеет отношение к 3D расчетам - следовательно, это можно оптимизировать до такой степени, что потери на передаче данных не будут выглядеть устрашающими
Кстати, если приятнее читать "с экрана", а не из текстуры - то почему бы не настроить матрицу проекции и кидать вершини с соотв. параметрами?...В том же GL была возможность послать на видеокарту какие-то доп. сведения при каждой вершине (и не по одному числу - а чуть ли не массивом).
Member
Статус: Не в сети Регистрация: 30.01.2003 Откуда: Москва
Nilson Отсортируй, пожалуйста, строки в списке на GPU Все, что может CPU, посчитать на GPU невозможно - это не универсальный процессор. А вот с тем, что можно, встает вопрос целесообразности: насколько быстрее будет выполнятся код (со всеми накладками на передачу) и сколько займет написание кода под GPU, особенно если программист с шейдерами не знаком...
Advanced member
Статус: Не в сети Регистрация: 09.02.2005 Откуда: Питер
Asteroid,
тебе по какому свойству их отсортировать? давай юникодные, скажем, по возрастанию? только в скорости сортировки не будем соревноваться, тут я пасс... и так через дальний восток перебор делать прийдётся...
Member
Статус: Не в сети Регистрация: 30.01.2003 Откуда: Москва
Nilson почти уговорил =) но вопрос о скорости все равно маячит перед глазами... "Почти" относится к аппаратным вызовам через int, но это уже не вычисления
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения