У меня есть своеобразное требование, которое нужно качественно выполнить. (SIMD, возможно?)
Код: Выделить всё
src
Умножить младший полубайт src[0] на постоянное число A.
Умножить младший полубайт src[1] на постоянное число B.
Умножить младший полубайт src[2] на постоянное число C.< br />Умножьте младший полубайт src[3] на постоянное число D.
Суммируйте четыре части выше, чтобы получить результат.< /p>
Перейти к следующим 4 наборам байтов и пересчитать результат (промыть и повторить до конца массива байтов).
Код: Выделить всё
result
Есть какие-нибудь предложения/советы/хитрости, позволяющие работать быстрее, чем следующий псевдокод?:
Код: Выделить всё
for (int i=0; i< length; i+=4)
{
result = (src[i] & 0x0f) * A + (src[i+1] & 0x0f) * B + (src[i+2] & 0x0f) * C + (src[i+3] & 0x0f) * D;
}
This particular loop is so curial, that implementation language is no bar. Can choose language out of C#, C or MASM64
Источник: https://stackoverflow.com/questions/781 ... using-simd