【发布时间】:2016-06-29 15:12:35
【问题描述】:
我正在尝试在 Linux shell 上实现真正的并行性,但我无法实现。
我有两个程序。 Allones,只打印 '1' 字符和 allzeros,只打印 0 个字符。
当我执行“./allones & ./allzeros &”时,我得到大量的 '0' 和大量的 '1',它们混合成大块(例如 1111...111000...0000111. ..111000...000")。我的处理器有 8 个内核。
但是,当我在多核 FPGA(没有操作系统)上执行我自己的程序时,(如果我在不同的内核上分发程序)我会得到类似“011000101000011010...”的信息。
如何在 Linux 上运行它以获得类似于在多核 FPGA 上获得的结果?
【问题讨论】:
-
也许
stdbuf -o0 /allones & stdbuf -o0 /allzeros &会有所帮助。请注意,并非所有系统都有stdbuf,因此如果不可用,请检查unbuffer。此外,由于我们没有您的程序可供测试,您可能只需要第一个stdbuf。或者您可以包含您的代码,并为您的 Q 标记该语言。您的语言中可能还有其他功能。避免缓冲输出(这几乎可以肯定是你的问题)。祝你好运。 -
@shellter:我的程序与下面那个人(即 spam.c)提出的程序非常相似。
-
我也试过 stdbuf -o0 ,这也解决了这个问题。因此,我可以在我的程序中使用 stdbuf -o0 或使用 fflush(stdout) 。这很有趣,因为在我的 FPGA 上的“轻型实时操作系统”上,我没有体验到这种缓冲效果。
标签: linux shell parallel-processing