标签: multicore

Haskell多线程有多难?

我听说在Haskell中,创建一个多线程应用程序就像采用标准的Haskell应用程序并使用-threaded标志编译它一样简单.但是,其他情况描述了par在实际源代码中使用命令.

Haskell多线程的状态是什么?引入程序有多容易?是否有一个很好的多线程教程可以解决这些不同的命令及其用途?

concurrency multithreading haskell multicore

62
推荐指数
2
解决办法
2万
查看次数

你是如何利用Multicore的?

作为来自企业Web开发世界的HPC世界中的某个人,我总是很想知道回到"现实世界"的开发人员如何利用并行计算.现在所有芯片都在进行多核处理,这就更加重要了,当芯片上有数千个内核而不是少数内核时,它会更加相关.

我的问题是:

  1. 这对您的软件路线图有何影响?
  2. 我对关于多核如何影响不同软件领域的真实故事特别感兴趣,因此请说明您在答案中做了哪种开发(例如服务器端,客户端应用程序,科学计算等).
  3. 您正在使用现有代码来利用多核计算机,以及您面临的挑战是什么?您使用的是OpenMP,Erlang,Haskell,CUDA,TBB,UPC还是其他什么?
  4. 当并发级别继续增加时,您打算做什么?您将如何处理数百或数千个内核?
  5. 如果您的域名容易从并行计算中受益,然后解释为什么是有趣的.

最后,我将此视为一个多核问题,但随意谈论其他类型的并行计算.如果您正在移植部分应用程序以使用MapReduce,或者如果大型集群上的MPI是您的范例,那么也要明确提及.

更新:如果您回答#5,请提及您是否认为如果有更多内核(100,1000等)可以改变,而不是可以提供可用内存带宽(看看每个内核带宽越来越小) ).您是否仍可以将剩余的核心用于您的应用程序?

parallel-processing concurrency scalability multicore

61
推荐指数
7
解决办法
7356
查看次数

新的C#5.0'async'和'await'关键字是否使用多个核心?

添加到C#5.0语言的两个新关键字是asyncawait,它们同时协同工作以异步运行C#方法而不会阻塞调用线程.

我的问题是,这些方法实际上是利用多个核并并行运行还是异步方法在与调用者相同的线程核心中运行?

c# parallel-processing asynchronous multicore c#-5.0

60
推荐指数
2
解决办法
1万
查看次数

Haskell轻量级线程开销并用于多核

我一直在阅读"真实世界Haskell"一书,关于并发和并行的章节.我的问题如下:

  • 由于Haskell线程实际上只是一个"真正的"OS线程中的多个"虚拟"线程,这是否意味着创建它们(如1000)不会对性能产生重大影响?即,我们可以说创建Haskell线程所产生的开销forkIO几乎可以忽略不计吗?如果可能的话,请带上典型的例子.

  • 轻量级线程的概念是否阻止我们使用多核架构的好处?据我所知,两个Haskell线程不可能在两个独立的内核上并发执行,因为从操作系统的角度来看它们实际上是一个单独的线程.或者Haskell运行时是否做了一些聪明的技巧来确保可以使用多个CPU?

concurrency multithreading haskell multicore lightweight-processes

58
推荐指数
2
解决办法
7815
查看次数

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

我可以理解如何编写一个使用多个进程或线程的程序:fork()一个新进程并使用IPC,或创建多个线程并使用这些通信机制.

我也理解上下文切换.也就是说,只有一次CPU,操作系统为每个进程安排时间(并且有大量的调度算法),从而我们实现了同时运行多个进程.

现在我们拥有多核处理器(或多处理器计算机),我们可以在两个独立的核心上同时运行两个进程.

我的问题是关于最后一个场景:内核如何控制进程运行的核心?哪些系统调用(在Linux,甚至是Windows中)在特定核心上安排进程?

我问的原因是:我正在为学校开展一个项目,我们将在那里探索最近的计算主题 - 我选择了多核架构.关于如何在这种环境中编程(如何监视死锁或竞争条件)似乎有很多材料,但在控制各个核心本身方面却没有太多.我希望能够编写一些演示程序并提供一些汇编指令或C代码,以实现"看,我在第二个内核上运行无限循环,查看该特定内核的 CPU利用率峰值" .

任何代码示例?还是教程?

编辑:为了澄清 - 很多人都说这是操作系统的目的,应该让操作系统处理这个问题.我完全同意!但那时我所要求的(或试图感受到)是操作系统实际上做的事情.不是调度算法,而是"一旦选择了核心,必须执行哪些指令才能让核心开始获取指令?"

multicore intel instruction-set system-calls

57
推荐指数
4
解决办法
5万
查看次数

