
SIMD
文章平均质量分 63
dbyoung
热爱编程
展开
-
检测 CPU 支持的指令集
CPU 指令集原创 2022-12-17 09:13:12 · 1251 阅读 · 0 评论 -
dbImageSDK 高速数字图像处理
高速数字图像处理。支持 C++、C#、Delphi,等等语言调用原创 2022-10-21 16:31:38 · 926 阅读 · 0 评论 -
GPU、CPU、内存、文件流、磁盘的速度之比
作为一个程序员,追求程序的运行速度是正常的行为不过。那么 GPU、CPU、内存、文件流、磁盘,速度到底相差多少?今天整理了一下。1、GPU 在进行通用运算时,和 CPU 是一个数量级的。在进行重复劳动时,效率是 CPU 的几百倍了。 GPU,相当与 Windows 中的批处理。 执行一次动作没有什么速度优势。当你执行1000次、100000次,效率就体现出来了。 用 GPU 解码一张 JPEG 图片,和 CPU 相比,根本没有优势。 但如果你是解码 1000 张...原创 2022-01-01 11:23:16 · 6075 阅读 · 0 评论 -
Delphi 汇编学习(十二)--- CRC32 校验
学习 SIMD 指令时,发现一条 crc32 指令,一看就知道,肯定是用来进行 CRC 校验的。在网上搜索了一番,BAIDU 不出什么有用的信息。很多代码,连基本的 CRC32 校验代码都是错的。GOOGLE 搜索了一些,都是 C++ 的。但 C++ 都倾向与写算法,没有什么具体的示例。也不知道对不对。看来只好自己写来验证了。我不敢说我写的肯定正确,但我会经过慎重测试,确认没有问题后,才公布。CRC32 校验算法有很多种:CRC32 IEEE 802.3、CRC32 Castagnoli、CRC3原创 2021-08-04 23:02:55 · 3109 阅读 · 2 评论 -
Delphi 汇编学习(十一)--- 图像旋转的极致优化
图像旋转原理:假设对图片上任意点(x,y),绕一个坐标点(rx0,ry0)逆时针旋转RotaryAngle角度后,新的坐标设为(x', y'),有公式: x'= (x - rx0)*cos(RotaryAngle) + (y - ry0)*sin(RotaryAngle) + rx0 ; y'=-(x - rx0)*sin(RotaryAngle) + (y - ry0)*cos(RotaryAngle) + ry0 ; 那么,根据新的坐标点求源坐标点的公式为: x=(x'- rx0)...原创 2021-07-20 12:08:09 · 2397 阅读 · 1 评论 -
Delphi 汇编学习(十)--- 内存复制的极致优化
在 汇编学习(八)--- 图像水平镜像垂直镜像的极致优化 中,我们使用了 FastMove,来提高内存复制速度。但 FastMove 不支持 x64。而且很多年没有更新了。我们自己动手来写吧。由简到繁,容易理解。必须支持:X86、X64。必须支持:SSE2/SSE4/AVX1/AVX2。首先写一个最简单的 MOVE 函数。每一次复制 1 个字节:{ 每一次复制 1 个字节 <Byte> }procedure Move_Byte(const src: Pointer; dst:原创 2021-03-08 15:38:20 · 1077 阅读 · 2 评论 -
Delphi 汇编学习(九)--- 图像透明度调节的极致优化
图像的透明度,其实就是两幅图像的占比。R = R1 * (1 - K)+ R2 * KG = G1 * (1 - K)+ G2 * KB = B1 * (1 - K)+ B2 * KK 在 0.0 --- 1.0 之间。这里有浮点乘法运算,当然我们可以进行整点优化。标准函数:procedure ColorTrans_Scanline(bmpDst, bmpSrc: TBitmap; const intTransValue: Integer);var X, Y : ...原创 2021-02-27 13:42:49 · 633 阅读 · 2 评论 -
Delphi 汇编学习(八)--- 图像水平镜像垂直镜像的极致优化
一:水平镜像/翻转 将一幅图像水平镜像/翻转,代码很简单,就一句代码:procedure HorizMirror(bmp: TBitmap);begin bmp.Canvas.CopyRect(bmp.Canvas.ClipRect, bmp.Canvas, Rect(bmp.Width, 0, 0, bmp.Height));end;简单不。看一看 CopyRect 源码,procedure TCanvas.CopyRect(const Dest: TRect; Ca...原创 2021-02-27 00:35:26 · 781 阅读 · 0 评论 -
Delphi 汇编学习(七)--- 图像饱和度调节的极致优化
图像的饱和度调节的标准函数:procedure GetGrayAlpha(const intSaturationValue: Integer; var alpha: TAlpha; var grays: TGrays);var X : Integer; I : Integer; Gray: Integer;begin for I := 0 to 255 do begin alpha[I] := (I * intSaturationValue) shr 8;原创 2021-02-23 15:14:37 · 324 阅读 · 0 评论 -
Delphi 汇编学习(六)--- 图像对比度调节的极致优化
第五章中,我们知道图像对比度调节函数:procedure Contrast_ScanLine(bmp: TBitmap; const intContrastValue: Integer);var X, Y : Integer; pColor: PRGBQuad;begin for Y := 0 to bmp.height - 1 do begin pColor := bmp.ScanLine[Y]; for X := 0 to bmp.width - 1 do原创 2021-02-20 07:43:41 · 401 阅读 · 0 评论 -
Delphi 汇编学习(五)--- Delphi 程序员永久的痛
我是个 Delphi 程序员。一直很喜欢 Delphi。虽然现在国内 Delphi 的市场越来越小众。我依然喜欢它。一直都想用自己的微薄之力,给 Delphi 做一点点贡献。近几日春节放假,白天访亲问友,晚上闲来无事,学习学习 SIMD 程序优化。近两天在做图像的对比度调节的 SIMD 优化。procedure Contrast_ScanLine(bmp: TBitmap; const intContrastValue: Integer);var X, Y : Integer; p原创 2021-02-19 23:59:10 · 1128 阅读 · 6 评论 -
Delphi 汇编学习(四)--- 图像亮度调节的极致优化
通过前三章的学习,我们知道了 并行优化 + SSE优化,是最优的解决方案。这一节我们用同样的方法,来对图像的亮度进行调节。Delphi 汇编学习(一)--- 图像灰值化Delphi 汇编学习(二)--- 学习 SIMD 的痛苦Delphi 汇编学习(三)--- 图像灰值化的极致优化procedure Light_SSEParallel_Proc(pColor: PRGBQuad; const intLightValue, bmpWidth: Integer);asm {$IFDEF WIN64}原创 2021-02-17 11:34:43 · 441 阅读 · 1 评论 -
Delphi 汇编学习(一)--- 图像灰值化
使用 Delphi 多年了,虽然看过 Delphi 中的汇编代码,但基本没有写过汇编代码。因为没有什么项目需求。今天因为要优化老程序的一段代码,到网上搜索了一下。发现很多都是汇编写的。效率也的确高。这让我有了学习汇编的冲动。汇编代码一般都是在对效率高的场合才会使用到,比如多媒体、视频领域。虽然我不是做相关的行业的。但学习学习总没有坏处。学习的最好办法是看例子(源代码)。越简单越好。下手的例子是 RGB2Gray。是的,图片 RGB 转 灰度图。网络上这样的代码很多,都是用 C/C++ 写原创 2021-01-23 00:54:40 · 1391 阅读 · 4 评论 -
Delphi 汇编学习(三)--- 图像灰值化的极致优化
看过Delphi 汇编学习(一)--- 图像灰值化,Delphi 汇编学习(二)--- 学习 SIMD 的痛苦,这两篇文章后,你就知道了:其实 AVX/AVX2 的优化效果并不佳。而且很多机器也不支持这些指令(Delphi 编译器也不支持 AVX 指令集)。而 SSE 的优化效果是比较不错的。并且 Delphi 编译器也支持 SSE 指令集(易博龙是不是也知道AVX 优化效果不好,所以才不支持的)。在示例中(https://github.com/dbyoung720/ImageGray.g...原创 2021-02-14 02:08:11 · 798 阅读 · 0 评论 -
Delphi 汇编学习(二)--- 学习 SIMD 的痛苦
学习 SIMD 指令有一段时间了。真的痛苦(或许是我对指令不熟的缘故)。第一阶段:MMX一开始为了加快 CPU 的浮点运算能力,intel 搞了个MMX,看似强大。但用着用着就发现,它主要是针对浮点运算,对于整数运算有天生的不足。虽然可以通过浮点来模拟整数运算,性能也下降了。或者说提速不明显。或者说没有想象中的那么高速。算是第二阶段:SSE1/SSE2/SSE3/SSE4估计 intel 也知道了。又挤出了 SSE1/SSE2/SSE3/SSE4,这下整数指令、浮点指令、移位指令、等等指令都原创 2021-02-09 12:04:37 · 643 阅读 · 1 评论