今天写程序的时候突然想到一点,记录一下:

计算机内存地址是线性排列组织的,而利用for循环对高维数组结构进行遍历处理的时候,要保证最内层for循环遍历的是高维数组的最低维度,这样可以最大化利用CPU的cache,举个例子:

假设有一个二维图像P(x,y),x为行数,0<=x<=M-1,y为列数,0<=y<=N-1。

若想遍历图像内所有的像素,写程序的时候,有以下两种嵌套for:

1 for(x=0;x<M;x++){
2     for(y=0;y<N;y++){
3         // ...
4     }
5 }

1 for(y=0;y<N;y++){
2     for(x=0;x<M;x++){
3         // ...
4     }
5 }

这两种实现方法都能遍历图像内像素,但是第一种效率比第二种高。

因为数据的逻辑形式虽然是高维的,但是存储在内存里的时候却仍是以一维线性的方式存储的,这就造成了高维数据在内存中进行表示的时候,最低维的数据在内存中被连续存储,而除最低维以外的其它所有维度在内存上是不连续的(对于上述例子,P(3,4)与P(3,5)在内存中是连续的,而P(3,4)和P(2,4)在内存中就不是连续的),访问不连续内存对于CPU的cache来说很不友好,会造成较大的内存访问延迟,虽然这个问题可能会被聪明的编译器查到并在编译时刻优化为cache-friendly的代码,但是保不齐有些编译器没有这种优化,所以在写程序的时候还是注意一下这一点。在访问体素块的时候最好也要先确定一下数据逻辑形式的最低维度,然后再写for。

转载于:https://www.cnblogs.com/time-flow1024/p/10065899.html

for循环提高内存访问效率的做法相关推荐

  1. 如何提高数据库访问效率

    查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 ...

  2. 如何建立JSP操作用以提高数据库访问效率

    从服务器端促进程序快速开发的java Server Pages (jsp)决定它成为一种广为流行的工具.虽然呆板的一面仍然存在,然而无论它包含多少缺点,JSP能够为Web程序设计者提供很多东西,尤其是 ...

  3. CUDA Pro:通过向量化内存访问提高性能

    CUDA Pro:通过向量化内存访问提高性能 许多CUDA内核受带宽限制,而新硬件中触发器与带宽的比率不断提高,导致带宽受限制的内核更多.这使得采取措施减轻代码中的带宽瓶颈非常重要.本文将展示如何在C ...

  4. Hosts文件实际应用 配置内部服务器提高访问效率和速度

    一 hosts文件的作用和介绍 https://jingyan.baidu.com/article/335530da45485e19cb41c3d6.html https://www.cnblogs. ...

  5. 7. CUDA内存访问(一)提高篇------按部就班 ------GPU的革命

    序言:从上一篇< CUDA编程接口(二)------一十八般武器>到现在,差不多有三个月了,不知道大家在"暑假"里面过得怎么样,又经历了什么?花了两个星期的睡觉前的时间 ...

  6. 操作系统采用哪些方法提高内存利用率

    操作系统采用哪些方法提高内存利用率 从操作系统的需求开始说起 要想搞清楚操作系统采用哪些方法来提高内存利用率,首先,我们应该明白操作系统为什么需要提高内存的利用率. 计算机的系统资源分为处理机.存储器 ...

  7. Java内存访问重排序的研究

    什么是重排序 请先看这样一段代码1 public class PossibleReordering { static int x = 0, y = 0; static int a = 0, b = 0 ...

  8. 提高网站访问速度的34条军规(2)

    16 在Ajax请求中使用GET方法 (Use GET for AJAX Requests)<?xml:namespace prefix = o ns = "urn:schemas-m ...

  9. improve php,解析提高PHP执行效率

    解析提高PHP执行效率 1.用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量, 单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的 ...

  10. 如何让提高网站访问速度

    如何让提高网站访问速度 整理方案一: 网站访问速度可以直接影响到网站的流量,而网站的访问量几乎与网站的利益直接挂钩,因此网站的速度问题成为企业及站长十分关注的问题.现在网站越来越多,不少朋友的网站打开 ...

最新文章

  1. 朴素、Select、Poll和Epoll网络编程模型实现和分析——Epoll模型
  2. Linux命令(30):tar命令-归档工具
  3. hadoop-0.21.0 在Windows环境下的部署(2)Hadoop配置
  4. ros 运行rviz时出现 QXcbConnection: XCB error: 148 错误 解决方法
  5. springboot导包显示不存在_(一)SpringBoot搭建基本后端应用
  6. linux qt 读系统信息,使用Qt获取系统版本
  7. 【论文笔记】node2vec:可扩展的网络特征学习
  8. PHP7实战开发简单CMS内容管理系统(11)批量删除栏目数据
  9. python运算符and_Python AND运算子
  10. T-SQL数据类型的细微差别(四)
  11. win10台式机,耳机插入没有声音
  12. 字节跳动实习面经(已拿offer附攻略)
  13. 如何将QQ群文件快速下载,怎么快速下载QQ中的文件,QQ群文件下载
  14. openstack部署过程5
  15. Quartz简介及应用场景
  16. 小程序如何跳转至同服务器app,微信小程序如何跳转到APP?
  17. 前端基础——数组的方法
  18. 拼团商城高保真小程序Axure原型模板
  19. mkdir: Failed on local exception: java.io.IOException: javax.security.sasl.SaslException: GSS initia
  20. 视频H.263与H.264的比较

热门文章

  1. AppBuilder(二)UseStageMarker
  2. 理解Java - AQS
  3. Asp.Net删除文件夹后引起Session丢失的解决办法
  4. Python 高层文件操作(shutil模块)(转载)
  5. C++11 后置返回类型
  6. C++11 using定义类型别名、模板别名
  7. docker具名和匿名挂载
  8. -bash: vi: command not found -bash: ls: command not found
  9. 解决mysql不是内部或外部命令 菜鸟教程
  10. (day 20 - 中序遍历加双指针)剑指 Offer 36. 二叉搜索树与双向链表