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
11867
Россия, Москва

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

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

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

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


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

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


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

(Команды 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
1368
Россия, Нижний Новгород

(Dmitriy40)

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

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


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

(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
1368
Россия, Нижний Новгород

(Dmitriy40)

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

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


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

(SergeyGubanov)

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

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

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



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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