代码局部性对程序运行速度的影响
2013-08-06 21:50
288 查看
对编程一直有很多疑问,很多时候甚至不知道如何描述这些疑问,但我知道自己可以从哪里可以找到自己的疑问和答案,答案是计算机系统,但感情上总觉得太难,没信心。编程语言、操作系统和计算机系统结构是三门课,一直分开来学,操作系统和计算机系统两门课尚算有所交织,而编程语言的课程似乎总是和这两门课程没有重叠之处。但恰恰编程又是建立在那两门课程之上的,三门课若能同时交互地学习效果肯定不错。
仅就计算机系统中对程序局部性的考虑而做的内存和缓存之间的调度设计来看,写代码时也应该利用这一设计。下面是利用数组顺序存储的特点展现代码局部性对程序运行速度的影响:
良好的空间局部性代码:根据数组在内存空间的存储顺序依次取数。
不好的空间局部性代码:。
以前写代码从没考虑过这个问题,也似乎没遇到过这个问题,但如果处理的数据量大,频繁在外存、内存、缓存间调度,又注重效率的话就不得不考虑代码的局部性了。
仅就计算机系统中对程序局部性的考虑而做的内存和缓存之间的调度设计来看,写代码时也应该利用这一设计。下面是利用数组顺序存储的特点展现代码局部性对程序运行速度的影响:
良好的空间局部性代码:根据数组在内存空间的存储顺序依次取数。
#include <stdio.h> #include <time.h> int main() { long int arr[1000][1000]={1}; int i,j; long sum=0; int u; clock_t start,end; start=clock(); for(u=0;u<1000;u++)//受系统分配内存的限制,数组不能太高维,于是用循环多次来使得执行时间更长。 { for(i=0;i<1000;i++)//先读行后读列 { for(j=0;j<1000;j++) { sum+=arr[i][j]; } } } end=clock(); double dur=(end-start)/CLOCKS_PER_SEC; printf("time:%f\n",dur); }运行时间为:1s.
不好的空间局部性代码:。
#include <stdio.h> #include <time.h> int main() { long int arr[1000][1000]={1}; int i,j; long sum=0; int u; clock_t start,end; start=clock(); for(u=0;u<1000;u++)//受系统分配内存的限制,数组不能太高维,于是用循环多次来使得执行时间更长。 { for(j=0;j<1000;j++)//先读列后读行 { for(i=0;i<1000;i++) { sum+=arr[i][j]; } } } end=clock(); double dur=(end-start)/CLOCKS_PER_SEC; printf("time:%f\n",dur); }运行时间为:6s.
以前写代码从没考虑过这个问题,也似乎没遇到过这个问题,但如果处理的数据量大,频繁在外存、内存、缓存间调度,又注重效率的话就不得不考虑代码的局部性了。
相关文章推荐
- 如何利用VS的代码优化和openmp并行计算提高程序运行速度
- java代码中黄色警告是否会对程序编译和运行有性能上的影响
- 利用VS的代码优化和openmp并行计算提高程序运行速度
- android开发代码顺序影响程序运行的问题
- 在双击控件进入到程序代码编辑界面后,没写东西不影响运行,但删除后报错
- 整理:影响.Net程序运行速度的因素
- 优化Ruby代码使程序运行速度提高的例子
- 嵌入式程序设计中运行速度与代码尺寸优化策略
- php 运行效率总结(提示程序速度)
- 当笔记本的运行速度跟不上我写程序的思路后【只建议无聊放松者看看】
- 【asp.net 】使用js结合hidden控件实现在后台运行一段程序后提示确认,确认通过后继续执行后台代码~~~
- 【hadoop2.6.0】通过代码运行程序流程
- 提高VB代码的运行速度
- java web 程序---javabean代码,出现错误。奇怪,无法解释的运行问题
- 服务程序后台运行代码
- Extjs优化(一)删除冗余代码提高运行速度
- (优化处理)详细剖析Android Traceview 效率检视工具!分析程序运行速度!并讲解两种创建SDcard方式! .
- Free Pascal编译的程序运行错误代码解析
- JAVA 测试程序代码运行时间