Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Какие задачи кроме графических вы решали при


Автор: Royan 30.7.2008, 10:18
Не секрет, что уже некоторое время набирает силу направление разработки программ, которые для решения своих задач используют мощность не CPU, а GPU. Вопрос к участникам форума, кто из вас использовал ресурсы GPU, для решения каких-либо задач не графики? Грубо говоря пользовался карточкой не по назначению? Интересно узнать что это была за задача, каковы были успехи в ее решении, действительно ли ощущался серьезный скачок в скорости вычисления?

Автор: sgi1981 31.7.2008, 02:24
Я сегодня ночью тестировал быстродействие GPU с помощью шейдера фрагментов.
В тексте шейдера фрагментов прописал 140 инструкций вычисления косинуса.
Составлял приложение на ассемблере FASM. Шейдер писал тоже на его ассемблере.
Вот фрагмент шейдера
Код

stringShader db '!!ARBfp1.0', 13, 10
db '#fog.fp', 13, 10
db 'ATTRIB iFrP = fragment.position;', 13, 10
db 'OUTPUT oPrC = result.color;', 13, 10
db 'PARAM density = {0, 0, 0, 0};', 13, 10
db 'PARAM fogColor = {0.5, 0.8, 0.5, 1.0};', 13, 10
db 'PARAM e = {2.71828, 0, 0, 0};', 13, 10
db 'TEMP fogFactor, tc, ttt;', 13, 10
db 'TEX tc, fragment.texcoord[0], texture[0], 2D;', 13, 10

db 'MOV ttt, 1.0;', 13, 10
db 'COS ttt.x, ttt.x;', 13, 10
db 'COS ttt.x, ttt.x;', 13, 10
db 'COS ttt.x, ttt.x;', 13, 10    
db '#и так далее (всего 140 инструкций COS ttt.x, ttt.x);', 13, 10
db 'COS ttt.x, ttt.x;', 13, 10
db 'COS ttt.x, ttt.x;', 13, 10
db 'COS ttt.x, ttt.x;', 13, 10
db 'MUL fogFactor.x, iFrP.z, ttt.x;', 13, 10
db 'MUL fogFactor.x, fogFactor.x, fogFactor.x;', 13, 10
db 'POW fogFactor.x, e.x, -fogFactor.x;', 13, 10
db 'MAX fogFactor.x, fogFactor.x, 0.0;', 13, 10
db 'MIN fogFactor.x, fogFactor.x, 1.0;', 13, 10
db 'LRP oPrC, fogFactor.x, tc, fogColor;', 13, 10
db 'END', 13, 10, 0 


Это вначале был шейдер для генерации тумана.
Затем решил узнать быстродействие.

Ну и вот результат такой.
Разрешение окна == 1680 * 1050
FPS == 7
Количество тригонометрических инструкций == 140.
И все это в произведении дает 1728720000 косинусов в секунду с одинарной точностью, 7 десятичных знаков после запятой или 24 двоичных. Неплохо !
Дело в том, что GPU многоядерный (возможно больше 200 ядер), в каждом ядре собственное ALU. Набор инструкций его во много раз меньше чем у ЦП. Поэтому и каждое ядро занимает меньше транзисторов и ядер таких можно поместить много.
У меня ЦП Celeron 4 вычисляет ту же функцию с точностью 19 десятичных знаков после запятой или 64 двоичных за несколько десятков тактов.

Вот только набор инструкций у GPU ограниченный. Например, нет в ассемблере OpenGL для GPU инструкций условного и безусловного переходов.

Автор: W4FhLF 31.7.2008, 04:49
На GPU эффективно могут решаться любые задачи удовлетворяющие следующим условиям: 

1. Неинтеративность алгоритма. Т.е. возможность его распараллелить.
2. Малое число исходных и обрабатываемых данных (не более 16кб).
3. Операции с 32х разрядными целыми и вещественными с одинарной точностью числами.

Автор: Rickert 3.8.2008, 12:28
В одном из номеров phrack писалось про использование GPU в качестве криптомашины.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)