микро-слияния. Глупые, глючные инструменты с закрытым исходным кодом.) Во всяком случае, это поднимает планку еще больше, чтобы любой другой подход конкурировать.
у ускорить следующую операцию с инструкциями AVX2, но я не смог найти способ сделать это.
Мне дали большой массивuint64_t data[100000]
из uint64_t и массивunsigned char indices[100000]
байтов. Я хочу вывести массивuint64_t Out[256]
где i-е значение - это xor всехdata[j]
такой, чтоindex[j]=i
.
Простая реализация того, что я хочу, это:
uint64_t Out[256] = {0}; // initialize output array
for (i = 0; i < 100000 ; i++) {
Out[Indices[i]] ^= data[i];
}
Можем ли мы реализовать это более эффективно с помощью инструкций AVX2?
РЕДАКТИРОВАТЬ: Вот как выглядит мой код сейчас
uint64_t Out[256][4] = {0}; // initialize output array
for (i = 0; i < 100000 ; i+=4) {
Out[Indices[i ]][0] ^= data[i];
Out[Indices[i+1]][1] ^= data[i+1];
Out[Indices[i+2]][2] ^= data[i+2];
Out[Indices[i+3]][3] ^= data[i+3];
}