C++はビットを格納するためにbitset
を提供します。参照に従って、クラスはbool
要素の配列をエミュレートしますが、領域割り当てに最適化されています。どちらの場合には、一方を他方に優先すべきか?ビットセットはboolの配列より高速ですか?
1
A
答えて
1
ユースケースをベンチマークする必要があります。
- 従来の実装ビット要素単位および
array<bool, N>
使用している - 前者はL1d..LLdに合うように、より高い変化を有するため、高速臨界サイズのビットマスクとすることができるので、バイト単位の要素シリアルアクセスを行う際に同時にアクセスするとき、いくつかのアクセスパターンが(高度にランダム)よく、array<bool, N>
素子あたりより少ない競合 - 遅くなければならないことができるので、性能に大きく依存するであろう下に、少なくとも
bitset<N>
より数学を行いますアクセスパターン。
bitset<N>
の
7
正しいことは測定を行うことです。
ビットセットについてのドキュメントでは、常にビットセットが実ビットであることが保証されていないと言われています。これはコンパイラの推奨事項であり、ビット操作のための便利な構文です。
組み込みシステムのコンパイラでは、このような種類のプログラムでビットを扱うことが本当に必要であるため、多くの場合、実際のビットセットが使用されます。
スピードに関しては、逆の方がより合理的です。インデックスを使用することで、配列の操作が簡単になります。ビットを使って作業するには、正しい単語にアクセスして正しいビットにアクセスするために、より多くの計算が必要です。
+1
"ビットシフトは余分な作業を意味するので、遅くする必要があります!"合理的な音、実際には追加のコストは2つの追加のシフト、2つのands(せいぜい)です。現代のCPUでは約2サイクルです。しかし、メモリの容量を8倍に増やしただけで、パフォーマンスに大きな影響を与える可能性があります。だから、はっきりとしたものではありません。 – Voo
関連する問題
- 1. マルチスレッドメモリアクセスは、シングルスレッドメモリアクセスより高速ですか?
- 2. "startsWith"は "indexOf"より高速ですか?
- 3. numpy配列の乗算を最適化する:* numpy.dotより高速ですか?
- 4. なぜ高速列挙は通常の反復より速いのですか?
- 5. 通常の配列よりも高速にマップできますか?
- 6. Arrays.copyOfはSystem.arraycopyよりも2倍高速に配列されていますか?
- 7. C++ VectorはC配列(Time)より高速です。どうして ?
- 8. バイト配列をvbでバイナリに変換するより高速な方法は?
- 9. VB.NET:大きな配列 - より高速な代替?
- 10. std :: vector reserve()およびpush_back()はresize()および配列インデックスより高速ですが、なぜですか?
- 11. コンストラクタより高速ですか?
- 12. stoolベクトル<bool>をbool *配列に変換する速い方法
- 13. セーフモードで配列を高速にループする方法はありますか
- 14. Java配列からNumPy配列(Py4J)への高速変換
- 15. iOSの配列の高速比較
- 16. numpy配列の高速反復
- 17. Postgresの高速配列挿入
- 18. プロローグ内の高速2次元配列
- 19. CUDAプログラムはCPUプログラムより低速ですが、カーネルは高速ですか?
- 20. 列のメジャーオーダーのために、1Dアレイは2Dアレイより高速ですか?
- 21. Javaでは、プリミティブ配列の場合、繰り返し再作成するよりもはるかに高速に配列を再利用していますか?
- 22. MySQLのビューは通常のクエリより高速ですか?
- 23. テンプレートのメタプログラミングは同等のCコードより高速ですか?
- 24. なぜ行列乗算はhmatrixよりもRepaで高速ですか?
- 25. MSMQがWCF QueueServiceより高速なのはなぜですか?
- 26. TCPはイーサネット経由のUDPより高速ですか?
- 27. Oracleストアドプロシージャは、Microsoft.NETアプリケーションの行SQLよりも高速ですか?
- 28. データ属性のCSSセレクタはクラスセレクタより高速ですか?
- 29. キャンバスは通常の画像より高速ですか?
- 30. Cassandraは単一ノードクラスタ上のHBaseより高速ですか?
もっと速いですか? – juanchopanza
パフォーマンス統計情報を取得するためのコードを書かないのはなぜですか? –
良い質問があります。両方の実装を使用して問題をベンチマークする必要があります。 – StoryTeller