标签: parallel-processing

在Windows XP上的R中进行多核处理 - 通过doMC和foreach

我发布这个问题是为了询问如何在Windows XP机器上优化R中多个处理器的使用.

目前我正在创建4个脚本(每个脚本用例如for(i in 1:100)和(i in 101:200)等),我同时在4个不同的R会话中运行.这似乎使用了所有可用的cpu.

但是,我希望这样做更有效率.一种解决方案可能是使用"doMC"和"foreach"软件包,但这在Windows机器上的R中是不可能的.

例如

library("foreach")
library("strucchange")
library("doMC") # would this be possible on a windows machine?
registerDoMC(2)  # for a computer with two cores (processors)
## Nile data with one breakpoint: the annual flows drop in 1898
## because the first Ashwan dam was built
data("Nile")
plot(Nile)

## F statistics indicate one breakpoint
fs.nile <- Fstats(Nile ~ 1)
plot(fs.nile)
breakpoints(fs.nile)     # , hpc = "foreach" --> It would be great to test this.
lines(breakpoints(fs.nile))
Run Code Online (Sandbox Code Playgroud)

任何解决方案或建议?

windows parallel-processing multicore r

8
推荐指数
1
解决办法
4470
查看次数

R包nlt/adlift/ebayesthresh使用大量内存; 如何提高性能?

这一切都始于一个我需要严格使用的R包('nlt'),它有另外两个(非常大的)包依赖('adlift','ebayesthresh').我需要它来分析大约4000点的数据样本.

算法创建了许多"隐藏"向量,所以即使乍一看你认为你有足够的内存来加载数据样本并处理它,事情也会变得很快.在这一点上,我应该提到我有4GB内存的Ubuntu x64和Windows x64.

出于纯粹的好奇心和受虐狂,我猜,我决定尝试一下Amazon EC2实例.最后我想其中几个,我在停止高内存超大型实例 17.1 GB内存,6.5的ECU,再次的时候,我跑出来的内存和Ubuntu杀了我的运行功能.

我最终使用了split-apply-combine方法与'snowall','foreach''doSMP'.我调整了数据,处理了每个chunck并合并了结果.谢天谢地lapply和sfLapply存在.在我的笔记本电脑上在7分钟内分析样品.

我想我应该感到高兴,但是7分钟仍然很多,我不想再次向亚马逊EC2跳枪,除非没有其他的东西可以缩短运行时间.

我做了一些研究,R的'bigmemory''ff'软件包似乎允许相当大的加速,特别是如果我使用了文件备份数据.

所述"NLT"包只需要矢量作为输入,和"bigmemory"例如有其特殊的数据类型,则big.matrix.即使我神奇地能够将big.matrix提供给' nlt '包,这仍然会留下许多新的向量分配,其中标准的R函数被硬编码到包中并且依赖于它.

我一直在考虑面向方面的编程/猴子修补,我设法找到了这种东西的唯一R包,'r-connect'.

现在,正如我所看到的,我有两个主要选择:

  • 手动重写nlt包及其所有函数依赖关系来自其他2个包而不是标准的R list(),matrix()等,使用'bigmemory'函数,这是一个噩梦.
  • 'bigmemory'函数 替换标准R列表,矩阵等

我跳鲨鱼了吗?任何人都可以提出另一种解决方案或分享类似的经

memory parallel-processing optimization performance r

8
推荐指数
1
解决办法
557
查看次数

并行make文件中的关键部分

我正在尝试并行化一个旧的Makefile.

实际上,我需要确保在编译过程开始之前调用某些生成器脚本不是并行的.

始终在编译之前调用生成器.有没有办法在makefile中建立一个有点关键的部分?

Makefile很乱,我不想在这里发帖.

c parallel-processing makefile

8
推荐指数
1
解决办法
4734
查看次数

R:是否有可能将2000万行CSV中的读取并行/加速到R?

一旦CSV文件是通过加载read.csv,这是相当琐碎的使用multicore,segue等玩弄于CSV数据.然而,阅读它是时候下沉了.

意识到最好使用mySQL等.

假设使用运行R2.13的AWS 8xl集群计算实例

规格如下:

Cluster Compute Eight Extra Large specifications:
88 EC2 Compute Units (Eight-core 2 x Intel Xeon)
60.5 GB of memory
3370 GB of instance storage
64-bit platform
I/O Performance: Very High (10 Gigabit Ethernet)
Run Code Online (Sandbox Code Playgroud)

任何想法/想法都非常感激.

csv parallel-processing r bigdata

8
推荐指数
2
解决办法
2684
查看次数

.NET 4 Parallel.ForEach和PLINQ:他们可以压倒线程池并杀死应用程序性能吗?

我在代码中使用Parallel.ForEach和PLINQ越多,我得到的面孔和代码审查就越多.所以我想知道我有什么理由不在每个LINQ语句中使用极端的PLINQ吗?运行时是否能够足够聪明地开始产生如此多的线程(或者从线程池中消耗这么多线程),应用程序性能实际上会降低而不是改进?同样的问题适用于并行库.

我确实理解与线程安全和使用多线程的开销相关的含义.我也意识到并不是一切都有利于并行化.所有我想知道我是否应该停止捍卫我的方法,只是放弃这两个好东西,因为我的同行认为我最好自己做线程控制而不是依靠.NET设施?

更新:请假设硬件足以满足使用多线程的先决条件.

.net c# linq parallel-processing plinq

8
推荐指数
1
解决办法
2051
查看次数

单线程/核心的并行性如何可能?

现代编程语言为其用户提供并行和并发机制作为一等公民.我理解并行算法是如何编程的,可以很好地想象多核CPU上的两个线程如何并行运行.

