История изменений
Исправление Kroz, (текущая версия) :
prischeyadro прав, сложнее всего с выборкой/перемешиванием отдельных битов.
Впринципе, алгоритм реалиуется парой логических операций. Не пробовал, но по идее так:
b*bm1*a*am1 + b*bm2*a*am2 + b*bm3*a*am3 + b*bm4*a*am4
am1/2/3/4 - маска А, для 4-битных случаев 1000, 0100, 0010, 0001
bm1/2/3/4 - маска B, котроая задается формулой, для данного случая 0101, 0000, 0001, 1000.
Но если размер входного блока вырастает, то таких операций получается много. А по условиям задачи нужно делать быстро. Вот и подумал на всякие чудо-инструкции современных процессоров.
Еще по идее можно разложить на операции с матрицами (эх, матан, пока не смог вспомнить, но уверен что есть).
Бегло посмотрел на MMX/SSE — там ничего подобного нет
Странно, мне казалось, что это типовая задача. А операций с битовыми матрицами тоже нет?
Исправление Kroz, :
prischeyadro прав, сложнее всего с выборкой/перемешиванием отдельных битов.
Впринципе, алгоритм реалиуется парой логических операций. Не пробовал, но по идее так:
b*bm1*a*am1 + b*bm2*a*am2 + b*bm3*a*am3 + b*bm4*a*am4
bm1/2/3/4 - маска B, котроая задается формулой, для данного случая 0101, 0000, 0001, 1000.
Но если размер входного блока вырастает, то таких операций получается много. А по условиям задачи нужно делать быстро. Вот и подумал на всякие чудо-инструкции современных процессоров.
Еще по идее можно разложить на операции с матрицами (эх, матан, пока не смог вспомнить, но уверен что есть).
Бегло посмотрел на MMX/SSE — там ничего подобного нет
Странно, мне казалось, что это типовая задача. А операций с битовыми матрицами тоже нет?
Исходная версия Kroz, :
prischeyadro прав, сложнее всего с выборкой/перемешиванием отдельных битов.
Впринципе, алгоритм реалиуется парой логических операций. Не пробовал, но по идее так:
b*bm1*a*am1 + b*bm2*a*am2 + b*bm3*a*am3 + b*bm4*a*am4
Еще по идее можно разложить на операции с матрицами (эх, матан, пока не смог вспомнить, но уверен что есть).
Бегло посмотрел на MMX/SSE — там ничего подобного нет
Странно, мне казалось, что это типовая задача. А операций с битовыми матрицами тоже нет?