Войти
ПрограммированиеФорумОбщее

SIMD оптимизации (19 стр)

Страницы: 118 19 20 2126 Следующая »
#270
13:37, 4 ноя. 2018

FROL
> Кто-нибудь пробовал ISPC (https://ispc.github.io/) ?
Выглядит интересно, но насколько я понял, это только x86. Я бы хотел ещё и ARM поддерживать, поэтому я лучше буду использовать свою кроссплатформенную обёртку над интринсиками.


#271
(Правка: 15:20) 15:20, 4 ноя. 2018

FROL
> Кто-нибудь пробовал ISPC (https://ispc.github.io/) ?
Как я понимаю попытка сваять язык, более адекватно отражающий современную архитектуру CPU.
Насколько помню комитет по стандартизации рассматривал возможность добавления SIMD-типов в С++.
Но вообще это сильно смахивает на OpenCL, тот тоже может работать на CPU.

#272
18:45, 4 ноя. 2018

v1c
> Но вообще это сильно смахивает на OpenCL, тот тоже может работать на CPU.
а есть сравнения производительности opencl (CPU) vs AVX ?

нашёл вот такую табличку ,

Изображение

отсюда, OpenCL on the CPU: AVX and SSE
https://streamhpc.com/blog/2010-12-08/opencl-on-the-cpu-avx-and-sse/

opencl c explicit (CPU) - это что ?

#273
22:13, 5 ноя. 2018

> https://ispc.github.io/
Сам не ковырял.
Это фиговина от Intel, предназначенная для написания GPU-подобного кода под CPU.
Так же как шейдер обычно пишется программистом без учёта деталей, как он выполняется над пачкой пикселей.
Для рендера выглядит плюс-минус подходящим.
В рейтрейсинге юзают: https://embree.github.io/ .

> Выглядит интересно, но насколько я понял, это только x86. Я бы хотел ещё и ARM поддерживать, поэтому я лучше буду использовать свою кроссплатформенную обёртку над интринсиками.
Оно ближе к автовекторизации, чем к ручному использованию интринсик.
И вроде же поддерживает NEON.

Люди хвалят:
https://twitter.com/tom_forsyth/status/783069365214130176

LRT;TL;DR: writing SIMD code with intrinsics is a gigantic waste of time. Use ISPC instead.

#274
22:46, 5 ноя. 2018

Вон человек пробовал ISPC в 2011 г.
https://blog.lexa.ru/tags/ispc
и уже тогда ICC на автовекторизации выдал сравнимый результат. Сейчас Clang/gcc подтянулись, появились векторные расширения, simd-библиотеки и т.п. Хотя может и ISPC с тех пор продвинулся, не знаю.

#275
(Правка: 9:14) 9:13, 6 ноя. 2018

FordPerfect
> writing SIMD code with intrinsics is a gigantic waste of time.

Перефразирую. Пишите на Джавке и не парьтесь этими Сями/Плюсами дурацкими с ручным контролем памяти, выходом за границы массива и т.д. Это же всё так сложно.

#276
(Правка: 20:54) 20:38, 17 ноя. 2018

Итак, ещё пара выходных и новый эксперимент! ))

Картинка:
Colored3D | SIMD оптимизации

Время:
Colored3D_Perf | SIMD оптимизации

Код:
https://godbolt.org/z/rUsSiC

Картинка с текстурой:
Textured3D | SIMD оптимизации

Время с текстурой:
Textured3D_Perf | SIMD оптимизации

Код с текстурой:
https://godbolt.org/z/EOvQrb

Время разных режимов растеризации:
Fill_Colored3D_Textured3D_AND_BILINEAR | SIMD оптимизации

fill color -- это просто заливка цветом.

cvex (sse/avx) это:
https://github.com/FROL256/SWGL/blob/master/gl_sc_swr/vfloat4_x64.h
https://github.com/FROL256/SWGL/blob/master/gl_sc_swr/vfloat8_x64.h

cvex (gcc) это:
https://github.com/FROL256/SWGL/blob/master/gl_sc_swr/vfloat4_gcc.h
https://github.com/FROL256/SWGL/blob/master/gl_sc_swr/vfloat8_gcc.h

