0

C/C++ でデータを作成および読み取る速度について、いくつかの小さな質問があります。

=> 任意のタイプの配列 (2048*2048 配列を考えてください) にデータを入力する必要がある場合、ループを使用して各セルに入力する方がファイルからロードするよりも高速ですか? (ファイルの開閉にかかる時間を除く)。

⇒別ファイルにデータを持って読み込む場合、元のファイルから読み込むのと同じ時間かかる?(配列を埋める必要があると想像してください。メインプログラムでこの配列を埋める方が良いですか、それとも外部ファイルから損失なく読み取ることができますか?(ファイルを開いたり閉じたりする時間を除く))

=>大量のデータをコピーする必要がある場合、Memcpyはまだ高速ですか?

4

3 に答える 3

4

ファイル操作は、メモリ操作よりも何倍も遅くなります。

memcpy はコンパイラ次第ですが、一般的には、アセンブリに頼らなくても、より速く、または同じように実行できます。

于 2013-01-22T01:31:25.023 に答える
0
If I need to fill data in a array of any type (think about a 2048*2048 array), using a loop and fill each cell is faster then loading it from a file? (excluding time spent to open and close the file).

ファイルから読み取らない場合、どこにデータを入力しますか? しかし、一般に、ファイルからの読み取りは非常に遅くなります。メインメモリでの読み取りがほぼアトミックである場合、ファイルでの同じ操作は 1000 倍以上遅くなります。実際には、必要でない場合は常にファイルからの読み取りを防止します。

大量のデータをコピーする必要がある場合でも Memcpy は高速ですか?

はい。多くの場合、コンパイラとハードウェアに依存します。たとえば、パフォーマンスのためmemcpyに特別なCPU命令SIMD(単一の命令-データの乗算)を使用し、CPUにそれがない可能性があるためです。コンパイラには、比較のためにこの機能がまだあります。

于 2013-01-22T01:43:10.180 に答える
0

インメモリ操作は FILE IO 操作よりもはるかに高速ですが、途中で家を利用できる場合があります。

メモリ マップ ファイルは、OS テクノロジを使用して、ファイルの内容をメモリに直接マップします。各バイトを読み取ってコピーする必要はありません。その後、通常どおりメモリを読み書きできます。これは、多くのアーキテクチャで仮想メモリの基礎となっているため、高度に最適化され、パフォーマンスが向上します。

于 2013-01-22T02:00:01.627 に答える