Halcon GPU算法加速测试

news2024/12/27 15:05:47

Halcon GPU算法加速测试

请添加图片描述

基本流程

官方加速程序:compute_devices.hdev

1.获取显示本机显卡信息

2.打开、激活设备、准备测试数据

3.GPU 循环测试执行 (affine_trans_image)

4.GPU 循环测试执行(affine_trans_image) + 数据传入传出

5.CPU 循环测试执行(affine_trans_image)

6.显示结果

代码


* 使用CPU与GPU 选择运行
dev_update_off ()
dev_close_window ()
dev_open_window_fit_size (0, 0, 640, 480, -1, -1, WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')

* 1.获取显示本机显卡信息 *********************************************
* 获取所有有效的 计算设备
query_available_compute_devices (DeviceIdentifier)

* 未找到GPU
if (|DeviceIdentifier| == 0) 
    return ()
endif

* 显示当前设备信息
disp_message (WindowHandle, '设备信息 显卡个数: ' + |DeviceIdentifier| + ' 个GPU', 'window', 12, 12, 'black', 'true')
for Index := 0 to |DeviceIdentifier| - 1 by 1
    get_compute_device_info (DeviceIdentifier[Index], 'name', DeviceName)
    get_compute_device_info (DeviceIdentifier[Index], 'vendor', DeviceVendor)
    Message[Index] := '显卡 序号#' + Index + ': ' + '型号:' + ' ' + DeviceName
endfor
disp_message (WindowHandle, Message, 'window', 42, 12, 'white', 'false')
disp_continue_message (WindowHandle, 'black', 'true')
stop ()


* 运行速度测试
for DeviceIndex := 0 to |DeviceIdentifier| - 1 by 1
    dev_clear_window ()
    * 2.打开、激活设备、准备测试数据 ************************************
    disp_message (WindowHandle, '激活设备 #' + DeviceIndex + ' 基准速度测试', 'window', 12, 12, 'black', 'true')
    
    * 打开计算设备(GPU)
    open_compute_device (DeviceIdentifier[DeviceIndex], DeviceHandle)
    * 停用异步执行
    set_compute_device_param (DeviceHandle, 'asynchronous_execution', 'false')
    * 设置算法affine_trans_image使用 GPU加速
    init_compute_device (DeviceHandle, 'affine_trans_image')
    * 激活使用GPU设备计算
    activate_compute_device (DeviceHandle)
    
    * 准备数据 读取图片与设置旋转平移矩阵(测试用)
    read_image (Image, './rings_and_nuts')
    hom_mat2d_identity (HomMat2DIdentity)
    hom_mat2d_scale (HomMat2DIdentity, 0.9, 0.9, 320, 240, HomMat2DScale)
    hom_mat2d_rotate (HomMat2DScale, 0.78, 320, 240, HomMat2D)
    
    * 3.GPU 循环测试执行 (affine_trans_image) ************************************
    * 设置循环次数
    Loops := 200
    * 执行第一次,缓存
    affine_trans_image (Image, ImageAffineTrans, HomMat2D, 'constant', 'false')
    count_seconds (Before)
    for Index := 1 to Loops by 1
        affine_trans_image (Image, ImageAffineTrans, HomMat2D, 'constant', 'false')
    endfor
    count_seconds (After)
    TimeGPU := (After - Before) * 1000.0 / Loops
    

    * 4.GPU 循环测试执行(affine_trans_image) + 数据传入传出 ************************************
    get_grayval (Image, 0, 0, Grayval)
    affine_trans_image (Image, ImageAffineTrans, HomMat2D, 'constant', 'false')
    count_seconds (Before)
    for Index := 1 to Loops by 1
        * 确保数据 CPU==>GPU
        set_grayval (Image, 0, 0, Grayval)
        affine_trans_image (Image, ImageAffineTrans, HomMat2D, 'constant', 'false')
        * 获取结果 GPU==>CPU
        get_image_pointer1 (ImageAffineTrans, Pointer, Type, Width, Height)
    endfor
    count_seconds (After)
    TimeGPUinclTransfer := (After - Before) * 1000.0 / Loops
    * 
    * 5.CPU 循环测试执行(affine_trans_image)************************************
    deactivate_compute_device (DeviceHandle)
    affine_trans_image (Image, ImageAffineTrans, HomMat2D, 'constant', 'false')
    count_seconds (Before)
    for Index := 1 to Loops by 1
        affine_trans_image (Image, ImageAffineTrans, HomMat2D, 'constant', 'false')
    endfor
    count_seconds (After)
    TimeCPU := (After - Before) * 1000.0 / Loops
    
    * 6.显示结果************************************
    SpeedUp := TimeCPU / TimeGPU
    Message := 'affine_trans_image 运行时间:'
    Message[1] := 'GPU #' + DeviceIndex + ' (除去传输): ' + TimeGPU$'.2f' + ' ms'
    Message[2] := 'GPU #' + DeviceIndex + ' (包括传输): ' + TimeGPUinclTransfer$'.2f' + ' ms'
    Message[3] := 'CPU:              ' + TimeCPU$'.2f' + ' ms'
    Message[4] := ' '
    Message[5] := '加速倍数: ' + SpeedUp$'.1f'
    disp_message (WindowHandle, Message, 'window', 42, 12, 'white', 'false')
    if (DeviceIndex < |DeviceIdentifier| - 1)
        disp_continue_message (WindowHandle, 'black', 'true')
        stop ()
    endif
endfor

请添加图片描述
请添加图片描述

参考链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/820201.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql主从配置及搭建(gtid方式)

一、搭建主从-gtid方式 搭建步骤查看第一篇。bin-log方式。可以进行搭建1.1 gtid和二进制的优缺点 使用 GTID 的主从复制优点&#xff1a; 1、简化配置&#xff1a;使用 GTID 可以简化主从配置&#xff0c;不需要手动配置每个服务器的二进制日志文件和位置。 2、自动故障转移…

【Docker】Docker中安装MySQL数据库

文章目录 1. 前言2. Docker中安装MySQL服务2.1. 查看可用的MySQL版本2.2. 拉取MySQL镜像2.3. 查看本地镜像2.4. 运行容器2.5. 查看正在运行的容器2.6. 查看容器内部2.7. 授权root远程登录2.8. 在宿主机连接到容器的MySQL2.9. 用Navicat连接容器的MySQL 3. 如果是MySQL8.0可能需…

vue项目开发常用工具类

防止重复造轮子&#xff0c;将经常用的函数进行记录&#xff0c;也参考网上的并一起进行记录&#xff0c;后续会持续更新常用到的函数工具类方法&#x1f609;&#x1f609; /** 验证手机号是否合格* true--说明合格*/ export function isPhone(phoneStr) {let myreg /^[1][3,…

VMware vCenter Server Appliance VCSA 备份还原

vCenter是VMware管理员的常备工具&#xff0c;要保护它的安全&#xff0c;我们可以借助vCenter备份还原方式来达成目的。 怎么备份vCenter 7.0&#xff1f; vCenter备份包括vCenter Server核心配置、资源清册和历史数据&#xff0c;如统计信息、事件和任务。接下来&#xff0…

【LeetCode每日一题】——1572.矩阵对角线元素的和

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 矩阵 二【题目难度】 简单 三【题目编号】 1572.矩阵对角线元素的和 四【题目描述】 给你一…

HTTP之Session、Cookie 与 Application

目录 简介cookiecookie生命周期 sessionsession生命周期 HTTP cookies示例application 简介 cookie、seesion、application三个都会缓存我们用户状态的数据&#xff0c;使得我们在浏览器访问网站时可以更快速的获取到信息。 主要原因在于HTTP协议是无状态的&#xff0c;我们每…

IO流(4)- 序列化流与反序列化流

目录 1. 序列化流与反序列化流的基本介绍 2. 序列化流的基本用法&#xff1f; 3. 序列化流的作用&#xff1f; 4. 反序列化流的基本用法&#xff1f; 5. 反序列化流的作用 6. 序列化流与反序列化流使用时需要注意的细节&#xff08;非常重要&#xff09; 6.1 被序列化的…

90%的测试工程师是这样使用Postman做接口测试的

一&#xff1a;接口测试前准备 接口测试是基于协议的功能黑盒测试&#xff0c;在进行接口测试之前&#xff0c;我们要了解接口的信息&#xff0c;然后才知道怎么来测试一个接口&#xff0c;如何完整的校验接口的响应值。 那么问题来了&#xff0c;那接口信息从哪里获取呢&…

中国AI大模型峰会“封神之作”!开发者不容错过这场夏季盛会

年度最强大模型顶会来袭&#xff01;喊话中国数百万AI开发者&#xff0c;速来&#xff01; 硬核来袭&#xff01;中国AI大模型峰会“封神之作”&#xff0c;开发者们不容错过! 前瞻大模型发展趋势&#xff0c;紧跟这场大会&#xff01; 中国科技超级碗&#xff0c;大模型最新前…

SpringCloud Alibaba分布式集群要点

1、可通过nginxkeepalived实现nginx高可用集群。 2、nacos集群&#xff0c;在nacos/conf/cluster.conf配置IP:8848,nginx中配置nacos负载均衡&#xff0c;yml文件使用其对应域名即可。 注&#xff1a;服务器之间内网不通 举例&#xff1a;腾讯服务器之间就存在内网不通的现象…

关于bigemap在土地行业的一些应用

选择Bigemap的原因&#xff1a; 由于我们是国营企业单位&#xff0c;管理六万多亩的国有土地&#xff0c;必须要有这样的软件套图 客户之前用的谷歌&#xff0c;后来不能访问了&#xff0c;通过百度搜索到这款软件 使用场景&#xff1a; 使用软件一般都用于套坐标以及空间规…

未来将有可能是元宇宙发展的数字化时代

近年来&#xff0c;元宇宙环境的概念近年来引起了广泛关注&#xff0c;并引发了巨大的舆论浪潮。然而&#xff0c;经济形式的放缓和行业向人工智能的转变所带来的挫折引发了人们对这一 " 雄心勃勃 " 的概念的可行性和时机的质疑。 很明显&#xff0c;一些挑战阻碍了…

Python元编程-装饰器介绍、使用

目录 一、Python元编程装饰器介绍 二、装饰器使用 1. 实现认证和授权功能 2.实现缓存功能 3.实现日志输出功能 三、附录 1. logging.basicConfig介绍 2. 精确到毫秒&#xff0c;打印时间 方法一&#xff1a;使用datetime 方法二&#xff1a;使用time 一、Python元编程…

Eureka 学习笔记4:EurekaClient

版本 awsVersion ‘1.11.277’ EurekaClient 接口实现了 LookupService 接口&#xff0c;拥有唯一的实现类 DiscoveryClient 类。 LookupService 接口提供以下功能&#xff1a; 获取注册表根据应用名称获取应用根据实例 id 获取实例信息 public interface LookupService<…

【MySQL】数据库基本使用

文章目录 一、数据库介绍二、数据库使用2.1 登录MySQL2.2 基本使用2.2.1 显示当前 MySQL 实例中所有的数据库列表2.2.2 创建数据库2.2.3 创建数据库表2.2.4 在表中插入数据2.2.5 在表中查询数据 三、服务器、数据库、表之间的关系四、SQL语句分类五、存储引擎 一、数据库介绍 …

多线程案例(2)

文章目录 多线程案例二二、阻塞式队列 大家好&#xff0c;我是晓星航。今天为大家带来的是 多线程案例二 相关的讲解&#xff01;&#x1f600; 多线程案例二 二、阻塞式队列 阻塞队列是什么 阻塞队列是一种特殊的队列. 也遵守 “先进先出” 的原则. 阻塞队列能是一种线程…

设计走查指南:提升设计质量的关键步骤

在产品设计过程中&#xff0c;确保产品设计质量是至关重要的。设计走查作为一种关键的质量控制方法&#xff0c;能够帮助设计团队发现问题并采取相应措施来提升设计质量。通过有效地进行设计走查&#xff0c;团队可以提高设计作品的一致性、可用性和用户满意度&#xff0c;从而…

正则表达式在格式校验中的应用以及包装类的重要性

文章目录 正则表达式&#xff1a;做格式校验包装类&#xff1a;在基本数据类型与引用数据类型间的桥梁总结 在现代IT技术岗位的面试中&#xff0c;掌握正则表达式的应用以及理解包装类的重要性是非常有益的。这篇博客将围绕这两个主题展开&#xff0c;帮助读者更好地面对面试挑…

Elasticsearch Java客户端和Spring data elasticsearch-Elasticsearch文章三

文章目录 官网版本组件版本说明实现代码地址es Spring Data Repositories例子&#xff1a;ElasticsearchRepository分析 es Spring Data Repositories 关键字es Spring Data Repositories client 加载rest风格客户端直接执行dsl例子响应式客户端-ReactiveElasticsearchClientpo…

【SLAM】LoFTR知多少

1. LoFTR: Detector-Free Local Feature Matching with Transformers PAPER 论文 | LoFTR: Detector-Free Local Feature Matching with Transformers 代码 | CODE: 关键词 | detector-free, local feature matching LoFTR知多少 1. LoFTR: Detector-Free Local Feature M…