C++性能优化系列——矩阵转置(八)IPP转置API性能测试

2023-10-30

本篇记录Intel 高性能计算函数库IPP中的转置函数ippiTranspose_8u_C1R的执行情况,方便性能优化系列篇中转置实现做性能对比。

函数说明

解释来自IPP2018发布文档。
Intel® Integrated Performance Primitives Developer Reference, Volume 2: Image Processing
函数API
IPPAPI(IppStatus, ippiTranspose_8u_C1R, ( const Ipp8u* pSrc, int srcStep, Ipp8u* pDst, int dstStep, IppiSize roiSize ))
参数说明
Parameters
pSrc Pointer to the source image ROI. srcStep Distance, in bytes, between the starting points of consecutive lines in the source image. pDst Pointer to the destination image ROI.
dstStep Distance, in bytes, between the starting points of consecutive lines in the
destination image. pSrcDst Pointer to the source and destination ROI for in-place operation. srcDstStep Distance, in bytes, between the starting points of consecutive lines in the source and destination image buffer for the in-place operation. roiSize Size of the source ROI in pixels.
功能描述
This function operates with ROI. This function transposes the source image pSrc (pSrcDst for in-place flavors) and stores the result in pDst (pSrcDst). The destination image is obtained from the source image by transforming the columns to the rows: pDst(x,y) = pSrc(y,x) The parameter roiSize is specified for the source image. The value of the roiSize.width parameter for the destination image is equal to roiSize.height for the source image, and roiSize.height for the destination image is equal to roiSize.width for the source image.
在这里插入图片描述
API的基本功能与参数含义文档提供的说明已经解释的非常清楚了。在这里额外补充两点:
1.C1R的含义:C Channel,为复数计算提供的功能,这里对8位无符号整数计算,因此用C1。 R ROI。
2.接口提供了ROI转置功能,自己实现的过程中可以根据机器缓存情况自行调整内存尺寸。

IPP性能测试

测试程序

void IPPTranspose(unsigned char* pSource, unsigned char* pTarget)
	{
		clock_t begin = clock();
		IppiSize ROI = { NROW, NCOL };
		for (int i = 0; i < REPEAT; ++i)
		{
			ippiTranspose_8u_C1R((const Ipp8u*)pSource, NREALCOL, ( Ipp8u*)pTarget, NROW, ROI);
		}
		clock_t end = clock();
		std::cout << "IPPTranspose 10240 Time " << (end - begin) << std::endl;
		std::cout << "IPPTranspose each Time (ms) " << ((float)(end - begin)) / (float)REPEAT << std::endl;
	}

说明:其中原始矩阵已经是内存填充后的状态。
执行时间:

