一直以来都很相信,多线程程序在多核情况下比单线程程序有更优化的系统压力表现。
一直以来也都没有具体的数据支持,这个优化的表现到底有多好的情况。
今天,写了一个短小的程序,分别在xeon E5310 和core2 T5270上跑了一下,看到的结果很出乎我的预料。
我的测试方法是这样的,首先,启动若干个线程,各线程执行若干时间的简单程序,在线程执行结束以后,等待若干时间后,使用单线程执行这个简单程序,在windows系统下,打开任务管理器的性能标签,根据执行期内的性能占用情况分析线程与多核处理器下的性能分解的关系。这个测试分别用10线程和100线程进行了测试。测试结果的截图是这样的:
core2 测试
xeon 10 线程测试
xeon 100 线程测试
在上图中,第一张图片是core2的测试,core2的测试中,10线程和100线程的cpu占用情况是一致的,无论单线程和多线程,双核都被占用了80%以上的cpu。两个cpu核心最左边的一个小高峰是打开任务管理器时造成的,中间的高峰是多线程测试的结果,两个cpu核心右边的高峰时单线程测试的结果。
第二张图片是xeon下10线程测试的结果,各cpu核心最左边的高峰是多线程测试的结果,两个cpu核心右边的高峰时单线程测试的结果。cpu核心表现中多线程测试占用了3个cpu核心,单线程测试中主要占用了2个cpu核心(中间间隔时间较短,且中间有其他线程性能干扰,第二个核心表现几乎连在一起了),最后一个处理器略有反应,单不明显。
第三张图片是xeon下100线程的测试结果,处理器的表现于10线程下的表现基本一致(不同在原来多占用2、3核心,现在占用3、4核心)
所以,我认为初步预计,多线程程序设计对intel的cpu下有帮助,但考虑到多线程本身压力大于单线程,排除cpu由于系统运算压力自主分配的因素外,java的多线程设计对程序压力分解的帮助不如想象中的明显,这可能与cpu的线程压力分配策略有关。
另外,这个测试仅在windows下对intel的两种cpu进行了测试,其他情况不好预计,希望有机会能给补充进来。
最后,附上我的测试代码:
package com.icefox.test.mulcore;
import java.util.Date;
/**
* 为测试多线程在多核,多cpu下的表现
* 准备多线程程序长时间运行,然后查看系统性能,看看是否占用多个cpu平均分配
* jdk为1.5
*
* 结论:
* 在双核intel core2 5270 1.4G处理器上测试,
* 使用10线程和100线程测试,结果一致
* 无论单线程还是多线程,反应类似,预计为没有为多线程做处理
* (结果截图在MulCoreTest_core_thread100.JPG)
*
* 在四核双路intel xeon E5310 处理器上使用10线程和100线程测试,
* 多线程占用3核心运算,单线程占用2核心运算
* 预计为多线程对分处理器有帮助,但cpu分配不完全依赖线程,
* 即使单线程,cpu仍可依照一定算法进行分配
* (结果截图在MulCoreTest_xeon_thread10.JPG
* MulCoreTest_xeon_thread100.JPG)
*
* 总结:
* 初步预计,多线程程序设计对intel的cpu下有帮助,
* 但排除cpu由于线程压力自主分配的因素外,
* java的多线程设计对程序压力分解的帮助不如想象中的明显,
* 这可能与cpu的线程压力分配策略有关。
* @author wjx
*
*/
public class MulCoreTest {
private int continueSecond; // 线程持续时间,默认20秒
public MulCoreTest(){
continueSecond=20;
}
public MulCoreTest(int continueSecond){
this.continueSecond = continueSecond;
}
public int getContinueSecond(){
return this.continueSecond;
}
/**
* 线程测试方法,先执行指定时间的多线程,
* 再执行指定时间的单线程,
* 查看资源管理器,证明线程与cpu核心的关系
* @throws InterruptedException
*/
public void testThread() throws InterruptedException{
/**
* 多线程执行
*/
System.out.println("Mul Thread run");
for(int i=0;i<100;i++){
new CustThread().start();
}
/**
* 休息30秒
*/
Thread.sleep((this.continueSecond+30)*1000);
/**
* 单线程执行
*/
System.out.println("Single Thread run");
testSingleThread();
}
/**
* @param args
* @throws InterruptedException
*/
public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
MulCoreTest mul = new MulCoreTest();
mul.testThread();
}
/**
* 单线程测试
*
*/
public void testSingleThread(){
Date startTime = new Date();
while(true){
System.out.println("Single Thread");
Date nowTime = new Date();
if((nowTime.getTime()-startTime.getTime())/1000>continueSecond){
break;
}
}
}
}
package com.icefox.test.mulcore;
import java.util.Date;
/**
* 一个定制的线程
* @author wjx
*
*/
public class CustThread extends Thread {
private int continueSecond; // 线程持续时间,单位:秒
public CustThread(){
continueSecond=20;
}
public CustThread(int continueSecond){
this.continueSecond = continueSecond;
}
public void run(){
Date startTime = new Date();
while(true){
System.out.println("Mul Thread Run:"+this.getId());
Date nowTime = new Date();
if((nowTime.getTime()-startTime.getTime())/1000>continueSecond){
break;
}
}
}
}
- 大小: 45.4 KB
- 大小: 77 KB
- 大小: 74.1 KB
分享到:
相关推荐
4. 兼容性改进:补丁可能包含对新软件、硬件或操作系统版本的兼容性调整,使得AMD多核处理器能在更广泛的环境下正常工作。 5. 功耗管理:更新的补丁可能包含优化的功耗管理策略,帮助处理器在保持高性能的同时降低...
1. **多核处理器概念**:多核处理器是指在单个芯片上集成两个或更多独立的处理核心,它们可以同时执行不同的任务或协同工作,以提高系统性能和并发性。在Nios系统中,我们可以创建多个软核实例,每个核心都可以运行...
压缩包中的文件"OpenMP16"可能是一个包含多个示例程序、测试用例或者文档的目录,这些资源将详细解释如何在16核处理器环境下使用OpenMP进行并行编程。可能包括以下内容: 1. **并行区域(Parallel Regions)**:...
总的来说,LabVIEW作为一个强大的图形化开发工具,有效地支持了多核处理器环境下的信号处理优化,降低了并行编程的难度,提升了软件在多核处理器上的性能表现,为测试测量行业的工程师提供了高效的解决方案。
通过在1、5、9、17条宿主机线程上仿真32条目标程序,PCASim展示了良好的可扩展性和功能性,验证了新同步方法的有效性,为多核处理器的性能分析和优化提供了有力工具。这一研究对于理解和优化多核处理器系统的性能,...
【独立栈模型】在面向片...【结论】独立栈模型在片上多核处理器的推测多线程环境中,通过消除共享栈的加锁问题,提高了程序的并行执行效率。然而,选择合适的栈模型应根据具体程序的特性和需求,以达到最佳的并行性能。
在多核处理器环境下优化信号处理性能是现代计算技术中的一个重要课题,尤其是在数据处理、实时分析和高性能计算领域。随着摩尔定律的发展,单核处理器的频率提升遭遇了物理限制,多核处理器成为提升性能的主要途径。...
多核处理器是由两个或更多的独立处理核心集成在同一芯片上,每个核心都可以执行指令,进行数据运算。这样的设计允许处理器同时处理多个任务,从而实现并行计算。这种并行性可以是任务级并行(不同核心处理不同的任务...
随着嵌入式系统技术的发展,将JPEG解码功能实现在多核处理器平台上成为了可能。本篇文档将详细介绍在多核处理器平台上实现JPEG解码的过程和技术细节。 #### 二、项目背景与目标 本文档描述了在多核处理器平台上...
操作系统平台的选择对多线程程序的实现和性能表现有着重要的影响。 Boss/worker模式是一种常见的并发设计模式,它通过将任务分解为更小的单元,然后由多个线程(worker)去处理,而主线程或者协调线程(Boss)则...
这一模型的独特之处在于,它能够在支持同步多线程(SMT)的平台上直接移植和应用。 为了验证模型的有效性,研究人员使用了PARSEC和SPLASH2两个基准测试程序集。实验结果显示,估算误差分别仅为3.01%和1.99%,显著...
总结来说,LTspice Ⅳ是一款专为多核处理器优化的电路仿真软件,它提供了高效能的多线程求解器和稀疏矩阵求解器,显著提升了仿真速度,同时具备丰富的元件库和直观的图形用户界面,使得电路设计和分析工作更为便捷和...
开发者可以利用多线程技术编写程序,让它们在多核处理器上并行执行,从而充分利用硬件资源,实现更快的计算速度和更低的能源消耗。这种技术已经成为现代软件开发的重要组成部分,对于优化系统性能和提升用户体验有着...
多核处理器架构进一步提升了性能,通过将多个处理核心集成在同一芯片上,可以同时执行多个线程。然而,这也引入了缓存一致性的问题。在多核处理器中,每个核心都有自己的L1缓存,并且共享L2缓存。为了保证数据的一致...
通过将Caffe框架及其第三方库移植到嵌入式多核处理器并利用同构多核多线程以及异构GPU并行计算技术,有效地解决了移动平台计算能力不足的问题,并在多种深度学习模型上验证了其性能。这对于推动深度学习技术在移动端...
本文综述了多核处理器上数据处理算法相关的优化策略,从多个方面进行了探讨,包括提高程序的局部性、减少缓存访问冲突、增强多线程并行性、利用单指令多数据(SIMD)并行性以及优化带宽使用。此外,本文还总结和评论...
此外,理解这两个函数的工作原理和使用场景,有助于开发出高效且可维护的多线程程序。在设计多线程应用时,开发者需要考虑如何合理分配任务,避免阻塞和饥饿,以及如何优雅地处理线程的创建、销毁和异常情况。通过...