2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4
 
 Re: злопамятный tp7, помогите!
Сообщение15.03.2017, 19:24 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Разумеется, когда речь идёт об оптимизации такого уровня, никто не учитывает аргументов "не комильфо".

 Профиль  
                  
 
 Re: злопамятный tp7, помогите!
Сообщение15.03.2017, 20:22 
Заслуженный участник


20/08/14
11170
Россия, Москва

(Так пропал ли эффект?)

Munin в сообщении #1200632 писал(а):
И я всё жду, когда ТС отрапортует, что ошибку исправил, и эффект пропал.
По моему опыту, лишь порядка от трети до половины товарищей после исправления ошибок находит в себе желание зайти об этом сообщить (даже не поблагодарить, просто сообщить мол да, дело было именно в этом). Легче самому вызвать глюк, исправить и проверить исправился ли. :D

Долгие вычисления не всегда есть смысл оптимизировать по количеству операций, зря Вы спорите, часто бывает разбитие на более простые операции позволяет им выполняться (квази)параллельно и ускоряет программу - при увеличении общего количества операций. (Пример из недавней практики: замена одной однотактной (!) команды AVX2 на 4 целочисленные команды ускоряет цикл в полтора раза, с 20 тактов до 14. За счёт уменьшения конфликтов в портах запуска и переноса части вычислений в ещё один порт и лучшей балансировки нагрузки на порты между итерациями.) Тем более строго последовательный доступ к данным часто предпочтительней более редкого, но произвольного. Но к данному случаю это всё рюшечки, тут длина циклов и объёмы мизерные.

 Профиль  
                  
 
 Re: злопамятный tp7, помогите!
Сообщение16.03.2017, 15:43 
Аватара пользователя


14/11/12
1338
Россия, Нижний Новгород
Dmitriy40 в сообщении #1200710 писал(а):
(Пример из недавней практики: замена одной однотактной (!) команды AVX2 на 4 целочисленные команды ускоряет цикл в полтора раза, с 20 тактов до 14. За счёт уменьшения конфликтов в портах запуска и переноса части вычислений в ещё один порт и лучшей балансировки нагрузки на порты между итерациями.)
А можно по-подробней о какой именно AVX2 инструкции речь, и какой использовался процессор?

 Профиль  
                  
 
 Re: злопамятный tp7, помогите!
Сообщение16.03.2017, 16:52 
Заслуженный участник


20/08/14
11170
Россия, Москва

(Команды AVX2)

SergeyGubanov в сообщении #1200925 писал(а):
А можно по-подробней о какой именно AVX2 инструкции речь, и какой использовался процессор?
Можно, отчего же нет. Процессор Intel Haswell.
Используется синтаксис ASM
;Было                                       ;Порты     L/T
        vpshufb         ymm1,ymm0,ymm3  ;5      1/1
        vpsllvd         ymm1,ymm2,ymm1  ;0+05   2/2
        vpshufb         ymm1,ymm1,ymm4  ;5      1/1
        vpand           ymm7,ymm7,ymm1  ;015    1/0.33
;Стало                                     ;Порты     L/T
        vpshufb         ymm1,ymm0,ymm3  ;5      1/1
        vpsllvd         ymm1,ymm2,ymm1  ;0+05   2/2
        vpmovmskb       EBX,ymm1        ;0      3/1
        or              EBX,77777777h   ;0156   1/0.25
        rol             EBX,29          ;06     1/0.5
        and             EAX,EBX         ;0156   1/0.25
Этот кусок повторяется 4 раза, плюс ещё десяток векторных команд. И десятки миллионов итераций.
В 5-м порту вместо всегда 3-х команд запускаются лишь две первые, скалярные улетают все в 6-й порт (раньше оставался практически свободным).
На самом деле странно, вроде бы вместо 3 тактов в 5-м порту заняты те же 3 такта в 0-м, однако из-за окружающего кода, требующего в основном 5-й порт, на круг выходит приличный выигрыш. В варианте "было" порты 0,1,5 заняты почти одинаково по 18-20 тактов, в варианте "стало" уже порты 0,1,5,6 заняты тоже почти одинаково 13-14 тактов. Правда не понимаю почему выигрыш больше 4-х тактов, может я где-то ошибся на такт-полтора на цикл, или опечатка у Agner Fog :mrgreen: Профилирование выполнено Intel(R) Architecture Code Analyzer Version 2.1.

 Профиль  
                  
 
 Re: злопамятный tp7, помогите!
Сообщение16.03.2017, 19:37 
Аватара пользователя


14/11/12
1338
Россия, Нижний Новгород

(Dmitriy40)

Но тут не эквивалентное преобразование. Если вас устраивает результат в EAX вместо результата в ymm7, то может быть можно было с самого начала работать с битами?

 Профиль  
                  
 
 Re: злопамятный tp7, помогите!
Сообщение16.03.2017, 20:16 
Заслуженный участник


20/08/14
11170
Россия, Москва

(SergeyGubanov)

В ymm7 тоже биты, просто команда vpmovmskb будет сделана один раз после 4-х повторов этого куска. На самом деле это реализация выборки бита из маски по номеру: for(i=0..31,EAX[i]=bit_mask[n[i]]), n[] сидит как вектор из 32-х байтов в ymm0, четырежды выбирается оттуда по 8 штук в ymm1, битовая маска в ymm2, в результате в старших битах каждого байта в ymm7 или в битах EAX получаем нужные 32 бита. И для данной задачи оба кода эквиваленты. А полную замену, да ещё для любых условий, я и не обещал.
С битами с самого начала работать не проще, тут каждая vpsllvd за два такта выполняет 8 разных сдвигов, и за 15-20 тактов обрабатывается 32 байта (номера бита), примерно полтакта на число, включая и десяток не показанных команд, причём легко расширяется для маски длиной до 256 битов за пяток лишних тактов, скалярно даже близко такой скорости не достичь никогда.

 Профиль  
                  
 
 Re: злопамятный tp7, помогите!
Сообщение17.03.2017, 14:13 
Аватара пользователя


14/11/12
1338
Россия, Нижний Новгород

(Dmitriy40)

На серверный Skylake для использования _mm512_shuffle_epi8, _mm512_sllv_epi32 случайно не планируете переходить?

 Профиль  
                  
 
 Re: злопамятный tp7, помогите!
Сообщение17.03.2017, 17:14 
Заслуженный участник


20/08/14
11170
Россия, Москва

(SergeyGubanov)

SergeyGubanov в сообщении #1201148 писал(а):
На серверный Skylake для использования _mm512_shuffle_epi8, _mm512_sllv_epi32 случайно не планируете переходить?
Смотрел я в сторону AVX512, есть некоторые вкусности (к примеру произвольная трёхоперандная логическая операция) кроме просто полезной увеличения разрядности, но засада в том, что для этого придётся менять проц, мать, память - итого слишком дорого. Дешевле видюху за 30тр поставить и загрузить 2000 потоков вычислений, будет наверняка в разы быстрее (и по скорости памяти меньше ограничено). А так как это развлечение, а не работа, то ... жаба добро не даёт.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 53 ]  На страницу Пред.  1, 2, 3, 4

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: YandexBot [bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group