Если и в шейдере есть if оторый занимает 99% времени то количество ядер не спасет.
}:+()___ [Smile]
> Это не параллелится. Но достаточно большой процент задач можно решать на параллельных машинах. Другое дело, что часто стандартный алгоритм не подходит и надо придумывать параллельный.
Довольно небольшой процент задач :) Другое дело, что вывод изображения на уровне пиксельного шейдера это отличный пример парелельных вычислений. К сожалению программисты имеют тенденцию выжимать все соки из железа, и вычисление одной точки может быть весьма затратным. Каждая точка не зависит от остальных (это плюс), но вот цикл ВНУТРИ вычисления точки может зависеть от предыдущего прохода (это минус). Короче нет в жизни совершенства...
}:+()___ [Smile]
> Надо подгонять алгоритмы под размер варпа
Сравни "размеры" блока SSE, блока SMX и GCN-овского.
Самый большой и неудобный - SMX
Я бы ещё щас вспомнил Cell, где бранчи несколько лучше, и есть hbr, hbrr, hbra... Но не буду :)
FROL
Попкорн?
Mr.TyanVary
> Так вообщем получается чем больше ядер тем меньше будут потери от бранчинга? (ну из за простоя ALU?)
Нет, это зависит от самих ядер
> А у титана ещё и кэш есть, получается у него обращения к текстурам будет быстрее или какую там роль играет кэш вообще?
Кеш есть везде
bazhenovc
> Сравни "размеры" блока SSE, блока SMX и GCN-овского.
SSE, точнее уже AVX, -- операции с 8-ми флоатами, на видеокартах варп = 32. Разница всего 4 раза.
}:+()___ [Smile]
Уточняй, на каких видеокартах. GCN всё-таки сильно отличается от NV. Я бы сказал, что он более близок к Cell.
bazhenovc
> GCN всё-таки сильно отличается от NV
я больше с GCN архитектурой знаком, но как-то не вижу особой разницы с NV.
Можно поподробнее, чем они различаются так принципиально?
Ага, на первый взгляд, GCN гораздо ближе к архитектуре NV, чем прошлая линейка VLIW4. Единственная разница, которую я заметил, это наличие скялярных исполнительных устройств. Еще по презентациям не очень понятен размер варпа, то ли 64 как и было, толи все-таки 16.
}:+()___ [Smile]
> Ага, на первый взгляд, GCN гораздо ближе к архитектуре NV, чем прошлая линейка
> VLIW4
Да, они вроде даже говорили, что теперь будет как у НВидии ) На прошлой архитектуре были те еще извраты с перетасовкой бинарного кода )
}:+()___ [Smile]
VLIW - вообще отдельная песня, давай не будем?:)
VirT
Давай посмотрим на ядро SMX: 192 ядра CUDA, каждое ядро имеет floating point и integer ALU, 64 double precision блока, 32 SFU и 32 load store. В нём есть 4 warp-scheduler`а, в каждом - 32 потока. Всего SMX-ядер - 15 (на GK110).
Итого имеем 128 варпов(грубо говоря, по факту их будет меньше из-за большого кол-ва специализированных блоков, которые не всегда используются). Бранч внутри варпа приведёт к либо а) выполнится оба условия, либо б) выполнятся оба условия по очереди. Оба варианта - плохие, т.к. железо либо простаивает, либо работает вхолостую.
Теперь посмотрим на ядро GCN: т.н. Compute Unit`ы. Каждый CU состоит из 4-х SIMD + branch prediction unit + scalar unit. Всего CU-шек - 32(на 7970). Каждый CU имеет свой кеш инструкций и отдельный program counter для каждого SIMD`а.
Понятия варпа в случае GCN нет, каждый CU может выполнять операции из разных "варпов". Бранч внутри CU ни к чему серьёзному не приведёт.
Как-то так, если я не прав - ткните носом :)
bazhenovc
> Каждый CU имеет свой кеш инструкций и отдельный program counter для каждого SIMD`а.
Вот этому пруф не нашел. Ассемблерный код в презентациях выглядит как для обычного SIMD, да и не может быть ветвления в принципе: SIMD по названию выполняет одну команду всем юнитом. Т. к. размер SIMD-а 16, то варп минимум 16, но там что-то написано по поводу 64, так что х. з.
}:+()___ [Smile]
Пруф в презентации

san
> Ага. Я чуток изменил формулу. Попробуй распаралелить.
Префиксная сумма должна помочь :)
PS: не так не получится пардон
bazhenovc
> Попкорн?
Ну да как-то вроде бы арифметика 32 битная флотовая уже давно на GPU работает. Думаю даже раньше G80 было.
Чтобы точность меньше стадартного флота это совсем что-то древнее.
bazhenovc
> Понятия варпа в случае GCN нет, каждый CU может выполнять операции из разных
> "варпов". Бранч внутри CU ни к чему серьёзному не приведёт.
Это точно не правда. Там точно такие же варпы и один SIMD выполняет за раз одну инструкцию для 128/256 битного вектора
VirT
>In GCN, each CU includes 4 separate SIMD units for vector processing. Each of these SIMD units simultaneously executes a single operation across 16 work
>items, but each can be working on a separate wavefront. This places emphasis on finding many wavefronts to be processed in parallel, rather than relying on
>the compiler to find independent operations within a single wavefront.
Wavefront`ом они называют "a group of 64 work tems", т.е. варп.
Полный пейпр называется GCN_Architecture_whitepaper.pdf, могу скинуть на почту(на геймдев не влазит, очень большой)
bazhenovc
> > n GCN, each CU includes 4 separate SIMD units for vector processing. Each of
> > these SIMD units simultaneously executes a single operation across 16 work
> > tems, but each can be working on a separate wavefront.
Из этого предложения следует всего лишь что у них размер warp-а стал равным 16 а не 64.
А то что раньше называлось wavefront-ом просто стало логической единицей.
> This places emphasis on finding many wavefronts to be processed in parallel, rather than relying on
> the compiler to find independent operations within a single wavefront.
А это по-моему вообще не о том.
Тема в архиве.