多核处理器是不是有多个EIP呢?怎样使每个EIP指向不同的地址呢?

多核处理器要同时处理多条指令,是不是要有多个EIP呢?怎样使每个EIP指向不同的地址,从而同时执行多条指令呢?多核64位处理器要同时处理多条指令,是不是要有多个RIP呢?怎样使每个RIP指向不同的地址,从而同时执行多条指令呢?

回答: 多核处理器是不是有多个EIP呢?怎样使每个EIP指向不同的地址呢?

  1. 可是虚拟地址最终还不是要转化为物理地址吗?如果是对称多处理模式的多核,众核都是平等的,加电时所有寄存器包括与寻址有关的寄存器初始值都相同,取到的指令自然相同,怎么可能分开呢?

    错!谁告诉过你众核平等了?这只是你自己乱说的。

    就像佛曰众生平等,然而佛界依然有一个最大的佛一样,多核CPU总有一个主核,其余都是副核。

    系统上电时只有主核被激活读取指令并执行,所有的副核都空转待命。只有在主核准备好任务包利用CPU的任务切换电路指令某一具体副核接手某一任务时,副核才得以运行。

    当然副核的硬件电路和主核是完全一样的,除了它们加电后不能被激活这一点。副核也可以构建任务包来命令主核或其它副核接手某一任务。

    CPU的任务调度电路在切换任务时会保存和设置目标核的全部相关寄存器,而并非如你所说仅改变 EIP,而且也没有任何机制可以让你单独改变其它核的任何寄存器。更不可能用什么指令跳到其它核里去。

    CPU的任务切换过程是这样的:

      核停电(不执行任何指令)->把当前所有寄存器值作为旧任务保存->将新任务的所有寄存器值灌入核中->核加电(继续执行指令)(核并不知道自己现在执行的这条指令和自己完成的上一条指令根本不是同一个任务的指令)





关于多核处理器下优先级任务调度的问题

  1. Q
    我没搞过多核的cpu,最近稍有学习,想到一个问题,很好奇。

    linux下有cpu亲和力的概念,可以讲进程或者线程绑定到某个具体的cup运行,如果我采用不同的任务调度策略,比如把一些进程改成实时任务调度策略,这样他们的优先级就高了,如果这个时候系统有两个任务,我将高优先级任务绑定在cpu0上,将普通任务绑定在cpu1上,这个时候岂不是有可能普通任务先于实时任务运行完毕?

    如果我不绑定任务进程到任务cpu,这个时候是不是说仍然两个任务各占一个cpu?

  2. A
    首先,多核之间的运行的独立的并行的。
    如果进程绑定,两个进程在两个cpu上并行运行,哪个进程先运行结束,取决于进程内部所做的事情。
    如果不绑定,高优先级进程会被优先分配到一个cpu上运行,如果这时还有空闲cpu,会将低优先级的进程分配到空闲cpu上执行。

如何在多核处理器设置并行线程,使程序并行运行。

  1. Q
    我现在使用的是一台八核的i7 CPU,开发环境是VS2005。
    现在需求是实现发送write()接收read()两个功能。我现在的处理是使用AfxCreateThread(). 创建里两个线程。通过sleep()函数实现write() read()两个线程切换。由于我的write() read()之间没有嵌套关系,所以我在想这两个线程能不能并行进行。
    我的CPU有八核,可不可以设置一个核负责write(),另一个负责read(),其他核负责主线程。
    请问各位大虾,我这个功能应该如何实现。是用OpenMP,亦或是其他什么技术?期望不吝赐教,非常感谢!
  2. A

    SetThreadAffinityMask Function

    Sets a processor affinity mask for the specified thread.


    Syntax
    DWORD_PTR WINAPI SetThreadAffinityMask(
      __in  HANDLE hThread,
      __in  DWORD_PTR dwThreadAffinityMask
    );

    Parameters
    hThread 
    A handle to the thread whose affinity mask is to be set. 

    This handle must have the THREAD_SET_INFORMATION or THREAD_SET_LIMITED_INFORMATION access right and the THREAD_QUERY_INFORMATION or THREAD_QUERY_LIMITED_INFORMATION access right. For more information, see Thread Security and Access Rights.

    dwThreadAffinityMask 
    The affinity mask for the thread. 


请问如何在多核上分担调用工作?

  1. Q
    各位大侠好,小弟是多核新手,有问题请教
    传说目前单核上的多线程是伪并行
    真正的并行是多核多线程
    现在手头上有个基于CORBA中间件的系统
    服务器是Intel多核处理器
    想请教一下如何在调用时利用多核分担优势呢
    比如我可以在调用前做个调度
    根据现有CPU资源利用率把调用负载平均分配到多核上去处理
    也就是
    比如CORBA调用一天要调用1W次,1W次可以根据使用情况分担到多核处理器上处理

    请给个思路好让我琢磨琢磨,嘿嘿~~
  2. A
    买本internet多核调用的书,里面有详细教你怎么分配多线程.

    一般都是要你用一个指令给出分配线程的标记.

    然后CPU会根据你的标记来优化线程

