Эффективно обрабатывать массив байтов (используя SIMD)? [закрыто]C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Гость
 Эффективно обрабатывать массив байтов (используя SIMD)? [закрыто]

Сообщение Гость »


У меня есть своеобразное требование, которое нужно качественно выполнить. (SIMD, возможно?) — это массив байтов. Каждую группу из 4 байтов в массиве необходимо обрабатывать следующим образом:
Умножить младший полубайт src[0] на постоянное число A.
Умножить младший полубайт src[1] на постоянное число B.
Умножить младший полубайт src[2] на постоянное число C.< br />Умножьте младший полубайт src[3] на постоянное число D.
Суммируйте четыре части выше, чтобы получить результат.< /p>
Перейти к следующим 4 наборам байтов и пересчитать результат (промыть и повторить до конца массива байтов). гарантированно будет небольшим (даже умещается в байт), поскольку все задействованные числа очень малы. Однако тип данных для результата может быть гибким для поддержки эффективного алгоритма.
Есть какие-нибудь предложения/советы/хитрости, позволяющие работать быстрее, чем следующий псевдокод?:

Код: Выделить всё

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;
}
BTW, result then forms an index in to a higher-order array.
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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»