aclrtMemcpy内存复制速度慢
收藏回复举报
aclrtMemcpy内存复制速度慢
t('forum.solved') 已解决
发表于2025-07-09 09:22:47
0 查看

设备是Atlas 500 A2,使用aclrtMemcpy进行内存拷贝,将多个hi_vpc_pic_info的内容拷贝到一个cv::Mat里,由于内存不连续所以只能逐行拷贝,速度很慢,一帧要100ms,代码如下:

for (int i = 0; i < num_images; i++) { 

    int offset = panoRois[i].x * image_concat.elemSize(); 

    uchar* matPtr; 

    uchar* picPtr; 

    size_t matStride = image_concat.elemSize() * panoRois[i].width; 

    for (int j = 0; j < panoRois[i].height; j++) { 

        matPtr = image_concat.data + j * image_concat.step + offset; 

        picPtr = static_cast<uchar*>(croped_pic_info[i].picture_address) + j * croped_pic_info[i].picture_width_stride; 

        ret = aclrtMemcpy(matPtr, matStride, picPtr, matStride, ACL_MEMCPY_DEVICE_TO_DEVICE); 

        if (ret != ACL_SUCCESS) { 

            SAMPLE_PRT("Copy device to cv::Mat failed, ret = %d\n", ret); 

            return -1; 

        } 

    } 

}

如果使用多stream速度更慢,因为aclrtMemcpyAsync下发就要1ms。使用dvpp的hi_mpi_vpc_crop_resize_paste速度又很快,只要6ms,但是要resize,hi_mpi_vpc_crop_resize_paste最大尺寸只支持4096。hi_mpi_vpc_crop_resize_paste内部是怎么实现的?怎么在不resize的前提下提高拷贝速度?

我要发帖子