![]() |
1
3
k-nucleotide )使用像OpenMP这样的奇特架构(或者,也很有趣, SSE parallelization )以帮助并行化。 事实上,最快的C++解决方案 此问题使用并行线程,但有三个例外:
大多数其他解决方案也使用SSE2支持。 |
![]() |
2
2
为了提高多核系统上单个任务的性能,您必须将任务设计为分成不同的部分(ala mapreduce),并将每个部分交给不同的核心。很多程序都是这样做的,它确实提高了性能。 一些压缩算法目前支持多个处理器,如7zip。这样做并不十分困难,但如果您的任务不能分成多个协作部分,那么您将无法从多个核心获得任何帮助。 |
![]() |
3
1
这实际上取决于算法的工作方式和您正在处理的数据集的大小,以及它是否能够跨多个核心进行良好的扩展。保持在同一个内核上会给你带来很多好处,包括利用处理器流水线和使用寄存器和缓存——所有这些都是超快速的。 随着多核在未来变得越来越重要,我们可能会看到一些有趣的跨核优化变得可用。 |
![]() |
4
0
如何定义“单一任务”?然而,许多单一的概念性任务可以分解为许多独立的子任务。这就是多核的地方 也许 当然,这要求您实际构造程序,以便这些子任务实际上能够独立处理。 |
![]() |
5
0
在进行蒙特卡罗模拟时,我经常使用多核。在这种情况下,这可能是天赐良机,因为有时这些模拟会花费很长时间,每次运行都独立于其他运行。事实上,现在我正在等待蒙特卡罗模拟在我的四核上运行。 另一个用例是使用交叉验证测试机器学习算法。数据集可以加载一次并存储在不可变对象中。然后,可以独立地执行每个交叉验证迭代。对于这样的事情,关键是要小心内存分配,避免隐式锁获取。如果分配和释放/垃圾收集的频率不够高,则所用内核的加速比可能接近线性。 |
![]() |
6
0
我已经看到在处理管道上很容易获得4倍的改进。 |
![]() |
7
0
Alex Fort's answer ,通过将问题(在本例中为图像过滤)拆分为多个部分并在多个线程中运行处理,我能够看到处理时间的减少。
虽然在双核core 2 Duo上不是精确的数字,也不是完美的基准,但与单线程代码相比,多线程代码的处理时间减少了30-50%,而在超线程Atom上,则减少了20-30%。 与其他涉及将问题分解为多个部分的问题一样,这种处理方法的可伸缩性将取决于分解和组合问题的步骤所花费的时间。 |
![]() |
8
0
我用REALbasic编写了一个CD标签编辑程序,它是跨平台的(因此不能仅仅依赖GDI+或Cocoa)。它允许对多个遮罩图像进行分层,并通过剪裁来标记形状。 这是一个很好的域分离解决方案——我将一个图像传递给二进制插件,它在内部跨处理器对工作进行分区。作为一个库解决方案,我的程序不需要多核意识。 |
![]() |
9
0
在7分钟的构建中花费了6分钟。:) |
![]() |
10
0
Amdahl's Law, 这是对通过增加并行性而获得的收益递减的描述,也用于模拟给定算法的预期加速程度。 |
![]() |
11
0
在一个解决支持向量机的项目中,我使用16个内核(在Amazon EC2实例中)实现了很高的加速比,根据算法使用的数据集,我的加速比从10倍提高到16倍: https://github.com/RobeDM/LIBIRWLS 这是我写的论文: http://www.sciencedirect.com/science/article/pii/S0167865516302173 |
![]() |
KhaledWas · 单核处理器的多线程代码和多核处理器的单线程代码 8 年前 |
![]() |
SMSk · 限制核心用途PyCharm 9 年前 |
![]() |
Gaurang Tandon · 在多核计算机上查找执行时间 11 年前 |