Я работаю над небольшим количеством кода и пытаюсь максимально оптимизировать его, в основном, чтобы он работал в течение определенного периода времени.
Следующее делает звонок ...
static affinity_partitioner ap;
parallel_for(blocked_range<size_t>(0, T), LoopBody(score), ap);
... и вот что выполняется.
void operator()(const blocked_range<size_t> &r) const {
int temp;
int i;
int j;
size_t k;
size_t begin = r.begin();
size_t end = r.end();
for(k = begin; k != end; ++k) { // for each trainee
temp = 0;
for(i = 0; i < N; ++i) { // for each sample
int trr = trRating[k][i];
int ei = E[i];
for(j = 0; j < ei; ++j) { // for each expert
temp += delta(i, trr, exRating[j][i]);
}
}
myscore[k] = temp;
}
}
Я использую TBB Intel для оптимизации этого. Но я также читал о SIMD и SSE2 и тому подобном. Итак, мой вопрос: как мне хранить переменные (i, j, k) в регистрах, чтобы процессор мог быстрее к ним обращаться? Я думаю, что ответ связан с реализацией SSE2 или его вариации, но я понятия не имею, как это сделать. Есть идеи?
Редактировать: Это будет работать на Linux-машине, но я думаю, что с помощью компилятора Intel. Если это помогает, мне нужно выполнить следующие команды, прежде чем что-либо делать, чтобы убедиться, что компилятор работает ... source /opt/intel/Compiler/11.1/064/bin/intel64/iccvars_intel64.csh; источник /opt/intel/tbb/2.2/bin/intel64/tbbvars.csh ... и затем для компиляции я делаю: icc -ltbb test.cxx -o test
Если нет простого способа реализовать SSE2, есть ли какие-либо советы о том, как дополнительно оптимизировать код?
Спасибо,
Христо