什么是一个很好的多核64位“Hello World”程序?

时间:2009-10-31 16:41:28

标签: c 64-bit multicore algorithm performance

我最近将家用电脑升级为四核CPU和64位操作系统。我有一些以前使用C / C ++的经验,我真的“痒”尝试练习一些64位CPU功能。什么是一个好的“Hello World”类型程序,它通过做一些在32位单核代码中完全不能正常工作的简单事物来演示64位多核功能?

我只是试图了解这些新CPU如何在极端情况下影响C / C ++代码的性能。

3 个答案:

答案 0 :(得分:2)

OpenMP将是一种在C ++中使用多核编程的简单方法。维基百科示例并没有真正处理任何处理器,但你可以用一些独立的,长时间运行的函数替换'cout'。

OpenMP

就64位而言,你的性能提升很多都来自几个地方。

吞吐量增加,因为所有数据元素都更宽,处理器可以在任何给定的时钟周期内处理更多数据。看看一些微软的Exchange Server基准测试,它们现在已经转移到仅支持64位,因为吞吐量增加是令人难以置信的。

更多寄存器,因为64位架构有大量寄存器,大多数函数参数都可以使用寄存器传递返回值。

在x86 ABI中,有一些calling conventions一个或两个参数可以通过寄存器传递,其余的必须被压入堆栈。使用像cdecl这样的公共调用约定,不会将单个参数或返回值放在寄存器中。由于堆栈位于主存储器中,因此可能会有很大的性能损失。

答案 1 :(得分:1)

你可能想要做一些事情,以独立的方式执行大数字或大面积记忆的计算昂贵的操作,例如光线追踪或蛋白质折叠。

要记住的重要一点是,64位或多核处理器实际上无法做任何单核处理器无法做到的事情,实际上它们只是更快地做到更大数量。

答案 2 :(得分:1)

考虑到有多少不同的并行模型以及它们如何适应不同的任务,你的问题没有令人满意的答案。这一切都取决于你真正最终想做什么。您应该选择适合您想要做的模型(如果它与先前的约束不相符,请尝试message-passing,与其他约束相比,它更加轻松。)

我不得不说Jherico在评论中的诙谐回答是正确的。对于像“hello world”这样简单的任务,最好的模型根本就没有并行性。