Opencl 内存复制速度比较CPU<-&燃气轮机;GPU

Opencl 内存复制速度比较CPU<-&燃气轮机;GPU,opencl,gpu,memcpy,boost-compute,Opencl,Gpu,Memcpy,Boost Compute,我现在正在学习boost::ComputeOpenCL包装库。 我正在经历非常缓慢的复制过程 如果我们将CPU到CPU的复制速度缩放为1,那么GPU到CPU、GPU到GPU、CPU到GPU的复制速度有多快 我不需要精确的数字。只要有一个大致的想法就会大有帮助。在示例中,CPU-CPU的速度至少是GPU-GPU的10倍。没有人回答我的问题。 所以我做了一个程序来检查复印速度 #include<vector> #include<chrono> #include<algo

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

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


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

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

#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;
}
#包括
#包括
#包括
#包括
#包括
名称空间compute=boost::compute;
使用名称空间std::chrono;
使用名称空间std;
int main()
{
int sz=10000000;
标准:向量v1(sz,2.3f),v2(sz);
向量v3(sz),v4(sz);
自动s=系统时钟::现在();
std::copy(v1.begin(),v1.end(),v2.begin());
自动e=系统时钟::现在();

cout完全取决于您的硬件设置和软件技术,但如果正确,则应在40%到90%的PCIe带宽内完成,前提是您的传输足够大(以及许多其他因素,包括您的GPU是否位于16通道插槽中)。如果我没有记错,我看到的速度大约为5-6 GB/s。如果我没有记错,Intel HD Graphics Skylake没有视频RAM,但与CPU共享内存。比较不同系统上的结果会很有趣。