使用多核提高并行性能

问题描述 投票:0回答:4

我认为拥有四核计算机的意义在于增加吞吐量。但我想知道这种情况到底发生在正常日常计算的哪个阶段。

如果我编写 C 代码来执行矩阵乘法(并行计算的“Hello World”),我系统上的编译器是否会自动知道如何针对所有 4 个核心进行优化?或者我是否必须在程序中显式创建多个线程才能利用所有 4 个核心?

基本上我想知道的是程序的多少部分是自动并行的,以及程序员可以通过调度程序发送到不同内核的多个线程来优化多少。

multithreading multiprocessing compiler-optimization
4个回答
2
投票

如果您用纯 C 编写,则必须自己创建多个线程,或者使用 OpenMP(非常适合矩阵乘法;您可以使用 OpenMP 编写代码将循环中的工作拆分为多个线程)为您生成线程代码。

但是,负载均衡必须由您来完成。

一个程序必须有多个线程才能在不同的内核上运行。


1
投票

几乎如果您用您知道的任何语言编写程序,它都不会并行运行。

要在此类语言中获得并行性,您必须求助于内置语言功能(“fork”或“并行”)或以某种方式使用线程的外部库。

函数式语言的专家声称其主要价值之一是没有副作用,因此实际上您的整个函数式程序可以并行执行。 我发现令人惊讶的是,Haskell 人员随后继续为您提供(据我所知,坚持您使用)您想要的显式并行原语。


1
投票

系统知道如何在核心之间分配工作。 由您来编写程序来分配工作量。 仅当您有大量工作要做时,这才值得。 这是线程的重要用途之一。


1
投票

越来越多的框架和语言集成功能使声明式并行计算变得更加容易。但是,它仍然需要您对代码进行一些更改。更改量可以很小(几行)或很大(完全重写),具体取决于代码的性质以及代码和框架之间是否良好契合。

有一些并行化方法不需要您管理线程。这些通常被称为任务并行、数据并行、参与者、代理等。

© www.soinside.com 2019 - 2024. All rights reserved.