标签: parallel-processing

重复执行矩阵乘法的有效方法

我试图S_g为每个i 做矩阵乘法,每个g用i做.这是我到目前为止所尝试的内容,但需要花费大量时间才能完成.是否有更高计算效率的方法来完成同样的事情?

从这个公式中要注意的主要事项是S_g在矩阵乘法设置中使用X_gamma和Y [,i].X_gamma依赖于值g.因此,对于每个i,我必须执行g矩阵乘法.

这是逻辑:

  • 对于每个i,需要对每个g进行计算.然后,对于每个g,选择X_gamma作为X的子集.以下是如何确定X_gamma.让我们看g = 3.当我们看'set [3,]'时,我们得到的列B是唯一一个有值!= 0.因此,我选择X中的B列,那就是X_gamma.

我的主要问题是IN REALITY g = 13,000,和i = 700.

 library(foreach)
 library(doParallel) ## parallel backend for the foreach function
 registerDoParallel()

 T = 3
 c = 100

 X <- zoo(data.frame(A = c(0.1, 0.2, 0.3), B = c(0.4, 0.5, 0.6), C = c(0.7,0.8,0.9)),
     order.by = seq(from = as.Date("2013-01-01"), length.out = 3, by = "month")) 

 Y <- zoo(data.frame(Stock1 = rnorm(3,0,0.5), Stock2 = rnorm(3,0,0.5), Stock3 = …
Run Code Online (Sandbox Code Playgroud)

parallel-processing performance foreach loops r

4
推荐指数
1
解决办法
946
查看次数

使用R的doParallel包的多核计算是否使用更多内存?

我刚刚测试了一个带有和没有平行后端的弹性网.电话是:

enetGrid <- data.frame(.lambda=0,.fraction=c(.005))
ctrl <- trainControl( method="repeatedcv", repeats=5 )
enetTune <- train( x, y, method="enet", tuneGrid=enetGrid, trControl=ctrl, preProc=NULL )
Run Code Online (Sandbox Code Playgroud)

我在没有注册并行后端的情况下运行它(并%dopar%train调用完成时收到警告消息),然后再注册一个注册7个内核(8个).第一次运行需要529秒,第二次运行需要313次.但是第一次运行最多需要3.3GB内存(由Sun集群系统报告),第二次采用22.9GB.我有30GB的RAM,这个任务只会变得更加复杂.

问题:1)这是并行计算的一般属性吗?我以为他们共享记忆.... 2)还有一种解决方法,同时还在使用enet内部train?如果doParallel是问题,是否还有其他我可以使用的架构 - 不%dopar%,对吧?

因为我对这是否是预期的结果感兴趣,这与这个问题密切相关但不完全相同,但我会很好地关闭这个并将我的问题合并到那个(或标记为重复并指向这个,因为这有更多的细节)如果这是共识是什么:

新的doParallel封装的内存消耗极高

parallel-processing r machine-learning

4
推荐指数
1
解决办法
3328
查看次数

std :: vector push_back在并行for循环中使用时失败

我有一个代码如下(简化代码):

