gpt4 book ai didi

multithreading - 多线程-多核处理器真的在进行并行处理吗?

转载 作者:行者123 更新时间:2023-12-03 12:55:53 28 4
gpt4 key购买 nike

现代的多核处理器是否真的在进行并行处理?
例如,以Intel的核心i7处理器为例。其中一些具有#of Cores: 4#of Threads: 8(摘自Intel的规范页面)。如果我编写一个具有多个执行线程的程序(例如,用Java或C语言编写),那么它们真的是会被同时处理吗?我的老师说:“多核处理器并非总是如此”,但并没有提供太多细节。

为什么英特尔必须同时指定#of核心和#of线程?线程不只是一个描述程序相关抽象的术语,与实际硬件中的“核心”不同吗? (“每个线程都在不同的内核上运行”)。

最佳答案

是的,现代多核处理器实际上是在适当的任务上进行并行处理,并且只要软件编写正确即可。我亲自测试了具有可配置线程数的多线程软件,并观察吞吐量与线程数成正比,直到该数量等于内核数为止:在四核处理器上,一个线程以一定数量完成了一项任务时间,四个线程在相同的时间内完成了四个任务,吞吐量提高了三倍。除了内核数量之外,其他线程没有进一步增加,实际上略有减少:八个线程上的八个任务花费的时间是四个线程上四个任务花费的时间的两倍以上。仅使用四个线程并使它们各自连续处理两个任务就更快了。

但是,这可能就是您的教授所指的,仅具有多个线程并不能保证您将利用多个内核。例如,线程可能受到共享资源争用的限制,也就是说,它们都需要访问一块内存。他们还可能争用共享的I/O资源,例如磁盘访问或网络访问。在某些情况下,一次运行多个线程可能不会有所改善,并且实际上可能会降低总吞吐量。

最后,由于英特尔的“超线程”体系结构,“线程数”和“内核数”的数量有所不同,据说该体系结构允许每个内核一次运行两个线程。以我的经验,超线程在现实世界中不是很有用:例如,在上述测试中,内核是超线程的Intel内核,但是当我运行的线程数等于物理线程数时,仍会出现峰值吞吐量。内核,当我运行的线程数量等于英特尔声称的线程容量时,该内核就会掉线。我发现最好注意内核数量,而忽略英特尔的“线程数量”主张。

关于multithreading - 多线程-多核处理器真的在进行并行处理吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24025123/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com