内存拷贝速度对比CPU<->GPU
Memory copy speed comparison CPU<->GPU
我现在正在学习 boost::compute openCL 包装器库。
我的复制过程很慢。
如果我们将 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;
}
我预计 gpu2gpu 复制会很快。
但相反,cpu2cpu 最快,而 gpu2gpu 在我的情况下太慢了。
(我的系统是 Intel I3 和 Intel(R) HD Graphics Skylake ULT GT2。)
也许并行处理是一回事,复制速度是另一回事。
cpu2cpu cp 7549776
cpu2gpu cp 18707268
gpu2gpu cp 65841100
gpu2cpu cp 65803119
我希望任何人都能从这个测试程序中受益。
我现在正在学习 boost::compute openCL 包装器库。 我的复制过程很慢。
如果我们将 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;
}
我预计 gpu2gpu 复制会很快。 但相反,cpu2cpu 最快,而 gpu2gpu 在我的情况下太慢了。 (我的系统是 Intel I3 和 Intel(R) HD Graphics Skylake ULT GT2。) 也许并行处理是一回事,复制速度是另一回事。
cpu2cpu cp 7549776
cpu2gpu cp 18707268
gpu2gpu cp 65841100
gpu2cpu cp 65803119
我希望任何人都能从这个测试程序中受益。