精华内容
下载资源
问答
  • 提出采用最新的多核多线程处理器,以VCPU为单位部署操作系统,实现两种操作系统共CORE,通过共享内存通信方案,有效解决高数据吞吐率和复杂业务处理的矛盾,细化多核处理器的分配粒度,从而提升网络核心设备的性能。
  • 多核多线程处理器的任务调度技术的分析。 从理论角度提出了3种与基于复制的任务调度相关的算法。 提出针对网络应用特性的任务调度算法LTTS。网络程序不同于普通程序,网络应用具有较高的并行性,但是网络应用中的并行...
  • 多核多线程处理器XLR732的多核间通信.pdf,这是我花钱买的很有价值的文档。贡献给大家了,希望对大家有帮助!
  • 非常好的介绍RMI多核多线程 的资料
  • 多核多线程处理器储存技术已成为限制其发展的瓶颈,文章提出了几个现实可行的解决方案
  • 设计了一种能广泛应用于信息安全领域的新型硬件加密系统——基于MEMS(微机电系统)强链的移动硬盘加密系统。利用MEMS强链的反馈信号生成用于AES加解密算法过程的物理密钥,使得该系统的安全性能大大提高。...
  • 多核同时多线程处理器(SMT_PAAG)是用于图形、图像及数字信号处理的一种多核处理器。基于这种处理器提出了一种硬件线程调度器,该调度器采用同时多线程技术,最多可同时执行四个线程,支持八个线程阻塞模式下的快速...
  • Raza Microelectronics及基于深度包监测(DPI)IP服务优化解决方案的领导者Allot Communications,日前宣布在Allot Service Gateway中,Allot公司选用RMI的多核多线程XLR处理器。 Allot Service Gateway为标准的...
  • 多核处理器 多核处理器(CMP)就是将个计算内核集成在一个处理器芯片中,从而提高计算能力。按计算内核的对等与否,CMP可分为同构多核和异构多核。计算内核相同,地位对等的称为同构多核。反之称为异构多核...

    多核处理器 多核处理器(CMP)就是将多个计算内核集成在一个处理器芯片中,从而提高计算能力。按计算内核的对等与否,CMP可分为同构多核和异构多核。计算内核相同,地位对等的称为同构多核。反之称为异构多核。 多处理器 多处理器指多个CPU,每个CPU可以是单核或多核的。虽然同时使用多个CPU,但是从管理的角度来看,它们的表现就像一台单机一样。对称多处理器(SMP)结构是近来最流行的多处理器结构,系统将任务队列对称地分布于多个CPU之上,从而极大地提高了整个系统的数据处理能力,而非对称结构已比较少见。 多核开发和多线程开发的区别 在本质上,多核开发也就是利用多线程进行程序开发,让不同功能的进程在不同的核上运行,或者让同一进程中不同功能的线程在不同的核上运行。以往我们学习的算法都是面向单线程的,而多核开发时要将这些算法改造成支持多线程的算法,然后系统运行时会将多线程分配到多核处理器上,以实现运行的加速。 不过和传统的多线程编程方式有所不同, 多核开发对于同步锁定等问题较简单,但是需要仔细分析出可并行计算的代码块来,让多线程能够在一个任务中并行。多线程开发的时候,你并不知道有几个物理CPU,而进行多核开发时,你肯定知道有多少个物理CPU了。

    展开全文
  • 多核、多处理器环境下多线程同步技巧,来自CocoaChina。 我们这里大部分人应该已经熟悉了在单核单处理器的环境下对多线程进行同步的方法。传统的方法有:Mutex(互斥体)、Semaphore(信号 量)、Event(事件...
     
    

    多核、多处理器环境下多线程同步技巧,来自CocoaChina。

    我们这里大部分人应该已经熟悉了在单核单处理器的环境下对多线程进行同步的方法。传统的方法有:Mutex(互斥体)、Semaphore(信号 量)、Event(事件)、MailBox(邮箱)、Message(消息)等。这些方法都有个共同的特性——即在使用这些方法的前、后会分别加 上关中断、开中断操作(或是任务调度的禁止、开启)。
    而在多核情况下单单开关中断是不起作用的。因为当一个线程在核心0中运行时,它无法一直去关 心核心1中的线程运行状态,它甚至不知道核心1到底在运行哪个线程。
    因此需要通过另一种方法来解决线程同步问题。
    这里比较早的方法是通过原子操作做成旋锁进行同步。
    什么是原子操作?
    原子操作是指当对一个指定的存储单元进行这样的操作时,该操作不会被任何事件打断; 另一方面,当对一个指定的存储单元进行这样的时,其它外部的访问都无法对该存储单元进行访问,直到该操作完成。

    Intel在x86架构下 提供xchg指令来实现对存储器的原子操作:
    XCHG    [memory],     register
    其功能是将register 的值与指定存储器单元的值进行叫唤。
    下面贴出代码示例:

    1. .text
    2. .align 2
    3. .globl _cmpxchg_64
    4. .globl _xchg_64
    5.  
    6. // extern long xchg_64(register volatile long *pMem, register long reg);
    7. _xchg_64:
    8.  
    9.     xchg    %rsi, (%rdi)
    10.     mov     %rsi, %rax
    11.     ret


    上面代码是一份AT&T的汇编源代码,通过.s文件进行保存。
    下面贴出如何在C源文件中进行调用该函数:

    1. #include <stdio.h>
    2.  
    3. // pMem:rdi     reg:rsi
    4. extern long xchg_64(register volatile long *pMem, register long reg);
    5.  
    6. int main (int argc, const char * argv[])
    7. {
    8.     // insert code here...
    9.     volatile long a = 20;
    10.     register long b = 10;
    11.     
    12.     b = xchg_64(&a, b);
    13.     
    14.     printf("a = %ld, b = %ld\r\n", a, b);    
    15.     return 0;
    16. }

    好了。我们有了原子操作后就能做出旋锁机制来解决多核环境的多线程同步问题。
    下面通过一个简单的代码来说明问题:

     
    extern long xchg_64(register volatile long *pMem, register long reg);
     
    int try_get_lock(volatile long *pLock)
    {
    return !xchg_64(pLock, 1);
    }
     
    void release_lock(volatile long *pLock)
    {
    xchg_64(pLock, 0);
    }
     
    static volatile int counter = 0;
     
    static void ThreadProc(void)
    {
    static volatile long myLock = 0;
    while (!try_get_lock(&myLock));
    counter++;
    release_lock(&myLock);
    }


    这里先自己规定,锁的初始值是0,当有线程加锁时,对其置为 1,释放锁时再将它置为0。
    这里我们有一个线程例程ThreadProc,它将会被多个线程调用。这个例程的功能就是将counter值递增。当 一个线程进行counter++时,它先取出counter的值,放到寄存器中,然后对该寄存器做加1操作;最后再写回counter。


    如果这里 没有旋锁会发生啥情况呢?
    呵呵,将可能会有一个戏剧性的一幕:比如counter的值为0,然后,当线程A将counter值读入寄存器时,线程 B恰恰刚好完成了一次加1操作,此时counter已经变成1了;但是这时,线程A中的寄存器值还是原来的0,因此再当线程A将counter的值递增到 1时,它的加1操作等于是失败了。
    而使用旋锁就不会出问题。因为在将counter的值取出前已经有了锁保护,当线程A获得锁之后,myLock 的值会变成1,此时,其它线程再调用try_get_lock都会返回0,而进行无休止的轮询。由于这个操作非常快,因此对整体性能而言不会有大的影响。 counter++操作完成后就会立即释放锁。
    但是为了防止本核由于外部事件而被切出,在必要的场合下还可以添加开关中断;另外使用旋锁还有一个 非常重要的注意事项——当一个线程获得旋锁后,在其将锁释放之前不能够将该线程销毁,否则会使其它线程处于死锁状态。因为锁得不到释放,因此其它线程都会 陷入无止境的轮询,呵呵。因此加入开关中断操作能够同时也能避免这种情况发生。

    上面讲述了如何通过旋锁解决多核、多处理器环境下的多线程同步问题。
    旋锁有一些很大的弊端:首先就是可能造成死锁,除非用开关中断;另一方面,当 线程数量猛增时,锁的数量也会同时增加,这对于锁的管理而言会成为很大的软件管理的负担。因此这里将引入一种Lock-Free的方法来使得一些简单的操 作不需要通过锁进行同步。
    Intel在i386架构下提供了CMPXCHG原子操作。该指令的原型如下:
    CMPXCHG    memory,    register
    功能:将EAX(在64位模式下:RAX)与memory中的值进行比较,如果相同,ZF标志置1,并且register中的值被加载到memory中;否 则ZF标志位清0,并且将memory中的值加载到register中。

    下面将该原子操作封装成一个函数,以便C/C++以及 Objective-C/C++能够调用:

    1. .text
    2. .align 2
    3. .globl _cmpxchg_64
    4.  
    5. // cmpData:rdi      loadReg:rsi     pMem:rdx
    6. // extern long cmpxchg_64(register long cmpData, register long *loadReg, register volatile long *pMem);
    7. _cmpxchg_64:
    8.     push    %rcx
    9.     push    %rbx
    10.  
    11.     mov     %rdi, %rax
    12.     mov     (%rsi), %rcx
    13.     xor     %rbx, %rbx
    14.     cmpxchg %rcx, (%rdx)
    15.     cmovnz  %rax, %rcx
    16.     mov     $1, %rax
    17.     cmovz   %rax, %rbx
    18.     mov     %rcx, (%rsi)
    19.     mov     %rbx, %rax
    20.     
    21.     pop     %rbx
    22.     pop     %rcx
    23.  
    24.     ret

    下面我们将用Lock-Free的方法来改写ThreadProc:

    1. #include <stdio.h>
    2.  
    3. extern long cmpxchg_64(register long cmpData, register long *loadReg, register volatile long *pMem);
    4.  
    5. static volatile long counter = 0;
    6.  
    7. static void ThreadProc(void)
    8. {
    9.     register long oldValue = counter;
    10.     long newValue = oldValue + 1;
    11.     
    12.     while(!cmpxchg_64(oldValue, &newValue, &counter))
    13.     {
    14.         oldValue = newValue;
    15.         newValue = oldValue + 1;
    16.     }
    17. }
    18.  
    19.  
    20. int main (int argc, const char * argv[])
    21. {
    22.     // insert code here...
    23.     ThreadProc();
    24.     printf("The counter is: %ld\r\n", counter);
    25.     
    26.     return 0;
    27. }

    这里稍微讲解一下。
    在ThreadProc中,我们的目的仍然是要将counter加1。那么我们先读取counter的值,然后将该值加1后的 值存储到一边。然后我们就可以用自己打造的cmpxchg_64做原子操作了。如果返回值为1,说明原来的值与counter在比较时的值是完全一样的。 比如,初始值为0,那么在交换前counter的值没有被其它线程改写,因此仍然为0,这时就可以将加1后的值写入counter。由于cmpxchg是 一个原子操作,因此整个比较与交换的过程是原子的,外部不会打断此操作,并且在此操作期间,总线会将counter锁住,使得其它线程要访问 counter时,其所在的核都会被阻塞。
    如果返回0,说明counter被读取后交换前被修改过,那么这里就要重新获得counter的值并且 在此基础上做加1操作,然后再执行cmpxchg操作,直到最后成功。

    我们可以清楚地看到,这段代码中没有添加任何锁,而且,如果正在 ThreadProc的一个线程被销毁也不会影响其它线程的执行,从而我们根本就不需要添加开关中断的形式来保证避免其它线程死锁的问题。
    另外, 大家可以在3楼代码中第11行插入counter++;在 看看结果。

    最后再提供一份关于Lock-Free比较好的资料:Non-blocking synchronization

    其中,cmpxchg是属于CAS机制;而在ARMv7架构中的LDREX/STREX是属于 LL/SC机制。它们都可以用来实现Lock-Free的方法。然而LL/SC机制使用起来必须更加谨慎,因为LL和SC往往必须成对出现,中间也不该允 许被中止。所以这个机制大多架构中用的比较少。现在ARMv7以及Power架构有这个指令集,而ARMv7只有这一种方法能实现 Lock-Free。而ARMv7之前,只能使用SWP指令来实现旋锁,SWP与XCHG功能完全一样。

    展开全文
  • 多核多处理器 多核(MulticoreMulticoreMulticore) 多核处理器就是指单个 CPU 中有个可执行单元。 如下图所示,单个 CPU 中有两套可执行单元。 多处理器(MultiprocessorMultiprocessorMultiprocessor) ...

    多核与多处理器

    多核( M u l t i c o r e Multicore Multicore

    多核处理器就是指单个 CPU 中有多个可执行单元。

    如下图所示,单个 CPU 中有两套可执行单元。

    在这里插入图片描述

    多处理器( M u l t i p r o c e s s o r Multiprocessor Multiprocessor

    多处理器系统则是一个拥有多个 CPU 的系统。每个 CPU 中也可能有多个核。

    如下图所示,一个系统中拥有 n n n 个处理器,即 n n n 个CPU。

    在这里插入图片描述


    并发与并行

    并发( C o n c u r r e n c y Concurrency Concurrency

    并发执行的定义是,多个程序在一段重叠的时间段中开始、运行与结束,但这些程序并没有在任何一个时刻同时在执行。如下图的左半部分图片所示,同一时刻只有一个程序在执行。

    因此我们常听到的 “两个任务或两个程序” 并发执行这样的说法,并不意味着这两个程序在某个时刻同时执行。

    并行( P a r a l l e l i s m Parallelism Parallelism

    并行执行,则意味着在同一个时刻,存在两个以上任务在同时运行。如下图的右半部分所示,同一时刻有多个任务在同时执行。

    其实可以把并行理解为平行,避免与并发概念发生混淆。

    这里需要注意,并发执行的关键点在于多个程序在一段时间内同时执行,但并行执行的关键点在于多个任务在同一时刻点同时执行。
    在这里插入图片描述
    接下来我们再仔细探讨一下并发与并行之间更深刻的关系。

    并行,但不并发

    如果一个系统仅支持平行,不支持并发,则意味着必须执行完程序 A A A 才能执行程序 B B B,但执行程序 A A A 时,其中的各个子任务可以在同一时刻同时执行。

    并发,但不并行

    并发但不并行,则意味着执行程序 A A A 时,可以突然中断执行程序 A A A 转去执行程序 B B B,执行完程序 B B B 后再去执行 A A A

    并发且并发

    并发且并行意味着执行程序 A A A B B B 时不仅可以互相打断,还可以在同一时刻同时执行程序 A A A B B B


    超线程技术

    超线程技术概念

    • 超线程技术( H y p e r − T h r e a d i n g Hyper-Threading HyperThreading)是 I n t e l Intel Intel 公司提出的一种提高 CPU 性能的技术,可将一个物理 CPU 当作两个逻辑 CPU 使用,同时执行多个线程,从而提高效率。
    • 超线程处理器内部的两个逻辑处理器共享一组处理器执行单元,运算能力提高 30%。
    • 超线程技术可将处理器内部的闲置资源利用起来,当并行执行两个线程时,负责处理第二个线程的逻辑处理器,仅使用运行第一个线程的处理器不使用的资源。

    超线程技术执行单线程

    执行单个线程时,超线程技术的效果反而下降。

    因为打开超线程后,处理器内部缓存被划分为几个区域,互相共享内部资源,单个子系统性能反而下降。

    为了更好地说明超线程技术的特性,我们将双核处理器与支持超线程技术的单核处理器进行对比。

    双核处理器概念

    双核处理器是在一个处理器芯片上集成了两个 “物理的” 运算核心。

    超线程单核处理器与双核处理器的区别

    • 开启了超线程技术的单核处理器与双核处理器在操作系统中都被识别为两个处理器,二者的区别在于,前者是两个 “逻辑” 处理器,后者是两个 “物理” 处理器。
    • 超线程的逻辑处理器并没有独立的执行单元、整数单元、寄存器甚至缓存,它们在运行时仍需要共用执行单元、缓存和总线接口。
    • 执行多线程时,超线程的两个处理器交替工作,当争用某资源时,一个线程必须暂停并让出资源。

    参考资料

    1. multicore-and-multiprocessor
    2. concurrency-and-parallelism-1
    3. concurrency-and-parallelism-2
    4. Hyper-threading-1
    5. Hyper-threading-2
    展开全文
  • CPU的多线程是指同一个处理器上的多个线程同步执行并共享处理器的执行资源的线程数量 处理器核心(Core)又称为内核,是CPU最重要的组成部分。 CPU中心那块隆起的芯片就是核心,是由单晶硅以一定的生产工艺制造出来...

    CPU的多核是指CPU的处理器核心数量

    CPU的多线程是指同一个处理器上的多个线程同步执行并共享处理器的执行资源的线程数量
    在这里插入图片描述
    处理器核心(Core)又称为内核,是CPU最重要的组成部分。

    CPU中心那块隆起的芯片就是核心,是由单晶硅以一定的生产工艺制造出来的,CPU所有的计算、接受/存储命令、处理数据都由核心执行。
    在这里插入图片描述
    处理器多个线程可最大限度地实现宽发射、乱序的超标量处理,提高处理器运算部件的利用率,缓和由于数据相关或Cache未命中带来的访问内存延时。

    处理器多个线程的好处

    1、处理器多个线程最具吸引力的是只需小规模改变处理器核心的设计,几乎不用增加额外的成本就可以显著地提升效能。

    2、多线程技术可以为高速的运算核心准备更多的待处理数据,减少运算核心的闲置时间。这对于桌面低端系统来说无疑十分具有吸引力。

    处理器多个核心的好处

    1、英特尔工程师们开发了多核芯片,使之满足“横向扩展”(而非“纵向扩充”)方法,从而提高性能。该架构实现了“分治法”战略。

    2、通过划分任务,线程应用能够充分利用多个执行内核,并可在特定的时间内执行更多任务。

    3、多核处理器是单枚芯片(也称为“硅核”),能够直接插入单一的处理器插槽中,但操作系统会利用所有相关的资源,将它的每个执行内核作为分立的逻辑处理器。通过在两个执行内核之间划分任务,多核处理器可在特定的时钟周期内执行更多任务。

    展开全文
  • 多核处理器与多线程处理器

    千次阅读 2013-06-09 10:49:13
    目前生产民用处理器(CPU)的二个最大生产厂家就是Intel与AMD,Intel与AMD这对老冤家为了各自的利益发动过次的战争,战争中双方各有胜负。但总体来说,Intel在战争中则更具优势。也正是因为这二大厂商的战争,才使...
  • 多核、多处理器环境下多线程同步技巧——旋锁以及Lock-Free方法
  • JAVA-并发_多线程  就在不久前,改善程序的性能还很容易。你可以性能分析工具看看程序在做什么,研究一下代码的内层循环;也可以编写几十个测试用例,变换程序的负载,看看何种优化在何种情形下会有用;还可以...
  • 单核处理器多核处理器、多处理器多线程编程 一.进程、线程、单核处理器  进程和线程都是操作系统的概念。进程是应用程序的执行实例,每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成,即...
  • What is the difference between multiprocessor programming and multicore programming?preferably show examples in python how to write a small program for multiprogramming & multicore programming解决...
  • 多核多线程复习

    2019-12-20 17:41:17
    北京科技大学天津学院17级多核多线程复习总结 lesson 1 1. 弗林分类 2. 进程与线程区别、线程状态 3. 片上多核处理器 4. 计算机硬件工艺发展顺序
  • What is the difference between multiprocessor programming and multicore programming?preferably show examples in python how to write a small program for multiprogramming & multicore programming解决方案...
  • 多核与网络处理器

    2019-06-30 10:04:00
    多核架构越来越普遍,本文主要介绍的是网络处理器跟多核的关系。广义上讲,中高端的网络处理器一般都有多个微引擎ME,也可以看作为多核的架构,只不过中、...是多核多线程的实现。16(clusters)*16(cores)*16(hardw...
  • 多核多线程处理器[1]是并行技术的一个发展方向,基于多核多线程处理器,提出了一种时钟共享多线程处理器。该处理器有近邻通信和线程间通信两种通信机制,近邻通信采用近邻共享FIFO来传递信息,线程间通信通过线程间...
  • 多核多线程

    2013-05-10 15:28:36
    “超线程”(Hyperthreading Technology)技术就是通过采用特殊的硬件指令,可以把两个逻辑内核模拟成两个物理超线程芯片,在单处理器中实现线程级的并行计算,同时在相应的软硬件的支持下大幅度的提高运行效能,...
  • 利用多核多线程进行程序优化

    千次阅读 2013-12-21 22:52:52
    利用多核多线程进行程序优化
  • 具体python为什么多线程方面比较弱呢?以下资料来自于网络的整理。全局解释器锁(GIL)Python代码的执行由Python虚拟机(解释器)来控制。Python在设计之初就考虑要在主循环中,同时只有一个线程在执行,就像单CPU...
  • 多核 多线程 进程的概念

    千次阅读 2015-05-09 20:13:07
    我们在买电脑的时候经常遇到一些概念,我这电脑是多核多线程的,什么双核的,什么四核、八核的,这种运动速度电脑快!那么这样的电脑为什么运行速度快?当然,运行速度快有很多原因,比如主频、缓存什么的。这里我们...
  • 下面是网上看到的一些关于超线程多核多处理器方面的一些不错的总结, 整理如下: 1 超线程技术 每个单位时间内,CPU只能处理一个线程(Thread)。除非有两个核心处理单元,否则要想在单位时间内处理超过一个的...
  • 多核多线程基础

    2016-09-27 19:57:13
    c++程序--->编译器----->汇编代码----->汇编器-------->处理器本地语言 内存: 典型cpu仅对保存在寄存器中的数据进行操作。 cpu 注:在二级存储器中保存的数据和指令必须通过io通道或者总线才能到达RAM。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 43,769
精华内容 17,507
关键字:

多核多线程处理器什么用