Questions tagged «parallelism»

并行执行任务,以利用多个处理器

1
如何获得xargs“并行处理器”的索引?
假设我有两个资源,分别名为0和1,只能以独占方式访问。 有什么方法可以恢复xargs启动的“并行处理器”的“索引”,以便将其用作免费的互斥服务?例如,考虑以下并行计算: $ echo {1..8} | xargs -d " " -P 2 -I {} echo "consuming task {}" consuming task 1 consuming task 2 consuming task 3 consuming task 4 consuming task 5 consuming task 6 consuming task 7 consuming task 8 我的问题是,是否存在一个神奇的词,例如index,输出看起来像 $ echo {1..8} | xargs -d " …

9
将stdin传播到并行进程
我有一个处理标准输入上的文件列表的任务。程序的启动时间很长,每个文件花费的时间差异很大。我想产生大量的这些进程,然后将工作分派给不忙的人。有几种不同的命令行工具几乎可以满足我的要求,我将其缩小为两个几乎可以使用的选项: find . -type f | split -n r/24 -u --filter="myjob" find . -type f | parallel --pipe -u -l 1 myjob 问题是split进行纯循环,因此其中一个进程落后于并停留在后面,从而延迟了整个操作的完成;而parallel想要每N行或每字节输入生成一个进程,而我花了太多时间在启动开销上。 是否有这样的东西可以重用进程和馈送线到任何具有无阻塞标准输入的进程?

4
从并行产生的其他三个流中创建一个输出流
我有三种格式不同的数据。对于每种数据类型,都有一个Python脚本将其转换为统一的格式。 该Python脚本运行缓慢且受CPU限制(连接到多核计算机上的单个核),因此我想运行该脚本的三个实例(每种数据类型一个),并将其输出组合到中sort。基本上,等效于: { ./handle_1.py; ./handle_2.py; ./handle_3.py } | sort -n 但是,三个脚本并行运行。 我发现了一个问题,其中使用GNU split在处理该流的脚本的n个实例之间循环一些stdout流。 在拆分手册页中: -n, --number=CHUNKS generate CHUNKS output files. See below CHUNKS may be: N split into N files based on size of input K/N output Kth of N to stdout l/N split into N files without splitting lines …

