标签: parallel-processing

并行多个文件的 bash 脚本

我读过有关该主题的类似问题,但没有一个可以帮助我解决以下问题:

我有一个 bash 脚本,如下所示:

#!/bin/bash

for filename  in /home/user/Desktop/emak/*.fa; do
    mkdir ${filename%.*}
    cd ${filename%.*}
    mkdir emak
    cd ..
done
Run Code Online (Sandbox Code Playgroud)

该脚本基本上执行以下操作:

  • 遍历目录中的所有文件
  • 使用每个文件的名称创建一个新目录
  • 进入新文件并创建一个名为“emak”的新文件

真正的任务执行比创建“emak”文件更昂贵的计算......

我有大约数千个文件需要迭代。由于每次迭代都独立于前一次迭代,因此我希望将其拆分到不同的处理器(我有 24 个核心)中,这样我就可以同时处理多个文件。

我读过一些关于并行运行的文章(使用:GNU),但我没有看到在这种情况下应用它的明确方法。

谢谢

parallel-processing bash

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

R中SQLite数据库的并行查询

我有一个大型数据库(~100Gb),我需要从中提取每个条目,对其执行一些比较,然后存储这些比较的结果。我尝试在单个 R 会话中运行并行查询,但没有成功。我可以同时运行多个 R 会话,但我正在寻找更好的方法。这是我尝试的:

library(RSQLite)
library(data.table)
library(foreach)
library(doMC)



#---------
# SETUP
#---------


#connect to db
db <- dbConnect(SQLite(), dbname="genes_drug_combos.sqlite")


#---------
# QUERY
#---------
# 856086 combos = 1309 * 109 * 6

registerDoMC(8)

#I would run 6 seperate R sessions (one for each i)
res_list <- foreach(i=1:6) %dopar% {

  a <- i*109-108
  b <- i*109

  pb  <- txtProgressBar(min=a, max=b, style=3)
  res <- list()

  for (j in a:b) {

    #get preds for drug combos
    statement   <- paste("SELECT * from combo_tstats …
Run Code Online (Sandbox Code Playgroud)

parallel-processing foreach domc rsqlite

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

将嵌套 for 循环转换为 R 中的并行循环

下面您可以在 R 中找到一段代码,我希望将其转换为使用多个 CPU 作为并行进程运行。我尝试使用foreachpackage,但没有走得太远。考虑到我有 3 级嵌套循环,我找不到一个很好的例子如何让它工作。我们将非常感谢您的帮助。下面的代码示例 - 我做了一个简单的函数,因此它可以作为示例:

celnum <- c(10,20,30)
t2 <- c(1,2,3)
allrepeat <- 10

samplefunction <- function(celnum,t2){

        x <- rnorm(100,celnum,t2)
        y = sample(x, 1)
        z = sample(x,1)

        result = y+z


        result 
}
Run Code Online (Sandbox Code Playgroud)

常规方式获取结果:

z_grid <- matrix(, nrow = length(celnum), ncol = length(t2))

repetitions <- matrix(, nrow = allrepeat, ncol = 1)



set.seed=20
for(i in 1:length(celnum)){
        for (j in 1:length(t2)){
                for (k in 1:allrepeat) {
                        results <- samplefunction(celnum[i],t2[j]) 
                                repetitions[k] <- results
                                z_grid[i,j] <- mean(repetitions,na.rm=TRUE) 
                } …
Run Code Online (Sandbox Code Playgroud)

parallel-processing foreach r parallel-foreach

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

Cython 并行 prange - 线程局部性?

我正在使用 prange 迭代这样的列表:

from cython.parallel import  prange, threadid

cdef int tid
cdef CythonElement tEl
cdef int a, b, c

# elList: python list of CythonElement instances is passed via function call
for n in prange(nElements, schedule='dynamic', nogil=True):
    with gil:
        tEl = elList[n]
        tid =  threadid()
        a = tEl.a
        b = tEl.b
        c = tEl.c 

        print("thread {:} elnumber {:}".format(tid, tEl.elNumber))

   #nothing is done here

    with gil:
        print("thread {:} elnumber {:}".format(tid, tEl.elNumber))

    # some other computations based on a, b and c …
Run Code Online (Sandbox Code Playgroud)

parallel-processing multithreading cython

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

如何禁用 OpenCV 中的并行性?

我已经使用 Intel IPP 构建了 OpenCV,因此我认为只要有可能就会使用它(例如矩阵乘法)。

我想通过与串行版本进行比较来测试并行应用程序的可扩展性。为了做到这一点,当我这样做时:

omp_set_num_threads(1);
cv::setNumThreads(1);
Run Code Online (Sandbox Code Playgroud)

但是,通过监视 CPU 使用情况,我发现仍然使用多个 CPU。这是为什么?如何仅使用一个CPU强制执行程序?

c++ parallel-processing opencv openmp intel-ipp

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

Golang:为什么 goroutine 不并行运行?

我有下面的示例,其中两个 goroutine 应该并行运行。但是如果你检查输出,第二个 goroutine 仅在第一个 goroutine 完成后运行。所以,它是顺序的。

\n\n

添加 2 个处理器:runtime.GOMAXPROCS(2)也没有帮助。我在 8 核 Mac pro 上运行,这绝对不是硬件问题。\n所以我的问题 - Golang 真的是并行的吗?如何使下面的示例并行运行?

\n\n

输出:

\n\n
Thread 1\nThread 1\n  \xe2\x80\xa6\xe2\x80\xa6\xe2\x80\xa6\xe2\x80\xa6....\nThread 1\nThread 1\nThread 2\nThread 2\n  \xe2\x80\xa6\xe2\x80\xa6\xe2\x80\xa6\xe2\x80\xa6....\nThread 2\nThread 2\n
Run Code Online (Sandbox Code Playgroud)\n\n

去代码:

\n\n
package main\n\nimport (\n    "runtime"\n    "time"\n)\n\nfunc main() {\n\n    runtime.GOMAXPROCS(2)\n\n    go func() {\n        for i := 0; i < 100; i++ {\n            println("Thread 1")\n            //time.Sleep(time.Millisecond * 10)\n        }\n    }()\n\n    go func() {\n        for i := 0; i < 100; i++ {\n            println("Thread 2")\n            //time.Sleep(time.Millisecond …
Run Code Online (Sandbox Code Playgroud)

parallel-processing multithreading go

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

使用 R 中的 apply 系列并行化用户定义的函数

我有一个计算时间太长的脚本,我正在尝试并行化其执行。

该脚本基本上循环遍历数据帧的每一行并执行一些计算,如下所示:

my.df = data.frame(id=1:9,value=11:19)

sumPrevious <- function(df,df.id){
    sum(df[df$id<=df.id,"value"])
}

for(i in 1:nrow(my.df)){
    print(sumPrevious(my.df,my.df[i,"id"]))
}
Run Code Online (Sandbox Code Playgroud)

我开始学习在 R 中并行化代码,这就是为什么我首先想了解如何使用类似 apply 的函数(例如 sapply、lapply、mapply)来做到这一点。

我尝试了多种方法,但到目前为止没有任何效果:

mapply(sumPrevious,my.df,my.df$id) # Error in df$id : $ operator is invalid for atomic vectors
Run Code Online (Sandbox Code Playgroud)

parallel-processing r lapply sapply mapply

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

如何使用 SLURM 处理文件列表

我是 SLURM 新手。assembled_reads/*.sorted.bam我想并行处理文件列表。然而,在下面的代码中,只有一个进程被一遍又一遍地使用。

#!/bin/bash
#
#SBATCH --job-name=****
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=24
#SBATCH --partition=short
#SBATCH --time=12:00:00
#SBATCH --array=1-100
#SBATCH --mem-per-cpu=16000
#SBATCH --mail-type=FAIL
#SBATCH --mail-user=****@***.edu
srun hostname

for FILE in assembled_reads/*.sorted.bam; do
  echo ${FILE}
  OUTFILE=$(basename ${FILE} .sorted.bam).raw.snps.indels.g.vcf
  PLDY=$(awk -F "," '$1=="$FILE"{print $4}' metadata.csv)
  PLDYNUM=$( [[$PLDY = "haploid" ]] && echo "1" || echo "2")

  srun java -Djava.io.tmpdir="tmp" -jar GenomeAnalysisTK.jar \
  -R scaffs_HAPSgracilaria92_50REF.fasta \
  -T HaplotypeCaller \
  -I ${${SLURM_ARRAY_TASK_ID}} \
  --emitRefConfidence GVCF \
  -ploidy $PLDYNUM \
  -nt 1 \
  -nct 24 …
Run Code Online (Sandbox Code Playgroud)

parallel-processing bash slurm

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

如何在bash中获取多个并行后台进程的退出状态

在 Bash 中,我想并行多次调用一个命令,同时捕获所有进程的退出代码。

我知道如何启动并等待它们,但是等待只会给我最后一个进程退出的退出代码。我还需要生命周期较短的进程的退出代码。

不幸的是我没有 bash 4.3,所以wait -n不是一个选项,gnu 并行也不是#3004811中建议的

#16032001几乎问了同样的问题,但也没有提供解决方案。

我目前能想到的唯一方法是编写一个帮助程序脚本,将退出代码存储在文件中,但这听起来不像是一个干净的解决方案。

parallel-processing bash exit

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

将R apply语句转换为lapply以进行并行处理

我有以下 R“应用”语句:

for(i in 1:NROW(dataframe_stuff_that_needs_lookup_from_simulation))
{
    matrix_of_sums[,i]<-
    apply(simulation_results[,colnames(simulation_results) %in% 
    dataframe_stuff_that_needs_lookup_from_simulation[i,]],1,sum)
}
Run Code Online (Sandbox Code Playgroud)

所以,我有以下数据结构:

simulation_results:具有列名称的矩阵,用于标识 2000 个模拟(行)的每个可能的所需模拟查找数据。

dataframe_stuff_that_needs_lookup_from_simulation:除其他项外,还包含其值与simulation_results数据结构中的列名称匹配的字段。

matrix_of_sums:运行函数时,一个 2000 行 x 250,000 列(模拟数量 x 正在模拟的项目)结构用于保存模拟结果。

因此,apply 函数正在查找 250,000 个数据集中每行的数据帧列值,计算总和,并将其存储在matrix_of_sums 数据结构中。

不幸的是,这个处理需要很长时间。我已经探索了使用 rowsums 作为替代方案,它已将处理时间减少了一半,但我想尝试多核处理,看看这是否会进一步减少处理时间。有人可以帮我将上面的代码从“apply”转换为“lapply”吗?

谢谢!

parallel-processing r lapply

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