Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 你使用多核的速度?你做了什么,值得付出努力吗?_Performance_Multicore - Fatal编程技术网

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++解决方案使用并行线程,有三个例外:

  • ,由于随机生成器的使用,很难(但完全可能)并行化
  • ,使用GMP库
  • ,可以并行化
  • …大多数其他解决方案也使用SSE2支持

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

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

    <>强>编辑< /St>。事实上,对于<强> > < <强> >问题,最快的C++解决方案使用并行线程,有三个例外:

  • ,由于随机生成器的使用,很难(但完全可能)并行化
  • ,使用GMP库
  • ,可以并行化

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

    这实际上取决于算法的工作方式和您正在处理的数据集的大小,以及它是否能够跨多个核心进行良好的扩展。保持在同一个内核上会给你带来很多好处,包括利用处理器流水线和使用寄存器和缓存——所有这些都是超快速的


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

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

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

    如何定义“单个任务”?然而,许多单一的概念性任务可以分解为许多独立的子任务。这就是多核可以提供性能提升的地方

    当然,这要求您实际构建程序,以便这些子任务实际上能够独立处理。

    如何定义“单个任务”?然而,许多单一的概念性任务可以分解为许多独立的子任务。这就是多核可以提供性能提升的地方


    当然,这要求您实际构建程序,以便这些子任务实际上能够独立处理。

    在执行蒙特卡罗模拟时,我经常使用多核。在这种情况下,这可能是天赐良机,因为有时这些模拟会花费很长时间,每次运行都独立于其他运行。事实上,现在我正在等待蒙特卡罗模拟在我的四核上运行


    另一个用例是使用交叉验证测试机器学习算法。数据集可以加载一次并存储在不可变对象中。然后,可以独立地执行每个交叉验证迭代。对于这样的事情,关键是要小心内存分配,避免隐式锁获取。如果分配和释放/垃圾收集的频率不够高,则所用内核的加速比可能接近线性。

    在执行蒙特卡罗模拟时,我经常使用多核。在这种情况下,它可以是一个绝对的天赐之物,因为有时这些模拟