selectivamente elementos de una lista con instrucciones AVX2

Quiero acelerar la siguiente operación con las instrucciones de AVX2, pero no pude encontrar una manera de hacerlo.

Me dan una gran variedaduint64_t data[100000] de uint64_t's, y una matrizunsigned char indices[100000] de bytes. Quiero generar una matrizuint64_t Out[256] donde el i-ésimo valor es el xor de todosdata[j] tal queindex[j]=i.

Una implementación sencilla de lo que quiero es esto:

uint64_t Out[256] = {0};     // initialize output array
for (i = 0; i < 100000 ; i++) {
    Out[Indices[i]] ^= data[i];
}

Podemos implementar esto de manera más eficiente con las instrucciones AVX2?

EDIT: así es como se ve mi código ahora

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];
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta