标签: parallel-processing

Sort --parallel 不是并行化

我正在尝试使用带有 sort -u 的 egrep 从文件中提取一组唯一的行,然后计算它们。大约 10% 的行(字母表 [ATCG] 中的所有 100 个字符)是重复的。有两个文件,每个文件大约 3 个演出,50% 不相关,所以可能有 3 亿行。

LC_ALL=C  grep -E  <files> |  sort --parallel=24  -u | wc -m
Run Code Online (Sandbox Code Playgroud)

在 LC_ALL=C 和使用 -x 加速 grep 之间,到目前为止最慢的部分是排序。阅读手册页让我找到了 --parallel=n,但实验显示绝对没有任何改进。对 top 的一点挖掘表明,即使使用 --parallel=24,排序过程一次也只能在一个处理器上运行。

我有 4 个具有 6 个内核和 2 个线程/内核的芯片,总共提供 48 个逻辑处理器。请参阅 lscpu,因为 /proc/cpuinfo 会太长。

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                48
On-line CPU(s) list:   0-47
Thread(s) per core:    2
Core(s) per socket:    6
Socket(s):             4
NUMA node(s):          8 …
Run Code Online (Sandbox Code Playgroud)

linux cpu sorting parallel-processing

15
推荐指数
2
解决办法
7142
查看次数

netcat 作为多线程服务器

我使用 netcat 运行一个简单的服务器,如下所示:

while true; do nc -l -p 2468 -e ./my_exe; done

这样,任何人都可以通过端口 2468 连接到我的主机并与“my_exe”对话。
不幸的是,如果其他人想在打开的会话期间连接,它会收到“连接被拒绝”错误,因为 netcat 在下一个“while”循环之前不再处于监听状态。

有没有办法让 netcat 表现得像一个多线程服务器,即总是监听传入的连接?如果没有,是否有一些解决方法?

netcat parallel-processing

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

在允许运行一段时间后终止进程

我想限制grep允许进程命令运行或处于活动状态的时间。

例如。我想执行以下操作:

grep -qsRw -m1 "parameter" /var
Run Code Online (Sandbox Code Playgroud)

但在运行grep命令之前,我想限制grep进程的生存时间,比如不超过 30 秒。

我该怎么做呢?

如果可以,我如何返回或重置为没有时间限制。

linux task-manager parallel-processing

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

平行壳环

我想处理很多文件,因为我这里有一堆内核,所以我想并行处理:

for i in *.myfiles; do do_something $i `derived_params $i` other_params; done
Run Code Online (Sandbox Code Playgroud)

我知道 Makefile解决方案,但我的命令需要 shell globbing 列表中的参数。我发现的是:

> function pwait() {
>     while [ $(jobs -p | wc -l) -ge $1 ]; do
>         sleep 1
>     done
> }
>
Run Code Online (Sandbox Code Playgroud)

要使用它,只需将 & 放在作业和 pwait 调用之后,参数给出并行进程的数量:

> for i in *; do
>     do_something $i &
>     pwait 10
> done
Run Code Online (Sandbox Code Playgroud)

但这并不能很好地工作,例如,我尝试使用 for 循环转换许多文件但给我错误并留下未完成的作业。

我不敢相信这还没有完成,因为关于 zsh 邮件列表的讨论现在已经很老了。那么你知道更好的吗?

bash zsh shell parallel-processing

11
推荐指数
3
解决办法
2万
查看次数

区分CUDA核心(NVIDIA)和流处理器(ATI/AMD)

我认为这个问题在这里得到了回答但我仍然想知道它所指的单位之间是否有什么区别。

例如,GTX 570480 个 CUDA 核心,而 ATI 等效的HD 6970大约有1536 个流处理器。令人困惑的是它们如何具有相同的含义但数量不同但功率相同。

graphics-card cuda parallel-processing

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

今天的台式电脑是否已经超越了 1997 年的 IBM 深蓝?

我想知道我的电脑是否已经超过了深蓝的处理能力,深蓝以战胜人类世界冠军加里卡斯帕罗夫而闻名。深蓝的处理速度与现在的core 2 duo、i3等普通台式机处理器相比如何?

parallel-processing

7
推荐指数
3
解决办法
2万
查看次数

从多个 fifo 并行读取非阻塞

有时我会坐在一堆并行运行的程序的输出先进先出。我想合并这些先进先出。天真的解决方案是:

