代码之家  ›  专栏  ›  技术社区  ›  Zeta

内存复制速度比较CPU

  •  4
  • Zeta  · 技术社区  · 7 年前

    我现在正在学习boost::compute openCL包装库。 我正在经历非常缓慢的复制过程。

    如果我们将CPU到CPU的复制速度缩放为1,那么GPU到CPU、GPU到GPU、CPU到GPU的复制速度有多快?

    我不需要精确的数字。仅仅是一个大致的想法将是一个很大的帮助。在示例中,CPU-CPU的速度至少是GPU-GPU的10倍。

    1 回复  |  直到 7 年前
        1
  •  7
  •   Zeta    7 年前

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

    #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

    我希望任何人都能从这个测试项目中受益。