我希望能够涉足多核编程(不限语言),想知道有哪些硬件可以推荐用于探索这个领域。我的目标是升级我现有的台式电脑。
编程模型 并行编程很难,目前还没有简单的方法。四核系统可以让您开始尝试真正的并发性和所有流行的范式(线程、UPC、MPI、OpenMP等)。
内存 当您开始拥有多个线程时,资源争用将会出现,而内存壁垒也越来越高。 arstechnica 的最近一篇文章 概述了 Sandia 进行的一些(非常初步的)研究,显示出如果当前趋势继续下去,情况可能变得非常糟糕。多核机器将不得不保持一切运转,并且这将需要人们对内存系统非常熟悉。双插槽在 AMD 机器上增加了 NUMA(非一致内存访问架构),这将让您开始走上这条艰难的道路。
四核处理器,因为它可以让您处理同时运行进程数量大于2的问题,这通常会使问题变得复杂。
我还建议,出于纯粹的极客喜爱,购买一张好的NVidia显卡并使用CUDA API。如果您有足够的资金,可以购买一个独立的CUDA工作站,通过电缆和扩展插槽连接到您的主要计算机。
要看你想做什么。
如果你想学习多线程编程的基础知识,则可以在现有的单核 PC 上进行。 (如果你有 2 个线程,那么操作系统将在单核 PC 上在它们之间切换。然后当你转移到双核 PC 时,它们应该会自动在不同的核心上并行运行,加速 2 倍)。这种方法的优点是免费!缺点是你不会看到速度提升(实际上,由于额外开销的存在,并行实现可能略慢),而且错误代码的工作机会略高。
然而,虽然你可以在单核处理器上学习多线程编程,但双核(甚至超线程)CPU 会很有帮助。
如果你想真正测试你所编写的代码,如“蓝色礼服”所说,你应该选择尽可能多的核心,并尽可能获取超线程技术。
如果你想学习在图形卡上运行的算法——这是与 x86 多核截然不同的领域——则可以获取 CUDA 并购买支持它的普通 nVidia 图形卡。
我建议至少使用四核处理器。
多线程/核心编程的难点在于它会带来一系列新问题。你所面临的错误通常不是你习惯的那种。竞态条件可能会长期潜伏,直到它们咬你一口,而你的主流语言编译器不会以任何方式协助你。你会得到随机数据和/或崩溃,这些只会在一天/一周/一个月/一年中发生一次,通常在最神秘的情况下...
幸运的是,有一件事情始终如一:计算机展示的并发性越高,你就会揭示出更多的竞态条件。
因此,如果你真的关注多线程/核心编程,那么尽可能选择多个CPU 核心。请记住,超线程和SMT都不能提供多个核心所提供的并发级别。
我认为,根据你最终想要做什么,你可能只需要你现有的单核系统。多核编程基本上就是多线程编程,而你肯定可以在单核芯片上完成这个任务。
当我还是学生的时候,我们的一个项目是构建一个线程安全的C语言malloc库实现。即使在单核处理器上,那也足以让我放弃了进入多线程编程的愿望。在你开始考虑花费大量资金之前,我建议你先尝试一些小的项目。
我同意其他人的观点,我会升级到四核处理器。我也是ASUS主板的忠实粉丝(P5Q Pro非常适合Core2Quad和Core2Duo处理器)!
多核编程的优势在于你有更多的资源来更快地完成任务。如果你认真对待多核编程,那么我绝对会选择四核处理器。我不认为你应该购买英特尔的新i7架构来利用多核处理,因为任何针对Core2Duo或Core2Quad的程序都会在新架构上运行得更好。
如果你只是尝试一下多核编程,那么我建议你购买一款好的Core2Duo处理器。记住,重要的不仅是你拥有多少个核心,还有这些核心处理任务的速度有多快。我的Core2Duo处理器以4GHz的速度运行,比我的Core2Quad处理器以2.4GHz的速度运行时,即使是在多核程序中,也能更快地完成任务。
如果这篇文章对你有所帮助,请告诉我! JFV