
ISPC
sandmangu
这个作者很懒,什么都没留下…
展开
-
加速图像处理的神器: Intel ISPC编译器 (五) 迁移图像旋转算法 - ISPC单精度 从单核到多核 及最终性能提升结果
现在CPU的核心数越来越多,即使现在的移动平台也是动辄4核起。前面的代码都是用单线程来运行的,所以只用到了CPU的一个核心。接下来尝试一下利用ISPC多任务机制来利用CPU的多核加速。ISPC代码从单核到多核的优化在ISPC的开发手册里,最简单的多任务机制用到了2个关键字 launch和task在一个函数前面加关键字task,标识这个函数是任务函数,可以在其他代码里通过launch语句来启动。任务函数可以被同时启动多次,在函数里有个内建的变量taskIndex, 标识着当前任务是第几个任务.原创 2020-09-24 13:29:43 · 307 阅读 · 1 评论 -
加速图像处理的神器: Intel ISPC编译器 (四) 迁移图像旋转算法 - 从 ISPC双精度 到 ISPC单精度
前面把原始的C代码转成了ISPC可编译的C代码,其中image_rotate_double_ispc函数里面的数据都是基于double双精度来运算的。我的电脑是支持AVX/AVX2指令集的,所以一次可以并发做4个double浮点的运算,理论上可以提升4倍的算力。通过ISPC的编译,实际获得了3.7倍的性能加速。从上图YMM寄存器的宽度和浮点数据的宽度来看,YMM寄存器可以一次做8个单精float型数据的计算。这次就来试试把image_rotate_double_ispc函数里面的计算全部改.原创 2020-09-24 10:52:08 · 197 阅读 · 0 评论 -
加速图像处理的神器: Intel ISPC编译器 (三) 迁移图像旋转算法 - 从 C代码双精度 到 ISPC双精度
ISPC官方例程里有很多ISPC和MSVC编译器生成代码性能对比的例子, 这次我用一个自己写的简单的图像旋转的算法来试试图像旋转的算法首先按照下面图里的公式,用旋转后的坐标乘以旋转矩阵,就可以得到旋转前的采样坐标位置点采样点坐标因为矩阵乘法里包含三角函数的原因,得到的是一个包含小数的坐标,这时候要基于采样点四周的四个点的颜色做一个双线性插值滤波,得到采样点坐标的颜色MSVC版C代码的实现// *srcImg, 输入灰度图像的像素buffer, 颜色为8bit灰度图像..原创 2020-09-23 17:23:51 · 210 阅读 · 0 评论 -
加速图像处理的神器: Intel ISPC编译器 (二) 基于CMake快速创建Visual Studio项目
把ISPC集成进Visual Studio项目的方法很多,最简单的是把ISPC编译命令设置在Pre-Build Event或者Custom Build Tool里面,例如这篇文章 将英特尔 SPMD 程序编译器(ispc)集成至 Microsoft Visual Studio。这种比较适合把ISPC整合进现有的项目里。对我这种懒人来说,我的项目大多是新创建的,所以我更喜欢利用ISPC 自带例程的cmake来创建项目ISPC例程的文件结构ISPC release包解压缩以后有个exam..原创 2020-09-22 14:39:00 · 396 阅读 · 0 评论 -
加速图像处理的神器: Intel ISPC编译器 (一) ISPC简介
最近刷到这么一篇教程 使用SIMD利器ISPC加速游戏开发简单的上手摸了一下,发现这是个神器,可以帮助我把自己写的单线程的基于C/C++的图像算法编译成SIMD的版本,这样就省得自己手工写SIMD汇编了;同时编译器级的自动优化效率也非常的高,比自己绞尽脑汁的手工调整代码顺序的优化要方便多了 :) 这里强烈的安利一下 :)ISPC相对其他编译器的优势这里用一段简单的代码对比一下ISPC和MSVC的效率 先看MSVC 首先上一段C代码代码逻辑就是简单的从vin buff..原创 2020-09-21 17:04:26 · 2613 阅读 · 0 评论