首页 > 解决方案 > 为什么许多小的 memcpy 比一个大的 memcpy 快?

问题描述

我发现拥有许多小的 memcpy 比拥有一个大的 memcpy 更快。我不明白为什么会这样。memcpy 不是更擅长复制一大块数据吗?

我已经在 VC++ 2017 和 Intel 编译器 2018 上测试了以下代码。

一个大型 memcpy 的时间:0.457913 和许多小型 memcpy 的时间:0.121063

typedef double tp;
size_t sz = 100;
size_t nm = 1000000;
tp* x = new tp[sz*nm];
std::vector<tp*> y(nm);
for (int i = 0; i < nm; ++i)
   y[i] = new tp[sz];

tp*  z1 = new tp[sz*nm];
std::vector<tp*> z2(nm);
for (int i = 0; i < nm; ++i)
   z2[i] = new tp[sz];

double currTime, lastTime;

lastTime = omp_get_wtime();
memcpy((void*)z1, (void*)x, sizeof(tp)*sz*nm);
currTime = omp_get_wtime();
std::cout << "time for one large memcpy: " << currTime - lastTime << std::endl;

lastTime = omp_get_wtime();
for (int i = 0; i < nm; ++i)
    memcpy((void*)z2[i], (void*)y[i], sizeof(tp)*sz);
currTime = omp_get_wtime();
std::cout << "time for many small memcpy: " << currTime - lastTime << std::endl;

delete[] x;
delete[] z1;
for (int i = 0; i < nm; ++i)
{
   delete[] y[i];
   delete[] z2[i];
}

标签: c++memorymemcpy

解决方案


推荐阅读