相关疑难解决方法(0)

多CPU,多核和超线程

有人可以向我推荐一些文档来说明多CPU,多核和超线程之间的区别吗?我总是对这些差异以及不同场景中每个架构的优缺点感到困惑.

编辑:这是我在网上学习并从别人的评论中学习后的当前理解; 有人可以评论评论吗?

  1. 我认为超线程是其中最劣质的技术,但价格便宜.其主要思想是重复寄存器以节省上下文切换时间;
  2. 多处理器优于超线程,但由于不同的CPU位于不同的芯片上,不同CPU之间的通信延迟比多核更长,并且使用多个芯片,与多核相比,费用更高,功耗更高;
  3. 多核将所有CPU集成在一个芯片上,因此与多处理器相比,不同CPU之间的通信延迟大大降低.由于它使用一个芯片来容纳所有CPU,因此它消耗的功率更低,并且比多处理器系统便宜.

乔治,提前谢谢

multicore smp hyperthreading

77
推荐指数
1
解决办法
3万
查看次数

双核机器上的多线程?

我有一个双核处理器,根据解释,我只能使用2个线程,但实际上我可以同时启动2个以上的线程:

以下是解释的副本:

boost :: thread类提供的静态hardware_concurrency()方法根据底层的CPU或CPU核心数返回可以在物理上同时执行的线程数.在常用的双核机器上调用此函数,返回值2.这允许一种简单的方法来识别给定多线程应用程序应同时使用的理论最大线程数.

在我的情况下,hardware_concurrency()方法返回数字2,但是该程序同时使用4个线程:

#include <iostream>
#include <boost\thread.hpp>

using namespace std;
using boost::thread;
using namespace boost::this_thread;
using boost::posix_time::seconds;

void f1()
{
    for(int i = 0; i < 10; ++i)
    {
        cout << i << endl;
        sleep(seconds(2));
    }
}

void f2()
{
    for(int i = 0; i < 10; ++i)
    {
        cout << i << endl;
        sleep(seconds(2));
    }
}

int main()
{
    // 4 threads are executed on dual core machine (no problem)
    thread thr1(f1);
    thread thr2(f2);
    thread thr3(f1); …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading

7
推荐指数
2
解决办法
2889
查看次数

标签 统计

c++ ×1

hyperthreading ×1

multicore ×1

multithreading ×1

smp ×1