микро-слияния. Глупые, глючные инструменты с закрытым исходным кодом.) Во всяком случае, это поднимает планку еще больше, чтобы любой другой подход конкурировать.

у ускорить следующую операцию с инструкциями 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];
}

Ответы на вопрос(2)

Ваш ответ на вопрос