for( int i = 0; i < input.rows; i++ )
{
    if(IsGoodMatch(input[I])
    { 
        Newvalues newValues;
        newValues.x1=input.x1;
        newValues.x2=input.x1*2;
        output.push_back( newValues);
    }
} 
Run Code Online (Sandbox Code Playgroud)

这段代码运行良好,但是如果我想使用omp parallel for使其并行,我在output.push_back上遇到错误,而且在向量调整大小期间,内存似乎已损坏.

有什么问题,我该如何解决?

如何确保只有一个线程可以随时将新项目插入到矢量中?

c++ parallel-processing vector openmp thread-safety

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

并发和同步之间的区别?

现在我正在研究并行计算和算法我对术语concurrent execution和术语有点困惑simultaneous execution.

这些条款有什么区别?我们何时必须使用concurrent,何时必须simultaneous在并行计算中使用?

parallel-processing operating-system

4
推荐指数
1
解决办法
6579
查看次数

R中的并行k均值

我试图了解如何使用R并行化我的一些代码.因此,在下面的示例中,我想使用k-means使用2,3,4,5,6中心对数据进行聚类,同时使用20次迭代.这是代码:

library(parallel)
library(BLR)

data(wheat)

parallel.function <- function(i) {
    kmeans( X[1:100,100], centers=?? , nstart=i )
}

out <- mclapply( c(5, 5, 5, 5), FUN=parallel.function )
Run Code Online (Sandbox Code Playgroud)

我们如何同时并行迭代和中心?如何跟踪输出,假设我想保留所有,迭代和中心的k-means的所有输出,只是为了学习如何?

parallel-processing r parallel-foreach

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

使用--onall时,GNU并行不会在远程服务器上并行运行

我正在尝试在具有多个参数的多个远程服务器上运行脚本。GNU并行命令是:

parallel --onall -S ${RH32},{RH64} /shared/loc/script.sh ::: param1 param2
Run Code Online (Sandbox Code Playgroud)

script.sh:

host=`uname -n`
param=$1
logfile=/shared/loc/log-$host-$param
for i in `seq 1 5`; do
    touch ${logfile}_$i
    sleep 2
done
Run Code Online (Sandbox Code Playgroud)

我正在尝试并行运行4个进程:

  • rh32使用param1运行script.sh
  • rh32使用param2运行script.sh
  • rh64使用param1运行script.sh
  • rh64使用param2运行script.sh

当查看累积的输出时,看起来实际上是这样的:

  • rh32使用param1运行script.sh
  • rh64使用param1运行script.sh

-正在并行运行。完成后,其他两个将并行运行。

如何使所有四个同时并行运行?

谢谢,

parallel-processing gnu-parallel

4
推荐指数
1
解决办法
415
查看次数

为什么我不能强迫Oracle 11g为单个SQL查询消耗更多的CPU

我有一些在巨大的桌子上运行的大量查询.这些查询似乎是CPU瓶颈,并运行了几个小时.据我所知,Oracle有很多新功能,11g,第2版内部并列化查询的执行.但是无论我在查询中添加什么样的提示,我似乎都不能在数据库框上使用多个CPU.我有一个非常值得尊敬的Solaris机器,有8个CPU,但是每次运行这个查询时,我最终只是将一个CPU推到100%,然后在那里坐了几个小时.

我尝试过的提示是:

SELECT /*+ PARALLEL */ ...
SELECT /*+ PARALLEL(5) */ ...
SELECT /*+ PARALLEL(10) */ ...
Run Code Online (Sandbox Code Playgroud)

在查看盒子上的整体CPU消耗时,这些似乎都不起作用.似乎总是将一个CPU固定在100%.不幸的是,即使解释计划似乎也需要永远运行.我会尝试用不同的提示获得不同的解释计划,看看是否有帮助.有些查询是否可能是不可并行的,即使它们的运行时间是在几小时内?!!?此查询中的主表有3.35亿行.

SQL查询文本:

http://pastie.org/8634380

系统参数:

http://pastie.org/8634383

编辑:

详细的解释计划 - 没有并行性:

http://pastebin.com/HkZgbPpf

优化器相关的系统参数:

http://pastie.org/8639841

进一步编辑: 我们已经联系Oracle了解为什么EXPLAIN PLAN需要超过2个小时.我们正试图运行各种解释计划.

sql oracle parallel-processing

4
推荐指数
1
解决办法
4773
查看次数

并行化IO绑定(网络)ForEach循环

我有几种不同的方法可以将整个目录上传到我的应用程序中的Amazon S3,具体取决于所选的选项.目前,其中一个选项将并行执行多个目录的上载.我不确定这是不是一个好主意,因为在某些情况下它会加快上传速度,而其他情况则会减慢它的速度.加速似乎是在有一堆小目录时,但如果批处理中有大型目录,则速度会变慢.我正在使用下面看到的并行ForEach循环并使用AWS API的TransferUtility.UploadDirectoryAsync()方法:

Parallel.ForEach(dirs,myParallelOptions, 
                   async dir => { await MyUploadMethodAsync(dir) };
Run Code Online (Sandbox Code Playgroud)

TransferUtility.UploadDirectoryAsync()方法在哪里MyUploadMethodAsync().这些TransferUtility上传方法都执行单个文件的并行上传(如果大小足够大),所以执行目录的并行上传可能是过度的.显然,我们仍然限制可用的带宽量,因此这可能是一种浪费,我应该只使用该UploadDirectoryAsync()方法的常规foreach循环.任何人都可以提供一些见解,如果这是并行化的坏情况?

c# parallel-processing amazon-web-services task-parallel-library parallel.foreach

4
推荐指数
1
解决办法
1199
查看次数

Clojure:pvalues与pcalls

我正在阅读"Clojure的喜悦",以及关于paralellization,功能和部分的部分pvalues,pmappcalls简要介绍了如何使用每个部分.下面是给出的例子pvaluespcalls:

(defn sleeper [s thing] (Thread/sleep (* 1000 s)) thing)

(pvalues
  (sleeper 2 :1st)
  (sleeper 3 :2nd)
  (keyword "3rd"))

(pcalls
  #(sleeper 2 :1st)
  #(sleeper 3 :2nd)
  #(keyword "3rd"))
Run Code Online (Sandbox Code Playgroud)

我理解两者之间的技术差异 - pvalues需要计算可变数量的"值",而pcalls并行地调用"任意数量的不带参数的函数".在这两种情况下,都会返回结果的延迟序列.

我的问题基本上是,你何时会使用一个与另一个?似乎唯一的语义差异是你#在每个参数之前粘贴一个pcalls,将它变成一个匿名函数.因此,纯粹从保存击键和使用更简单的代码的角度来看,使用它会不会更有意义pvalues?- 如果是这样,为什么甚至有pcalls功能?

我得到了pcalls,您可以替换一个引用函数的符号,但如果您想使用这样的函数pvalues,您可以将函数放在括号中,以便调用它.

我只是有点困惑,为什么Clojure有这两个相似的功能.有什么可以用一个而不是另一个吗?一些人为的例子可能会有所帮助.

parallel-processing multithreading clojure concurrent-programming

4
推荐指数
1
解决办法
475
查看次数

如何对同一阵列中的随机位置执行多线程操作?

我有一个进程在随机位置上运行大量任务,Array并希望通过使用多线程来加快速度.

它本质上做的是随机化"阵列"中的位置,检查其近似环境的值,并在满足一些特定条件时改变随机位置值.

是否有可能运行像

Parallel.For(0, n, s => { });
Run Code Online (Sandbox Code Playgroud)

循环而不是下面显示的while代码块来优化这个函数,一个代码块怎么样呢?

我一直在考虑为所选元素使用一些"忙"属性,但这实际上使得问题可能需要更加复杂.

public void doStuffTothisArray(ref int[,,] Array, ref IGenerator randomGenerator, int loops)
{
    int cc = 0;
    int sw = 0;
    do
    {
        if (doStuffOnRandomPositions(ref Array, ref randomGenerator))
            sw++; //if stuff was made counter

        if ((cc % (loops / 10)) == 0)
            Console.Write("{0} % \t", (cc / (loops / 10)) * 10); //some loading info

        cc++; //count iterations
    } while (cc < loops);
    Console.WriteLine("Stuff altered in {0} iterations: {1}", …
Run Code Online (Sandbox Code Playgroud)

c# arrays random parallel-processing multithreading

4
推荐指数
1
解决办法
128
查看次数