判断cache Line的作用

/*求一个二维数组每一列的和,用以测试计算机使用cache line方法后采用不同编写方式所带来的程序运行时间的差异*/
#include<iostream>
#include <time.h>
using namespace std;
int main() {
//初始化
int I = 10000, J = 10000, i = 0, j = 0;
int **d = new int*[I];
int * clomun = new int[I];
for (i = 0; i < I; i++) {
d[i] = new int[I];
for (j = 0; j < J; j++) {
d[i][j] = 1;
}
}
//按列取值
int start = clock(), end = 0;
for (j = 0; j <J; j++) {
clomun[j] = 0;
for (i = 0; i < I; i++)
clomun[j] += d[i][j];
}
end = clock();
cout << "按照列取值耗时为:" << end - start << endl;
//按行取值
start = clock(), end = 0;
for (i = 0; i < I; i++)
clomun[i] = 0;
for (i = 0; i < I; i++) {
for (j = 0; j <J; j++)
clomun[j]+= d[i][j];
}
end = clock();
cout << "按照行取值耗时为:" << end - start << endl;
return 0;
}

时间: 2024-10-23 07:47:54

判断cache Line的作用的相关文章

cpu性能探究 :cache line 原理

 参考: 一个讲解Direct Mapped Cache非常深入浅出的文章: http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Memory/direct.html CPU cache http://en.wikipedia.org/wiki/CPU_cache http://blog.csdn.net/zqy2000zqy/article/details/1137895 ===================================

#line 的作用是改变当前行数和文件名称

#line 的作用是改变当前行数和文件名称,它们是在编译程序中预先定义的标识符命令的基本形式如下:   #line number["filename"]其中[]内的文件名可以省略.例如:   #line 30 a.h其中,文件名a.h 可以省略不写. 这条指令可以改变当前的行号和文件名,例如上面的这条预处理指令就可以改变当前的行号为30,文件名是a.h.初看起来似乎没有什么用,不过,他还是有点用的,那就是用在编译器的编写中,我们知道编译器对C 源码编译过程中会产生一些中间文件,通过这条

多线程之 Cache Line 与伪共享

Cache 简介 Cache,即缓存.缓存能提升读取性能,其原理是用性能更好的存储介质存储一部分高频访问的内容,获得总体概率上的速度提升. 在开发中,我们口中的缓存可以是一个变量,或者是 redis.在计算机 CPU 内部,往往指的是 CPU 的各级 cache. Cache 的一致性 由于是高频访问的内容被重复存储到了好几处地方,必然要考虑一致性.你需要及时清除或者更新缓存中过期内容.在程序设计中,使用缓存的架构通常是给定一个过期时间.而对于 CPU Cache,情况就复杂很多. CPU Ca

js !!条件判断或运算的作用

今天看到一个判断语句非常奇怪: 1 if(!!selected){} //为什么是双'!'号呢? 自己查了下资料终于明白了这其中的原理: 原来'!!'会将表达式转为Boolean类型的数据. 如果'!undefined' //得到的是true但是为了防止值等于undefined的时候不为true的话我们可以使用'!!'进行判断: 其实'!!'就是为了排除{非null/undefined/0/''} 等值: 如 var obj = {flag:true}; var demo = !!obj.fla

Cache和命中率

Cache的工作原理 Cache的工作原理是基于程序访问的局部性. 对大量典型程序运行情况的分析结果表明,在一个较短的时间间隔内,由程序产生的地址往往集中在存储器逻辑地址空间的很小范围内.指令地址的分布本来就是连续的,再加上循环程序段和子程序段要重复执行多次.因此,对这些地址的访问就自然地具有时间上集中分布的倾向. 数据分布的这种集中倾向不如指令明显,但对数组的存储和访问以及工作单元的选择都可以使存储器地址相对集中.这种对局部范围的存储器地址频繁访问,而对此范围以外的地址则访问甚少的现象,就称为

(转)CPU Cache与内存对齐

转自:http://blog.csdn.net/zhang_shuai_2011/article/details/38119657 原文如下: 一. CacheCache一般来说,需要关心以下几个方面1)Cache hierarchyCache的层次,一般有L1, L2, L3 (L是level的意思)的cache.通常来说L1,L2是集成 在CPU里面的(可以称之为On-chip cache),而L3是放在CPU外面(可以称之为Off-chip cache).当然这个不是绝对的,不同CPU的做

java Cache框架

Cache框架乱炖 各类开源的缓存解决方案 JBossCache/TreeCacheJBossCache是一个复制的事务处理缓存,它允许你缓存企业级应用数据来更好的改善性能.缓存数据被自动复制,让你轻松进行Jboss服务器之间的集群工作.JBossCache能够通过Jboss应用服务或其他J2EE容器来运行一个Mbean服务,当然,它也能独立运行. JBossCache包括两个模块:TreeCache和TreeCacheAOP. TreeCache --是一个树形结构复制的事务处理缓存. Tre

OR1200中指令Cache的结构

以下内容摘自<步步惊芯--软核处理器内部设计分析>一书 12.3 ICache结构 OR1200中实现ICache的文件有or1200_ic_top.v.or1200_ic_fsm.v.or1200_ic_tag.v.or1200_ic_ram.v.or1200_spram.v,分别实现了ICache模块.IC_FSM模块.IC_TAG模块.IC_RAM模块.单口RAM.在ICache中例化了IC_FSM.IC_TAG.IC_RAM模块,在IC_TAG.IC_RAM模块中例化了单口RAM.如图

初识cache

1.cache是什么 cache这个名字用来称呼两种物理世界中存在的概念,硬体cache和cache机制.下面来分别介绍. 硬体cache:硬体cache是一种用肉眼可以看得见用皮肤可以摸得着的物品,它是由SRAM(static random-access memory)构成(在计算机硬件系统中main memory由DRAM(dynamic random-access memory)构成.硬体cache在CPU中,直接与寄存器进行数据的传输. cache机制:有两块存储区域,区域A,区域B,区