Tag: 多核

多核和并发 – 语言,图书馆和开发技术

CPU架构的格局已经改变,多核心是一个趋势,将改变我们如何开发软件。 我在C,C ++和Java中完成了multithreading开发,我使用各种IPC机制完成了多进程开发。 使用线程的传统方法似乎并不使开发人员容易使用支持高度并发性的硬件。 您意识到哪些语言,库和开发技术有助于缓解创build并发应用程序的传统挑战? 我显然正在考虑像僵局和竞赛状况这样的问题。 devise技术,库,工具等也是有趣的,有助于实际利用并确保可用资源得到利用 – 只要编写一个安全,可靠的线程化应用程序并不能确保它使用所有可用的内核。 我目前看到的是: Erlang :基于进程的消息传递IPC,即“演员的并发模型” Dramatis :Ruby和Python的演员模型库 Scala :用于JVM的函数式编程语言,增加了一些并发支持 Clojure :具有演员库的JVM的函数式编程语言 白蚁 :Erlang的过程方法和消息传递给Scheme的一个端口 你还知道什么,为你工作了什么,你觉得有什么好看的?

线程和进程与multithreading和多核/多处理器:它们是如何映射的?

我很困惑,但接下来的线程清除了我的疑惑: 多处理,multithreading,超线程,多核 但它从硬件的angular度来处理查询。 我想知道这些硬件function如何映射到软件? 有一点很明显,MultiProcessor(= Mutlicpu)和MultiCore之间没有区别,除了多核以外,所有的cpus都驻留在一个芯片上(die),在多处理器中,所有的cpu都在自己的芯片上并连接在一起。 因此,mutlicore / multiprocessor系统能够在“sametime”执行多个进程(firefox,mediaplayer,googletalk)(不同于在单个处理器系统上切换这些进程的上下文)。 如果它正确。 我很清楚。 但是当multithreading出现时,会出现混乱。 multithreading“是为了”并行处理。 对? 什么是在cpumultithreading中涉及的元素? 图? 对于我来说,利用并行处理两个独立任务的能力,CPU的要求是什么呢? 当人们说线程的上下文切换时。 我真的不明白。 因为如果它的线程的上下文切换,那么它不会并行处理。 线程必须“同时”执行。 对? 我的multithreading概念是:考虑一个单CPU的系统。 当进程是上下文切换到Firefox。 (假设)firefox的每个标签都是一个线程,所有线程都严格同时执行。 不像一个线程已经执行了一段时间,然后又一个线程已经采取,直到上下文切换时间到达。 如果我在无法处理线程的处理器上运行multithreading软件,会发生什么情况? 我的意思是如何处理这样的软件的CPU? 如果一切都很好,现在问题是多less线程? 我想呢,它必须受硬件限制? 如果硬件只能支持2个线程,并在我的进程中启动10个线程。 CPU将如何处理? 优点缺点? 从软件工程的angular度来看,在开发用户在各种系统中使用的软件的同时,如何决定是否应该去multithreading? 如果是这样,有多less个线程?

在linux上查看多核或者mlti-cpu实例

我有一个在Linux上运行的程序,我需要确定它是如何利用所有CPU /内核的。 有没有任何程序来查看这些信息?

我可以使用`cabal install`来使用多个核心吗?

有谁知道如何获得cabal install利用并行性? 我正在编译GHC,虽然我不知道GHC本身是否可以并行编译,但是cabal install可以同时运行多个编译,不是吗? 至less对于独立的,独立的软件包? 有谁知道这是可能的,以及如何做到这一点?

C ++并行化库:OpenMP与线程构build块

我要改造我的自定义graphics引擎,以便利用多核CPU。 更确切地说,我正在寻找一个库来并行化循环。 在我看来,OpenMP和英特尔的线程构build块都非常适合这项工作。 此外,两者都受Visual Studio的C ++编译器和大多数其他stream行编译器的支持。 而且这两个库看起来都非常简单易用。 那么,我应该select哪一个? 有没有人试过这两个库,可以给我一些缺点和利用任何一个库? 另外,你最终select了什么? 谢谢, 阿德里安

