我认为有一个四核计算机的重点是要在整个过程中增加。但我想知道这正在发生的正常日常计算的哪个阶段。
如果我编写C代码进行矩阵乘法(并行计算的“Hello World”),我系统上的编译器会自动知道如何针对所有4个内核优化这个吗?或者我是否必须在程序中显式创建多个线程才能利用所有4个内核?
基本上我想知道的是程序有多少是自动并行的,而程序员可以通过制作调度程序将发送到不同内核的多个线程来优化程序。
答案 0 :(得分:2)
如果您使用纯C编写,或者使用OpenMP(非常适合矩阵乘法;您可以编写代码以使用OpenMP将循环中的工作拆分为多个线程)来生成线程代码,则必须自己创建多个线程。你。
但是,必须由您完成负载平衡。
程序必须有多个线程才能在不同的核心上运行。
答案 1 :(得分:1)
如果你用你所知道的任何语言编写一个程序,它就不会并行运行。
要在这些语言中获得并行性,您必须使用内置语言功能(“fork”或“do parallel”)或以某种方式使用线程的外部库。
功能语言人员声称其中一个主要价值是没有副作用,所以事实上你的整个功能程序可以并行执行。我发现令人惊讶的是Haskell人然后继续为你提供(并且据我所知,坚持使用)显式并行原语你想要它。
答案 2 :(得分:1)
系统 NOT 知道如何在核心之间传播工作。您可以编写程序来分割工作负载。只有当你有很多工作要做时,这才是值得的。这是线程的重要内容之一。
答案 3 :(得分:1)
越来越多的框架和语言集成功能使声明性并行计算变得更容易。但是,它仍然需要您对代码进行一些更改。变化量可以很小(几行)或大(完全重写),具体取决于代码的性质以及代码和框架之间是否适合。
有些方法可以并行化,不需要您管理线程。这些通常被称为任务并行,数据并行,演员,代理等。