Задача примерно такая. Есть некий буфер в котором есть некоторые значения. Есть второй буфер, в котором хранятся адреса для сохранения в выходной буфер. Есть третий буфер(выходной), в который сохраняются данный из первого по адресам из второго. Перед началом сохранения вычисляется офсет во втором буфере, начиная с которого берутся адреса
То есть примерно такое
size_t offset = calc_offset();
for(size_t i = 0; i < sizeInp; ++i) {
*(out + *(bufOffsets + offset++)) = inp[i];
}
Можно как-нибудь оптимизировать запись в память для такого алгоритма? На данный момент это является узким местом самой тяжелой функции в системе. Остальную часть функции уже удалось оптимизировать через avx2.
Значения в bufOffsets само собой могут отличаться от соседних значений больше чем на 1 (то есть куском через тот же avx не записать). Подойдут решения как общие(с++/c), так и под асм x86(x86_64).
Заранее спасибо.