Я некоторое время боролся с производительностью сетевого кодирования в разрабатываемом мной приложении (см. Оптимизация SSE-кода, Улучшение производительности сетевого кодирования и Распределение OpenCL). Сейчас я довольно близок к достижению приемлемой производительности. Вот текущее состояние самого внутреннего цикла (на который тратится >99% времени выполнения):
while(elementIterations-- >0)
{
unsigned int firstMessageField = *(currentMessageGaloisFieldsArray++);
unsigned int secondMessageField = *(currentMessageGaloisFieldsArray++);
__m128i valuesToMultiply = _mm_set_epi32(0, secondMessageField, 0, firstMessageField);
__m128i mulitpliedHalves = _mm_mul_epu32(valuesToMultiply, fragmentCoefficentVector);
}
Есть ли у вас какие-либо предложения по дальнейшей оптимизации? Я понимаю, что это трудно сделать без большего контекста, но любая помощь будет оценена по достоинству!