2012-06-19 2 views
2

У меня есть следующая проблема: у меня есть десятки и сотни тысяч 512-битных логических массивов (или 64 байта). Для каждой возможной пары я должен выполнить XOR, за которой следует сумма. Есть ли способ сделать это эффективно? Я слышал, что для этого есть специальные инструкции CPU, но мои поисковые запросы Google не смогли даже найти упоминание об этом.Эффективная операция XOR sum (Matlab или C/C++)

В идеале, я хотел бы сделать это в MATLAB. Если нет, у меня также есть доступ к компилятору Intel C++ с IPP и TBB.

Я хотел бы избежать, если это возможно, для циклов над каждым элементом логического массива.

+1

Ваша проблема звучит как хороший кандидат для функции MEX, но Matlab может быть достаточно быстро. Я бы написал один в простой Matlab, убедитесь, что он работает, и проверьте его скорость. Если это слишком медленно, сначала напишите простую версию C, отлаживайте ее и проверьте ее скорость, используя максимальную оптимизацию компилятора ('-O3' для gcc на Linux и Mac, я не знаю о icc или Windows). Если он все еще не достаточно быстрый, вы должны начать смотреть инструкции MMX и SSE. В частности, Google для «встроенных компиляторов Intel». Но, серьезно, сначала получите рабочую версию в прямом Matlab, только оптимизируйте ее, если вам нужно. – sfstewman

ответ

0

Без для петель над элементами массива, попробуйте:

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

z=xor(x,y) 
sum(z) 
Смежные вопросы