Tag: 并行处理

GNU并行根本不工作

我一直在尝试使用GNU并行,但是我从来没有能够得到它的function! 例如,运行(在一个非空的目录!): ls | parallel echo # Outputs single new line ls | parallel echo echo echo # Outputs three new lines. ls | parallel echo {} # /bin/bash: {}: command not found ls | parallel echo '{}' # /bin/bash: {}: command not found ls | parallel 'echo {}' # Outputs: {} ls | parallel […]

为什么Haskell中没有隐含的并行性?

Haskell是function性和纯粹的,所以基本上它具有编译器能够处理隐式并行所需的所有属性。 考虑这个微不足道的例子: f = do a <- Just 1 b <- Just $ Just 2 — ^ The above line does not utilize an `a` variable, so it can be safely — executed in parallel with the preceding line c <- b — ^ The above line references a `b` variable, so it can only […]

共享内存与消息传递如何处理大型数据结构?

在看Go和Erlang的并发方法时,我注意到它们都依赖于消息传递。 这种方法显然减轻了对复杂锁的需求,因为没有共享状态。 但是,考虑许多客户机需要对内存中的单个大型数据结构进行并行只读访问的情况 – 如后缀数组。 我的问题: 将使用共享状态更快,并使用更less的内存比消息传递,因为数据是只读的,只需要在一个单一的位置存在锁通常是不必要的? 在消息传递上下文中如何处理这个问题? 会不会有一个访问数据结构的进程,客户端只需要按顺序请求数据呢? 或者,如果可能的话,数据是否会被分块来创build多个处理大块的进程? 鉴于现代CPU和内存的架构,这两种解决scheme之间是否有很大的区别?即,多核可以共享内存是否可以被并行读取?这意味着没有任何硬件瓶颈,否则这两个解决scheme会大致执行相同的操作?

如何configuration未来的微调线程池?

斯卡拉的期货线程池有多大? 我的Scala应用程序创造了数百万的future {} ,我想知道是否有任何事情可以通过configuration线程池来优化它们。 谢谢。

并行wget在Bash中

我从网站上得到了一堆相对较小的页面,并想知道我是否可以以某种方式在Bash中并行执行此操作。 目前我的代码看起来像这样,但执行需要一段时间(我认为是什么让我放慢了连接的延迟)。 for i in {1..42} do wget "https://www.example.com/page$i.html" done 我听说过使用xargs,但是我不知道这些,手册页非常混乱。 有任何想法吗? 甚至可以同时做到这一点? 有什么办法可以去攻击这个吗?

你如何利用多核?

作为来自于企业Web开发领域的HPC世界中的一员,我总是好奇地看到,“真实世界”中的开发者如何利用并行计算。 现在所有的芯片都是多核的 ,这更加重要,而且芯片上有成千上万个核心,而不是几个核心,就更加相关。 我的问题是: 这是如何影响你的软件路线图的? 我特别感兴趣的是关于多核如何影响不同软件领域的真实故事,所以请说明在您的答案中( 例如服务器端,客户端应用程序,科学计算等)您做了什么样的开发。 您现有的代码如何利用多核机器,以及您面临的挑战是什么? 你使用的是OpenMP , Erlang , Haskell , CUDA , TBB , UPC还是其他的东西? 随着并发水平的不断提高,你打算做什么?你将如何处理数百或数千个内核? 如果你的域不容易受益于并行计算,那么解释为什么它也是有趣的。 最后,我把它定义为一个多核问题,但可以随意谈论其他types的并行计算。 如果您正在移植部分应用程序以使用MapReduce ,或者如果大型群集上的MPI是您的范例,那么您也一定要提及这一点。 更新:如果你的答案是#5,提到你是否认为事情会改变,如果有更多的核心(100,1000等),你可以提供可用的内存带宽(看到带宽越来越小,每个核心)。 你仍然可以使用你的应用程序的其余核心?

如何把一个任务在C#4.0中睡觉(或延迟)?

在.NET 4.5中有Task.Delay 我怎样才能在.NET 4.0中做到这一点?

为什么OpenMP不允许使用!=运算符?

我试图编译下面的代码: #pragma omp parallel shared (j) { #pragma omp for schedule(dynamic) for(i = 0; i != j; i++) { // do something } } 我得到这个错误: 错误:无效的控制谓词 。 我检查了openMP 参考指南 ,它说并行为“only”允许以下操作符之一:<=>> =。 我不明白为什么不让i != j 。 我可以理解,如果这是静态的时间表,因为openMP需要预先计算分配给每个线程的迭代次数。 但我不明白为什么这种限制在这种情况下,例如。 任何线索? 编辑:即使我作出for(i = 0; i != 100; i++) ,虽然我可以把“<”或“<=”。

打破parallel.foreach?

我如何摆脱parallel.for循环? 我有一个非常复杂的声明,如下所示: Parallel.ForEach<ColorIndexHolder>(ColorIndex.AsEnumerable(), new Action<ColorIndexHolder>((ColorIndexHolder Element) => { if (Element.StartIndex <= I && Element.StartIndex + Element.Length >= I) { Found = true; break; } })); 使用并行类,我可以优化这个过程。 然而; 我无法弄清楚如何打破并行循环? break; 语句抛出以下语法错误: 没有封闭的环路可以打破或继续

在Python中的subprocess,多处理和线程之间进行决定?

我想并行化我的Python程序,以便它可以在运行的机器上使用多个处理器。 我的并行化非常简单,因为程序的所有并行“线程”都是独立的,并将其输出写入单独的文件。 我不需要线程来交换信息,但是我知道线程何时完成,因为我的pipe道的某些步骤取决于它们的输出。 可移植性很重要,因为我希望在Mac,Linux和Windows上运行任何Python版本。 鉴于这些限制,哪个是最适合实现这个的Python模块呢? 我试图决定线程,subprocess和多处理,这似乎都提供相关的function。 对此有何想法? 我想要最简单的便携式解决scheme。