我如何利用nmake的所有核心?

我刚拿到一台新的四核电脑,注意到nmake只用了一个进程。 我曾经使用有开关-j4启动4个进程的make。 什么是nmake等值? 基于以下信息,我已经能够添加一个命令到我的qmake项目文件: QMAKE_CXXFLAGS + = / MP 这对我有效。 非常感谢。

SMP核心,进程和线程如何一起工作?

在单个核心CPU上,每个进程在OS中运行,CPU从一个进程跳转到另一个进程,以充分利用自身。 一个进程可以有很multithreading,在这种情况下,当CPU在相应的进程上运行时,CPU通过这些线程运行。 现在,在多核CPU上: 核心是否在每个进程中一起运行,或者核心可以在特定的时间点在不同的进程中分别运行? 例如,你有程序A运行两个线程。 双核CPU能运行这个程序的两个线程吗? 我认为如果我们使用像OpenMP这样的答案应该是。 但是,当核心运行在OpenMPembedded式过程中时,其中一个内核是否可以简单地切换到其他进程? 对于为单核创build的程序,当以100%运行时,为什么每个核心的CPU利用率分布? (例如80%和20%的双核CPU,在这种情况下,所有内核的利用率总是达到100%)。内核是否试图通过以某种方式运行每个进程的每个线程来相互帮助?

你今天推荐什么样的并行编程模型来利用明天的众核处理器?

如果你今天从头开始编写一个新的应用程序,并且希望它能够扩展到你明天可以使用的所有内核,那么你会select什么样的并行编程模型/系统/语言/库? 为什么? 我对这些轴上的答案特别感兴趣: 程序员的生产力/易用性(人们能成功地使用它吗?) 目标应用领域(它不擅长什么问题?) 并发风格(是否支持任务,pipe道,数据并行,消息…?) 可维护性/面向未来(20年后还会有人使用吗?) 性能(它如何扩展到什么样的硬件?) 我正在刻意模糊应用程序的性质,以期得到对各种应用程序有用的良好的一般答案。

什么是Haskell中的“火花”

我对“火花”的概念感到困惑, 这是Haskell中的一个线程吗? 或者是产生新线程的行为? 谢谢大家: 所以总结一下,sparks不是线程,而是更多的计算单位(任务放在C#/ Java中)。 所以这是Haskell实现任务并行的方式。

如何控制一个进程运行的核心?

我可以理解如何编写一个使用多个进程或线程的程序:fork()一个新进程并使用IPC,或者创build多个线程并使用这些types的通信机制。 我也理解上下文切换。 也就是说,只有一个CPU,操作系统为每个进程安排时间(并且有大量的调度algorithm在那里),从而实现同时运行多个进程。 而现在我们有了多核处理器(或者多处理器的计算机),我们可以在两个独立的内核上同时运行两个进程。 我的问题是关于最后的情况:内核如何控制一个进程运行的核心? 哪些系统调用(在Linux甚至Windows中)在特定内核上调度进程? 我问这个问题的原因是:我正在为一个项目寻找计算方面的最新课题 – 我select了多核架构。 在如何在这种环境下编程(如何监视死锁或竞赛状况)似乎有很多材料,但在控制单个核心本身方面却没有太多的材料。 我希望能够编写一些演示程序,并给出一些汇编指令或C代码,以便大意:“看,我在第二个内核上运行一个无限循环,查看特定内核的 CPU利用率高峰” 。 任何代码示例? 还是教程? 编辑:澄清 – 很多人都说这是操作系统的目的,而且应该让操作系统照顾这个。 我完全同意! 但是,我所要求的(或试图去感受)是操作系统实际做到的。 不是调度algorithm,而是更多“一旦核心被选中,必须执行什么指令才能让核心开始获取指令?