`
splayx
  • 浏览: 82799 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

通过程序了解高速缓存

 
阅读更多

cpu进行运算之前会有一个步骤,就是把内存的数据把拿到高速缓存区(L1,L2,...)。

一般说来,当访问内存的某个位置时,会把这个位置附近的数据也搬过去,跟硬盘到内存的pagecache相似。

如果频繁命中这个高速缓存区,可以大大提高程序的运行速度。

 

所以如果用一个二元对表示一次运算(运行时刻,数据位置),

将此二元序列关于时间排序,那么我们就应该让相邻二元对的数据位置尽可能接近。

 

见两个程序:

 

const int N = 1 << 12;

typedef double Type;

Type a[N][N], b[N][N], c[N][N];

int main() {
    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < N; ++j) {
            a[j][i] = b[j][i] + c[j][i];
        }
    }
    return 0;
}

运行时间为:

real    0m1.218s
user    0m1.139s
sys     0m0.079s

 

const int N = 1 << 12;

typedef double Type;

Type a[N][N], b[N][N], c[N][N];

int main() {
    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < N; ++j) {
            a[i][j] = b[i][j] + c[i][j];//注意i,j的位置
        }
    }
    return 0;
}

 

运行时间为:

real    0m0.184s
user    0m0.107s
sys     0m0.078s

 

可以看到,当数据量一大这个内存到高速缓存的搬运时间也是挺吓人的。

 

分享到:
评论

相关推荐

    09配置+servlet+高速缓存

    调用 servlet 并完成生成高速缓存的输出之后,会创建包含 servlet 的输出和副作用的高速缓存条目。这些副作用可能包含对其他 servlet 或 Java Server Pages(JSP)文件的调用,或有关条目的元数据,包括超时和条目...

    8086/8088汇编语言程序设计教程

    本书的第二部分适合已基本掌握8086/8088汇编语言的程序员,可作为学习保护方式编程技术的教材或参考书,也可作为其他人员了解高档微处理器和保护方式编程技术的参考书,还可作为程序员透彻地了解Windows程序设计技术...

    80x86汇编语言程序设计教程

    本书的第二部分适合已基本掌握8086/8088汇编语言的程序员,可作为学习保护方式编程技术的教材或参考书,也可作为其他人员了解高档微处理器和保护方式编程技术的参考书,还可作为程序员透彻地了解Windows程序设计技术...

    linux设备驱动程序

    内容简介 《LINUX设备驱动程序(第3版)》已针对Linux内核的2610版本彻底更新过了。...后备高速缓存 get—free—page和相关函数 vmalloc及其辅助函数 per-CPU变量 获取大的缓冲区 快速参考 ch09... ch10... ... ch18...

    操作系统实验八 文件管理

    采用二级文件目录结构,编写程序实现文件系统的文件存储空间的管理、文件的物理结构、目录结构管理和文件操作。 三、实验要求 1、设计一个有m个用户的文件系统,每个用户最多可保存一个文件。 2、规定用户在一次...

    80X86汇编语言程序设计

    本书的第二部分适合已基本掌握8086/8088汇编语言的程序员,可作为学习保护方式编程技术的教材或参考书,也可作为其他人员了解高档微处理器和保护方式编程技术的参考书,还可作为程序员透彻地了解Windows程序设计技术...

    《解剖PetShop》之四:PetShop之ASP.NET缓存

    四 PetShop之ASP.NET缓存  如果对微型计算机硬件系统有足够的了解,那么我们对于Cache这个...软件设计借鉴了硬件设计中引入缓存的机制以改善整个系统的性能,尤其是对于一个数据库驱动的Web应用程序而言,缓存的利用

    redis安装包,开箱即用

    我们已经知道Redis是一种高速缓存数据库了,接下来我们了解一下其更加具体的信息。Redis是一款由意大利人Salvatore Sanfilippo开发的一款基于内存存储的高速缓存数据库,全称为:Remote Dictionary Server,直译为:...

    CacheLab实验-计算机系统基础-gddrxy

    在第一部分中,您将编写一个模拟高速缓存行为的小型C程序(大约200-300行)。在第二部分中,您将优化一个小的矩阵转置函数,目标是最小化缓存未命中的数量。 1、 第一部分:编写缓存模拟器 cachelab-handout/traces...

    深入理解计算机系统.

    在讲述高速缓存时,本书讨论了矩阵代码中的循环变量的顺序是如何影响程序的性能的。在讨论网络互联时,本书描述了并发服务器如何有效地处理来自多个客户端的请求。 本书基于Intel兼容(IA32)机器,在Unix或者相关的...

    TCPIP详解之DNS

    DNS是任何与Internet相连主机必不可少的一部分,同时它也广泛用于专用的互联网。...通过许多例子了解了名字解析器的配置文件以及D N S的优化措施:指向域名的指针(减少报文的长度)、查询结果的高速缓存。

    深入理解计算机系统.part3

    在讲述高速缓存时,本书讨论了矩阵代码中的循环变量的顺序是如何影响程序的性能的。在讨论网络互联时,本书描述了并发服务器如何有效地处理来自多个客户端的请求。  本书基于Intel兼容(IA32)机器,在Unix或者相关的...

    深入理解计算机系统.part2

    在讲述高速缓存时,本书讨论了矩阵代码中的循环变量的顺序是如何影响程序的性能的。在讨论网络互联时,本书描述了并发服务器如何有效地处理来自多个客户端的请求。  本书基于Intel兼容(IA32)机器,在Unix或者相关的...

    深入理解计算机系统.part1

    在讲述高速缓存时,本书讨论了矩阵代码中的循环变量的顺序是如何影响程序的性能的。在讨论网络互联时,本书描述了并发服务器如何有效地处理来自多个客户端的请求。  本书基于Intel兼容(IA32)机器,在Unix或者相关的...

    深入理解计算机系统(英文,computer systems a programmer's perspective)

    从程序员的视角,看计算机系统!...在讲述高速缓存时,本书讨论了矩阵代码中的循环变量的顺序是如何影响程序的性能的。在讨论网络互连时,本书描述了并发服务器如何能有效地处理来自多个客户端的请求。

    深入理解计算机系统(第一版).part2/2

    在讲述高速缓存时,本书讨论了矩阵代码中的循环变量的顺序是如何影响程序的性能的。在讨论网络互连时,本书描述了并发服务器如何能有效地处理来自多个客户端的请求。  本书基于Intel兼容(IA32)机器,在Unix或者...

    深入理解计算机系统(第一版).part1/2

    在讲述高速缓存时,本书讨论了矩阵代码中的循环变量的顺序是如何影响程序的性能的。在讨论网络互连时,本书描述了并发服务器如何能有效地处理来自多个客户端的请求。  本书基于Intel兼容(IA32)机器,在Unix或者...

    Aspnet-DiskOutputCacheProvider:ASP.NET的持久文件系统磁盘缓存

    有些人将其称为状态管理,另一些人将其称为高速缓存管理。 我喜欢“缓存”一词。 但是从概念上讲,这两者之间没有区别。 现在让我们讨论ASP.NET中缓存管理(或状态管理)的不同方面。 尽管缓存管理不是Windows...

    深入理解计算机系统(英文版)

    在讲述高速缓存时,本书讨论了矩阵代码中的循环变量的顺序是如何影响程序的性能的。在讨论网络互联时,本书描述了并发服务器如何有效地处理来自多个客户端的请求。  本书基于Intel兼容(IA32)机器,在Unix或者相关的...

    Sybase ASE 15.7 开发文档:系统管理指南(卷二)

    第 4 章 配置数据高速缓存 第 5 章 管理多处理器服务器 第 6 章 创建和管理用户数据库 第 7 章 装入和卸下数据库 第 8 章 分布式事务管理 第 9 章 创建和使用段 第 10 章 使用 reorg 命令 第 11 章 检查数据库一致性...

Global site tag (gtag.js) - Google Analytics