整数型と浮動小数点型のどちらが最速か疑問に思っていました..
範囲が狭いため、バイトは整数よりも高速であると考えていました。
何人かの人々は私に言った..場合によっては整数はバイトよりも速い.
2 番目の質問:
GPU は世界制覇への道を進んでいます..
だから私は自分自身に尋ねました.Double は Integer よりも「速くなる」ことができます..FPU のおかげで
、専門家はどこにいますか? :)
整数型と浮動小数点型のどちらが最速か疑問に思っていました..
範囲が狭いため、バイトは整数よりも高速であると考えていました。
何人かの人々は私に言った..場合によっては整数はバイトよりも速い.
2 番目の質問:
GPU は世界制覇への道を進んでいます..
だから私は自分自身に尋ねました.Double は Integer よりも「速くなる」ことができます..FPU のおかげで
、専門家はどこにいますか? :)
演算を実行するには、クロック サイクル以上のことを考える必要があります。2 つの int を追加するにはこれだけのサイクルが必要であり、2 つの double を追加するにはこれだけのサイクルが必要である、などと言うことができますが、それは関係ないかもしれません。すべてのデータが同時にキャッシュに収まる場合は、個々の操作のタイミングを計ることが理にかなっています。しかし、そうでない場合は、キャッシュ ミスによる余分な時間が、個々の操作の違いを支配します。キャッシュから何かを取得する必要があるかどうか、またはディスクに移動する必要があるかどうかの違いが生じるため、小さいデータ型で作業する方が高速な場合があります。
最近のコンピューターは、ほとんどの時間をデータの移動に費やしており、演算を行うことはなく、数を計算するアプリケーションであってもそうです。そして、前者の後者に対する比率は増加しています。たとえば、ショートとダブルの乗算に必要な時間を単純に比較することはできません。プログラムの 2 つのバージョンが与えられた場合、一方のバージョンは小さな問題でより速く実行され、もう一方のバージョンはより大きなプログラムでより速く実行されることがわかります。これはすべて、種類のメモリの相対的な効率によるものです。
範囲が狭いため、バイトは整数よりも高速だと考えていました。
私が経験したこと:を使用するshort
とパフォーマンスが低下しましたが、を使用してint
も問題ありませんでした。これは、通常、ショートがアーキテクチャに存在しないためです。便利なタイプです。プロセッサは実際にはワードサイズで動作します。私の場合、単語サイズは int のサイズでした。そのため、ショートにアクセスするときは、最初に値を int にパックし、それを操作してからアンパックし、ショートで結果を取得する必要がありました。そのすべてがパフォーマンスの低下につながりました。したがって、短ければ良いというわけではありません。
CPU レベルでは、最近では 32 ビットまたは 64 ビットであるワードのみで、バイトはありません。算術ユニットは、通常、ワード サイズの数値 (浮動小数点の場合はそれ以上) を処理するように組み込まれています。
したがって、算術演算に関して 1 ワードより小さい型を使用しても速度の利点はありません。また、CPU がネイティブに持たない型をシミュレートするために追加の作業を行う必要があるため、速度が低下する可能性があります。メモリへのバイトでは、最初にそれが含まれている単語を読み取り、それを変更してから書き戻す必要があります。これを回避するために、ほとんどのコンパイラは実際にはすべての小さな変数にフル ワードのメモリを使用するため、ブール変数でさえ 32 ビットまたは 64 ビットを占有します。
ただし、大規模な配列などの大量のデータがある場合は、小さい型を使用すると、キャッシュ ミスが少なくなるため、通常はパフォーマンスが向上します。
アーキテクチャ内のデータビット数に依存します。浮動小数点プロセッサは、計算を行うときに float と double を同じように扱います。どちらも 80 ビットの精度で評価されるため、同じ時間がかかります。値を FPU レジスタにロードして保存すると、違いが生じる場合があります。Double は RAM の 2 倍のスペースを必要とするため、キャッシュ ミスにより遅くなる可能性があります。ランダムにインデックス付けする傾向がある大きな配列がある場合に顕著です。
数値型のバイト長は言語に依存し、場合によっては使用しているプラットフォームにも依存します。たとえば、Java では int と float の両方が 4 バイトを使用するため、処理時間は等しくなります。長い型がより速く処理されることに驚かれることでしょう。その証拠があれば、それについて読みたいと思います。
整数またはバイトのどちらがより高速であるかについては、両方がレジスタに収まる限り、同じか、少なくとも測定可能な違いはありません。
integer と double について: GPU は double の方が通常の CPU よりも高速な演算を行う可能性がありますが、整数演算は単なるレジスタ演算であるため、整数よりも double 演算の方が高速であるとは思えません。
最大の最適化は、ループされたスカラー計算の使用からベクトル計算の使用に移行することです。次に、GPU または CPU の SSE を利用します。
ベクトルの最適化を行わない限り、実際のパフォーマンスに影響を与えることなく、レジスタ (32/64 ビット) と同じ大きさの整数を使用できます。
浮動小数点数は少し異なります。CPU は double に最適化されていますが、GPU は通常 float で動作します。