Delphi 汇编学习(五)--- Delphi 程序员永久的痛

17 篇文章 4 订阅
15 篇文章 2 订阅

我是个 Delphi 程序员。一直很喜欢 Delphi。虽然现在国内 Delphi 的市场越来越小众。我依然喜欢它。
一直都想用自己的微薄之力,给 Delphi 做一点点贡献。

近几日春节放假,白天访亲问友,晚上闲来无事,学习学习 SIMD 程序优化。
近两天在做图像的对比度调节的 SIMD 优化。

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
    begin
      pColor^.rgbRed   := EnsureRange(((pColor^.rgbRed   - 128) * intContrastValue + 12800) div 100, 0, 255);
      pColor^.rgbGreen := EnsureRange(((pColor^.rgbGreen - 128) * intContrastValue + 12800) div 100, 0, 255);
      pColor^.rgbBlue  := EnsureRange(((pColor^.rgbBlue  - 128) * intContrastValue + 12800) div 100, 0, 255);
      Inc(pColor);
    end;
  end;
end;

这个函数就是对比度调节函数。很简单吧(喜欢 Delphi 语言。语法优美、简单)。
如果用 SSE 来优化的话,+、-、*、EnsureRange,都很容易完成。
一条指令即可(EnsureRange 函数对应 SSE 的饱和加法指令,详见第四章)。
唯一一个麻烦,就是这个:div 100。
SSE 没有整数除法指令。要用其它方法来模拟。如果用浮点数来模拟效果会大打折扣。失去了优化的意义。
于是 baidu、google,一顿搜。
baidu 基本上找不到什么帮助信息。都是你抄我,我抄他。他又抄他妈,他妈抄 google。
google 搜出来很多有用的原创信息。但信息都是 C++ 的。Delphi 一个没有。
网上优秀的源码,大部分是 C++ 的。
从 google 搜索出来的很多新论文算法,也都是用 C++ 写的。
近两年来,也有的用 Python 来写了。
用 Delphi 来写的,基本没有。有的也是点滴、技巧。只言片语,不成系统。
mikerabat 大神,倒是用 Delphi 写了个 mrai 数学库。用了 SSE、AVX,等优化手段。但它侧重于人工智能。
虽然他也写了一个 mrimgutil 图像库。实测下来效率并不高。看了源码,也是个半成品。
就这样,还被国人抄来,写 AI 系统了。
还有一家外国公司做了个 MtxVec,号称可以给 Delphi 提速几百倍。
其实是用 AVX512 封装的(详见第二章)。一大堆 DLL。也不开源。源码肯定是 C++ 写的无疑。
如果谈封装,你能牛过 intel 的 Intel(R) Parallel Studio XE 2020 ?
如果谈源码,你能牛过 Agner Fog 大神的 vectorclass 库?
或许就是用 Intel(R) Parallel Studio XE 2020 库封装的。因为它里面包含 intel 的 Intel OpenMP Runtime Library 并行库。
哎!

我在考虑还需不需要将这个优化系列继续写下去了(当然是用 Delphi 来写)。
如果用 C++ 来写,有很多优秀的开源的代码,可以直接调用。
譬如 Agner Fog 大神的 vectorclass 库,又譬如 Ihar Yermalayeu 大神的 simd 库。 
如果我要继续的话,就必须将这些 C++ 代码翻译为 Delphi 语言。
我就成了翻译员了。重复劳动。这是我最不愿意干的活。
直接编译成 OBJ 文件,在 Delphi 中调用是可以的。
那也是 C++ 的代码,没我啥事。
如果我想按照自己的想法来,我就需要修改这些 C++ 代码。又回到 C++ 上面去了。
曾经设想过写个 DAVX.C 文件。专门用于 AVX 的优化。专门给 Delphi 来用。当然是用 C++ 来写。
离不了的 C++。
哎!

易博龙如果能引导 Delphi 程序员去 C++Builder 就好了。生态问题解决了,又解决了跨平台问题。多好呀。
UI 问题也不难解决。FMX 也可以。wxWidgets 也可以。QT 也可以。方案多的是。
易博龙也可以向 Matlab 学习。做各种工具箱。
数据库工具箱、报表工具箱、图形图像工具箱、网络工具箱、视频工具箱,等等专业工具箱。还愁啥挣不来钱。
微软都使用 Chromium 开源内核了。Edge、VSCode。易博龙还在 Delphi 里面转圈圈。
哎!

Delphi 程序员永久的痛:C++!
Delphi 的生态真的太差了(还好有个 2CCC)!
爱之深恨之切!
可怜之人,必有可恨之处!

qq交流群:101611228

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值