Ефективна операция за сумиране XOR (Matlab или C/C++)

Имам следния проблем: Имам десетки и стотици хиляди 512-битови логически масиви (или 64 байта). За всяка възможна двойка трябва да изпълня XOR, последвано от сума. Има ли начин да направите това ефективно? Чух, че има специални инструкции за процесора за това, но моите търсения в Google не успяха дори да намерят споменаването му.

В идеалния случай бих искал да направя това в MATLAB. Ако не, имам достъп и до C++ компилатора на Intel с IPP и TBB.

Бих искал да избегна цикли for над всеки елемент от логически масив, ако е възможно.


person Vladislavs Dovgalecs    schedule 19.06.2012    source източник
comment
Вашият проблем звучи като добър кандидат за функция MEX, но Matlab може да е достатъчно бърз. Бих написал такъв в прост Matlab, бих се уверил, че работи и бих тествал скоростта му. Ако е твърде бавен, първо напишете проста C версия, дебъгвайте я и тествайте нейната скорост, като използвате максимална оптимизация на компилатора (-O3 за gcc на Linux и Mac, не знам за icc или Windows). Ако все още не е достатъчно бързо, трябва да започнете да разглеждате MMX и SSE инструкциите. По-специално, Google за „Intel compiler intrinsics“. Но, сериозно, първо вземете работеща версия в чист Matlab, оптимизирайте я само ако трябва.   -  person sfstewman    schedule 29.06.2012


Отговори (1)


Без цикли for над елементите на масива, опитайте:

x=[true true false false]
y=[true false true false]

z=xor(x,y)
sum(z)
person Dennis Jaheruddin    schedule 01.10.2012