Performance 你使用多核的速度?你做了什么,值得付出努力吗?
所以在发布这篇文章之前,我没有看到正确的位置Performance 你使用多核的速度?你做了什么,值得付出努力吗?,performance,multicore,Performance,Multicore,所以在发布这篇文章之前,我没有看到正确的位置 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
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.
我在看计算机语言基准游戏的结果:
而且似乎大多数最快的解决方案仍然是C/C++使用的
运行测试的4核机器的单核。
我想知道,单任务使用多核是值得的,还是
真的需要更多的速度,只需调整代码,改为用C/C++重写即可。
当你点击完整的基准链接时,比如:很明显,很多解决方案都使用多核
听到你的个人经历还是很有趣的:
为了提高单个任务的性能,您是否成功地使用了4个或8个内核
你使用了什么工具/语言
进步有多大
值得付出努力吗?为了提高多核系统上单个任务的性能,您必须将任务设计为分成不同的部分(ala mapreduce),并将每个部分交给不同的核心。很多程序都是这样做的,它确实提高了性能
一些压缩算法目前支持多个处理器,如7zip。这样做并不十分困难,但如果您的任务不能分解为多个协作部分,您将无法从多个核心获得任何帮助。为了提高多核系统上单个任务的性能,您必须将任务设计为分解为不同的部分(ala mapreduce)并将每个部分交给不同的核心。很多程序都是这样做的,它确实提高了性能 一些压缩算法目前支持多个处理器,如7zip。这样做并不十分困难,但如果您的任务不能分成多个协作部分,那么您将无法从多个核心获得任何帮助 似乎最快的解决方案仍然是C/C++,只使用运行测试的4核机器中的一个核 不,并非所有代码都是这样。事实上,在我看过的代码中,所有代码都使用多个并行线程,因此使用多个内核。事实上,一些(例如)使用像OpenMP这样的奇特架构(或者,也很有趣)来帮助并行化 <>强>编辑< /St>。事实上,对于<强> > < <强> >问题,最快的C++解决方案使用并行线程,有三个例外:
…而且大多数其他解决方案也使用SSE2支持。这实际上取决于算法的工作方式和您正在处理的数据集的大小,以及它是否能够跨多个核心进行良好的扩展。保持在同一个内核上会给你带来很多好处,包括利用处理器流水线和使用寄存器和缓存——所有这些都是超快速的
随着多核在未来变得越来越重要,我们可能会看到一些有趣的跨核优化变得可用。这实际上取决于算法的工作方式和您正在处理的数据集的大小,以及它在多核之间的可伸缩性。保持在同一个内核上会给你带来很多好处,包括利用处理器流水线和使用寄存器和缓存——所有这些都是超快速的 随着多核在未来变得越来越重要,我们可能会看到一些有趣的跨核优化变得可用。如何定义“单个任务”?然而,许多单一的概念性任务可以分解为许多独立的子任务。这就是多核可以提供性能提升的地方 当然,这要求您实际构建程序,以便这些子任务实际上能够独立处理。如何定义“单个任务”?然而,许多单一的概念性任务可以分解为许多独立的子任务。这就是多核可以提供性能提升的地方
当然,这要求您实际构建程序,以便这些子任务实际上能够独立处理。在执行蒙特卡罗模拟时,我经常使用多核。在这种情况下,这可能是天赐良机,因为有时这些模拟会花费很长时间,每次运行都独立于其他运行。事实上,现在我正在等待蒙特卡罗模拟在我的四核上运行
另一个用例是使用交叉验证测试机器学习算法。数据集可以加载一次并存储在不可变对象中。然后,可以独立地执行每个交叉验证迭代。对于这样的事情,关键是要小心内存分配,避免隐式锁获取。如果分配和释放/垃圾收集的频率不够高,则所用内核的加速比可能接近线性。在执行蒙特卡罗模拟时,我经常使用多核。在这种情况下,它可以是一个绝对的天赐之物,因为有时这些模拟