首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >您是否使用多核来提高速度?你做了什么,值得付出努力吗?

您是否使用多核来提高速度?你做了什么,值得付出努力吗?
EN

Stack Overflow用户
提问于 2009-03-10 18:52:46
回答 11查看 773关注 0票数 1

所以在发布这篇文章之前,我没有看对位置。

代码语言:javascript
复制
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个内核来实际提高单个任务的性能?

您使用了什么工具/语言?

改进幅度有多大?

这样的努力值得吗?

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2009-03-10 18:58:42

,似乎最快的解决方案仍然是C/C++,只使用运行测试的4核机器中的一个核。

不,并不是所有代码都是这样的。事实上,在我看过的代码中,都使用了多个并行线程,因此使用了多个内核。事实上,一些(例如k-nucleotide)使用像OpenMP (或者,同样有趣的是,SSE parallelization)这样的奇特架构来帮助并行化。

编辑事实上,对于每个问题,最快的C++解决方案都使用并行线程,但有三个例外:

由于随机生成器的使用,

  1. fasta benchmark,很难(但完全有可能)并行化usage.
  2. pidigits,使用GMP library.
  3. n-body,可能是parallelized.

…大多数其他解决方案也使用SSE2支持。

票数 3
EN

Stack Overflow用户

发布于 2009-03-10 18:54:02

为了在多核系统上提高单个任务的性能,您必须将任务设计为拆分成不同的部分(ala mapreduce),并将每个部分交给不同的核心。很多程序都会做这样的事情,而且确实提高了性能。

一些压缩算法目前支持多个处理器,例如7zip。做这样的事情并不是很困难,但是如果你的任务不能分解成协作的部分,你将不会从多个核心得到任何帮助。

票数 2
EN

Stack Overflow用户

发布于 2009-03-10 18:59:39

这实际上取决于算法的工作方式和您正在处理的数据集的大小,即它是否在多个核心之间具有良好的伸缩性。保持在同一个核心上会给你带来很多好处,包括利用处理器流水线以及使用寄存器和缓存--所有这些都非常快。

随着多核在未来变得越来越重要,我们可能会看到一些有趣的跨核优化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/631752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档