我试图S_g为每个i 做矩阵乘法,每个g用i做.这是我到目前为止所尝试的内容,但需要花费大量时间才能完成.是否有更高计算效率的方法来完成同样的事情?
从这个公式中要注意的主要事项是S_g在矩阵乘法设置中使用X_gamma和Y [,i].X_gamma依赖于值g.因此,对于每个i,我必须执行g矩阵乘法.
这是逻辑:
我的主要问题是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) 我刚刚测试了一个带有和没有平行后端的弹性网.电话是:
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%,对吧?
因为我对这是否是预期的结果感兴趣,这与这个问题密切相关但不完全相同,但我会很好地关闭这个并将我的问题合并到那个(或标记为重复并指向这个,因为这有更多的细节)如果这是共识是什么:
我有一个代码如下(简化代码):
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上遇到错误,而且在向量调整大小期间,内存似乎已损坏.
有什么问题,我该如何解决?
如何确保只有一个线程可以随时将新项目插入到矢量中?
现在我正在研究并行计算和算法我对术语concurrent execution和术语有点困惑simultaneous execution.
这些条款有什么区别?我们何时必须使用concurrent,何时必须simultaneous在并行计算中使用?
我试图了解如何使用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的所有输出,只是为了学习如何?
我正在尝试在具有多个参数的多个远程服务器上运行脚本。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个进程:
当查看累积的输出时,看起来实际上是这样的:
-正在并行运行。完成后,其他两个将并行运行。
如何使所有四个同时并行运行?
谢谢,
我有一些在巨大的桌子上运行的大量查询.这些查询似乎是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查询文本:
系统参数:
编辑:
详细的解释计划 - 没有并行性:
优化器相关的系统参数:
进一步编辑: 我们已经联系Oracle了解为什么EXPLAIN PLAN需要超过2个小时.我们正试图运行各种解释计划.
我有几种不同的方法可以将整个目录上传到我的应用程序中的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
我正在阅读"Clojure的喜悦",以及关于paralellization,功能和部分的部分pvalues,pmap并pcalls简要介绍了如何使用每个部分.下面是给出的例子pvalues和pcalls:
(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
我有一个进程在随机位置上运行大量任务,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)