c – 在数组中找到两个最小int64元素的最快方法
发布时间:2020-12-16 10:50:52 所属栏目:百科 来源:网络整理
导读:我有大小从1000到10000(1k … 10k)的数组.每个元素都是int64.我的任务是找到数组的两个最小元素,最小元素和剩余的最小元素. 我希望在C中为Intel Core2或Corei7获得最快的单线程代码(cpu模式为64位). 这个函数(从数组中得到最小的2个)是热点,它嵌套在两个或三
我有大小从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优化的余量. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 不依赖canvas的Node.js验证码模块captchapng
- 微信公众平台开发之语音识别.Net代码解析
- Swift’String.Type’没有名为’stringWithContentsOfFile’
- cocos2d-x binding lua 实现背景图片平铺
- Ruby minitest assert_output语法
- 多正则表达式匹配(Multiple Regular Expression Matching)
- 学习Autofac的过程
- JAXB解析XML,将XML转化为OBJECT
- ruby-on-rails – simple_form没有为json找到输入
- 国内首例视频聚合App侵权案仅赔1.4万元