SMP核心,进程和线程如何协同工作?

在单核CPU上,每个进程都在OS中运行,并且CPU从一个进程跳转到另一个进程以最好地利用自身.进程可以有多个线程,在这种情况下,CPU在相应进程上运行时会运行这些线程.

现在,在多核CPU上:

  • 核心是否在每个进程中一起运行,或者核心是否可以在一个特定时间点在不同进程中单独运行?例如,您有程序A运行两个线程.双核CPU可以运行这个程序的两个线程吗?如果我们使用像OpenMP这样的东西,我认为答案应该是肯定的.但是,虽然内核在这个OpenMP嵌入式进程中运行,但其中一个内核是否可以简单地切换到其他进程?

  • 对于为单核创建的程序,当以100%运行时,为什么分配每个核的CPU利用率?(例如,80%和20%的双核CPU.在这种情况下,所有核心的利用率总是高达100%.)核心是否通过以某种方式运行每个进程的每个线程来帮助彼此帮助?

multithreading operating-system multicore cpu-architecture multiprocessing

52
推荐指数
4
解决办法
2万
查看次数

什么是Haskell的"火花"

我对"火花"的概念感到困惑

它是Haskell中的一个线程吗?或者是产生新线程的行为?

谢谢大家:

总而言之,spark不是线程,而是更多的计算单元(将它放在C#/ Java术语中的任务).所以这是实现任务并行性的Haskell方式.

parallel-processing multithreading haskell multicore

47
推荐指数
2
解决办法
7650
查看次数

您今天建议使用哪种并行编程模型来利用未来的众核处理器?

如果您今天从头开始编写一个新的应用程序,并希望它可以扩展到明天可以使用的所有内核,您会选择哪种并行编程模型/系统/语言/库?为什么?

我对这些轴的答案特别感兴趣:

  1. 程序员的生产力/易用性(凡人能成功使用它吗?)
  2. 目标应用程序域(它(不)擅长什么问题?)
  3. 并发风格(它是否支持任务,管道,数据并行,消息......?)
  4. 可维护性/面向未来(任何人都会在20年内使用它吗?)
  5. 性能(它如何在什么类型的硬件上扩展?)

我故意对应用程序的性质含糊不清,以期获得对各种应用程序有用的良好通用答案.

parallel-processing multicore

46
推荐指数
6
解决办法
5287
查看次数

如何利用nmake的所有内核?

我刚买了一台新的四核计算机,发现nmake只使用了1个进程.

我曾经使用过具有开关-j4的make来启动4个进程.什么是nmake等价物?

[编辑]根据以下信息,我可以在qmake项目文件中添加一个命令:

QMAKE_CXXFLAGS + =/MP

这对我有效.非常感谢.

c++ eclipse qt nmake multicore

44
推荐指数
5
解决办法
4万
查看次数

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

我很困惑,但以下线程清除了我的疑虑:

多处理,多线程,超线程,多核

但它从硬件角度解决了查询问题.我想知道这些硬件功能如何映射到软件?

显而易见的一点是MultiProcessor(= Mutlicpu)和MultiCore之间没有区别,除了多核中所有cpus都驻留在一个芯片(die)上,而在多处理器中,所有cpus都在它们自己的芯片上并连接在一起.

因此,mutlicore /多处理器系统能够在"同一时间"执行多个进程(firefox,mediaplayer,googletalk)(不同于在单个处理器系统上切换这些进程的上下文)对吗?

如果它是正确的.到目前为止我很清楚.但是当多线程出现时会出现混乱.

  1. MultiThreading"用于"并行处理.对?

  2. cpu中的多线程涉及哪些元素?图?对于我来说,利用并行处理两个独立任务的能力,CPU的要求应该是什么?

  3. 当人们说线程的上下文切换时.我真的不明白.因为如果它的上下文切换线程然后它不是并行处理.线程必须"同时执行".对?

    我的多线程概念是:考虑使用单个cpu的系统.当进程上下文切换到firefox时.(假设)firefox的每个选项卡都是一个线程,所有线程都严格同时执行.不像一个线程已经执行了一段时间,然后又一个线程已经采取直到上下文切换时间到达.

  4. 如果我在无法处理线程的处理器上运行多线程软件会发生什么?我的意思是cpu如何处理这样的软件?

  5. 如果到目前为止一切都很好,现在问题是多少线?它必须受硬件限制,我想?如果硬件只支持2个线程,我在我的进程中启动10个线程.cpu如何处理它?优点缺点?从软件工程的角度来看,在开发将由各种系统中的用户使用的软件时,那么我如何决定是否应该进行多线程处理?如果是这样,有多少线程?

multithreading multicore process

43
推荐指数
3
解决办法
6万
查看次数