c – 在数组中找到两个最小int64元素的最快方法

c – 在数组中找到两个最小int64元素的最快方法,第1张

概述我有大小从1000到10000(1k … 10k)的数组.每个元素都是int64.我的任务是找到数组的两个最小元素,最小元素和剩余的最小元素. 我希望在C中为Intel Core2或Corei7获得最快的单线程代码(cpu模式为64位). 这个函数(从数组中得到最小的2个)是热点,它嵌套在两个或三个for循环中,具有巨大的迭代次数. 目前的代码如下: int f(){ int best; 我有大小从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);}
解决方法 确保您的数组读取符合行为,因此不会引入不必要的缓存未命中.

假设数组读取很简单,这段代码应该非常接近现代cpu上的带宽限制.您需要分析和/或计算它是否仍有任何可用于cpu优化的余量.

总结

以上是内存溢出为你收集整理的c – 在数组中找到两个最小int64元素的最快方法全部内容,希望文章能够帮你解决c – 在数组中找到两个最小int64元素的最快方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1223244.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存