私は今boost :: compute openCLラッパーライブラリを学習しています。 コピー処理が非常に遅いです。メモリコピー速度の比較CPU <-> GPU
CPUのコピー速度を1に設定した場合、GPUからGPU、GPUからGPU、CPUからGPUまでのコピー速度はどれくらいですか?
正確な数字は必要ありません。ちょうど一般的なアイデアは大きな助けになるでしょう。 CPU-CPUの例では、GPU-GPUより少なくとも10倍高速です。
私は今boost :: compute openCLラッパーライブラリを学習しています。 コピー処理が非常に遅いです。メモリコピー速度の比較CPU <-> GPU
CPUのコピー速度を1に設定した場合、GPUからGPU、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です。) 並列処理とコピー速度の違いがあるかもしれません。 gpu2gpuのCP 65841100
gpu2cpuのCP 65803119
cpu2cpuのCP 7549776
cpu2gpuのCP 18707268
私は、誰もが、このテストプログラムで恩恵を受けることができると思います。
は完全にハードウェアのセットアップとソフトウェア技術に依存するが、PCIeの帯域幅の40%から90%にする必要があります右行われていれば、あなたの転送が十分な大きさ(およびその他の要因の多く、あなたのGPUが16であるかどうかを含めて提供されますレーンスロット)。私が正しくリコールすれば、私は約5-6 GB/sを見ます。 – Dithermaster