Tag: 并行处理

在OnlyOnFaulted Continuation中等待任务会导致AggregateException

我有一些简单的代码作为repro: var taskTest = Task.Factory.StartNew(() => { System.Threading.Thread.Sleep(5000); }).ContinueWith((Task t) => { Console.WriteLine("ERR"); }, TaskContinuationOptions.OnlyOnFaulted); try { Task.WaitAll(taskTest); } catch (AggregateException ex) { foreach (var e in ex.InnerExceptions) Console.WriteLine(e.Message + Environment.NewLine + e.StackTrace); } 但是,我得到一个意外的TaskCanceledException被抛出在try catch块(它在AggregateException InnerExceptions对象)。 “任务被取消了”。 为什么我得到这个exception? 任务的延续永远不会触发,没有任何exception产生,但我仍然在等待时得到聚合exception…. 我希望有人可以解释这对我有意义:)

进程,线程,绿色线程,原线程,纤维,协程:有什么区别?

我正在阅读并发。 我的脑海中有一些混淆相似的定义。 即: stream程 主题 “绿色线索” Protothreads 纤维 协同程序 Go语言中的“Goroutines” 我的印象是,区别在于:(1)是真正的并行还是多路复用; (2)是否在CPU,操作系统或程序中进行pipe理; 和(3..5)其他一些我无法识别的东西。 对于这些并行性方法之间的差异,有没有一个简洁而明确的指导?

如何并行运行unit testing(MSTest)?

我正在寻找并行运行testing套件的方法。 我知道.testrunconfig设置。 这使您可以复用 CPU的数量。 我想并行运行1000个testing。 这是有道理的,因为我正在testing一个Web服务,所以在testing中花费的时间有90%正在等待服务响应。 任何想法如何把这个closures? testing是为VS写的,但我打开在VS之外运行它们。 稍后编辑 :Visual Studiotesting团队已经在VS 2015 Update 1中添加了这个。请参阅Mark Sowul的答案。

R中doMC和doParallel的区别

R中关于foreach函数的doParallel和doMC什么区别? doParallel支持windows,类似unix,而doMC只支持unix。 换句话说,为什么doParallel不能直接取代doMC ? 谢谢。 更新: doParallelbuild立在parallel基础上,这本质上是multicore和snow的合并,并自动为您的系统使用适当的工具。 因此,我们可以使用doParallel来支持多系统。 换句话说,我们可以用doParallel来代替doMC 。 ref: http : //michaeljkoontz.weebly.com/uploads/1/9/9/4/19940979/parallel.pdf 顺便说一句, registerDoParallel(ncores=3)和 cl <- makeCluster(3) registerDoParallel(cl) 看来registerDoParallel(ncores=3)可以自动停止集群,而第二个不会自动停止,需要stopCluster(cl) 。 ref: http : //cran.r-project.org/web/packages/doParallel/vignettes/gettingstartedParallel.pdf

使用AsParallel()/ Parellel.ForEach()指导方针?

寻求一些利用AsParallel()或者Parallel.ForEach()来加快速度的build议。 见下面的方法(这个例子简化/混蛋)。 它需要一个像“美国,法国,亚太地区”这样的名单,其中“亚太地区”可能是另外50个“美国,法国,日本,美国,英国等等”的别名。 方法应采取“美国,法国,亚太地区”,并将其转换为“美国”,“法国”,以及所有“亚太地区”国家的名单。 private IEnumerable<string> Countries (string[] countriesAndAliases) { var countries = new List<string>(); foreach (var countryOrAlias in countriesAndAliases) { if (IsCountryNotAlias(countryOrAlias)) { countries.Add(countryOrAlias); } else { foreach (var aliasCountry in AliasCountryLists[countryOrAlias]) { countries.Add(aliasCountry); } } } return countries.Distinct(); } 是不是把这个并行化就像把它改变成下面那样简单? 使用AsParallel()比这更多的细微差别? 我应该使用Parallel.ForEach()而不是foreach ? 并行化foreach循环时应使用什么经验法则? private IEnumerable<string> Countries (string[] countriesAndAliases) { var countries = […]

如何使用%dopar%打印

我有一个foreach循环,使用%dopar%和doSNOW作为后端。 我怎样才能循环打印出每个迭代? 我下面的代码是我目前使用的,但它不打印任何东西。 foreach(ntree=rep(25,2),.combine=combine,.packages='randomForest', .inorder=FALSE) %dopar% { print("RANDOM FOREST") randomForest(classForm,data=data,na.action=na.action,do.trace=do.trace,ntree=ntree,mtry=mtry) }

我可以使用`cabal install`来使用多个核心吗?

有谁知道如何获得cabal install利用并行性? 我正在编译GHC,虽然我不知道GHC本身是否可以并行编译,但是cabal install可以同时运行多个编译,不是吗? 至less对于独立的,独立的软件包? 有谁知道这是可能的,以及如何做到这一点?

OpenMP和Python

我有OpenMP共享内存机器(C和FORTRAN)的编码经验,以执行像matrix加法,乘法等简单的任务(只是看看它是如何与LAPACK竞争)。 我知道OpenMP足以执行简单的任务,而无需查看文档。 最近,我转移到Python为我的项目,我没有任何超过绝对的基本知识Python的经验。 我的问题是: 在Python中使用OpenMP 最简单的方法是什么? 最简单的,我的意思是在程序员方面花费最less的时间(即使它是以增加系统时间为代价的)。 我使用OpenMP的原因是因为串行代码可以转换为一个有效的并行代码,并且散布着几个!$OMP 。 实现粗略平行所需的时间非常less。 有没有什么办法在Python中复制这个function? 从浏览SO,我可以find: C扩展 StackLess Python 还有更多吗? 哪个最符合我的问题?

是否可以限制Parallel.ForEach的内核?

我在我的代码中使用了一个Parallel.ForEach 。 我所有的8个核心都达到了100%。 这对于在服务器上运行的其他应用程序是不利的。 是否有可能限制执行喜欢4核心?

可以/我应该在GPU上运行此代码?

我正在处理一个统计应用程序,其中包含大约10 – 30万个浮点数值。 有几种方法在嵌套循环中对数组执行不同但独立的计算,例如: Dictionary<float, int> noOfNumbers = new Dictionary<float, int>(); for (float x = 0f; x < 100f; x += 0.0001f) { int noOfOccurrences = 0; foreach (float y in largeFloatingPointArray) { if (x == y) { noOfOccurrences++; } } noOfNumbers.Add(x, noOfOccurrences); } 目前的应用程序是用C#编写的,运行在Intel CPU上,需要几个小时才能完成。 我没有GPU编程概念和API的知识,所以我的问题是: 使用GPU来加速这样的计算是否可能(并且是否有意义)? 如果是的话:有谁知道任何教程或得到任何示例代码(编程语言无所谓)? 任何帮助将不胜感激。