IPPTranspose 10240 Time 842
IPPTranspose each Time (ms) 0.0822266
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++性能优化系列——矩阵转置(八)IPP转置API性能测试 的相关文章

  • Gtk/GtkD 在窗口调整大小时检测鼠标按钮的释放?

    我正在尝试改进我用 GtkD Gtk 的 D 绑定 编写的绘图库 具有很多点的散点图需要很长时间才能调整大小 我想重新缩放图像 允许像素化 同时用户拖动窗口边缘来调整大小 并且仅在释放鼠标按钮时重新渲染它 是否有 API 可以检测在调整窗口
  • 提高第一个查询的性能

    如果执行以下数据库 postgres 查询 则第二次调用要快得多 我猜第一个查询很慢 因为操作系统 linux 需要从磁盘获取数据 第二个查询受益于文件系统级别和 postgres 中的缓存 有没有一种方法可以优化数据库以快速获得结果fir
  • 如何在 JMeter 中显示实际循环计数

    我们可以通过以下方式显示实际线程 threadNum 实际循环计数有类似的东西吗 您可以使用 jm Thread Group idx 获取当前循环迭代 jm Thread Group idx 请注意 这是 JMeter 5 中一般增强功能的
  • cmd 和 workbench mysql 查询性能差异

    我有两个问题 正如我的标题 哪一个对于对大量数据运行大型查询更有效 我查看了 MySQL 文档 其中解释了工作台的性能https www mysql com products workbench performance https www
  • 使用属性和性能

    我正在优化我的代码 我注意到使用属性 甚至自动属性 对执行时间有深远的影响 请参阅下面的示例 Test public void GetterVsField PropertyTest propertyTest new PropertyTest
  • 发布Oracle和SQL Server性能测试是否违反许可? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想对Oracle和SQL Server中的空间索引进行性能测试 我想将其纳入我的理学硕士工作中 发布此类结果是否违反 dbms 的许可 也许有人已经
  • 与 StackExchange.Redis 并行执行?

    我有一个 100 万件商品的商店List
  • BulkRequestBuilder 的 Elasticsearch 索引速度变慢

    大家好 elasticsearch 大师们 我有数百万数据需要由elasticsearch Java API 索引 Elasticsearch 的集群节点数量为 3 个 1 个主节点 2 个节点 我的代码片段如下 Settings sett
  • 性能:Matlab 与 Python

    我最近从Matlab to Python 在转换我的一个冗长代码时 我惊讶地发现Python非常慢 我分析并追踪了一个函数占用时间的问题 该函数是从我的代码中的各个位置调用的 作为递归调用的其他函数的一部分 探查器建议300两个地方都调用了
  • Python:写入大文件时,保持文件打开还是打开文件并根据需要追加到文件中?

    我想知道如何最好地处理 python 中的大文件写入 我的Python代码多次循环运行外部程序 古老的Fortran 具有奇怪的输入文件格式 读取其输出 一行文件 进行一些非常简单的处理 然后写入编译后的输出文件 外部程序执行速度很快 远低
  • ASM 中从小端到大端的快速转换

    我在 C 中有一个 uint 类型数组 在检查程序是否在小端机器上运行后 我想将数据转换为大端类型 因为数据量可能会变得非常大 但总是均匀的 所以我想考虑将两个 uint 类型作为 ulong 类型 以获得更好的性能并在 ASM 中对其进行
  • 当我提前知道可迭代类的长度时,我可以加速它吗?

    PEP 424 https www python org dev peps pep 0424 在 理由 中提到 能够根据预期大小预先分配列表 如估计的那样 length hint 可以是一个重大的优化 据观察 CPython 运行某些代码的
  • 为什么处理未排序数组的速度与使用现代 x86-64 clang 处理排序数组的速度相同?

    我发现了这个受欢迎的 9岁那么问题 https stackoverflow com questions 11227809 why is processing a sorted array faster than processing an
  • 编码/设计通用线程安全限制器(即将 X() 每秒执行多次)

    我计划设计一个类来将函数的执行限制在指定时间内的给定数量 例如 最大处理量1 秒内 5 个文件 它应该是线程安全的并且性能影响应该最小 你会如何设计这样一个类 我有几个想法 但对我来说 没有一个是正确的 是否有任何已知的设计模式可以完成此类
  • 此代码中 Matlab 与 C++ 速度比较

    我编写了简单的 C 代码并在 C 中对其进行了测试 然后我通过以下方式为 MATLAB 调整了相同的代码mex file name cpp并在 MATLAB 中运行相同的代码 该代码使用与 C 相同的编译器 这是代码 int k for i
  • 具有曼哈顿距离启发式的 A* 算法

    我一直在用 C 语言开发一个 15 个谜题求解器 我的代码使用的大量内存给我带来了一些问题 我不会发布我的代码 因为它太长了 我已经实现了我正在使用的大部分库 它可能会给您带来困惑 让我们从基础开始 我现在正在使用的东西是 全部用C实现 斐
  • 高效滚动最大和最小窗口

    我想有效地计算滚动最大值和最小值 这意味着比每次窗口移动时从使用的所有值重新计算最大值 最小值更好 这里有一篇文章问了同样的问题 有人发布了一个涉及某种堆栈方法的解决方案 据说该方法是根据其评级来工作的 然而我这辈子都找不到它了 在寻找解决
  • 内存映射文件的性能/稳定性 - Native 或 MappedByteBuffer - 与普通的 FileOutputStream

    我支持使用平面文件 纯文本 进行持久化的旧版 Java 应用程序 由于应用程序的性质 这些文件的大小每天可以达到 100 MB 并且应用程序性能的限制因素通常是文件 IO 目前 应用程序使用普通的 java io FileOutputStr
  • Hibernate 对于 Android 应用程序来说是一种杀伤力吗? [复制]

    这个问题在这里已经有答案了 我正在为我的 Android 应用程序寻找一个好的 ORM 乍一看似乎对于移动设备我更喜欢使用更简单的东西 问题是我只是在这里假设 没有真正的证据 所以我想我应该询问社区的意见 也许有人有过这样的经历 它是一个相
  • 动态_cast的性能?

    在阅读问题之前 这个问题不是关于它有多大用处dynamic cast 这只是关于它的性能 我最近开发了一个设计 其中dynamic cast被大量使用 与同事讨论时 几乎每个人都这么说dynamic cast不应该使用 因为它的性能很差 这

