У меня есть массивы с размерами от 1000 до 10000 (1k .. 10k).Каждый элемент int64.Моя задача состоит в том, чтобы найти два наименьших элемента из массивов, минимальный элемент и минимальный из оставшихся.
Я хочу получить максимально быстрый однопоточный код на C ++ для Intel Core2 или Corei7 (режим процессора равен 64немного).
Эта функция (получение 2 самых маленьких из массива) является горячей точкой, она вложена в два или три цикла с большим числом итераций.
Текущий код выглядит так:
int f()
{
int best; // index of the minimum element
int64 min_cost = 1LL << 61;
int64 second_min_cost = 1LL << 62;
for (int i = 1; i < width; i++) {
int64 cost = get_ith_element_from_array(i); // it is inlined
if (cost < min_cost) {
best = i;
second_min_cost = min_cost;
min_cost = cost;
} else if (cost < second_min_cost) {
second_min_cost = cost;
}
}
save_min_and_next(min_cost, best, second_min_cost);
}