for循环提高内存访问效率的做法
今天写程序的时候突然想到一点,记录一下:
计算机内存地址是线性排列组织的,而利用for循环对高维数组结构进行遍历处理的时候,要保证最内层for循环遍历的是高维数组的最低维度,这样可以最大化利用CPU的cache,举个例子:
假设有一个二维图像P(x,y),x为行数,0<=x<=M-1,y为列数,0<=y<=N-1。
若想遍历图像内所有的像素,写程序的时候,有以下两种嵌套for:
for(x=;x<M;x++){
for(y=;y<N;y++){
// ...
}
}
和
for(y=;y<N;y++){
for(x=;x<M;x++){
// ...
}
}
这两种实现方法都能遍历图像内像素,但是第一种效率比第二种高。
因为数据的逻辑形式虽然是高维的,但是存储在内存里的时候却仍是以一维线性的方式存储的,这就造成了高维数据在内存中进行表示的时候,最低维的数据在内存中被连续存储,而除最低维以外的其它所有维度在内存上是不连续的(对于上述例子,P(3,4)与P(3,5)在内存中是连续的,而P(3,4)和P(2,4)在内存中就不是连续的),访问不连续内存对于CPU的cache来说很不友好,会造成较大的内存访问延迟,虽然这个问题可能会被聪明的编译器查到并在编译时刻优化为cache-friendly的代码,但是保不齐有些编译器没有这种优化,所以在写程序的时候还是注意一下这一点。在访问体素块的时候最好也要先确定一下数据逻辑形式的最低维度,然后再写for。
for循环提高内存访问效率的做法的更多相关文章
- java提高数据库访问效率代码优化
package com.jb.jubmis.comm; import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQL ...
- ejb2.0用本地引用提高EJB访问效率
用本地引用提高EJB访问效率 EJB 1.0和1.1规范只定义了一种在EJB组件中引用另一组件的方法,即通过Bean的远程接口.如果两个Bean都在同一个容器之内,则这种网络开销是不必要的.为解决这个 ...
- 提高Dom 访问效率
在浏览器中对于Dom的操作和普通的脚本的操作处于两个不同的dll中,两个dll的交互是比较耗时的,优化对Dom的操作可以提高脚本的执行速度. JS访问DOM是很慢的,尽量不要用JS来设置页面 布局 有 ...
- java 提高效率的做法
可供程序利用的资源(内存.CPU时间.网络带宽等)是有限的,优化的目的就是让程序用尽可能少的资源完成预定的任务.优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率.本文讨论的主要是如何提高代 ...
- CUDA Pro:通过向量化内存访问提高性能
CUDA Pro:通过向量化内存访问提高性能 许多CUDA内核受带宽限制,而新硬件中触发器与带宽的比率不断提高,导致带宽受限制的内核更多.这使得采取措施减轻代码中的带宽瓶颈非常重要.本文将展示如何在C ...
- Hosts文件实际应用 配置内部服务器提高访问效率和速度
一 hosts文件的作用和介绍 https://jingyan.baidu.com/article/335530da45485e19cb41c3d6.html https://www.cnblogs. ...
- 提高php编程效率技巧
提高php编程效率技巧 投稿:mrr 字体:[增加 减小] 类型:转载 时间:2015-08-13 php是全球范围应用范围最广的开发语言,php和linux.apache.mysql紧密结合,形 ...
- STL中的内存与效率
STL中的内存与效率 1. 使用reserve()函数提前设定容量大小,避免多次容量扩充操作导致效率低下. 关于STL容器,最令人称赞的特性之一就是是只要不超过它们的最大大小,它们就可以自动增长到足 ...
- 可以提高php编程效率的20个要点
整理了可以提高php编程效率的20个要点,发博客记录一下,需要的朋友可以参考. 1.如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍. 2.$row['id' ...
随机推荐
- wepack使用
当前使用的版本:webpack 4.5. ⚠️webpack 是需要有 node 环境的,所以在使用之前需要保证你当前安装的有 node. 安装 webpack: npm install webpac ...
- 配置hadoop集群一
花了1天时间最终把环境搭建好了.整理了一下,希望对想学习hadoop的有所帮助. 资料下载:http://pan.baidu.com/s/1kTupgkn 包括了linux虚拟机.jdk, hadoo ...
- Mysql 存储引擎中InnoDB与MyISAM差别(网络整理)
1. 事务处理 innodb 支持事务功能,myisam 不支持. Myisam 的运行速度更快,性能更好. 2,select ,update ,insert ,delete 操作 MyISAM:假设 ...
- NoSql基础知识
一.为什么要有NoSql 关系型数据库在三个方面存在不足,或者说,比不上NoSQL: 1.大量数据的写入处理 这里说的关系型数据库不擅长大量数据写入,并不是说关系型数据库在进行大批量数据插入的时候,比 ...
- 【POJ 1328】 Radar Installation
[题目链接] http://poj.org/problem?id=1328 [算法] 每个雷达都位于笛卡尔坐标系的x轴上,因此,对于每个岛屿,我们都可以用勾股定理算出它的有效管辖区域 那么,问题就被转 ...
- 【模板】 倍增lca
虽然很基础,但是还是复习了一下,毕竟比树剖好写... 代码: #include<iostream> #include<cstdio> #include<cmath> ...
- python lambda表达式&map/filter/reduce
习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即: 1 2 3 4 5 6 7 8 # 普通条件语句 if 1 == 1: name = 'wupeiqi' else ...
- php打包文件夹成zip文件
function addFileToZip($path,$zip){ $handler=opendir($path); //打开当前文件夹由$path指定. while(($filenam ...
- go多进程
package main import "fmt" import "time"func loop() { for i := 0; i < 10; i++ ...
- mysql中 groupby分组
引用自http://www.cnblogs.com/mo-beifeng/archive/2012/02/07/2341886.html#2341105 --按某一字段分组取最大(小)值所在行的数据 ...