Questions tagged «parallelism»

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

15
在许多服务器上通过SSH自动运行命令
.txt文件中有一个IP地址列表,例如: 1.1.1.1 2.2.2.2 3.3.3.3 每个IP地址的后面都有一个服务器,并且每个服务器上的端口22上都运行着一个sshd。known_hosts列表中并不是每个服务器(在我的PC上为Ubuntu 10.04 LTS / bash)。 如何在这些服务器上运行命令并收集输出? 理想情况下,我想在所有服务器上并行运行命令。 我将在所有服务器上使用公钥身份验证。 以下是一些潜在的陷阱: ssh提示我将给定服务器的ssh密钥放入我的known_hosts文件中。 给定的命令可能返回非零退出代码,指示输出可能无效。我需要认识到这一点。 例如,由于网络错误,可能无法建立到给定服务器的连接。 如果命令的运行时间比预期的长,或者服务器在运行命令时关闭,则应该有一个超时时间。 服务器是AIX / ksh(但我认为那并不重要。

3
多核处理器上的top命令
我正在使用飞思卡尔IMX6四核处理器。我想知道该top命令是否列出所有4个核心或单个核心的CPU使用率。我看到应用程序的CPU使用率在4个内核和一个内核中是相同的。我猜测应用程序的CPU使用率将在单个内核上增加,而在4个内核上减少,但是并没有改变。

3
如何在终端中启动多线程grep?
我有一个包含250+个2 GB文件的文件夹。我需要在这些文件中搜索字符串/模式并将结果输出到output文件中。我知道我可以运行以下命令,但是它太慢了! grep mypattern * > output 我想加快速度。作为Java的程序员,我知道多线程可以用来加快进程。我一直在研究如何以grep“多线程模式” 启动并将输出写入单个output文件。
38 grep  parallelism 


15
如何在多个选项卡/外壳中同时运行同一Linux命令?
Linux中是否有任何工具/命令可用于在多个选项卡中同时运行命令?我想运行相同的命令:./myprog argument1 argument2同时在多个shell中检查互斥对象在线程程序中是否工作正常。我希望能够增加该程序的实例数量,以便以后使我的代码承受压力。 我有点在寻找像墙一样的东西。我可以考虑使用tty,但是如果我不得不将其扩展到更多的shell的话,这似乎很痛苦。


6
同时计算多个摘要(md5,sha256)?
在磁盘I / O和可用RAM成为瓶颈(而CPU时间不受限制)的假设下,是否存在可以同时计算多个消息摘要的工具? 我对计算大型文件(以GB为单位)的MD-5和SHA-256摘要(特别是并行)特别感兴趣。我试过了openssl dgst -sha256 -md5,但是它仅使用一种算法来计算哈希。 预期行为的伪代码: for each block: for each algorithm: hash_state[algorithm].update(block) for each algorithm: print algorithm, hash_state[algorithm].final_hash()

4
并行执行四个任务...我该怎么做?
我在目录上有一堆PNG图片。我有一个名为pngout的应用程序,可以运行它来压缩这些图像。该应用程序由我执行的脚本调用。问题在于此脚本一次执行一个,如下所示: FILES=(./*.png) for f in "${FILES[@]}" do echo "Processing $f file..." # take action on each file. $f store current file name ./pngout -s0 $f R${f/\.\//} done 一次只处理一个文件,需要很多时间。运行此应用程序后,我看到CPU仅为10%。因此,我发现可以将这些文件分为4个批次,将每个批次放入一个目录中,并从4个终端窗口,4个进程中触发4个,因此我同时拥有4个脚本实例,同时处理这些图像和工作需要1/4的时间。 第二个问题是我浪费了时间分割图像和批处理并将脚本复制到四个目录,打开4个终端窗口,等等。 如何用一个脚本执行而无需划分任何内容? 我的意思是两件事:首先,我如何从bash脚本中向后台启动进程?(只需添加&到末尾?)第二:在发送第四个任务后如何停止将任务发送到后台,并让脚本等待任务结束?我的意思是说,只是在一个任务结束时将一个新任务发送到后台,同时始终保持4个任务并行?如果我不这样做,则循环会将大量任务发送到后台,并且CPU会阻塞。

8
调用多个bash脚本并并行运行,而不是依次运行
假设我有三个(或更多)的bash脚本:script1.sh,script2.sh,和script3.sh。我想调用所有这三个脚本并并行运行它们。一种方法是仅执行以下命令: nohup bash script1.sh & nohup bash script2.sh & nohup bash script3.sh & (通常,脚本可能需要几个小时或几天才能完成,所以我想使用nohup它们,以便即使我的控制台关闭也可以继续运行。) 但是,有什么方法可以通过一次调用并行执行这三个命令? 我在想类似 nohup bash script{1..3}.sh & 但这似乎是按顺序执行script1.sh,script2.sh而script3.sh不是并行执行。

6
使用并行将唯一的输入文件处理为唯一的输出文件
我遇到了一个shell脚本问题,在该脚本中,我给了一个充满输入文件的目录(每个文件包含许多输入行),我需要单独处理它们,将它们的每个输出重定向到唯一文件(又名file_1.input需要)。在file_1.output中捕获,依此类推)。 Pre-parallel之前,我将遍历目录中的每个文件并执行我的命令,同时使用某种计时器/计数技术以免使处理器不堪重负(假设每个进程的运行时间恒定)。但是,我知道情况并非总是如此,因此使用类似“并行”的解决方案似乎是无需编写自定义代码即可获得Shell脚本多线程的最佳方法。 尽管我已经想到了一些方法来并行处理这些文件(并允许我高效地管理内核),但它们似乎都是很棘手的。我有一个非常简单的用例,因此希望尽可能保持整洁(并且并行示例中的任何内容似乎都不是我的问题。 任何帮助,将不胜感激! 输入目录示例: > ls -l input_files/ total 13355 location1.txt location2.txt location3.txt location4.txt location5.txt 脚本: > cat proces_script.sh #!/bin/sh customScript -c 33 -I -file [inputFile] -a -v 55 > [outputFile] 更新:阅读下面Ole的答案后,我能够将缺少的部分放到我自己的并行实现中。尽管他的回答很好,但以下是我的补充研究和记录: 我没有执行我的整个过程,而是从概念验证命令开始,以证明他在我的环境中的解决方案。请参阅我的两个不同的实现(和注释): find /home/me/input_files -type f -name *.txt | parallel cat /home/me/input_files/{} '>' /home/me/output_files/{.}.out 使用find(不是ls,这可能会导致问题)在我的输入文件目录中找到所有适用的文件,然后将其内容重定向到单独的目录和文件。我上面的问题是阅读和重定向(实际脚本很简单),因此用cat替换脚本是一个很好的概念证明。 parallel cat '>' …

2
如何阻止xargs严重合并多个进程的输出?
我正在使用xargs该选项--max-args=0(或者-P 0)。 但是,这些过程的输出将合并到stdout流中,而无需考虑适当的行分隔。因此,我经常会出现以下行: <start-of-line-1><line-2><end-of-line-1> 当我在整个输出的模式中使用egrepwith时^,xargs这弄乱了我的结果。 是否有某种方法可以强制xargs按顺序写进程输出(只要一个进程的输出是连续的,任何顺序都可以)? 还是其他解决方案? 编辑:有关用例的更多详细信息: 我想从不同的主机下载并解析网页。由于每个页面需要大约一秒钟的加载时间,因此我要并行处理几十个页面。 我的命令具有以下形式: echo -n $IPs | xargs --max-args=1 -I {} --delimiter ' ' --max-procs=0 \ wget -q -O- http://{}/somepage.html | egrep --count '^string' 我使用bash而不是Perl之类的东西,因为主机IP($ IPs变量)和其他一些数据来自包含的bash文件。

4
两者完成后如何运行并行进程并合并输出
我有一个bash shell脚本,其中通过大约5或6个不同的程序将一些数据通过管道传输,然后将最终结果传输到制表符分隔的文件中。 然后,我对一个单独的相似数据集再次执行相同操作,然后输出到第二个文件。 然后将两个文件输入另一个程序进行比较分析。例如简化 Data1 | this | that |theother | grep |sed | awk |whatever > Data1Res.csv Data2 | this | that |theother | grep |sed | awk |whatever > Data2Res.csv AnalysisProg -i Data1res.csv Data2res.csv 我的问题是:如何使step1和step2同时运行(例如,使用&),但在两者均完成时仅启动step3(AnalysisProg)? 谢谢 ps AnalysisProg在流或FIFO上不起作用。

5
如何在远程计算机上并行运行脚本?
我可以将SSH放入具有64个内核的远程计算机中。可以说我需要在这台机器上并行运行640个Shell脚本。我该怎么做呢? 我可以看到将640个脚本分成10个脚本的64个组。然后,我将如何并行运行这些组中的每个组,即在每个可用核心中的每个上一组。 将脚本的形式 ./script_A & ./script_B & ./script_C & ... 哪里script_A对应第一组,script_B第二组等就足够了? 在一个内核上运行的一组内的脚本可以顺序运行,但是我希望这些组在所有内核上并行运行。

2
并行执行管道命令
请考虑以下情形。我有两个程序A和B。程序A输出到字符串的stdout行,而程序B处理来自stdin的行。当然,使用这两个程序的方法是: foo @ bar:〜$ A | 乙 现在,我注意到这只占用了一个核心。因此,我想知道: 程序A和B是否共享相同的计算资源?如果是这样,是否可以同时运行A和B? 我注意到的另一件事是A的运行速度比B快得多,因此我想知道是否可以以某种方式运行更多的B程序并让它们并行处理A输出的行。 也就是说,A将输出其行,并且将有N个程序B实例读取这些行(无论谁先读取它们)来处理它们并在stdout上输出它们。 所以我的最后一个问题是: 有没有一种方法可以将输出传送到多个B进程中的A,而不必考虑竞争条件和其他可能引起的不一致?


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.