标签: parallel-processing

并行 - 将项目添加到正在迭代的集合中,或等效的?

现在,我有一个 C# 程序,它定期执行以下步骤:

  • 从数据库中获取当前任务列表
  • 使用Parallel.ForEach(), do work 完成每项任务

然而,其中一些任务运行时间非常长。这会延迟其他待处理任务的处理,因为我们只在程序开始时查找新任务。

现在,我知道修改正在迭代的集合是不可能的(对吗?),但是 C# 框架中是否有一些等效的功能Parallel允许我将工作添加到列表中,同时处理列表中的项目?

c# parallel-processing task-parallel-library parallel.foreach

5
推荐指数
1
解决办法
1898
查看次数

Fortran 中的并行读取能否提高性能?

我有一个 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 提供了优势,尽管常规文件系统的通用解决方案将受到赞赏。

我的直觉是这个问题没有解决办法,但我想确认一下。

parallel-processing fortran openmp fortran90 lustre

5
推荐指数
1
解决办法
913
查看次数

Django 并行 for 循环 joblib 警告:“多处理支持的并行循环不能嵌套在线程下方,设置 n_jobs=1”

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 循环?有一个更好的方法吗?

python django parallel-processing multithreading joblib

5
推荐指数
0
解决办法
1572
查看次数

如何加快 Gradle 依赖项解析速度或总体提高性能?

我正在从 Maven 转换一个非常大的构建。我已将许多 BOM 转换为依赖项列表。我还使用 Spring 依赖管理插件。

问题是依赖管理需要很长时间。请注意,即使我使用--offline. 我还刚刚读到使用allprojects {}andsubprojects{}会导致并行性失败。不过,显然我需要提供类似功能的东西。这次迁移的首要目标是提高性能,但到目前为止我认为没有任何改善。我需要知道:

如何在配置阶段设置依赖项列表,仅执行一次并确定其范围以便信息可供所有项目使用?有一个插件的例子可以做到这一点吗?当然,它必须与并行性一起工作。

我需要对 Spring 依赖管理插件做些什么来提高性能吗?

现在,构建时间大约为 25 分钟(离线运行),而且我使用的是一个还算不错的 8 核盒子。这是在守护进程运行的情况下进行的,没有单元或集成测试。:-/

parallel-processing configuration groovy gradle

5
推荐指数
1
解决办法
1467
查看次数

并行计算 - Shuffle

我正在寻找并行洗牌数组。我发现,执行类似于双调排序但随机 (50/50) 重新排序的算法会导致均匀分布,但前提是数组是 2 的幂。我考虑过 Yates Fisher Shuffle,但我可以不知道如何并行化它以避免 O(N) 计算。

有什么建议吗?

谢谢!

algorithm parallel-processing performance multithreading shuffle

5
推荐指数
1
解决办法
2000
查看次数

如何检查 OpenMPI 中使用了哪些 MCA 参数?

OpenMPI代码库中,每个模块都有多个变体。调用时,您可以从模块化组件架构 (MCA)中选择您想要使用的mpirun模块。选项包括...

  • 集体算法 (coll):basic、tuned、inter、cuda、ml、sm、...
  • 字节传输层 (btl):openib、tcp、...
  • 点对点管理层 (pml):cm、ob1、...
  • 匹配传输层 (mtl):mxm、psm、...

您可以像这样指定 MCA 组件的选择:

mpirun --mca btl self,openib --mca pml ob1 -np $nProcs ./myprogram


我的问题:

  1. 如果我未指定某些 MCA 参数,默认值是什么?
  2. 是否有详细模式可以打印正在使用的所有 MCA 组件?(我尝试添加-v到我的mpirun命令中,但它没有打印任何额外的内容。)

parallel-processing hpc distributed-computing mpi openmpi

5
推荐指数
1
解决办法
3514
查看次数

R 并行化错误反序列化(socklisk[[n]])

简而言之,我试图使用 Snow 和 adply 在日期上并行化我的整个脚本,但不断出现以下错误。

\n\n
Error 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\n
Run Code Online (Sandbox Code Playgroud)\n\n

我通过以下方式设置了并行化过程:

\n\n
Cores = 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)\n
Run Code Online (Sandbox Code Playgroud)\n\n

哪里dateSeries可能看起来像

\n\n …

parallel-processing r

5
推荐指数
1
解决办法
5661
查看次数

并行化随机森林

通过搜索和询问,我发现了许多可以用来利用服务器所有核心的软件包,以及许多可以进行随机森林的软件包。

我对此很陌生,并且在并行随机森林训练的所有方法中迷失了方向。您能否就使用和/或避免它们中的每一个或它们的某些特定组合(以及有或没有caret?)的理由提出一些建议,并已证明?

并行化包:

doParallel,

doSNOW,

doSMP(停产了?),

doMC

(那又怎么样mclapply?)


随机森林包:

[ caret+以下一些内容]

rf,

parRF,

randomForest,

ranger,

Rborist,

parallelRandomForest(导致我的 R Studio 会话崩溃...)

谢谢

parallel-processing r random-forest

5
推荐指数
1
解决办法
6556
查看次数

没有并发怎么可能有并行呢?

我读到可以在没有并发的情况下实现并行性。它是否正确?

假设您有两个任务 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

5
推荐指数
1
解决办法
2742
查看次数

执行本地脚本时GNU并行继承环境变量

假设我使用并行进行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

linux parallel-processing bash gnu-parallel

5
推荐指数
1
解决办法
2520
查看次数