引用来自于 http://ifeve.com/falsesharing/
下面是我的实现
总结下,伪共享在cpu物理线程(超线程影响较少)越多的情况下对性能影响越大
而且在调用次数较少的情况下影响不大,因此不应该对伪共享引起的性能下降过多关注
如果你只有cpu核心少于4个就不要测试了.
测试时候注意jvm参数,cg会影响测试结果!同样cpu的睿频也会影响结果!
jvm是否把对象分配在一个缓存行中是无法保证的,所以我们只能理解连续分配的内存有很大的可能在一个缓存行中!
我的jvm参数
-server -verbose:gc -Xms1500m -Xmx2024m
package io.grass.core.collect; import io.grass.util.StringUtils; import io.grass.util.TimeSpan; /** * jvm参数 !-server -verbose:gc -Xms1500m -Xmx2024m * 注意gc对垃圾回收的影响 * @author zuoge85 * */ public class FalseSharingTest { private static final int TEST_NUMS = 100000000; private static final int THREAD_NUMS = 4; public static void main(String[] args) throws InterruptedException { //测试伪装共享 test1(); System.out.println(StringUtils.center("sb", 90, '*')); test2(); } static LongWarp[] longs = new LongWarp[THREAD_NUMS]; static LongWarpPadded[] longPaddeds = new LongWarpPadded[THREAD_NUMS]; static{ for (int j = 0; j < THREAD_NUMS; j++) { longs[j] = new LongWarp(); } for (int j = 0; j < THREAD_NUMS; j++) { longPaddeds[j] = new LongWarpPadded(); } } public static void test1() throws InterruptedException{ Thread[] ts=new Thread[THREAD_NUMS]; for (int i = 0; i < ts.length; i++) { final int n = i; ts[i] = new Thread(){ public void run() { TimeSpan ts = new TimeSpan(); for (int j = 0; j < TEST_NUMS; j++) { longs[n].setI(longs[n].getI()+1); } String end = ts.end(); System.out.println("Thread"+n+":\t"+end+";end value:"+ longs[n]); } }; } for (int i = 0; i < ts.length; i++) { ts[i].start(); } for (int i = 0; i < ts.length; i++) { ts[i].join(); } } public static void test2() throws InterruptedException{ Thread[] ts=new Thread[THREAD_NUMS]; //final int[] ints = new int[THREAD_NUMS*1000]; for (int i = 0; i < ts.length; i++) { final int n = i; ts[i] = new Thread(){ public void run() { TimeSpan ts = new TimeSpan(); for (int j = 0; j < TEST_NUMS; j++) { longPaddeds[n].setI(longPaddeds[n].getI()+1); } String end = ts.end(); System.out.println("Thread"+n+":\t"+end+";end value:"+ longPaddeds[n]); } }; } for (int i = 0; i < ts.length; i++) { ts[i].start(); } for (int i = 0; i < ts.length; i++) { ts[i].join(); } } public static class LongWarp{ private volatile long i; public long getI() { return i; } public void setI(long i) { this.i = i; } @Override public String toString() { return "LongWarp [i=" + i + "]"; } } public static long sumPaddingToPreventOptimisation(final int index) { LongWarpPadded v = longPaddeds[index]; return v.p1 + v.p2 + v.p3 + v.p4 + v.p5 + v.p6; } public static class LongWarpPadded{ private volatile long i; public long p1, p2, p3, p4, p5, p6 = 7L; public long getI() { return i; } public void setI(long i) { this.i = i; } @Override public String toString() { return "LongWarpPadded [i=" + i + ", p1=" + p1 + ", p2=" + p2 + ", p3=" + p3 + ", p4=" + p4 + ", p5=" + p5 + ", p6=" + p6 + "]"; } } } package io.grass.util; import java.text.NumberFormat; /** * 测试时间 * * @author zuoge85 * */ public class TimeSpan { public TimeSpan(){ nf.setParseIntegerOnly(false); nf.setGroupingUsed(false); nf.setMaximumFractionDigits(6); nf.setMaximumFractionDigits(6); start(); avgTime = System.nanoTime(); } private long time; private long avgTime; public TimeSpan start() { time = System.nanoTime(); return this; } private NumberFormat nf = NumberFormat.getNumberInstance(); public String end() { return nf.format((System.nanoTime() - time) / 1000000000d); } // /** // * 平均时间 // * @param i // * @return // */ // public String avg(int i) { // return nf.format((System.nanoTime() - avgTime)/i / 1000000000d); // } }
相关推荐
asp.net 伪静态实例 资源共享 测试成功,有效!
描 述:UrlReWrite(Url...然而这对于我们,没有很多的资金或使用的共享服务器,使得以上的方法都不是最佳的解决方案。幸而ASP.NET给我们提供了强大的可扩展性,能让我们自己定义页面的访问规则,很方便实现URL重写。
rupd_context的),防止出现多核机器上出现伪共享问题. 在自己机器上测试速度稳定达到16Gbit,叫上一版本较稳定(上一版本有较大波动). thread context switch 平局值在5W次左右,比起之前的20W此有非常大的提升,可以...
还没有测试的是chche伪共享造成的性能下降,在后面将测试. 设置代码中 DEFAULT_RUDP_BUFFER_SIZE = 32k(实际udp包远没有这么大),用vc6及vc8编译,在我的机器:thinkpad x200,(2.56G双核cpu,4G DDR3内存),win7 旗舰版,...
在微软的网站上搜啊,找了好几个不能用的,最终,找到正确的了.此版本仅用于win10系统自带的IIS,其他系统我没测试过啊.为了便于自己以后下载.也共享出来给大家.此为64位版本.现在没人用32位系统了吧.
PL端实现硬件加速器(包括卷积层、池化层、全连接层的实现,缓存区,共享乘累加器)。PS端实现验证测试流程的控制(非常简单的逻辑,就是发送start信号,等待done拉高,读出识别结果,重复200次后计算准确率和耗时。...
基于上一个发布的版本,这个版本修正了几处已知的BUG和优化一些地方。 这个版本还增加详细的本地安装文档教程。在本地或者服务器调试,都必须满足以下两个基本...共享版有部分功能限制希望支持发展和项目维护谢谢。
大型足球比分篮球比分系统基于上一个发布的版本,这个版本修正了几处已知的BUG和优化一些地方。 这个版本还增加详细的本地安装文档教程。在本地或者服务器调试,都...共享版有部分功能限制希望支持发展和项目维护谢谢
伪随机数生成;素性测试;十六进制、十进制、八进制、二进制转换;等等。 本款软件为全英文界面,在2005年到2014年间发布为共享软件(shareware),2018年开始以免费软件(freeware)形式发布,最新版本为5.01。 官方...
有一种方法可以随机创建数据以进行测试。 将来,我将使用MatrixIO扩展读取数据。 为方便起见,我仅在一类中实现了该算法,以方便在服务器中进行部署(编译和执行)。 将来,我将改善模块化,并创建一个用于使用UI的...
R2015a中开发并进行了基准测试,我们不保证/支持不同版本的Matlab的可操作性。 运行代码而不下载任何内容? 转到“海洋代码共享胶囊”:只需单击运行,然后等待大约1分钟以获取输出。 您还可以检查代码并直接在这里...
HttpContextBase的伪实现适用于简洁而富有表现力的测试,而无需繁琐的模拟框架设置。 繁琐,因为HttpContextBase对象图很深,并且理所当然地充满了NotImplementedException。我不能自己滚吗? 是的,您可以,并且会...
matlab与python代码有什么区别fix_matlab_eps ...如果您有一个无法使用的文件,请与我共享,以便我可以尝试以类似方式重现内容。 该代码仅在少量的地块上使用Inkscape 0.48.4和Matlab 2015b进行了测试。
· 构建、部署应用程序、组件和共享程序集,并对它们进行版本管理 · 理解基元类型、值类型和引用类型的行为,从而最高效地定义和使用它们 · 使用泛型和接口来定义可重用的算法 · 高效使用特定的CLR类型——委托、...
网络安全知识竞赛小测试 -网络攻击技术 1、通过寻找目标的安全漏洞、盗窃存放系统口令的文件、破译加密的口令,属于哪种行为( ) [单选题] * A.破解系统口令文件(正确答案) B.网络嗅探 C.键盘记录 D.中间人攻击 2、...
• 算法与数据结构的关系、算法效率、算法设计、算法描述(流程图、伪代码、决策表)、算法的复杂性 2.计算机系统知识 2.1 硬件知识 2.1.1 计算机系统的组成、体系结构分类及特性 • CPU和存储器的组成、...
支持 打赏 送礼物 推荐票功能 作者vip签约 字数分成 用户 打赏记录 充值记录 同时制作了二维码收款对于没有支付接口的朋友们使用 粉丝共享榜 作者信息 等. 可配置伪静态规则 增加 阅读记录 阅读页面背景字体设置. ...
4.4.2 孤立或共享的实例 4.4.3 有状态或无状态领域模型实例化 4.4.4 领域模型的完整实例化或子集实例化 4.5 小结 第5章 领域驱动设计进阶 5.1 通过简单的TDD实验来精化领域模型 5.1.1 从Order和OrderFactory的创建...
该源码是大型体育即时比分建站系统v3 bulid130720,源码系统基于上一个发布的版本,这个版本修正了几处已知的BUG和优化一些地方。这个版本还增加详细的本地安装文档教程。...共享版有部分功能限制希望支
§1.9 伪列及伪表 46 §1.10 使用SQL Worksheet工作 46 第二章 查询基础 50 §2.1 SELECT语句 50 §2.2 SQL中的单记录函数 50 §2.2.1 单记录字符函数 50 §2.2.2 单记录数字函数 56 §2.2.3 单记录日期函数 62 §...