存储器复制速度比较CPU< - > GPU

时间:2017-12-05 08:15:31

标签: opencl gpu memcpy boost-compute

我现在正在学习boost :: compute openCL包装器库。 我的复制程序很慢。

如果我们将CPU的CPU复制速度调整为1,GPU对CPU,GPU到GPU,CPU到GPU复制的速度有多快?

我不需要准确的数字。只是一个普遍的想法将是一个很大的帮助。例如,CPU-CPU至少比GPU-GPU快10倍。

1 个答案:

答案 0 :(得分:3)

没有人回答我的问题。 所以我制作了一个程序来检查复制速度。

#include<vector>
#include<chrono>
#include<algorithm>
#include<iostream>
#include<boost/compute.hpp>
namespace compute = boost::compute;
using namespace std::chrono;
using namespace std;

int main()
{
    int sz = 10000000;
    std::vector<float> v1(sz, 2.3f), v2(sz);
    compute::vector<float> v3(sz), v4(sz);

    auto s = system_clock::now();
    std::copy(v1.begin(), v1.end(), v2.begin());
    auto e = system_clock::now();
    cout << "cpu2cpu cp " << (e - s).count() << endl;

    s = system_clock::now();
    compute::copy(v1.begin(), v1.end(), v3.begin());
    e = system_clock::now();
    cout << "cpu2gpu cp " << (e - s).count() << endl;

    s = system_clock::now();
    compute::copy(v3.begin(), v3.end(), v4.begin());
    e = system_clock::now();
    cout << "gpu2gpu cp " << (e - s).count() << endl;

    s = system_clock::now();
    compute::copy(v3.begin(), v3.end(), v1.begin());
    e = system_clock::now();
    cout << "gpu2cpu cp " << (e - s).count() << endl;
    return 0;
}

我预计gpu2gpu副本会很快。 但恰恰相反,cpu2cpu最快,而gpu2gpu在我的情况下是如此之慢。 (我的系统是Intel I3和Intel(R)HD Graphics Skylake ULT GT2。) 也许并行处理是一回事,复制速度是另一回事。

cpu2cpu cp 7549776
cpu2gpu cp 18707268
gpu2gpu cp 65841100
gpu2cpu cp 65803119

我希望任何人都可以从这个测试计划中受益。