我有大小从 1000 到 10000(1k .. 10k)的数组。每个元素都是 int64。我的任务是找到数组的两个最小元素,最小元素和剩余元素中的最小值。
我想在 C++ 中为 Intel Core2 或 Corei7 获得最快的单线程代码(cpu 模式为 64 位)。
这个函数(从数组中获取最小的 2)是热点,它嵌套在两个或三个 for 循环中,迭代次数很大。
当前代码如下:
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);
}