2009-10-31 10 views
6

最近私の家庭用PCをクアッドコアCPUと64ビットOSにアップグレードしました。以前のC/C++の経験があり、64ビットCPUの機能を試してみるのは本当に "うんざり"です。 32ビットのシングルコアコードではうまくいかない単純なことを行うことによって、64ビットのマルチコア機能を実証する優れた「Hello World」タイプのプログラムは何ですか?良いマルチコア64ビット "Hello World"プログラムとは何ですか?

私はちょうどこれらの新しいCPUが極端な場合にはC/C++コードのパフォーマンスに影響を与えることができる方法のための「感じ」を取得しようとしています。

+3

非常にまだ 'cout <<" Hello World "<< endl;' – Jherico

答えて

2

OpenMPは、C++のマルチコアプログラミングで簡単に遊ぶ方法です。 wikipediaの例では、プロセッサを大量に使用することは実際にはありませんが、 'cout'を独立した長期実行可能な関数に置き換えることができます。限り64ビットとして

OpenMP

、パフォーマンス向上の多くは、いくつかの場所から来ることを行っています。

は、すべてのデータ要素が広いので、プロセッサは、任意の所与のクロックサイクルでより多くのデータを処理することができ、スループットを向上します。 Exchange ServerのMicrosoftのベンチマークの一部を見てみましょう。スループットの向上が驚異的なため、64ビットのみをサポートするようになりました。

64ビットアーキテクチャには多数のレジスタがあり、ほとんどの関数パラメータと戻り値はレジスタを使用して渡すことができるため、より多くのレジスタが使用できます。いくつかのcalling conventions 1または多分2つのパラメータはレジスタを介して渡すことができ、残りの部分とのx86 ABIに

はスタックにプッシュする必要があります。 cdeclのような共通の呼び出し規約では、単一のパラメータまたは戻り値がレジスタに置かれません。スタックはメインメモリに配置されているので、これは大きなパフォーマンスヒットになる可能性があります。

1

おそらく、計算コストオペレーションは、このようなレイトレーシングやタンパク質の折り畳みとして、独立した形で大きな数字や大面積OGメモリをOM行いTYST何かをしたいです。

心に留めておくべき重要なことは、本質的に、彼らはちょうどより速く、より大きな数字にそれを行う、64ビットまたはマルチコアプロセッサが実際にシングルコアプロセッサが行うことができない何もできないということです。

1

いくつの異なる並列処理モデルが存在し、どのようにそれぞれ異なるタスクに適合しているかを考慮すると、質問に対する満足のいく答えはありません。それはすべてあなたが本当にが最終的にやりたいことに依存します。あなたがしたいことに適応しているモデルを選択する必要があります(前の制約に矛盾しない場合はmessage-passingを試してみてください)。

私はコメント欄にJhericoの冗談の答えが正しいことを言っているでしょう。 "こんにちは世界"のような単純な仕事のために、最高のモデルは全く平行ではありません。