现在,我有一个 C# 程序,它定期执行以下步骤:
Parallel.ForEach(), do work 完成每项任务然而,其中一些任务运行时间非常长。这会延迟其他待处理任务的处理,因为我们只在程序开始时查找新任务。
现在,我知道修改正在迭代的集合是不可能的(对吗?),但是 C# 框架中是否有一些等效的功能Parallel允许我将工作添加到列表中,同时处理列表中的项目?
c# parallel-processing task-parallel-library parallel.foreach
我有一个 fortran90 代码,(到目前为止)大部分时间都花在 I/O 上,因为需要读取非常大的数据文件(至少 1GB 及以上)。需要写入包含计算结果的较小但仍然很大的数据文件。相比之下,一些快速傅里叶变换和其他计算很快就能完成。我已经并行化 (OpenMP) 其中一些计算,但考虑到上述 I/O 问题,总体性能增益很小。
我目前的策略是立即读取整个文件:
open(unit=10, file="data", status="old")
do i=1,verylargenumber
read(10,*) var1(i), var2(i), var3(i)
end do
close(10)
Run Code Online (Sandbox Code Playgroud)
然后执行操作var1等。我的问题是是否有一个合适的策略使用(最好是)OpenMP 来加速读取过程,特别是考虑到数据文件(如果有任何区别)都很大。
我可以在 Lustre 文件系统上运行这些计算,原则上这为并行 I/O 提供了优势,尽管常规文件系统的通用解决方案将受到赞赏。
我的直觉是这个问题没有解决办法,但我想确认一下。
from joblib import Parallel, delayed
def func(arg1, arg2, arg3):
# do some processing and return result
return result
def func2():
arg1 = 'value1'
arg2 = 'value2'
elems = ['a','b','c','d','e']
resultsList = Parallel(n_jobs=4)(delayed(func)(arg1, arg2, elem) for elem in elems)
Run Code Online (Sandbox Code Playgroud)
在 django 视图中调用func2会引发以下警告:
“多处理支持的并行循环不能嵌套在线程下方,设置 n_jobs=1”
有一个相关的问题,但这里的解决方法是将线程名称重命名为“MainThread”,这看起来很奇怪,并且在我的情况下不起作用。
是否可以使用 joblib 在 django 视图中并行化 for 循环?有一个更好的方法吗?
我正在从 Maven 转换一个非常大的构建。我已将许多 BOM 转换为依赖项列表。我还使用 Spring 依赖管理插件。
问题是依赖管理需要很长时间。请注意,即使我使用--offline. 我还刚刚读到使用allprojects {}andsubprojects{}会导致并行性失败。不过,显然我需要提供类似功能的东西。这次迁移的首要目标是提高性能,但到目前为止我认为没有任何改善。我需要知道:
如何在配置阶段设置依赖项列表,仅执行一次并确定其范围以便信息可供所有项目使用?有一个插件的例子可以做到这一点吗?当然,它必须与并行性一起工作。
我需要对 Spring 依赖管理插件做些什么来提高性能吗?
现在,构建时间大约为 25 分钟(离线运行),而且我使用的是一个还算不错的 8 核盒子。这是在守护进程运行的情况下进行的,没有单元或集成测试。:-/
我正在寻找并行洗牌数组。我发现,执行类似于双调排序但随机 (50/50) 重新排序的算法会导致均匀分布,但前提是数组是 2 的幂。我考虑过 Yates Fisher Shuffle,但我可以不知道如何并行化它以避免 O(N) 计算。
有什么建议吗?
谢谢!
algorithm parallel-processing performance multithreading shuffle
在OpenMPI代码库中,每个模块都有多个变体。调用时,您可以从模块化组件架构 (MCA)中选择您想要使用的mpirun模块。选项包括...
您可以像这样指定 MCA 组件的选择:
mpirun --mca btl self,openib --mca pml ob1 -np $nProcs ./myprogram
我的问题:
-v到我的mpirun命令中,但它没有打印任何额外的内容。)简而言之,我试图使用 Snow 和 adply 在日期上并行化我的整个脚本,但不断出现以下错误。
\n\nError in unserialize(socklist[[n]]) : error reading from connection\nIn addition: Warning messages:\n1: <anonymous>: ... may be used in an incorrect context: \xe2\x80\x98.fun(piece, ...)\xe2\x80\x99\n\n2: <anonymous>: ... may be used in an incorrect context: \xe2\x80\x98.fun(piece, ...)\xe2\x80\x99\nRun Code Online (Sandbox Code Playgroud)\n\n我通过以下方式设置了并行化过程:
\n\nCores = detectCores(all.tests = FALSE, logical = TRUE)\ncl = makeCluster(Cores, type="SOCK")\nregisterDoSNOW(cl)\nclusterExport(cl, c("Var1","Var2","Var3","Var4"), envir = environment())\n\n\nexposureDaily <- adply(.data = dateSeries,.margins = 1,.fun = MainCalcFunction,\n .expand = TRUE, Var1, Var2, Var3, \n Var4,.parallel = TRUE)\n\nstopCluster(cl)\nRun Code Online (Sandbox Code Playgroud)\n\n哪里dateSeries可能看起来像
通过搜索和询问,我发现了许多可以用来利用服务器所有核心的软件包,以及许多可以进行随机森林的软件包。
我对此很陌生,并且在并行随机森林训练的所有方法中迷失了方向。您能否就使用和/或避免它们中的每一个或它们的某些特定组合(以及有或没有caret?)的理由提出一些建议,并已证明?
并行化包:
doParallel,
doSNOW,
doSMP(停产了?),
doMC
(那又怎么样mclapply?)
随机森林包:
[ caret+以下一些内容]
rf,
parRF,
randomForest,
ranger,
Rborist,
parallelRandomForest(导致我的 R Studio 会话崩溃...)
谢谢
我读到可以在没有并发的情况下实现并行性。它是否正确?
假设您有两个任务 A 和 B,并且每个任务需要两个步骤才能完成:A1、A2、B1、B2。另外,进程是由线程组成的。
以下是我对并发和并行的看法:
顺序
Time ----->
Thread 1: A1 A2 B1 B2
Run Code Online (Sandbox Code Playgroud)
同时
Time ----->
Thread 1: A1 A2
Thread 2: B1 B2
Run Code Online (Sandbox Code Playgroud)
并行(和并发)
Time ----->
Thread 1: A1 A2
Thread 2: B1 B2
Run Code Online (Sandbox Code Playgroud)
如果这是正确的,那么没有并发性就不可能有并行性。
此外,如果此模型正确,您可能会得到以下结果:
顺序(和并发)
Time ----->
Thread 1: A1 B1
Thread 2: A2 B2
Run Code Online (Sandbox Code Playgroud)
这可能不是一个好主意,但在概念上似乎是可能的。
parallel-processing concurrency multithreading process single-threaded
假设我使用并行进行foo.sh调用bar.sh:
# foo.sh
#! /bin/bash
parallel -N 3 bar.sh ::: $(seq 10)
Run Code Online (Sandbox Code Playgroud)
我的bar.sh工作方式是这样的:如果设置了环境变量(例如DEBUG=1),那么它将输出大量调试信息。
理想情况下,我想简单地执行我的foo.sh这样:
$ DEBUG=1 foo.sh
Run Code Online (Sandbox Code Playgroud)
通常,foo.sh有价值$DEBUG并且bar.sh能够看到它。但现在我使用 GNU parallel 来调用bar.sh,这是一个本地程序, mybar.sh不再有DEBUG值集。
我读到,--env只有在我设置了远程执行的情况下才有效-S,从我的尝试来看,它似乎对我不起作用。
有没有办法让我的并行化bar.sh简单地“继承”我的环境设置foo.sh?我真的不想在bar.sh并行调用时详细说明每个环境变量及其值。
TIA