Я работаю над проблемой, и вот фрагмент кода, который работает значительно хуже, чем теоретическое ожидание:
inline bool check(const int index, const float* f) const{
for(int j=0; j<d; j++)
if(points[index][j] != f[j])
return false;
return true;
}
bool func(int p_cap, const float* f) const{
int i = (p_cap - error > 0? p_cap - error: 0);
int l = (p_cap + error + 1 < keyCount? p_cap + error + 1: keyCount);
for(; i<l; i++)
if(check(i, f))
return true;
return false;
}
Эти функции находятся внутри класса, и points
и keyCount
быть членами класса. points
является keyCount*d
2-мерным массивом. d
является глобальной переменной. Любая помощь о том, как я могу оптимизировать этот блок кода? Спасибо ...
РЕДАКТИРОВАТЬ:
Я использую интерполяцию для поиска в массиве, и мои данные таковы, что это возможно. Ожидается, что с помощью этой техники поиск любой точки будет быстрее, чем линейный поиск. Причина, по которой я ожидаю этого, заключается в том, что error = 1
. Это означает, что для любой точки я смотрю максимум 3
различных точек в массиве points
. У меня есть миллион таких массивов. Каждый хранит ровно 10 баллов. Ожидаемое значение для линейного поиска будет N/2
, что означает, что мне нужно просмотреть 5
, прежде чем я достигну точки запроса (опять же, ожидаемое / среднее значение). Таким образом, этот «код интерполяции» должен выполняться быстрее, чем линейный поиск, но этого не происходит.
Используемая команда компиляции:
g++ -O3 -march=native -DNDEBUG test.cpp -o test