Обход треугольников тут:
https://github.com/FROL256/SWGL/blob/master/gl_sc_swr/TriRasterHa… ockLineFixp.h

Код всех ROP-ов тут:
https://github.com/FROL256/SWGL/blob/master/gl_sc_swr/HW_VROP.h


Выводы:
1) Интринсики GCC это круто!

2) libsimdpp это полное говно потому что она даже не заработала на более сложном случае с текстурой и я её просто выбросил.
    Падает где-то посередине. А когда это пытаешься отлаживать то вообще жесть там внутри такая муть и просто нереальный стэк вызовов
    с оптимизацией выражений по методу "С++ страус-труп-оптимизаций-выражений-на-специализациях-шаблонов-выражений-С++-equal-shit"

3) С кодом вроде бы всё нормально, но 8 раз как-то совсем не получается.
    Процессор хорошо умеет ООО, но плохо умеет векторы.
    Надо попробовать поменять процессор на более более толстый.

4) Увеличение работы не помогло.
    В Textured3D 650 инструкций по сравнению со 150 Colored3D (в 4.3 раза больше),
    Примерно во столько же раз Textured3D медленнее чем Colored3D.
    UPD: Хотя .... там же изображение сложнее, так что удельно наверное больше производительность с текстурой.

Жду ваших комментариев и предложений! ))

#277
1:57, 18 ноя. 2018
Truthfinder
> Я писал про работу с памятью.
Зачем? У меня примеры все с регистрами.
#278
6:34, 18 ноя. 2018

FROL
Фрол, не планируешь замутить какие нить новые DXR демки ? )

#279
(Правка: 12:41) 12:39, 18 ноя. 2018

star123
Лично я пока нет, коллеги да. А вообще у меня и старых не было ...
Конкретно в этом треде я развлекаюсь с векторизованной растеризацией треугольника на SIMD )

#280
15:05, 18 ноя. 2018

FROL
> Лично я пока нет, коллеги да.
кинь ссылку на коллег и их проекты

FROL
> Конкретно в этом треде я развлекаюсь с векторизованной растеризацией
> треугольника на SIMD )
я как то писал растеризатор на j2me - с перспективной коррекцией (текстур) и освещением по Гуро - вот это было круто :D

Изображение

такой куб еле ворочался на моей моторолке :D щаз уже не так весело - везде аппаратная поддержка 3D , большие экраны .. видно оно интересно пока только находишься на острие прогресса )

#281
19:52, 18 ноя. 2018

itmanager85
> не планируешь
> кинь ссылку на коллег и их проекты
Пока они только планируют ... нету ссылок )

#282
2:21, 20 ноя. 2018

FROL
> Жду ваших комментариев и предложений! ))

Я смотрю, векторизация либо по цветовым компонентам, либо по пикселям (основной вариант).
Может сделать смешанный подход - 2 пикселя в 8-компонентном векторе? Тем самым снижаем кол-во пограничных случаев, когда часть пикселей в треугольнике, часть снаружи, и заодно выкидываем перетасовку цветовых комнонент - все эти сдвиги и |, там что-то около 20 команд получается.

По векторным расширениям, некоторые вещи можно сделать проще и быстрее.
https://gcc.godbolt.org/z/sl-_Cd
Хотя test_bits_any - это уже скорее выпендрёж, проще интринсик воткнуть.

#283
11:17, 20 ноя. 2018

invis
> https://gcc.godbolt.org/z/sl-_Cd
Только что не открывался, сейчас открылся.
Я бы юзал memcpy вместо нарушения strict aliasing.

Вообще использование типизированных указателей в оригинальном коде - спорно, я бы юзал void* для load/store.
vint8u забавный, был не в курсе, что так можно.

Для test_bits_any действительно movmskps выглядит логичнее.

Вообще, да:
> По векторным расширениям, некоторые вещи можно сделать проще и быстрее.

#284
(Правка: 11:22) 11:21, 20 ноя. 2018

itmanager85
> нашёл вот такую табличку

Сейчас модно делать выводы из рандомных картинок анонимусов при неизвестных условиях из гуглокартинок.

Страницы: 118 19 20 2126 Следующая »
ПрограммированиеФорумОбщее