質問

Integer 型と Float 型のどちらが速いのか疑問に思っていました。
範囲が狭いため、バイトの方が整数よりも速いと考えていました。
何人かの人が私に言いました。場合によっては、整数の方がバイトよりも高速であるということです。

2番目の質問:
GPU は世界征服を目指して進んでいます。
そこで私は自分自身に問いました:Double は Integer よりも「高速」になりますか?FPUのせいで
それでは専門家はどこにいるのでしょうか?:)

役に立ちましたか?

解決

あなたは、算術演算を実行するためにクロック・サイクルよりも考える必要があります。次の2つのダブルスを追加するなど、この多くのサイクルを、かかりますが、それは適切ではないかもしれません、2つのintを追加することで、この多くのサイクルを要すると言うことができます。すべてのデータが同時にキャッシュに収まる場合は、個々の操作のタイミングは、理にかなっています。ていない場合でも、キャッシュミスに必要な余分な時間は、個々の操作の違いを支配します。それはキャッシュから何かを引っ張ってたか、またはディスクに移動するかしないかを持つ間の違いになりますので、時々小さなデータ型での作業は速くなります。

これらの日のコンピュータが偶数クランチのアプリケーションで、算術演算を行っていない、周りのデータを移動する彼らのほとんどの時間を費やしています。後者に前者の割合が増加しています。あなたは、単に、例えば、ダブルス対ショートパンツを掛けるのに必要な時間を比較することはできません。あなたはあなたのプログラムのその与えられた2つのバージョンを見つけるかもしれない、1つのバージョンは小さな問題に速く実行され、他のバージョンはすべてのためのメモリの種類の相対的な効率の、より速く、より大きなプログラムで実行されます。

他のヒント

範囲が狭いため、バイトの方が整数よりも速いと考えていました。

私が経験したこと:を使って short を使用しているときにパフォーマンスが低下しました int 大丈夫でした。これは、通常、アーキテクチャ上にショーツが存在しないためです。便利なタイプです。プロセッサは実際にはそのワード サイズで動作します。私の場合、ワードサイズは int のサイズでした。そのため、short にアクセスするときは、最初に値を int にパックし、それを操作してから展開して、short で結果を取得する必要がありました。これらすべてがパフォーマンスに影響を及ぼしました。したがって、短いほど良いというわけではありません。

これは、アーキテクチャのデータビットのないに依存しません。 浮動小数点プロセッサは、フロートを治療し、計算を行う際に同一の倍になります。彼らは、両方の80ビットの精度で評価され、したがって、同じ時間がかかります。 FPUレジスタに値をロードして保存すると、違いを生むかもしれません。ダブルRAMに2倍の容量を必要とするため、キャッシュミスに遅くなる原因である可能性があります。目立つあなたがインデックスに傾向がある大規模な配列を持っている場合は、ランダムます。

CPUレベルでは、最近32ビットまたは64ビットである何バイト、単語のみが、存在しません。演算ユニットは、通常、(浮動小数点の場合には、以上)ワードサイズの数に対処するためにハードワイヤードされています。

だから、算術演算に関しては言葉よりも小さいタイプを使用しても速度の利点はありません、あなたはCPUがネイティブではありません種類をシミュレートするために、追加の作業を行う必要があるため、例えば、スピードペナルティがあるかもしれませんメモリに1バイトを書くことはまず、それは一部の単語を読んで、それを修正し、それを書き戻す必要があります。これを避けるために、ほとんどのコンパイラは、実際には、すべての小さな変数のためのメモリの完全な単語を使用しますので、さえブール変数は、32ビットまたは64ビットを占めます。

あなたは、このような大規模な配列などのデータ、大量のを持っている場合は、より少ないキャッシュミスを持っているだろうから

しかし、その後、小さいタイプを使用すると、通常より優れたパフォーマンスが得られます。

数値型のバイト長は言語に依存し、場合によっては使用しているプラ​​ットフォームにも依存します。たとえば、Java では int と float は両方とも 4 バイトを使用するため、処理時間は同じになるはずです。ただし、長い型の処理が速くなることには驚きます。もしその証拠があるなら、それについて読みたいと思います。

1は、限り、彼らの両方が、彼らが同じ、または少なくとも測定可能な差異なしで動作するレジスタに合う、より速く、整数またはバイトであるかについて。

について整数vs.double:GPUは、ダブルスの定期的なCPUを搭載した高速化算術んが、私は整数演算だけで算術演算を登録しているので、それは、より高速な整数をダブル算術演算を行い疑うかもしれませ

の最大の最適化は、ベクトル計算を使用するために、ループスカラー計算を使用してから渡しています。そして、GPUやCPUのSSEを活用します。

まあ、限り、あなたは任意のベクトルの最適化をしないと、あなたは、任意の実際のパフォーマンスヒットなしであなたのレジスタ(32/64ビット)と同じ大きさの整数を使用することができます。

浮動小数点数は少し異なっている:CPUがダブルスに最適化されていますが、GPUは通常山車で作業

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top