OpenCL copyto() 消耗更多时间

OpenCL copyto() consumes more time

本文关键字:时间 copyto OpenCL      更新时间:2023-10-16

我正在比较OpenCL UMat与OpenCL Mat的OpenCL,我运行了500次cvtColor()函数。

int OpenCL_UMat()
{
    Mat img;
    UMat uimage, U1;
    img = imread("image_path");
    for (int i = 1; i < 500; i++)
    {
        img.copyTo(uimage); // Here it takes 1 sec
        cvtColor(uimage, U1, CV_BGR2GRAY);
    }
    imshow("image1", U1);
    return 0;
}
int OpenCL_Mat()
{
    Mat img, img1;
    img = imread("image_path");
    for (int i = 1; i < 500; i++)
    {
        cvtColor(img, img1, CV_BGR2GRAY);
    }
    imshow("image1", img);
    return 0;
}

代码的输出(以微秒
为单位( ____
|OpenCL UMat= 2368720 微秒-|
|_________________________________|
| OpenCL 垫 = 312200 微秒----|
|_________________________________|

从上面的代码中我发现copyto()函数需要时间将图像从 RAM 加载到 GPU 上,因此当 copyto(( 函数运行时,它需要 1 秒才能执行。

有什么选择,我可以直接使用 UMat。
像这样
的东西UMat img = imread("image_path");

您可以使用

UMat img = imread("image_path").getUMat(ACCESS_READ);