2009-10-31 101 views
6

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

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

+3

几乎还是'cout <<“Hello World”<< endl;' – Jherico 2009-10-31 16:59:03

回答

2

OpenMP将是一种轻松实现C++多核编程的方式。维基百科的例子并没有真正做到处理器密集型的任何事情,但是你可以用一些独立的,长时间运行的函数替换'cout'。

OpenMP

至于64位,有很多你的业绩增长将来自几个地方。

吞吐量增加,因为所有数据元素都较宽,处理器可以在任何给定的时钟周期内处理更多数据。看看Exchange Server的一些微软基准测试版,他们现在已经开始支持64位版本了,因为吞吐量的增长是不可思议的。

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

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

1

您可能想要做某些事情,以独立的方式(如光线跟踪或蛋白质折叠)执行计算上昂贵的操作om大数字或大区域或内存。

要记住的重要一点是,64位或多核处理器不能真正做到单核处理器无法做到的任何事情,实质上它们只是更快速地实现更大数目。

1

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

我不得不说,Jherico在评论中的口头回答是正确的。对于“hello world”这样一个简单的任务来说,最好的模型根本就不是平行的。

相关问题