저는 이제 boost :: compute openCL wrapper 라이브러리를 배우고 있습니다. 복사 절차가 매우 느립니다.메모리 복사 속도 비교 CPU <-> GPU
CPU를 CPU 복사 속도에 1로 맞춘 경우 GPU가 CPU, GPU에서 GPU, CPU에서 GPU로 얼마나 빨리 복사됩니까?
정확한 숫자는 필요하지 않습니다. 그냥 일반적인 생각은 큰 도움이 될 것입니다. 예제 CPU-CPU는 GPU-GPU보다 최소 10 배 빠릅니다.
저는 이제 boost :: compute openCL wrapper 라이브러리를 배우고 있습니다. 복사 절차가 매우 느립니다.메모리 복사 속도 비교 CPU <-> GPU
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 7,549,776
cpu2gpu의 CP 18707268
gpu2gpu의 CP 65841100
gpu2cpu의 CP 65803119
나는 사람이 테스트 프로그램으로 혜택을 누릴 수 있기를 바랍니다.
완전히 하드웨어 구성 및 소프트웨어 기술에 따라 다르지만 전송이 충분히 큰 경우 (그리고 GPU가 16 차선 슬롯). 올바르게 기억한다면 대략 5-6GB/s가됩니다. – Dithermaster