6

私はアルゴリズムのベンチマークを行っていますが、詳細を知る必要はありません。主なコンポーネントは、バッファー (整数の生の配列) とインデクサー (整数 - バッファー内の要素へのアクセスに使用) です。

バッファの最速の型は unsigned char のようで、short、int、long の符号付きと符号なしの両方のバージョンです。ただし、char/signed char は低速で​​した。差:1.07倍。

インデクサーの場合、符号付きと符号なしの型に違いはありませんでした。ただし、int と long は、char と short よりも 1.21 倍高速でした。

メモリ消費ではなく、パフォーマンスを考慮するときにデフォルトで使用する必要がある型はありますか?

注: バッファーとインデクサーの要素で使用される操作は、代入、インクリメント、デクリメント、および比較です。

4

5 に答える 5

8

一般的に、最大の勝利はキャッシュから得られます。

データ値が8ビットに収まるほど小さい場合は、intを使用して3バイト/値を浪費した場合よりも多くのデータをCPUキャッシュに収めることができます。データのブロックを処理している場合、キャッシュヒットの速度が大幅に向上します。

long longインデックスのタイプは、CPUレジスタに収まる限り(つまり、8ビットCPUでを使用しようとしない限り)、それほど重要ではありません。同じ速度になります。

編集:速度の測定には注意が必要です。キャッシュを可能にするためにアルゴリズムを数回実行する必要があります。CPUで他に何が実行されているか、さらには他のどのハードウェアが割り込んでいるかを監視する必要があります。非常に注意しない限り、10%の速度差はノイズと見なされる可能性があります。

于 2012-04-04T16:53:51.217 に答える
2

これは、基盤となるアーキテクチャに大きく依存します。通常、最速のデータ型は単語全体のデータ型です。IA32(x86-32)での私の経験では、単語データ型よりも小さい/大きい場合はペナルティが発生し、1つのデータに対して複数のメモリが読み取られることもあります。

CPUレジスタに入ると、通常、データ型の長さは重要ではありません(つまり、データ全体が1つのレジスタに収まる場合)が、それらを使用して実行する操作は重要です。もちろん、浮動小数点演算は最もコストがかかります。最速は、加算、減算(これも比較中)、ビット単位(シフトなど)、および論理演算(および、または...)です。

于 2012-04-04T18:09:31.137 に答える
1

どちらのタイプが速いか遅いかについての約束はありません。intそれが何を意味するにせよ、マシンの自然な語長を表すと想定されているため、より高速になる可能性があります。または、他の要因に応じて遅くなります。

于 2012-04-04T16:54:49.547 に答える
0

以下は、基本整数型または拡張整数型の typedef です。

高速モードを確認してください。他のタイプ (char) の高速 mod についても調べることができます。

ライブラリは:: cstdint

uint_fast8_t :: 私の提案

http://www.cplusplus.com/reference/cstdint/

??使用しているマシンのアーキテクチャについて知る必要があるかもしれません!!

于 2017-05-14T08:59:07.923 に答える
-1

ほとんどの場合言わintれているように、機械の言葉を表しています。したがって、プロセッサレジスタと同じ長さになるため、レジスタに配置してRAMに戻すintための追加のアクションは実行されません。int

一方、使用する場合は、プロセッサレジスタの4分の1 char(x86システムの場合)および4分の1になります。intしたがって、RAMに配置する前に、切り捨てる必要があります。その結果、より多くの時間が使用されます。

また、32ビットレジスタのプロセッサは8ビット数の演算ができません。charがcharに追加されると、両方が登録されます。したがって、各レジスタには8ビットのchar値と24ビットのごみが含まれます。2つの32ビット値が追加され、結果は8ビットに切り捨てられます。charとが同時に機能する理由shortは、同じ数の追加操作が使用されるためです。int追加の操作は行われません。

プロセッサ用に追加したいのですが、同じように扱うのとまったく同じですintunsigned int一部のコンパイラintlong intは、同じ場合もあります。

したがって、最速の整数型は、長さがマシンワードと同じ型です。マシンワードよりも小さいサイズのタイプを使用すると、プログラムの動作が遅くなります。

于 2012-04-04T17:06:41.727 に答える