1
是否可以在Shell脚本中同时运行两个命令?
我知道可以在命令行上&在后台运行命令。但是我想知道是否可以在脚本中做到这一点。 我有一个像这样的脚本: date_stamp=$(date +"%Y-%m-%d" --date='yesterday') shopt -s extglob cd /my/working/directory/ sh ./stay/get_it_ios.sh sh ./stay/get_it_mix.sh cd stay zip ../stay_$date_stamp.zip ./*201* rm ./stay/!(*py|*sh) 我想运行sh ./stay/get_it_ios.sh和sh ./stay/get_it_mix.sh合力得到更为准确的数据。是否可以在Shell脚本的范围内执行此操作?

2
如何并行化dd?
我目前在使用dd稀疏文件作为输入(if)和文件作为输出(of)时遇到麻烦conv=sparse。dd似乎仅使用一个CPU Intel(R) Core(TM) i7-3632QM CPU @ 2.20GHz内核(4个内核+ 4个Intel Hyperthreads)(1个内核的100%),因此我一直在想是否可以并行化dd。我去过 寻找到info dd和man dd而且似乎内置功能corutils 8.23版本 sgp_dd从sg3-utils程序包中检查(不了解它是否适​​合我的需求),但是似乎无法处理稀疏文件 dcfldd 似乎没有并行化功能 据我所知 与在多个线程中内部处理程序部分的增强版本/分支(避免上下文更改导致I / O性能下降)相比,它更可取 在parallel本地运行GNU的解决方案优先于 定制(可能未经测试)的代码片段 如何避免CPU成为I / O密集型操作的瓶颈?我想在具有Linux 3.13的Ubuntu 14.04上运行命令,并在支持稀疏文件的任何文件系统上使用它来处理稀疏文件磁盘映像(至少该解决方案不应绑定到一个特定的文件系统)。 背景:我正在尝试在zfs(zfsonlinux 0.6.4不稳定版本,可能有故障以及导致CPU瓶颈的原因(最终漏洞搜索缓慢))上创建11TB稀疏文件(包含大约2TB数据)的副本。对于如何并行化dd的问题,这应该不会有任何改变(以一种非常通用的方式)。
10 linux  dd  parallelism 

1
仅使用一个cpu内核
我需要为并发程序运行性能测试,而我的要求是只能在一个 CPU内核上运行它。(我不想使用协作线程-我希望始终进行上下文切换)。 所以我有两个问题: 最佳解决方案-如何仅为我的程序签名和保留一个CPU内核(以强制OS不要使用该CPU内核)。我想不可能,但也许我错了... 如何设置Linux(Fedora 24)仅使用一个CPU内核?

3
正确的xargs并行用法
我正在使用xargspython脚本来处理大约3000万个小文件。我希望可以xargs用来并行化该过程。我正在使用的命令是: find ./data -name "*.json" -print0 | xargs -0 -I{} -P 40 python Convert.py {} > log.txt 基本上,Convert.py将读取一个小的json文件(4kb),进行一些处理并写入另一个4kb文件。我在具有40个CPU内核的服务器上运行。并且此服务器上没有其他正在运行的CPU密集进程。 通过监视htop(顺便说一句,还有其他监视CPU性能的好方法吗?),我发现它的-P 40速度不如预期的快。有时,所有内核将冻结并在3-4秒内几乎减少为零,然后恢复到60-70%。然后,我尝试将并行进程的数量减少到-P 20-30,但是仍然不是很快。理想的行为应该是线性加速。关于并行使用xargs有什么建议吗?

1
bash脚本中的多线程/分叉
我写了一个bash脚本,格式如下: #!/bin/bash start=$(date +%s) inFile="input.txt" outFile="output.csv" rm -f $inFile $outFile while read line do -- Block of Commands done < "$inFile" end=$(date +%s) runtime=$((end-start)) echo "Program has finished execution in $runtime seconds." 该while循环将从读取$inFile,上线执行一些活动和转储结果$outFile。 由于$inFile3500+行长,因此脚本需要6-7个小时才能完全执行。为了减少此时间,我计划在此脚本中使用多线程或分叉。如果我创建8个子进程,$inFile则将同时处理其中的8行。 如何才能做到这一点?

2
并行化for循环
我想并行化for以下代码的循环。这个怎么做? #!/bin/bash N=$1 n=$2 for (( i=1; i<=$N; i++ )); do min=100000000000000 //set min to some garbage value for (( j=1; j<=$n; j++ )); do val=$(/path/to/a.out) val2=`echo $val | bc` if (( $val2 < $min )); then min=$val2; fi done arr=("${arr[@]}" "$min") done



4
虚拟只写文件系统,用于将文件存储在归档中
我有一个令人尴尬的并行过程,该过程会创建大量几乎(但不是完全)相同的文件。有没有一种方法可以“即时”归档文件,以使数据不会消耗比所需更多的空间? 该进程本身接受命令行参数,并将创建的每个文件的名称打印到stdout。我正在调用它,parallel --gnu它负责分配输入(来自另一个进程)并收集输出: arg_generating_process | parallel --gnu my_process | magic_otf_compressor 管道第一部分的简单示例bash: for ((f = 0; $f < 100000; f++)); do touch $f; echo $f; done 怎么能magic_otf_compressor是什么样子?应该将每个输入行都视为文件名,然后将每个文件复制到压缩.tar存档中(已处理所有文件的存档!),然后将其删除。(实际上,打印每个已处理文件的名称就足够了,另一个| parallel --gnu rm可以负责删除文件。) 有没有这样的工具?我不考虑单独压缩每个文件,这会浪费太多空间。我调查了archivemount(将文件系统保留在内存中->不可能,我的文件太大和太多)和avfs(无法使其与FUSE一起使用)。我错过了什么? 我距离自己入侵这样的工具仅一步之遥,但必须有人做过…… 编辑:从本质上讲,我认为我正在寻找一个stdin前端libtar(而不是从命令行tar读取参数的命令行前端)。

2
可怜的GNU并行在ksh中实现?
我想使用GNU parallel的功能,在该功能中它可以执行命令和它并行输入的列表,并在完成后将其吐出,但是,我不想在所有服务器上并行安装GNU。 还是并行版本的xargs? GNU Parallel的功能是否有ksh实现?在这种情况下,不必像GNU Parallel那样按顺序完成,只要可以通过管道或存储所有输出即可。我也想避免使用临时文件。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.