Size: a a a

pro.graphon (and gamedev)

2020 June 28

S

Stas in pro.graphon (and gamedev)
Timur Gagiev
не очевидно?
Предположение - ради производительности. Она верна?
источник

S

Stas in pro.graphon (and gamedev)
А..... Я тут понял что не знаю switch и while в таком контексте. Вопрос снят.
источник

TG

Timur Gagiev in pro.graphon (and gamedev)
да, switch jump для линейно убывающих вариантов одинакового размера считается одной инструкцией
источник

S

Stas in pro.graphon (and gamedev)
Timur Gagiev
да, switch jump для линейно убывающих вариантов одинакового размера считается одной инструкцией
А проще никак нельзя было?
источник

TG

Timur Gagiev in pro.graphon (and gamedev)
хз, придумай )
источник

AU

Alexander Ulitin in pro.graphon (and gamedev)
Pavel 🍣
Что бы понять симд, нужно понимать что там оперируют не простыми массивами, а массивами по 4  64 битных ячейки (или 8), называемыми векторами. Надеюсь это как то поможет.
Все типы данных объявлены явно.

Тут дело в том что я не понял сразу что внутри цикла тоже происходит синхронное движение потоков внутри группы, т.е. мы не просто прибавляем 0+16+8+4+2+1, а на каждом плюсе слагаемое тоже производит редукцию.

например, ширина группы 8
Шаги для потока 0:
1. 0+4
2. (0+4)+(2+6) – вторая скобка была вычислена 2ым потоком
3. ((0+4)+(2+6))+((1+5)+(3+7)) – вторая скобка была вычислена 1ым потоком

Получается, что число полезных потоков падает в 2 раза с каждым шагом цикла
источник

TG

Timur Gagiev in pro.graphon (and gamedev)
есть два знаковых байта A и B, есть их деление на целое поеложительное число вида
(A << 8) / h
(B << 8) / h

хочется иметь что-то вида
((A << 24) | (B << 8)) / h

реально ли вообще? Пока думаю, можно ли имея информацию о знаке числа потом как-то потвикать результат и получить правильное значение.
источник

TG

Timur Gagiev in pro.graphon (and gamedev)
модули брать, делить, добавлять маску знаков или типа того
источник

d

disba1ancer in pro.graphon (and gamedev)
Timur Gagiev
есть два знаковых байта A и B, есть их деление на целое поеложительное число вида
(A << 8) / h
(B << 8) / h

хочется иметь что-то вида
((A << 24) | (B << 8)) / h

реально ли вообще? Пока думаю, можно ли имея информацию о знаке числа потом как-то потвикать результат и получить правильное значение.
яннп
источник

d

disba1ancer in pro.graphon (and gamedev)
Timur Gagiev
switch (counter&15) {
 do {
 ITERATION;
 case 15: ITERATION;
 case 14: ITERATION;
 case 13: ITERATION;
 case 12: ITERATION;
 case 11: ITERATION;
 case 10: ITERATION;
 case 9:  ITERATION;
 case 8:  ITERATION;
 case 7:  ITERATION;
 case 6:  ITERATION;
 case 5:  ITERATION;
 case 4:  ITERATION;
 case 3:  ITERATION;
 case 2:  ITERATION;
 case 1:  ITERATION;
 case 0:;  
 } while (c--);
}
ну и монстр, но я так до конца и не вкурил зачем оно
источник

TG

Timur Gagiev in pro.graphon (and gamedev)
у меня на один текстурированный треугольник с гуро уходит до 13 целочисленных делений, хочу объединить некоторые, т.к. железка на ARM их не умеет в железе
источник

d

disba1ancer in pro.graphon (and gamedev)
Timur Gagiev
у меня на один текстурированный треугольник с гуро уходит до 13 целочисленных делений, хочу объединить некоторые, т.к. железка на ARM их не умеет в железе
а делители не константные?
источник

TG

Timur Gagiev in pro.graphon (and gamedev)
disba1ancer
а делители не константные?
увы
источник

d

disba1ancer in pro.graphon (and gamedev)
Timur Gagiev
у меня на один текстурированный треугольник с гуро уходит до 13 целочисленных делений, хочу объединить некоторые, т.к. железка на ARM их не умеет в железе
а есть места где делители одинаковые?
источник

TG

Timur Gagiev in pro.graphon (and gamedev)
disba1ancer
а есть места где делители одинаковые?
ну вот пример выше, где два байта делятся на одно число
источник

d

disba1ancer in pro.graphon (and gamedev)
Timur Gagiev
ну вот пример выше, где два байта делятся на одно число
а что дороже 2 деления или деление + 2 умножения?
источник

TG

Timur Gagiev in pro.graphon (and gamedev)
деление дороже
источник

d

disba1ancer in pro.graphon (and gamedev)
Timur Gagiev
деление дороже
деление дороже 2ух умножений?
источник

TG

Timur Gagiev in pro.graphon (and gamedev)
disba1ancer
деление дороже 2ух умножений?
да
источник

d

disba1ancer in pro.graphon (and gamedev)
можно попробовать применить оптимизацию деления на константу
источник