但是,大多数这些平台还支持在单个线程上运行并行进程.

  • 这些过程是否真的并行运行?
  • 如何在汇编级别上在单个线程上同时执行两个不同的例程?

language-agnostic parallel-processing computer-science

8
推荐指数
1
解决办法
2104
查看次数

运行异步代码的Windows服务不等待工作完成

简单来说

我有一个Windows服务,并行执行多个作业作为异步任务.然而,当调用OnStop时,似乎这些都立即被终止而不是被允许以更加亲切的方式停止.

更详细

每个工作代表一次工作的迭代,因此完成工作后,工作需要再次运行.

为实现这一目标,我正在编写一个概念验证Windows服务:

  • 将每个作业作为等待的异步TPL任务运行(这些都是I/O绑定任务)
  • 每个作业在循环内迭代运行
  • 每个作业的循环并行运行

当我运行服务时,我看到所有内容都按预期执行.但是,当我停止服务时,似乎一切都停止了.

好的 - 那这是怎么回事?

在服务中,我有一个取消令牌和一个TaskCompletion Source:

private static CancellationTokenSource _cancelSource = new CancellationTokenSource();
private TaskCompletionSource<bool> _jobCompletion = new TaskCompletionSource<bool>();
private Task<bool> AllJobsCompleted { get { return _finalItems.Task; } }
Run Code Online (Sandbox Code Playgroud)

这个想法是,当每个Job优雅地停止时,Task AllJobsCompleted将被标记为已完成.

OnStart只是开始运行这些作业:

protected override async void OnStart(string[] args)
{
    _cancelSource = new CancellationTokenSource();  
    var jobsToRun = GetJobsToRun(); // details of jobs not relevant 
    Task.Run(() => this.RunJobs(jobsToRun, _cancelSource.Token).ConfigureAwait(false), _cancelSource.Token);
}
Run Code Online (Sandbox Code Playgroud)

Task RunJobs将以并行循环运行每个作业:

private async Task RunModules(IEnumerable<Jobs> jobs, CancellationToken cancellationToken)
{
    var parallelOptions = …
Run Code Online (Sandbox Code Playgroud)

c# parallel-processing windows-services task-parallel-library async-await

8
推荐指数
1
解决办法
7885
查看次数

仅使用异步任务和任务有什么区别?

例如,这段代码之间的区别

public Task<IList<NewsSentimentIndexes>> GetNewsSentimentIndexes(DateTime @from, DateTime to = new DateTime(), string grouping = "1h")
    {
        var result = _conf.BasePath
            .AppendPathSegment("news-sentiment-indexes")
            .SetQueryParams(new
            {
                from = from.ToString("s"),
                to = to.ToString("s"),
                grouping
            });

        return result
           .GetStringAsync()
           .ContinueWith(Desereialize<IList<NewsSentimentIndexes>>);
    }
Run Code Online (Sandbox Code Playgroud)

然后

 public async Task<IList<NewsSentimentIndexes>> GetNewsSentimentIndexes(DateTime @from, DateTime to = new DateTime(), string grouping = "1h")
    {
        var result = _conf.BasePath
            .AppendPathSegment("news-sentiment-indexes")
            .SetQueryParams(new
            {
                from = from.ToString("s"),
                to = to.ToString("s"),
                grouping
            });

        var newsStr =  await result.GetStringAsync();
        return JsonConvert.DeserializeObject<NewsSentimentIndexes>(newsStr);
    }
Run Code Online (Sandbox Code Playgroud)

哪一个正确或更快?只是调用这个方法需要等待或只是一个任务?

c# parallel-processing asynchronous task task-parallel-library

8
推荐指数
2
解决办法
155
查看次数

插入符号中R的并行处理

在插入符号文档中给出了允许并行处理以下代码的工作原理

library(doMC) 
registerDoMC(cores = 5) 
## All subsequent models are then run in parallel
Run Code Online (Sandbox Code Playgroud)

但在最新的R版本(3.4)中,doMC包不可用.任何人都可以告诉我任何其他方式进行并行处理?

更新:罗马建议的工作原理.DoMC不适用于Windows.对于Windows使用doParallel包cls = makeCluster(no of cores to use)然后registerDoParallel(cls).还要确保在trControl中将allowParallel设置为TRUE.

parallel-processing r

8
推荐指数
2
解决办法
6950
查看次数

并行运行N皇后问题的球拍代码

我使用以下简单代码来解决n-queens问题:

#lang racket

; following returns true if queens are on diagonals:  
(define (check-diagonals bd) 
  (for/or ((r1 (length bd)))
    (for/or ((r2 (range (add1 r1) (length bd))))
      (= (abs (- r1 r2))
         (abs(- (list-ref bd r1)
                (list-ref bd r2)))))))

; set board size: 
(define N 8)
; start searching: 
(for ((brd (in-permutations (range N))))
  (when (not (check-diagonals brd))
    (displayln brd)))
Run Code Online (Sandbox Code Playgroud)

它工作正常但需要很长时间in-permutations才能获得更大的N值.它使用函数来获得排列流.我还看到它仅使用25%的CPU功率(正在使用4个核中的1个).如何修改此代码,以便它使用来自in-permutations流的排列并行测试并使用所有4个cpu内核?谢谢你的帮助.

编辑:check-diagonals评论中建议的修改功能.旧代码是:

(define (check-diagonals bd) 
  (define res #f)
  (for ((r1 (length bd))
        #:break res)
    (for …
Run Code Online (Sandbox Code Playgroud)

parallel-processing concurrency scheme n-queens racket

8
推荐指数
1
解决办法
787
查看次数