2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3
 
 Re: Оптимизация вычислений на асме под AVX2
Сообщение10.08.2015, 02:22 
Заслуженный участник


20/08/14
11867
Россия, Москва
SY1234 в сообщении #1043775 писал(а):
Почему не относится: я привел важный пример использования AVX2, т.к. мне показалось, что Вы бросаете тень на AVX2. Что касается непосредственно Вашей темы, то вроде venco уже говорил о том, что YMM регистры созданы не для тех манипуляций, которым Вы пытаетесь их подвергнуть. И я venco отвечал, а не Вам: впрочем, модераторы рассудят.
Меня не интересовали все примеры применения AVX2, важные они для Вас или нет, мне надо конкретно мой пример, о переносах при сложениях.
И да, можете считать это не просто тенью, а огромным куском грязи на этот AVX2.
Пожалуйста не надо отвечать тут на посторонние темы. Тем более что venco говорил как раз по моей теме, про сложения. А Вы нет.
И повторно прошу Вас не замусоривать тему посторонними рассуждениями, даже если Вам что-то показалось.
Всё ещё с надеждой на понимание ...

 Профиль  
                  
 
 Re: Оптимизация вычислений на асме под AVX2
Сообщение10.08.2015, 02:38 


10/08/15

41
Dmitriy40
Я писал: "Что касается непосредственно Вашей темы, то вроде venco уже говорил о том, что YMM регистры созданы не для тех манипуляций, которым Вы пытаетесь их подвергнуть." Это разве не по теме? Я тут полностью солидарен с venco.

 Профиль  
                  
 
 Re: Оптимизация вычислений на асме под AVX2
Сообщение10.08.2015, 03:49 
Заслуженный участник


20/08/14
11867
Россия, Москва
SY1234 в сообщении #1043780 писал(а):
Это разве не по теме?
Нет, не по теме. Это не привносит в тему ничего нового. Не надо рассказывать что для чего не предназначено, лучше расскажите как с тем что есть сделать то что надо лучше чем уже реализовано - вот это будет по теме.

 Профиль  
                  
 
 Re: Оптимизация вычислений на асме под AVX2
Сообщение10.08.2015, 07:57 


10/08/15

41
Dmitriy40 в сообщении #1043792 писал(а):
SY1234 в сообщении #1043780 писал(а):
Это разве не по теме?
Нет, не по теме. Это не привносит в тему ничего нового.

Я просто еще раз указал на то, что использование AVX2 в Вашем контексте - это тупиковый путь в смысле получения оптимального решения: просто за прекрасные процессоры Интела стало обидно - это называется валить с больной головы на здоровую. Что касается оптимизации решения вашей задачи, то я бы на Вашем месте обратился к специализированным форумам, занимающимися проблемами, аналогичными Вашим. Я в свое время занимался проблемой четверной точности для вещественных чисел: такая арифметика реализована, например, в фортрановском интеловском компиляторе, но там она очень медленная. Путем потери менее одного десятичного знака мне удалось увеличить скорость интеловского алгоритма почти в 20 раз, но для этого мне пришлось перелопатить массу литературы и порыскать по специализированным форумам. На решение этой задачи у меня ушло около одного года. Кроме того, я указал в своем первом сообщении на библиотеку многократной точности MPIR с открытым кодом (Multiple Precision Integers and Rationals Library): одним из ее достоинств является то, что там подробно расписано, как создавать статические и динамические библиотеки многократной точности, используя Microsoft Visual Studio вплоть до 2015. Думаю, что для значительного количества пользователей, интересующихся арифметикой многократной точности и далеких от Linux'ов - это важная и полезная информация.

 Профиль  
                  
 
 Re: Оптимизация вычислений на асме под AVX2
Сообщение19.10.2021, 01:59 
Заслуженный участник


20/08/14
11867
Россия, Москва
Dmitriy40 в сообщении #1035460 писал(а):
Изучал разные варианты, похоже это вот время в 13 тактов уже не улучшить (на моём процессоре).
Однако был не прав, ещё как можно улучшить:
код: [ скачать ] [ спрятать ]
Используется синтаксис ASM
;Подготовительные и поясняющее действия
                vmovdqu         ymm0,bytes(1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2);    ;Первое слагаемое, по цифре в байте
                vmovdqu         ymm1,bytes(8,9,2,4,6,8,2,4,7,1,6,9,3,5,1,5,9,1,4,7,6,2,3,7,1,2,9,3,1,8,2,7);    ;Второе слагаемое, по цифре в байте
                vpaddq          ymm0,ymm0,ymm1  ;Сложение без распространения переносов
                vpaddq          ymm0,ymm0,qwords(0x76F6F6F6F6F6F6F6,0x76F6F6F6F6F6F6F6,0x76F6F6F6F6F6F6F6,0x76F6F6F6F6F6F6F6)   ;Распространение переносов внутри каждого qword
                vmovdqu         ymm7,qwords(0x7FFFFFFFFFFFFFFF,0x7FFFFFFFFFFFFFFF,0x7FFFFFFFFFFFFFFF,0x0000000000000000)        ;Для сравнения на "все девятки" в qword и маска выделения переносов, ноль здесь в младшем qword
;Учёт внутренних переносов между qwords                 Порты   L/T
                vpcmpeqq        ymm1,ymm0,ymm7          ;15     1/0.5   проверим на распространение переноса (все 9)
                vptest          ymm1,ymm1               ;0+5    2/1     нужно ли распространение переноса хоть где-то
                jnz             .carry                  ;06     1/0.5   если нужно распространение, то уйдём и будем считать медленно и аккуратно
                vpsrlq          ymm1,ymm0,63            ;0      1/1     все 4 переноса  в младшем бите каждого qword (в нормальном порядке 3210)
                vpermq          ymm1,ymm1,10010011b     ;5      3/1     переставим их в правильные qwords (т.е. сдвинем влево по кругу на 64 бита, в порядок 2103)
                vpand           ymm2,ymm7,ymm1          ;015    1/0.33  обнулим перенос в младшем qword (т.е. из старшего qword)
                vpaddq          ymm0,ymm0,ymm2          ;15     1/0.5   учтём все внутренние переносы
                vpandn          ymm1,ymm7,ymm1          ;015    1/0.33  выделим старший перенос в младшем бите регистра для передачи дальше
;       015     15      0       1       5       6       Порты
;       2       2       2       0       2       1       Такты
Т.е. если ни в одном из трёх старших qwords нет комбинации "все девятки", то внутренние переносы можно учесть за 2.67 throughput такта.
Комбинация "все восемь девяток" может встретиться в любой из трёх старших позиций всего лишь примерно в 3/100000000 случаев, что смело можно не учитывать.

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

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



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

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


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

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