cat fifo* > output
Run Code Online (Sandbox Code Playgroud)

但这需要第一个fifo在从第二个fifo读取第一个字节之前完成,这会阻塞并行运行的程序。

另一种方式是:

(cat fifo1 & cat fifo2 & ... ) > output
Run Code Online (Sandbox Code Playgroud)

但这可能会混合输出,从而在输出中得到半行。

当从多个fifos读取时,必须有一些合并文件的规则。通常逐行执行它对我来说就足够了,所以我正在寻找可以做的事情:

parallel_non_blocking_cat fifo* > output
Run Code Online (Sandbox Code Playgroud)

它将并行读取所有先进先出,并一次将输出与整行合并。

我可以看到编写该程序并不难。您需要做的就是:

  1. 打开所有先进先出
  2. 对所有这些进行阻塞选择
  3. 从具有数据的 fifo 中非阻塞地读取到该 fifo 的缓冲区中
  4. 如果缓冲区包含完整的行(或记录),则打印出该行
  5. 如果所有fifos都关闭/eof:退出
  6. 转到 2

所以我的问题不是:可以做到吗?

我的问题是:它已经完成了吗,我可以安装一个工具来做到这一点吗?

merge cat parallel-processing fifo

7
推荐指数
1
解决办法
1743
查看次数

并行处理比顺序处理慢?

编辑:对于将来偶然发现这一点的任何人:Imagemagick 使用 MP 库。如果有可用的核心,那么使用它们会更快,但如果您有并行作业,那就没有帮助了。

执行以下操作之一:

  • 串行完成您的工作(使用 Imagemagick 并行模式)
  • 设置 MAGICK_THREAD_LIMIT=1 来调用有问题的 imagemagick 二进制文件。

通过让 Imagemagick 仅使用一个线程,它在我的测试用例中减慢了 20-30%,但这意味着我可以在每个核心上运行一项作业而不会出现问题,从而显着提高性能的净值。

原问题:

在使用 ImageMagick 转换一些图像时,我注意到有些奇怪的效果。使用 xargs 比标准 for 循环慢得多。由于 xargs 仅限于单个进程,因此其行为应类似于 for 循环,因此我对此进行了测试,发现它大致相同。

于是,我们就有了这个演示。

  • 四核(AMD 速龙 X4,2.6GHz)
  • 完全在 tempfs 上工作(总共 16g ram;无交换)
  • 无其他主要负载

结果:

/media/ramdisk/img$ time for f in *.bmp; do echo $f ${f%bmp}png; done | xargs -n 2 -P 1 convert -auto-level

real        0m3.784s
user        0m2.240s
sys         0m0.230s
/media/ramdisk/img$ time for f in *.bmp; do echo $f ${f%bmp}png; done | xargs -n 2 …
Run Code Online (Sandbox Code Playgroud)

linux performance terminal imagemagick parallel-processing

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

多任务处理时的最佳线程数

我知道有人问过类似的问题,但我认为我的情况有点不同。

假设我有一台带有 Linux 操作系统的 8 核和无限内存的计算机。

我有一个名为 Gaussian 的计算软件,它可以利用多线程。因此,我将其线程数设置为 8,以便进行最大速度的单次计算。但是,当我需要同时运行 8 个计算时,我真的无法决定该怎么做。在这种情况下,我应该将每个作业的线程数设置为 1(在 8 个进程中产生的总共 8 个线程)还是保持为 8(在 8 个进程中产生的总共 64 个线程)?真的很重要吗?一个相关的问题是操作系统是否会自动为每个线程执行不同内核的内核停放?

编辑:我知道基准测试是最好的了解方式。问题是,电脑是我大学的,所以他们一直很忙。换句话说,它的工作量对我来说以一种无法控制的方式变化,因为其他人也在使用这些计算机进行计算,因此无法进行实验。此外,该软件非常昂贵(1500 美元左右)并且每台计算机都获得许可,因此我不能简单地在我的个人计算机上运行基准测试...

multi-core multi-threaded parallel-processing

5
推荐指数
2
解决办法
4885
查看次数

删除 slurm sacct 命令双重条目:“extern”

当前运行的作业显示两个条目,其中之一具有后缀.extern。已完成(或失败)的作业还有第三个条目:.batch。有没有办法从输出中删除(或不显示这些)sacct?这些条目是什么?

在此输入图像描述

cluster parallel-processing slurm

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