北风吹来个毛 2022-11-28 16:32 采纳率: 28.6%
浏览 19
已结题

有什么方法可以减少pytorch的permute函数运行的时间?

我在使用pytorch的C++接口的张量转置函数permute时,发现这个函数在转换到CPU时调用的时间太多,大概是10ms,我现在想把这个速度提升到5毫秒左右,我应该怎么做?
代码如下:


#include<torch/torch.h>
#include<torch/script.h>
#include<opencv2/opencv.hpp>

#include<iostream>

using namespace std;

void main(){

    cv::Mat image = cv::imread("C:\\Users\\Desktop\\1.jpg");  // filePaths[0]
    cv::resize(image, image, cv::Size(256, 256));

    torch::Tensor x = torch::from_blob(image.data, { 1,3,256,256 }, torch::kByte); // [1, 3, 256, 256]

    try
    {
        x = x.squeeze(0);
        double start = clock();
        torch::Tensor argmax_out = x.permute({ 1, 2, 0 }).to(torch::kCPU).detach().div(255.0).to(torch::kFloat32);   // 3
        
        cv::Mat resultImg(256, 256, CV_32FC3, argmax_out.data_ptr<float>());
        double end = clock();
        cout << "时间: " << double(end - start) << endl;
        cv::imshow("resultImg", resultImg);
    }
    catch (const c10::Error & e)
    {
        cout << e.msg() << endl;
    }

    cv::waitKey(0);
    system("pause");
}

以下是程序输出:

img

  • 写回答

2条回答 默认 最新

  • YF云飞 Unity领域新星创作者 2022-11-28 16:50
    关注

    我认为唯一主要的加速将发生于并行。如果您因为cpu受限问题,那么利用多核是至关重要的。试着让每一行通过不同的(线程/进程)。当然,这会引起更多的问题,例如数据是否需要按照输入文件中的相同顺序排列。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月7日
  • 已采纳回答 11月29日
  • 修改了问题 11月28日
  • 创建了问题 11月28日

悬赏问题

  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容