【公告】做异构编程技术达人,赢最新异构计算技术图书

  1. Q
    在这个繁忙的7月,“”(http://hc.csdn.net/ )正式落户CSDN。这里将为您展现近年来异构计算的发展历程及日趋流行的发展趋势,重点介绍异构编程的开发标准:OpenCL、C++ AMP和Java Aparapi等,引领开发者步入异构计算的瑰丽殿堂。

    您还在等什么?

    学习异构编程技术,从这里开始!


    即刻加入我们还可参与“做异构编程技术达人,赢最新异构计算技术图书”活动。

    活动规则:

    --- 活动时间:07月27日—08月27日

    --- 参与办法:浏览“”内容,并点击【公告】做异构编程技术达人,赢最新异构计算技术图书
     加入我们即可参加抽奖,赢取清华出版社出版的《OpenCL异构计算》新书1本!共计50个名额。

    ---奖品抽取与发放:活动开始后每周的周一会抽取并公布上一周的获奖者ID,请您注意查收邮件信息,我们会尽快安排奖品发放。

    周周都有机会,快来参加吧!

    图书简介:

    中文书名:OpenCL异构计算
    原书名:Heterogeneous Computing with OpenCL
                 
    【公告】做异构编程技术达人,赢最新异构计算技术图书


    内容简介:
    《OpenCL异构计算》讲解了OpenCL和如何为复杂的异构系统(多核处理器、GPU和APU)进行并行编程。OpenCL是为支持多平台设计的,受行业广泛支持,有助于帮助读者为异构环境编写高性能应用程序。
    本书由并行计算和OpenCL社区中的领头人所撰写,可帮助读者体验OpenCL从而了解大量基础的并行算法。书中探索了内存空间、优化技术、图形的互操作、性能扩展,调试和性能剖析等。
    本书读者对象为软件工程师、程序员、硬件工程师、高年级本科生/研究生,可供并行编程课程使用,包含有详细的案例,附有额外的网上练习和其他支持材料。

    派书工作开始:

    第一期获奖名单(姓名或ID):
    梦幻;张楠;comer1985;breeze505;IShinji2012;
    gc7329133;zhthl20091003;hanyunlong1989;runningwater_table;zzh5682;
    zsjy00015;dragonballs;orsinozhu;wackwinds_h;it_yan123
  2. A

微软泄漏Windows Phone 8新特性

  1. Q
    微软泄漏Windows Phone 8新特性


    相比较而言,微软Windows Phone的稳定性,用户体验以及创新都值得称赞,但是对比iPhone,Andriod后,总是感觉Windows Phone似乎缺少一些更加吸引人的特性。在今天泄漏的Windows Phone 8中,能看出微软加大对新功能新特性的开发,希望能够吸引用户和开发者。

    Windows Phone 8将具有的新特性:

    1. 支持多核处理器;

    2. 支持NFC(Near field communication)移动电子支付;

    3. 支持microSD卡;

    4. 支持四种屏幕分辨率;

    4. Data Smart功能,主要是节省移动数据流量,微软曾经透露该功能将与Windows 8共享;

    5. App点对点通讯功能,不仅仅是Windows Phone之间通讯,同时也包括Windows 8平台应用通讯;

    6. 集成IE10 Mobile;

    7. 集成SkyDrive,继Apple的iCloud后,微软也将引入更多云技术到移动平台;

    8. Skype app, 自微软收购Skype后,Windows phone 8将与其无缝结合,在VoIP方面,会带来不少惊喜;

    9. Local Scout功能,将帮助用户自动搜索以及加入附近的Hot Pot;

    10. 与Windows 8无缝结合,相信不少开发人员对这个特点有很大的兴趣。所谓无缝结合是指代码移植性而言,也就是说,能在Windows Phone 8运行的应用,通过简单转换即可移植到Windows 8平台,其中大多数是使用相同的代码。

    11. 增加对企业应用特性,支持BitLocker磁盘加密等功能,随后将有更多的企业特性加入,这是微软面向企业策略的开始;

    12. 内置摄像头功能优化,增加"Lens apps"等新功能;

     

    微软声明将在2012年第四季度发布Windows Phone 8,届时相信还会有更多惊喜,大家拭目以待吧。

    更多关于Windows Phone 8新特性的文章:

    http://www.geek.com/articles/mobile/windows-phone-8-features-leaked-2012022/ 

    http://www.windows8update.com/2012/02/02/new-windows-phone-8-integration-details/ 

    http://mashable.com/2012/02/02/windows-phone-8-update-leak/ 
  2. A
    手机的领域可以说是越来越抢手的话题了

实际工作中,什么场景会用到多线程开发?

  1. Q
    工作1年了,没接触过多线程,有的说法现在 多核处理器比较普及了,多线程开发以后会越来越多。
    平时能接触到多线程开发的朋友,能说说什么时候能用到多线程么?举些例子吧!!

    我接触的代码都是 web层--> service层 -->dao --> sql。没见过多线程。。
    问题补充:redstarofsleep 写道Web服务器自己就是多线程的,其实你自己写的Servlet就是被多线程访问的,只是不觉得。



    是啊,我想知道什么场景要自己写多线程。 封装好了的不算。听说互联网应用中多线程用的相对比较多,他们要经常写socket?我不清楚啊。
    问题补充:或者这么说,JDK1.5以后有了个 java.util.concurrent 并发包,你们用过么?
    用来解决什么问题?
  2. A
    1. 网络蚂蚁,最典型的多线程就用,多个连接同时下载
    2. Web爬虫就用
    3. GUI程序中的异步响应,比如,你点击一个按钮,要求不会阻塞,可以起一个线程,让那个线程执行特定任务,并通知进度条执行的进度。

    有很多..............

请问如何对大量的字符串进行快速替换

  1. Q
    有一个txt文件,5m左右,需要对里面的所有标点都进行替换成一个空格,用replace和正则表达式速度太慢了,有没有一种方法使字符进行快速替换。
    文本下载地址http://d.namipan.com/d/t.txt/254ea08f14240cf7c862774f31e89b52f91b2b05c6a34f00
  2. A
    一次性全部加载到内存,再进行替换.这样太慢的话.
    用多线程去做啊,
    1.将文章分割成多个文章,多线程读取不同的文件去修改.然后合成一个文件.
    2.如果有10000行,每一个线程处理2000,分5个线程同时去做.

    如果是多核处理器的话,多线程的优势会很明显.单核可能不是很显著.

游戏开发者关于异构运算的几个问题

  1. Q
    1、在异构系统中,GPU能否看作一个多核处理器?除了用作图形处理和数学计算,能否进行逻辑处理?能否运行线程?能运行多少线程?
    2、未来独立显卡是否也可能支持异构运算?效率是不是比核心显卡低?
    3、未来是否可能透明的混合使用CPU和GPU?就是说,编程人员无须在代码中声明使用哪种处理器处理,而是有编译器或操作系统根据处理类型自行调度?
  2. A
    简单的链表这种数据结构不太适合GPU处理。但数据结构变换一下,可能就适合 GPU 处理了. 如 50w 节点的数据,可以定义一个长度位50w的指针数组来指向这些节点,在节点数据结构增加一个字段记录其地址在指针数组中的索引,指针数组不需要排序。 查找操作由GPU来完成,在实际的数组空间(如48w)上进行并行划分。增加删除节点的操作在CPU上完成,增加节点时,只需要将指针数组的end position增加一就行, 删除时将end position的节点指针移到被删除位置并减小end position即可。 这种设计在 Kaveri APU 上实现很方便,因为 GPU kernel 中能直接使用 Host端产生的指针 (即共享虚拟地址).   在不支持共享虚拟地址的APU 上,需要将node数据结构分配在 一块Global Memory的node结构池子上(对池子中的已分配和未分配的node实现一个简单的管理方法), 指针数组中的值设置为各node在池子中的偏移量,GPU的kernel在执行时根据node的偏移和池子在global memory的地址来访问该node. 

如何更好测试并行程序

  1. Q
    计算机科学领域的一条定律就是世人对更高性能的追求永远不会满足。如今,这些需求不仅仅针对速度,而且还针对体积更小、功能更加强大的移动设备。为了满足不断增长的用户期望,IDC 公司预期原始设备制造商 (OEM) 将会选择速度更快的多核处理器来支持他们的设备[1]。在这种背景下,并行程序将在移动设备中大量使用以充分利用多核技术。

    测试是软件开发周期中成本最高的阶段之一。大型软件厂商将其开发成本的 50% 用在测试上[2]。如果我们再考虑并行软件,该成本将进一步增加。这样的预算成本使得选择一种高效、合适的测试方法对于任何软件开发战略都变得至关重要。

    在前面的几篇文章中[3],我们讨论了如何将应用从串行编程移植到并行编程以及如何为并行优化做准备。本文的目的是简单介绍几种不同的并行软件测试方法。

    通常而言,并行程序可使用三种高级方法来测试:

    黑盒测试:这一方法对应用的功能进行测试,无需对并行应用代码的具体了解。黑盒测试的局限性在于我们不知道覆盖了多少代码。为了克服这个缺点,可使用测试数据充分性准则来规划要测试的对象。另一方面,这一方法的优势在于它能够轻松实现自动化。另外,由于它无需涉及有关程序结构的信息,因此比白盒测试更省力。

    白盒测试:这一方法对用于实施软件功能的并行源代码和算法进行测试。在白盒测试中,需要对系统内部和数据结构有所了解,以及具备一定的并行编程技巧(用于设计测试案例)。测试人员需要规划使用哪些输入以检验代码路径并确定合适的输出,从而确保功能正常运行。要使用这一方法,不仅需要耗费较多精力,而且需要娴熟的技术人员。

    尽管白盒测试能够应用于软件测试过程的不同系统级别,但通常应用于单元级测试。它能够测试单元内的路径、单元之间的路径(集成中),还能在系统级测试中测试子系统之间的路径。尽管这一方法能够发现许多错误或问题,但却可能无法发现规格的未实施部分或遗漏的需求。

    混合法:这种方法是黑盒测试法和白盒测试法的组合。这一方法通常在使用专用库来实施并行算法的某些部分或出于测试战略目的时使用。


    测试战略
    测试并行程序主要有四种战略:

    压力测试:压力测试重点关注在繁重工作负载之下的稳定性、可用性和错误处理能力,而非被视作正常情况下正确行为的一些问题。具体而言,并行测试的目的是发现少见的交错并确保软件不会在计算资源不足的情况下发生崩溃。

    系统测试:系统测试是一种符合性软件测试方法。系统测试中,根据测试假设条件,被测试单元需显示是否完全符合规格 [4]。实施系统测试的一种方法是使用模型检查器机制。这一工具有助于针对特定的输入数据系统地探索不同的线程交错。

    随机测试:随机测试的目的是随机挑选交错以测试行为。需要重点关注的是主动测试[5]。主动测试分两个阶段进行:首先,它利用预测性商业化静态或动态程序分析来识别可能的并发性错误,如数据竞争、死锁和违反原子性。在第二个阶段,主动测试使用来自预测性分析的报告来明确控制并发程序的底层调度程序以准确、快速地发现实际的并发性错误(如果有)。这种测试发现问题的可能性极高,开销却较低。

    直觉驱动测试:使用这种战略时,测试人员对怀疑存在问题的调度进行仔细规划。通常而言,这种测试需要测试人员主要从剖面和分析的角度来理解程序。


    规划和测量
    并行应用测试的第一步是通过确定可接受的性能阈值来设置和合适的性能期望。这些阈值应当在项目规划阶段确定,并将作为产品的非功能性需求来实现。

    在阈值确定期间,架构师应当确定测试生命周期中将要收集和测试的指标。用于测量应用性能的指标有多种:单项任务的挂钟时间(也称作周转时间)、多项任务的挂钟时间(吞吐量测量)、MFLOPS(每秒百万浮点运算次数)比例、内存使用量、I/O 利用率、MIPS(每秒百万指令数)和网络使用等等。因此,根据应用的特征来确定使用什么指标非常重要。 

    此外,测试规划中非常重要的一点是确定执行测试用例时将要使用的数据集。数据集和执行环境应当慎重选择,并应能够充分代表应用的实际使用情况。性能指标评测测量应当使用相当的数据集和设置环境来执行。另外,建议您在从一个实验转到另一个实验时,仅更换一个变量(例如,编译器标志或系统设置)。这样做有助于将性能改变的效果与性能变量的更改关联起来。对于利用不同工具或技术获得的数据应尽可能进行交叉检查。

    总之,测试是软件开发中成本最高的阶段之一。因此,选择一种经济高效的战略非常重要。本文介绍的方法和技巧将能够帮助为特定项目确定最合适的测试方法。

    如欲了解有关并行编程和用于测量应用并发性的工具的更多信息,请访问 http://software.intel.com/zh-cn/parallel

    [1] 2011-2015 全球移动电话预测更新:2011 年 9 月。Ramon T. Llamas William Stofega

    [2]数据库应用系统测试运行的并行执行,Florian Haftmann Donald Kossmann, Eric Lo 

    [3] 并行优化准备。Diana Byrne,2011 年 7 月 22 日。http://software.intel.com/en-us/articles/preparing-for-parallel-optimization/

    [4] 行为兼容对象类型、软件测试、验证和可靠性的回归测试理论,J H Simons, UKTest 2005 Special Issue, September, eds。M Woodward, P McMinn、M Holcombe 和 R Hieron(Chichester:John Wiley,2006), 133-156。 

    [5] CalFuzzer:并发程序的可扩展主动测试框架;Pallavi Joshi、Mayur Naik、Chang-Seo Park 和 Koushik Sen 

    原文地址:
  2. A
    帮一个大四的学姐写毕业设计,刚通宵完,累、困不说,主要是发现的问题越来越多,虽然要求很简单,但我还是想做到我自己最好的,追求自己的完美。好累,想休息,又想尽快写完...