2014 dxdy logo

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

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




На страницу Пред.  1, 2, 3
 
 Re: Оптимизация вычислений на асме под AVX2
Сообщение10.08.2015, 02:22 
SY1234 в сообщении #1043775 писал(а):
Почему не относится: я привел важный пример использования AVX2, т.к. мне показалось, что Вы бросаете тень на AVX2. Что касается непосредственно Вашей темы, то вроде venco уже говорил о том, что YMM регистры созданы не для тех манипуляций, которым Вы пытаетесь их подвергнуть. И я venco отвечал, а не Вам: впрочем, модераторы рассудят.
Меня не интересовали все примеры применения AVX2, важные они для Вас или нет, мне надо конкретно мой пример, о переносах при сложениях.
И да, можете считать это не просто тенью, а огромным куском грязи на этот AVX2.
Пожалуйста не надо отвечать тут на посторонние темы. Тем более что venco говорил как раз по моей теме, про сложения. А Вы нет.
И повторно прошу Вас не замусоривать тему посторонними рассуждениями, даже если Вам что-то показалось.
Всё ещё с надеждой на понимание ...

 
 
 
 Re: Оптимизация вычислений на асме под AVX2
Сообщение10.08.2015, 02:38 
Dmitriy40
Я писал: "Что касается непосредственно Вашей темы, то вроде venco уже говорил о том, что YMM регистры созданы не для тех манипуляций, которым Вы пытаетесь их подвергнуть." Это разве не по теме? Я тут полностью солидарен с venco.

 
 
 
 Re: Оптимизация вычислений на асме под AVX2
Сообщение10.08.2015, 03:49 
SY1234 в сообщении #1043780 писал(а):
Это разве не по теме?
Нет, не по теме. Это не привносит в тему ничего нового. Не надо рассказывать что для чего не предназначено, лучше расскажите как с тем что есть сделать то что надо лучше чем уже реализовано - вот это будет по теме.

 
 
 
 Re: Оптимизация вычислений на асме под AVX2
Сообщение10.08.2015, 07:57 
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 
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


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group