随机推荐

  • allegro17.4 中规则的导入与导出

    在使用allegro时 经常会遇到多个项目的规则一致 因此进行规则的复用很有必要 1 打开已经设置好规则的PCB文件 执行菜单setup constraints constraint manager 进入菜单管理器 2 然后点击file e
  • Elasticsearch:RestClient+SearchSourceBuilder使用案例

    1 前言 RestClient是较低层的API 这里使用基于其封装的高层API 即RestHighLevelClient 需要添加的依赖如下
  • Altium AD20更改原理图背景颜色

    AD20更改原理图背景颜色 点击右下角 Panels 选择 Properties Sheet Color 即为背景颜色 Sheet Border 为 页面信息栏 及 最外层边框 的颜色 AD默认的淡黄色背景颜色为 FFFCF8 更改回默认可
  • axios 或 fetch 如何实现对发出的请求的终止?

    终止 HTTP 请求是一个重要的功能 特别是在需要优化性能 避免不必要的请求或在某些事件发生时 例如用户点击取消 中断正在进行的请求时 以下是如何使用 axios 和 fetch 实现请求终止的方法 1 axios axios 使用了 Ca
  • 微信小程序基础使用-请求数据并渲染

    小程序基本使用 请求数据并渲染 小程序模板语法 数据绑定 在js中定义数据 Page data isOpen true message hello world 小程序的data是一个对象 不同于vue的data是一个函数 在模块中获取使用数
  • Bash基本命令用法

    man 查看命令帮助信息 echo 在终端输出字符 reboot 重启 poweroff 关机 ps 查看系统中的进程状态 top 动态的监视进程活动与系统负载等信息 pidof 查询某个指定服务进程的pid值 kill 终止某个指定pid
  • 3DsMax次级菜单无法选中---简单方法

    在桌面新建文本文档 将下列代码赋值到文本文档中 Ctrl S保存代码 然后改扩展名为 reg 最后双击导入就完美解决了 Win10系统代码 Windows Registry Editor Version 5 00 HKEY CURRENT
  • mybatis查询当年的数据、查询当天的数据、查询当年每个月的数据

    mybatis查询当年 当天的数据 查询当年每个月的数据 最近遇到公司的需求 查询一个表里面当年的数据和当年每个月的数据 测试数据表如下 很显然我们要对time字段进行操作 查询当天的数据 我们可以在where后面这么写 AND TO DA
  • windows建立隐藏用户及查找隐藏用户

    建立隐藏用户 1 cmd gt net user 用户名 密码 add hint cmd gt net localgroup administrators 用户名 add 将用户添加进管理员组 2 cmd gt regedit 路径 HKE
  • ty计算机网络背诵简答题满分冲刺版!

    ty计算机网络背诵简答题满分冲刺版 ty 2023 名词解释 记忆中文名称即可 缩写 全称 解释 DNS 域名系统 用于将域名转换为IP地址的分布式数据库系统 URL 统一资源定位符 用于标识互联网上资源位置的地址 IGP 内部网关协议 用
  • 什么时候要有拷贝构造函数?

    1 构造对象 时 用已实例化的对象进行构造 int main Student a 10 2 Student b a 拷贝构造 并且要特别注意指针数据成员的赋值 避免出现野指针的情况 2 返回临时对象 而不是返回对象的引用 rmb opera
  • 如何使用代理IP池进行爬虫工作

    要使用代理IP池进行爬虫 需要先将代理IP池集成到爬虫代码中 并在需要访问目标网站时随机选取代理IP进行访问 简单的步骤如下 1 导入代理IP池模块 将代理IP池的模块集成到你的爬虫代码中 通常情况下 代理IP池提供了一些API接口 可以通
  • Android中常用的adb shell命令

    注意事项 这里写的命令 网页可能会重新编辑格式 比如我写了两个减号 发布后变成了一个减号 如果这里的命令不能正确执行 请手动输入命令 切记切换英文状态 android 常用shell命令记录下来备忘 n 在shell命令中的作用是换行 而
  • 8.Spring EL与ExpressionParser

    Spring EL与ExpressionParser 文章目录 Spring EL与ExpressionParser 介绍 使用SpEL来计算评估文字字符串表达式 使用SpEL来计算评估 bean 属性 item name 介绍 Sprin
  • 原生js实现水印背景

    参考文档 https juejin cn post 6844904095749242888 1 通过canvas生成水印图片 2 把图片作为div的背景让其平铺 const setWatermark gt let canvas docume
  • Java线程池ThreadPoolExecutor-终止线程池原理

    一 终止线程池主要有两个方法 shutdown 和 shutdownNow shutdown 后线程池将变成shutdown状态 此时不接收新任务 但会处理完正在运行的 和 在阻塞队列中等待处理的任务 shutdownNow 后线程池将变成
  • ArcPy操作shp格式文件

    目录 ArcPy操作shp格式文件 shp文件介绍 创建shp 编辑shp 编辑列 字段 插入列 编辑行 记录 主要涉及的对象 arcpy Cursor 游标 对象 arcpy Row对象 arcpy Array对象 插入行 删除行 更新行
  • java中double转String如何去掉整数结尾的小数位“.0“

    可以使用Java中的DecimalFormat类 设置格式化模式来实现将double转为String 去掉整数结尾的小数位 0 以下是示例代码 double d 1234 0 DecimalFormat df new DecimalForm
  • linux 新建用户、用户组 以及为新用户分配权限

    一 Linux系统用户账号的管理 用户账号的管理工作主要涉及到用户账号的添加 修改和删除 添加用户账号就是在系统中创建一个新账号 然后为新账号分配用户号 用户组 主目录和登录Shell等资源 刚添加的账号是被锁定的 无法使用 1 添加新的用
  • C++性能优化系列——矩阵转置(八)IPP转置API性能测试

    本篇记录Intel 高性能计算函数库IPP中的转置函数ippiTranspose 8u C1R的执行情况 方便性能优化系列篇中转置实现做性能对比 函数说明 解释来自IPP2018发布文档 Intel Integrated Performan