タイトルで述べたように、 の関数はcudaMallocPitch()
多くの時間をcudaMemcpy2D()
消費し、かなりの時間を消費することもわかりました。
私が使用しているコードは次のとおりです。
cudaMallocPitch((void **)(&SrcDst), &DeviceStride, Size.width * sizeof(float), Size.height);
cudaMemcpy2D(SrcDst, DeviceStride * sizeof(float),
ImgF1, StrideF * sizeof(float),
Size.width * sizeof(float), Size.height,
cudaMemcpyHostToDevice);
実装では、Size.width
とSize.height
は両方とも 4800 です。所要時間cudaMallocPitch()
は約 150 ~ 160ms (事故の場合は複数のテスト) でcudaMemcpy2D()
、約 50ms を消費します。
CPU と GPU 間のメモリ帯域幅がそれほど制限されているとは思えませんが、コードにエラーは見られません。その理由は何ですか?
ちなみに、私が使用しているハードウェアは Intel I7-4770K CPU と Nvidia Geforce GTX 780 (エラーのないかなり良いハードウェア) です。