Tag: 并行处理

纯函数在C#中

我知道C#正在获得大量的并行编程支持,但是AFAIK仍然没有用于副作用validation的构造,对吧? 我认为现在已经布置了C#更复杂了。 但有没有计划让这个? 或者,F#是唯一一个构build了副作用validation的.NET语言?

F#在科学计算中的performance

我很好奇F#性能如何与C ++性能相比较? 我问了一个关于Java的类似问题,我得到的印象是Java不适合大数量的编程。 我已经读过F#应该是更具扩展性和更高性能的,但是这个现实世界的性能与C ++相比呢? 有关当前实施的具体问题是: 它如何做浮点? 它是否允许vector指令? 它对优化编译器有多友好? 记忆足迹有多大? 它是否允许对内存局部性进行细粒度的控制? 它有分布式内存处理器的能力,例如Cray? 在涉及大量处理的计算科学中,它有什么特点可能会引起人们的兴趣? 是否有实际的科学计算实现使用它? 谢谢

locking声明有多昂贵?

我一直在尝试multithreading和并行处理,我需要一个计数器对处理速度进行一些基本的计数和统计分析。 为了避免同时使用我的类的问题我已经在我的类的私有variables上使用了一个locking语句: private object mutex = new object(); public void Count(int amount) { lock(mutex) { done += amount; } } 但我想知道…locking一个variables有多昂贵? 对性能有什么负面影响?

在node.js中协调并行执行

node.js的事件驱动编程模型使协调程序stream程变得有些棘手。 简单的顺序执行变成了嵌套的callback,这很容易(尽pipe有点复杂的写下来)。 但是并行执行呢? 假设你有三个可以并行运行的任务A,B,C,当他们完成时,你想把结果发送给任务D. 用叉/join模式,这将是 叉子 叉B 叉C joinA,B,C,运行D 如何在node.js中写入? 有没有最佳做法或食谱? 我是否每次都必须手动推出解决scheme ,还是有一些图书馆有帮​​手?

如何阐明asynchronous和并行编程之间的区别?

许多平台都提高了asynchronous和并行性,作为提高响应速度的手段。 我通常会理解这种差异,但经常发现很难在我自己的脑海中以及在其他人身上expression。 我是一个workaday程序员,并经常使用asynchronous和callback。 平行主义感觉异乎寻常。 但我觉得他们很容易混淆,特别是在语言devise层面。 会喜欢清楚地描述他们如何相关(或不相关),以及哪些程序类别最适用。

在Repa数组上的并行mapM

在我最近的Gibbs sampling 工作中 ,我一直在使用RVar ,在我看来,它提供了一个非常理想的随机数生成接口。 可悲的是,由于无法在地图中使用monadic动作,我一直无法使用Repa。 虽然明显的单子映射一般是不可能并行化的,但在我看来, RVar可能至less是一个monad的例子,在这个例子中,效果可以被安全地并行化(至less在原则上,我并不熟悉内部工作原理RVar )。 也就是说,我想写下如下的东西, drawClass :: Sample -> RVar Class drawClass = … drawClasses :: Array U DIM1 Sample -> RVar (Array U DIM1 Class) drawClasses samples = A.mapM drawClass samples A.mapM看起来像这样, mapM :: ParallelMonad m => (a -> mb) -> Array r sh a -> m (Array r […]

如何等待多个线程来完成?

什么是等待所有线程进程完成的方法? 例如,假设我有: public class DoSomethingInAThread implements Runnable{ public static void main(String[] args) { for (int n=0; n<1000; n++) { Thread t = new Thread(new DoSomethingInAThread()); t.start(); } // wait for all threads' run() methods to complete before continuing } public void run() { // do something here } } 如何修改这个,使main()方法在注释中暂停,直到所有线程的run()方法退出? 谢谢!

MapReducesortingalgorithm如何工作?

Terasort基准testing中用来展示MapReducefunction的主要示例之一。 我无法理解在MapReduce环境中使用的sortingalgorithm的基础知识。 对我来说,sorting只涉及确定一个元素与所有其他元素的相对位置。 所以sorting包括比较“一切”和“一切”。 你的平均sortingalgorithm(快速,泡沫,…)只是在一个聪明的方式做到这一点。 在我看来,将数据集分成许多部分意味着您可以对单个部分进行sorting,然后您仍然必须将这些部分整合到“完整”完全sorting的数据集中。 鉴于分布在数千个系统上的TB级数据集,我预计这将是一项艰巨的任务。 那么这是如何做到的? 这个MapReducesortingalgorithm是如何工作的? 感谢帮助我理解。

如何并行化一个简单的Python循环?

这可能是一个微不足道的问题,但我如何并行Python中的以下循环? # setup output lists output1 = list() output2 = list() output3 = list() for j in range(0, 10): # calc individual parameter value parameter = j * offset # call the calculation out1, out2, out3 = calc_stuff(parameter = parameter) # put results into correct output list output1.append(out1) output2.append(out2) output3.append(out3) 我知道如何在Python中启动单线程,但是我不知道如何“收集”结果。 多个进程也可以,无论这种情况最简单。 我目前使用的是Linux,但代码应该在Windows和Mac上运行。 并行化这些代码最简单的方法是什么?

尽pipe只有22Mb的内存使用量,Haskell线程堆溢出了吗?

我正在尝试并行化射线追踪器。 这意味着我有一个很长的小计算列表。 香草程序运行在67.98秒的特定场景和13 MB的总内存使用率和99.2%的生产率。 在我的第一次尝试中,我使用了缓冲区大小为50的并行策略parBuffer 。我select了parBuffer因为它只是像消耗火花一样parList列表,并且不会像parList那样parList列表的脊柱,由于名单很长,所以很多记忆。 使用-N2 ,运行时间为100.46秒,总内存使用量为14 MB,生产力为97.8%。 火花信息是: SPARKS: 480000 (476469 converted, 0 overflowed, 0 dud, 161 GC'd, 3370 fizzled) 大部分失败的火花表明火花粒度太小,所以接下来我尝试使用策略parListChunk ,它将列表拆分成块,并为每个块创build一个火花。 我用0.25 * imageWidth的块大小得到了最好的结果。 该程序运行93.43秒,总内存使用量达到236 MB,生产力达到97.3%。 火花信息是: SPARKS: 2400 (2400 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled) 。 我相信更大的内存使用是因为parListChunk强制列表的脊椎。 然后,我试图写我自己的策略,懒惰地将列表分成块,然后将块传递给parBuffer并连接结果。 concat $ withStrategy (parBuffer 40 rdeepseq) (chunksOf 100 (map colorPixel […]