所以在发布这篇文章之前,我没有看对位置。
I was looking at the result of the computer language benchmark game:
<http://shootout.alioth.debian.org/u32q/index.php>
And it seems that most of the fastest solutions are still C/C++ using just
a single core of the 4 core machine that runs the tests.
I was wondering if multi-core is worth it at all for single tasks or if you
really need some more speed just tune up your code, rewrite in C/C++ instead.当你点击完整的基准测试链接,比如:http://shootout.alioth.debian.org/u32q/benchmark.php?test=knucleotide&lang=all,很明显,相当多的解决方案使用了多核。
听到你的个人经历还是很有趣的:
您是否成功地使用了4个或8个内核来实际提高单个任务的性能?
您使用了什么工具/语言?
改进幅度有多大?
这样的努力值得吗?
发布于 2009-03-10 18:58:42
,似乎最快的解决方案仍然是C/C++,只使用运行测试的4核机器中的一个核。
不,并不是所有代码都是这样的。事实上,在我看过的代码中,都使用了多个并行线程,因此使用了多个内核。事实上,一些(例如k-nucleotide)使用像OpenMP (或者,同样有趣的是,SSE parallelization)这样的奇特架构来帮助并行化。
编辑事实上,对于每个问题,最快的C++解决方案都使用并行线程,但有三个例外:
由于随机生成器的使用,
…大多数其他解决方案也使用SSE2支持。
发布于 2009-03-10 18:54:02
为了在多核系统上提高单个任务的性能,您必须将任务设计为拆分成不同的部分(ala mapreduce),并将每个部分交给不同的核心。很多程序都会做这样的事情,而且确实提高了性能。
一些压缩算法目前支持多个处理器,例如7zip。做这样的事情并不是很困难,但是如果你的任务不能分解成协作的部分,你将不会从多个核心得到任何帮助。
发布于 2009-03-10 18:59:39
这实际上取决于算法的工作方式和您正在处理的数据集的大小,即它是否在多个核心之间具有良好的伸缩性。保持在同一个核心上会给你带来很多好处,包括利用处理器流水线以及使用寄存器和缓存--所有这些都非常快。
随着多核在未来变得越来越重要,我们可能会看到一些有趣的跨核优化。
https://stackoverflow.com/questions/631752
复制相似问题