動的および古典的な多次元配列の速度差

adba

動的多次元配列と古典的な多次元配列の使用(作成ではない)速度は、速度の点で異なりますか?

たとえば、ループを使用して3次元配列のすべての値にアクセスしようとすると、動的な方法と従来の方法で作成された配列の間に速度の違いがありますか。

動的な3次元配列」とは、matris_cos [kuanta] [d] [angle_scale]がこのように作成されることを意味します。

matris_cos = new float**[kuanta];
for (int i = 0; i < kuanta; ++i) {
  matris_cos[i] = new float*[d];

  for (int j = 0; j < d; ++j)
    matris_cos[i][j] = new float[angle_scale];
}

古典的な3次元配列」とは、matris_cos [kuanta] [d] [angle_scale]がこのように単純に作成されていることを意味します。

float matris_cos[kuanta][d][angle_scale];

ただし、これらのアレイの作成速度は問いません。いくつかのループを介してこれらの配列の値にアクセスしたいと思います。値にアクセスしようとしたときに速度の違いはありますか?

マイクシーモア

ポインターの配列(ポインターの配列への)は、ランダム要素にアクセスするために追加レベルの間接参照を必要としますが、多次元配列は基本的な演算(乗算とポインターの加算)を必要とします。最近のほとんどのプラットフォームでは、キャッシュに適したアクセスパターンを使用しない限り、間接参照が遅くなる可能性があります。また、多次元配列のすべての要素が連続しているため、配列全体を反復処理するとキャッシュに役立つ可能性があります。

この違いが測定可能かどうかは、それを測定することによってのみ判断できます。

余分な間接参照がボトルネックであることが判明した場合は、ポインターの配列をクラスに置き換えて、多次元配列をフラット配列で表すことができます。

class array_3d {
    size_t d1,d2,d3;
    std::vector<float> flat;

public:
    array_3d(size_t d1, size_t d2, size_t d3) : 
        d1(d1), d2(d2), d3(d3), flat(d1*d2*d3) 
    {}

    float & operator()(size_t x, size_t y, size_t z) {
        return flat[x*d2*d3 + y*d3 + z];
    }
    // and a similar const overload
};

次のC ++標準(来年予定)には動的なサイズの配列が含まれると思いますので、すべての場合に多次元形式を使用できるはずです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

JavaおよびC#の多次元配列

.NETXmlSerializerおよび多次元配列

多次元配列のJSONへの適切な変換(およびその逆)

in_array()および多次元配列

多次元配列、Vuexおよび突然変異

PHPでの多次元配列の作成、アクセス、および理解

多次元配列の構文-x [?、?]およびx [?] [?]

R:テーブルおよび多次元配列の次元名

速度-多次元配列

多次元配列の予期しない動作

多次元配列用のDelphiのLow()およびHi()関数に相当するJava

要約、再編成、および多次元配列全体の「フラット化」

regAngular多次元および動的配列

動的多次元配列

多次元配列PHPから検索および取得

多次元配列を変更および短縮する

小枝の動的多次元配列

jQuery / JSの動的多次元配列

単一の多次元配列で配列マップ、フラット化、および設定解除

多次元配列の配列要素を複製および/または再割り当てする方法は?

多次元配列の部分的なfft

JavaScriptメトリック/多次元配列の重複要素の検索/比較および更新

phpを使用して、多次元配列内の重複要素の数を削除および挿入します

PHPの多次元配列から最小および最大グループ値を取得します

多次元配列内の重複する値を強調表示および非表示にする

テーブル、キー、および値に多次元配列を出力します

との差 ??および||

動的な長さの多次元配列から新しい連結多次元配列を生成する方法

多次元配列アイテムの移動

TOP 一覧

  1. 1

    STSでループプロセス「クラスパス通知の送信」のループを停止する方法

  2. 2

    Spring Boot Filter is not getting invoked if remove @component in fitler class

  3. 3

    Python / SciPyのピーク検出アルゴリズム

  4. 4

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  5. 5

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  6. 6

    androidsoongビルドシステムによるネイティブコードカバレッジ

  7. 7

    ZScalerと証明書の問題により、Dockerを使用できません

  8. 8

    VisualStudioコードの特異点/ドッカー画像でPythonインタープリターを使用するにはどうすればよいですか?

  9. 9

    ビュー用にサイズ変更した後の画像の高さと幅を取得する方法

  10. 10

    二次導関数を数値計算するときの大きな誤差

  11. 11

    Ansibleで複数行のシェルスクリプトを実行する方法

  12. 12

    画像変更コードを実行してもボタンの画像が変更されない

  13. 13

    Reactでclsxを使用する方法

  14. 14

    Three.js indexed BufferGeometry vs. InstancedBufferGeometry

  15. 15

    __init__。pyファイルの整理中に循環インポートエラーが発生しました

  16. 16

    PyTesseractを使用した背景色のため、スクリーンショットからテキストを読み取ることができません

  17. 17

    値間の一致を見つける最も簡単な方法は何ですか

  18. 18

    reCAPTCHA-エラーコード:ユーザーの応答を検証するときの「missing-input-response」、「missing-input-secret」(POSTの詳細がない)

  19. 19

    三項演算子良い練習の代わりとしてOptional.ofNullableを使用していますか?

  20. 20

    好き/愛の関係のためのデータベース設計

  21. 21

    エンティティIDを含む@RequestBody属性をSpringの対応するエンティティに変換します

ホットタグ

アーカイブ