DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: bluewind23
今日帖子: 0
在线用户: 6
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 hectic (村雨Hectic) ▲▲▲▲▲ -
普通会员
2023/8/21 0:12:54
标题:
[b]Delphi在64位编译下的UInt64的严重性能问题,我没找到原因[/b] 浏览:6473
加入我的收藏
楼主: 因为看到一个国外的帖子
https://en.delphipraxis.net/topic/6522-strange-benchmark-results-am-i-missing-something/
作者用int64循环对比了delphi11.3和pypy3.9,delphi居然慢了近三倍,作为本地编译语言我怀疑作者造假,所以自己试了下,对比lazarus2.2.6和qtc++vc2022和golang1.21和dotnet7,结果让我不敢相信,我觉得delphi这里大概率有设计问题,但是找不到原因

机器 rog冰刃4  i7 10875h 32G
系统 win11 专业版

下面的所有测试exe都是64位release编译,并且单独在控制台窗口执行,并不是从ide启动。计时所有语言都用的GetTickCount64这个API。但是我觉得这个差距已经跟计时方法没什么关系了。

先发delphi11.3的,三次都是耗时9秒多
此帖子包含附件:
JPEG 图像
大小:96.4K
----------------------------------------------
-
作者:
男 hectic (村雨Hectic) ▲▲▲▲▲ -
普通会员
2023/8/21 0:13:30
1楼: 这是lazarus2.2.6
此帖子包含附件:
JPEG 图像
大小:139.4K
----------------------------------------------
-
作者:
男 hectic (村雨Hectic) ▲▲▲▲▲ -
普通会员
2023/8/21 0:15:19
2楼: 这是qtcreator用的vc2022编译器编译的,我觉得bcb应该没必要测试,不会比vc慢的,我很想用bcb,但是谁有delphi和bcb社区版共存的安装方法?
此帖子包含附件:
JPEG 图像
大小:103.5K
----------------------------------------------
-
作者:
男 hectic (村雨Hectic) ▲▲▲▲▲ -
普通会员
2023/8/21 0:15:46
3楼: 这是golang1.21
此帖子包含附件:
JPEG 图像
大小:95.4K
----------------------------------------------
-
作者:
男 hectic (村雨Hectic) ▲▲▲▲▲ -
普通会员
2023/8/21 0:16:16
4楼: 这是dotnet7
此帖子包含附件:
JPEG 图像
大小:127.2K
----------------------------------------------
-
作者:
男 hectic (村雨Hectic) ▲▲▲▲▲ -
普通会员
2023/8/21 0:16:47
5楼: 这是dotnet7的native aot
此帖子包含附件:
JPEG 图像
大小:75.1K
----------------------------------------------
-
作者:
男 hectic (村雨Hectic) ▲▲▲▲▲ -
普通会员
2023/8/21 0:18:05
6楼: nodejs没测试结果,因为js本身不支持uint64,得借助第三方的bitint来实现,那个速度我觉得没必要浪费电了。
----------------------------------------------
-
作者:
男 hectic (村雨Hectic) ▲▲▲▲▲ -
普通会员
2023/8/21 1:20:19
7楼: 突然想起来还有rust,我用的1,73 nightly版本
此帖子包含附件:
JPEG 图像
大小:103.1K
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2023/8/21 8:16:55
8楼: hectic (村雨Hectic)
我试了,xe11.3在我的机上要11秒多,但用的D12只要2秒,D12的64位取余做了些优化,可以对比一下汇编
----------------------------------------------
-
作者:
男 powerpcer (大强) ★☆☆☆☆ -
禁用账号
2023/8/21 8:33:08
9楼: ……
被禁用帐号,帖子内容自动屏蔽!
……

----------------------------------------------
呆湾傻冒
作者:
男 zwjchinazwj (蒲石) ★☆☆☆☆ -
普通会员
2023/8/21 8:39:23
10楼: delphi的32位虽然落后,还可以一战.
64位本来就没怎么作优化. 不慢才是出鬼了.
----------------------------------------------
-
作者:
男 yookee (yookee) ★☆☆☆☆ -
盒子活跃会员
2023/8/21 9:10:31
10楼: 虽说主要的锅可能是要Delphi来背,但是操作系统和硬件的配合也要承担一定责任。
笔记本的电源模式也会有影响。

5600X Win11 D11.3
此帖子包含附件:
JPEG 图像
大小:70.9K
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2023/8/21 9:12:21
11楼: 我试了 vs 2013, .net 4.8,也要10秒,并没有快
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2023/8/21 9:13:18
12楼:  yookee (yookee)下一个D12,要快很多
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2023/8/21 9:42:21
13楼: 我的电脑,jdk 1.8要2.2秒,jdk 20是1.4秒, 但D12只要2秒
----------------------------------------------
-
作者:
男 hectic (村雨Hectic) ▲▲▲▲▲ -
普通会员
2023/8/21 10:08:06
14楼: to  powerpcer:
lazarus 2.2.6 debug模式无优化 1859ms
开不开o3的确有区别,哪怕o2也有区别,但是11.3这个差距太大了,不是o3能解决的,目前看来测试版12.0解决了这个问题
此帖子包含附件:
JPEG 图像
大小:131.9K
----------------------------------------------
-
作者:
男 hectic (村雨Hectic) ▲▲▲▲▲ -
普通会员
2023/8/21 10:11:52
15楼: to yookee:
现在不是机器性能的问题,是同一台机器同一个环境下11.3的差距太大了,肯定是delphi本身的问题,如果在你机器上11.3只要3秒的话,那你试试c++ lazaruz rust可能在500毫秒内就跑完了

我喜欢delphi,我并不在意delphi跑这个循环要花费9秒,我在意的是为什么在uint64上它和别的语言差距这么悬殊,如果同硬件测试环境下lazarus golang c++ dotnet rust它们和delphi花费的时间差不多,那没问题。
----------------------------------------------
-
作者:
男 hectic (村雨Hectic) ▲▲▲▲▲ -
普通会员
2023/8/21 10:19:32
16楼: to  hq200306:
你的测试方式是release64吗?
我这里net4.8.1 64位release比dotnet7和qtc++都快,几乎和rust一样
此帖子包含附件:
JPEG 图像
大小:130.1K
----------------------------------------------
-
作者:
男 hectic (村雨Hectic) ▲▲▲▲▲ -
普通会员
2023/8/21 10:27:22
17楼: 朋友们,不要对比机器性能,我所有测试都是同一台机器同一个系统下一起测的,rog冰刃4本来就是几年前的配置,你找一台13代i9或最新的amd肯定能跑的比我快很多,但是没有意义,因为如果delphi11.3在你的机器上能比我机器快好几倍,那lazarus c++ rust dotnet golang一样也会快这个倍数,11.3和他们差距依然存在。你应该在你这台机器上同时测11.3 lazarus c++ golang dotnet7 rust,如果证明他们差距不大,那才有意义。

我并不介意delphi的uint64循环它自己要跑多久,只是同硬件同环境下和别的语言的差距不应该这么大,如果大家都一样速度,哪怕要跑一小时,也无所谓。
----------------------------------------------
-
作者:
男 hectic (村雨Hectic) ▲▲▲▲▲ -
普通会员
2023/8/21 11:00:24
19楼: to  bdl1:
你的11.3最后计算结果是233333334166666668吗?居然比12都快,怎么设置的?
我把uint64改成CppULongInt只用了2984ms,但是CppULongInt装不下这个大数,计算结果不对。
此帖子包含附件:
JPEG 图像
大小:67.3K
----------------------------------------------
-
作者:
男 bluestorm8 (bluestorm) ▲▲△△△ -
普通会员
2023/8/21 11:02:05
19楼: Intel Core I3-4160 CPU @3.6GHZ, Win10 22H2 64Bit
[更正]
Delphi 10.3 64bit: 11.6秒
Delphi 10.3 32bit: 9.9秒
Julia 1.72 64bit: 2.8秒
----------------------------------------------
-
作者:
男 bdl1 (bdl1) ▲▲▲▲▲ -
普通会员
2023/8/21 11:02:40
18楼: d11.3:1874
d12:1092

win64 release
----------------------------------------------
-我的博客
作者:
男 hectic (村雨Hectic) ▲▲▲▲▲ -
普通会员
2023/8/21 11:02:47
20楼: 朋友们注意下
计算结果应该是233333334166666668,只有UInt64能装下,其他CppULongInt Int64 ULong都不行,而且循环次数是10亿不是1亿,1后面9个零
----------------------------------------------
-
作者:
男 hectic (村雨Hectic) ▲▲▲▲▲ -
普通会员
2023/8/21 11:06:12
21楼: to  bdl1:
你的11.3比12都快?怎么设置的?
我是了换成别的类型比如CppULongInt可以3秒,但是计算结果不对,
装不下233333334166666668这个大数。
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2023/8/21 11:08:29
22楼: @hectic (村雨Hectic),离开vs2013,只花1.5秒,在vs2013环境执行要10秒
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2023/8/21 11:09:57
23楼: 这个测试代码,只是cpu的整除指令慢
----------------------------------------------
-
作者:
男 hectic (村雨Hectic) ▲▲▲▲▲ -
普通会员
2023/8/21 11:11:40
22楼: 11.3换成32位release编译,同硬件测试环境
只要5.7秒,比64位release编译出来的9秒多快了近一倍
看来delphi64位编译器本身也有问题
此帖子包含附件:
JPEG 图像
大小:72.1K
----------------------------------------------
-
作者:
男 hectic (村雨Hectic) ▲▲▲▲▲ -
普通会员
2023/8/21 11:14:31
24楼: to  hq200306:
那是肯定,你带ide启动会带进去大量的插桩给断点和变量快照用,我所有测试都是默认64位release编译完,然后单独开一个控制台去跑。
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2023/8/21 11:15:55
25楼: hectic (村雨Hectic)装个D12测试来测试,会快很多
----------------------------------------------
-
作者:
男 hectic (村雨Hectic) ▲▲▲▲▲ -
普通会员
2023/8/21 11:20:21
26楼: to  hq200306:
现在12刚出来还是测试版,测试版有key吗?不是正版用户安装不了吧?
以前delphi我都用的和谐版,10开始我都用社区版了。
----------------------------------------------
-
作者:
男 hectic (村雨Hectic) ▲▲▲▲▲ -
普通会员
2023/8/21 11:26:27
28楼: to hq200306:
谢谢老板,我去下个试试。
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2023/8/21 11:27:19
29楼: 就汇编的div慢
----------------------------------------------
-
作者:
男 powerpcer (大强) ★☆☆☆☆ -
禁用账号
2023/8/21 13:31:02
30楼: ……
被禁用帐号,帖子内容自动屏蔽!
……

----------------------------------------------
呆湾傻冒
作者:
男 tuao (tuao) ★☆☆☆☆ -
盒子活跃会员
2023/8/21 14:28:16
31楼: 不知有没有替代div mod的汇编函数
----------------------------------------------
tuao
作者:
男 szlbz (秋风) ★☆☆☆☆ -
盒子活跃会员
2023/8/21 14:36:00
31楼: 刚用lazarus测了一下不同CPU架构的速度:
1、lazarus 2.26,fpc 3.2.2,win10,i5-8279U CPU @ 2.40GHz :1469ms
2、lazarus 2.26,fpc 3.2.2,银河麒麟 V10 SP1,华为麒麟990:7161ms
3、lazarus 2.3,fpc 3.3.1,UOS 1060,龙芯3A5000 2.5GHz:7528ms
----------------------------------------------
-
作者:
男 merced (merced) ★☆☆☆☆ -
普通会员
2023/8/21 15:38:34
32楼: to hectic:
很久以前,多数语言的编译器产生的机器码中,对除数为立即数的整数除法 a / b ,都已经优化成 a * (2^n / b) 再右移n位了(其中(2^n / b)在编译时求出来,另外有的b可能需要做些舍入调整,不过大致是这个原理),因为 mul/imul机器指令比div/idiv要快得多。而Delphi的编译器至今还不能对除数为立即数的整数除法做这种优化,只能编译为慢吞吞的div/idiv指令。整数取余同理
----------------------------------------------
-
作者:
男 hectic (村雨Hectic) ▲▲▲▲▲ -
普通会员
2023/8/21 15:53:28
33楼: 我把delphi11.3社区版卸载了,换了bcb11.3社区版测试了 下

同上面的硬件环境 64 release,不出所料和qtc++64的速度一样
此帖子包含附件:
JPEG 图像
大小:72.4K
----------------------------------------------
-
作者:
男 hectic (村雨Hectic) ▲▲▲▲▲ -
普通会员
2023/8/21 15:57:01
34楼: 但是有一点很有意思,因为bcb11.3的32位同时有bcc编译器和clang编译器,所以分别测了一下,居然差距很大
clang32测出来效率和delphi64一样9秒多
bcc32测出来是5秒多
此帖子包含附件:
JPEG 图像
大小:42.1K
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2023/8/21 15:59:40
34楼: @merced (merced),D12的64位取模改了,已经很快了
----------------------------------------------
-
作者:
男 hectic (村雨Hectic) ▲▲▲▲▲ -
普通会员
2023/8/21 16:00:09
35楼: to  merced:
原来如此,多谢多谢。emb应该急着追赶版本迭代,没工夫去优化了。
----------------------------------------------
-
作者:
男 cnpack (CnPack) ★☆☆☆☆ -
普通会员
2023/8/21 16:17:00
36楼: Delphi的32位编译器会把UInt64的除法取模动作翻译成调用_lludiv和_llumod两个汇编函数,64位则会直接编译成div或idiv指令,理论上后者会快不少。
----------------------------------------------
欢迎使用CnPack IDE Wizards
http://www.cnpack.org/
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2023/8/21 16:26:28
37楼: D12取模优化了,不用div了,我的电脑比D11快6倍
此帖子包含附件:
PNG 图像
大小:57.6K
----------------------------------------------
-
作者:
男 merced (merced) ★☆☆☆☆ -
普通会员
2023/8/21 17:01:15
38楼: to hq200306:
mul然后shr,一目了然
这个早该改进的地方Embarcadero终于改进了,值得鼓励 :-)
----------------------------------------------
-
作者:
男 kwer (★★★★★) ★☆☆☆☆ -
普通会员
2023/8/21 17:09:17
38楼: 好帖,点赞了。
----------------------------------------------
==========-==========-==========-==========-==========
     多隆, 给我备一匹最快的马, 我有事要走先~~~
==========-==========-==========-==========-==========
作者:
男 loveaixing (ax) ★☆☆☆☆ -
普通会员
2023/8/21 17:25:48
18楼: 比较菜,为什么 for num := 1 to 1000000000 Do这一句执行不过去?
----------------------------------------------
-
作者:
男 kentty (kentty) ★☆☆☆☆ -
普通会员
2023/8/21 18:47:20
39楼: Delphi 11.3, release 模式

Win32: pass=3515
Win64: pass=3922
----------------------------------------------
-
作者:
男 kentty (kentty) ★☆☆☆☆ -
普通会员
2023/8/21 19:08:31
40楼: 把UInt64换成Integer,Win32,win64都缩短到23xx
看来还是UInt64的处理有问题
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2023/8/21 19:36:20
41楼: @kentty (kentty),不一样,integer计算结果是错的
----------------------------------------------
-
作者:
男 powerpcer (大强) ★☆☆☆☆ -
禁用账号
2023/8/21 19:37:54
42楼: ……
被禁用帐号,帖子内容自动屏蔽!
……

----------------------------------------------
呆湾傻冒
作者:
男 hectic (村雨Hectic) ▲▲▲▲▲ -
普通会员
2023/8/21 20:56:34
43楼: to kentty:
正确的计算结果是 233333334166666668
除了uint64,其他类型装不下这个数字,哪怕int64也不行
----------------------------------------------
-
作者:
男 kentty (kentty) ★☆☆☆☆ -
普通会员
2023/8/22 12:27:17
44楼: 不好意思,只盯着pass的数值,忘了total算得对不对了 :)

本来是想说,
Delphi 11.3在Win32和Win64下对UInt64的处理效率差别不大,
Win64慢10%,相比Win32并没有几倍的差距,也许是测试环境的其他差异,
按说Win64环境处理UInt64要比Win32少一次Move,至少不应该更慢;
换成Int32,在循环次数不变的情况下Win32/64总耗时都减少50%
看起来Delphi对UInt64取模的算法需要优化的地方还很多
----------------------------------------------
-
作者:
男 bluestorm8 (bluestorm) ▲▲△△△ -
普通会员
2023/8/22 13:14:05
45楼: 既然新版本的优化方式已经了解,那么对于老版本,可以用同样的方法来优化:

function FastMod3(A: NativeUInt): NativeUInt; inline;
const
  B = 3;
  C = (UInt64(1) shl 32) div B + UInt64(Boolean((UInt64(1) shl 32) mod B));
begin
  Result := A - B * ((A*C) shr 32);
end;

function FastMod5(A: NativeUInt): NativeUInt; inline;
const
  B = 5;
  C = (UInt64(1) shl 32) div B + UInt64(Boolean((UInt64(1) shl 32) mod B));
begin
  Result := A - B * ((A*C) shr 32);
end;
----------------------------------------------
-
作者:
男 vga (vga) ★☆☆☆☆ -
盒子活跃会员
2023/8/22 15:46:27
46楼: 我的 C++Builder11.3 不支持 UInt64  要写成 System::UInt64 
 
 unsigned long long num, total, pass;
 unsigned __int64 num, total, pass;
 System::UInt64 num, total, pass;
----------------------------------------------
-
作者:
男 souledge (souledge) ★☆☆☆☆ -
普通会员
2023/8/22 19:15:47
47楼: 我也顺便试了下,在我的电脑上 FPC 3.3.1 编译的程序比 Delphi 11.3 编译的快4倍多点
此帖子包含附件:
JPEG 图像
大小:25.0K
----------------------------------------------
-
作者:
男 kentty (kentty) ★☆☆☆☆ -
普通会员
2023/8/22 19:47:35
48楼: @bluestorm8  Result := A - B * ((A*C) shr 32)里面A*C和B*U64会不会溢出?
----------------------------------------------
-
作者:
男 powerpcer (大强) ★☆☆☆☆ -
禁用账号
2023/8/22 20:25:02
49楼: ……
被禁用帐号,帖子内容自动屏蔽!
……

----------------------------------------------
呆湾傻冒
作者:
男 hectic (村雨Hectic) ▲▲▲▲▲ -
普通会员
2023/8/22 21:54:33
50楼:  powerpcer:

fpc还支持lambda,现在主流语言哪个不支持lambda,虽然fpc没有c++那么灵活,但是好歹支持了,delphi虽然可以用type reference来代替,但是写起来还是麻烦一些。
----------------------------------------------
-
作者:
男 powerpcer (大强) ★☆☆☆☆ -
禁用账号
2023/8/22 22:17:05
51楼: ……
被禁用帐号,帖子内容自动屏蔽!
……

----------------------------------------------
呆湾傻冒
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2023/8/23 2:28:43
52楼: lambda 这种语法糖,其实并不是好东西。可能用 JavaScript 那帮人比较喜欢。因为 JavaScript 可以胡乱写,连类的定义都可以写到中途做更改,看似很灵活,写的时候爽,读的时候,Debug 的时候就难受了。

语法规则越多,越不好。语法规则简单才是好的。
----------------------------------------------
-
作者:
男 dbyoung (dbyoung) ★☆☆☆☆ -
普通会员
2023/8/23 7:15:14
53楼: mod 3 和 mod 5 的算法思想:

mod 3:
  将数字的每一位加起来,如果是 3 的倍数,这个数就可以被 3 整除。
  例如:34567,3+4+5+6+7=25,2+5=7;7被3除,余数为1;所以:34567 mod 3 = 1;
  例如:23564,2+3+5+6+4=20,2+0=2;2被3除,余数为2;所以:23564 mod 3 = 2;

mod 5:
  最后一位数字(个位)是 0 或 5,就可以被 5 整除。
  例如:12898978,12898975肯定可以被5整除,所以余数是:3(8 - 5 = 3);
  例如:12898972,12898970肯定可以被5整除,所以余数是:2;
  判断个位是否大于5就可以了;


程序大家自己动手写写,看谁写的效率最高。
----------------------------------------------
武汉天气不好
作者:
男 bluestorm8 (bluestorm) ▲▲△△△ -
普通会员
2023/8/23 8:50:46
54楼: @kentty(40楼) FastMod3和FastMod5的参数A实际上最多只能是32Bit整数,如果是大于32bit,可能会溢出。 使用NativeUInt的原因是64bit程序使用64bit的A比较快、32bit程序使用32bit的A比较快,这完全是出于性能考量。

对于Result := A - B * ((A*C) shr 32), 等号的右面是使用64Bit运算,如果B只是一个32bit大小的数据,由于Result只是A对B的余数,因此result <= B-1, 不会溢出。
----------------------------------------------
-
作者:
男 biznow (biznow) ★☆☆☆☆ -
盒子活跃会员
2023/8/23 9:03:54
55楼: 我测试了Linux的情况,比Windows快了3+倍。
此帖子包含附件:
PNG 图像
大小:8.8K
----------------------------------------------
-
作者:
男 hectic (村雨Hectic) ▲▲▲▲▲ -
普通会员
2023/8/23 10:20:32
56楼: to dbyoung:

算法优化的办法肯定有啊,老外那个帖子里有,你看看这个,小于1ms就得出答案了。


我用的lazarus,因为delphi我暂时换成了bcb,社区版安装没法共存,delphi如果用这个优化后的算法肯定也是小于1ms速度。

但是这不是问题的关键,我们并不是为了找优化算法,而是我们发现emb对11.3之前的d64的div没有做任何优化。
此帖子包含附件:
JPEG 图像
大小:102.7K
----------------------------------------------
-
作者:
男 tony2u (tony2u) ★☆☆☆☆ -
普通会员
2023/8/24 13:47:59
57楼: DCC64和BCC64一样后台都转成5.0的LLVM的IL了,速度一样,慢正常
D12的LLVM升级到15以后了,速度优化会快很多
32位经典版确实要快点
----------------------------------------------
-
作者:
男 kentty (kentty) ★☆☆☆☆ -
普通会员
2023/8/24 14:06:45
58楼: 56楼的代码太赖皮了,如果只是为了求total,直接用等差数列求和公式就完事了 :)
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2023/10/31 11:05:41
59楼: 我在centos7下,试了几个不同编译器编译后程序运行速度

gcc 版本:(GCC) 9.3.1 20200408 (Red Hat 9.3.1-2)
耗时:1328ms

clang 版本:version 7.0.1 (tags/RELEASE_701/final)
耗时:1769ms

delphi 11.3
耗时:3017ms

java version "1.8.0_391"
耗时:3170ms

下面是c的代码
#include <stdint.h>
#include <stdio.h>
#include <time.h>

uint64_t GetTickCount() {
  struct timespec ts;

  clock_gettime(CLOCK_MONOTONIC, &ts);

  return (ts.tv_sec * 1000 + ts.tv_nsec / 1000000);
}

int main(void) {
  printf("Hello from new main!\n"); //

  uint64_t num, total;

  total = 0;

  uint64_t t1 = GetTickCount();

  for (num = 0; num < 1000000000; num++) {
    if (((num % 3) == 0) || ((num % 5) == 0)) {
      total = total + num;
    }
  }

  t1 = GetTickCount() - t1;

  printf("%lu\n%lu\n", t1, total);

  return 0;
}
----------------------------------------------
-
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2023/10/31 12:56:38
60楼: 59 lin code
[make ~]$ gcc test.c -O3 -ogcc
[make ~]$ clang test.c -O3 -oclang
[make ~]$ ./gcc
Hello from new main!
1775
233333333166666668
[make ~]$ ./clang
Hello from new main!
1242
233333333166666668
gcc 版本 13.2.1 20230801 (GCC) 
clang version 16.0.6






[make ~]$ gcc test.c
[make ~]$ clang test.c
[make ~]$ ./gcc.out
Hello from new main!
4186
233333333166666668
[make ~]$ ./clang.out
Hello from new main!
15965
233333333166666668


[make ~]$ fpc
Free Pascal Compiler version 3.2.2 [2023/10/16] for x86_64
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2023/10/31 14:19:26
62楼: 运行结果3916ms?那比gcc,clang慢多了。
----------------------------------------------
-
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2023/10/31 14:37:06
63楼: program Project1;{$modeswitch result}

{$APPTYPE CONSOLE}

uses
  unixtype,linux,SysUtils, DateUtils;


function GetTickCount():UInt64;
var
   ts: timespec;
begin
       clock_gettime(CLOCK_MONOTONIC,@ts);
       result:=(ts.tv_sec * 1000 + ts.tv_nsec div 1000000);
end;

var
 num, total:UInt64;
 t1:UInt64;
begin
      Write('Hello from new main!\n');
      total:= 0;
      t1:=GetTickCount();
      for num := 0 to 1000000000 do
      begin
        if ( ((num mod 3)=0) or ((num mod 5)=0) )    then
        total:= total+num;
      end;
      t1:= GetTickCount() - t1;
      //printf("%lu\n%lu\n", t1, total);
      Writeln(' : ',t1, ' \n');
      Writeln(' : ',total, ' \n');
end.



[make ~]$ fpc test2.pas -O3
Free Pascal Compiler version 3.2.2 [2023/10/16] for x86_64
Copyright (c) 1993-2021 by Florian Klaempfl and others
Target OS: Linux for x86-64
Compiling test2.pas
test2.pas(3,2) Warning: APPTYPE is not supported by the target OS
Linking test2
33 lines compiled, 0.2 sec
1 warning(s) issued
[make ~]$ ./test2
Hello from new main!\
: 3916 
: 233333334166666668



[make ~]$ gcc test.c -O3 -ogcc
[make ~]$ clang test.c -O3 -oclang
[make ~]$ ./gcc
Hello from new main!
1781
233333334166666668

[make ~]$ ./clang
Hello from new main!
1240
233333334166666668



code:
#include <stdint.h>
#include <stdio.h>
#include <time.h>

uint64_t GetTickCount() {
  struct timespec ts;

  clock_gettime(CLOCK_MONOTONIC, &ts);

  return (ts.tv_sec * 1000 + ts.tv_nsec / 1000000);
}

int main(void) {
  printf("Hello from new main!\n"); //

  uint64_t num, total;

  total = 0;

  uint64_t t1 = GetTickCount();

  for (num = 0; num <=1000000000; num++) {
    if (((num % 3) == 0) || ((num % 5) == 0)) {
      total = total + num;
    }
  }

  t1 = GetTickCount() - t1;

  printf("%lu\n%lu\n", t1, total);

  return 0;
}
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 powerpcer (大强) ★☆☆☆☆ -
禁用账号
2023/10/31 14:55:49
64楼: ……
被禁用帐号,帖子内容自动屏蔽!
……

----------------------------------------------
呆湾傻冒
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2023/10/31 16:16:10
65楼: AMD Athlon(tm) X4 740 Quad Core Processor
Linux *.*.*.* 6.5.9-arch2-1 #1 SMP PREEMPT_DYNAMIC Thu, 26 Oct 2023 00:52:20 +0000 x86_64 GNU/Linux
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 powerpcer (大强) ★☆☆☆☆ -
禁用账号
2023/10/31 16:23:20
66楼: ……
被禁用帐号,帖子内容自动屏蔽!
……

----------------------------------------------
呆湾傻冒
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2023/10/31 16:55:46
67楼: 真希望delphi快点换成llvm编译器
----------------------------------------------
-
作者:
男 powerpcer (大强) ★☆☆☆☆ -
禁用账号
2023/10/31 20:56:40
68楼: ……
被禁用帐号,帖子内容自动屏蔽!
……

----------------------------------------------
呆湾傻冒
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2023/10/31 22:04:51
69楼: 下了个windows版clang15

运行时间
Hello from new main!
1016 ms
233333333166666668

程序代码:

#include <stdint.h>
#include <stdio.h>
#include<windows.h>

int main(void) {
  printf("Hello from new main!\n"); //

  uint64_t num, total;

  total = 0;

  unsigned int t1 = GetTickCount();
   
  for (num = 0; num < 1000000000; num++) {
    if (((num % 3) == 0) || ((num % 5) == 0)) {
      total = total + num;
    }
  }

  t1 = GetTickCount() - t1;

   printf("%d\n%llu\n", t1, total);

  return 0;
}
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2023/10/31 22:24:10
70楼: delphi编译器落后了,c还是快
----------------------------------------------
-
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2023/10/31 22:46:53
71楼: make@make:~$ gcc clang test.c -O3 -o clang
make@make:~$ clang -v
Ubuntu clang version 14.0.0-1ubuntu1.1
make@make:~$ gcc -v
gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) 

make@make:~$ fpc test2.pas -O3
Free Pascal Compiler version 3.2.2+dfsg-9ubuntu1 [2022/04/11] for x86_64
Copyright (c) 1993-2021 by Florian Klaempfl and others
Target OS: Linux for x86-64
Compiling test2.pas
test2.pas(3,2) Warning: APPTYPE is not supported by the target OS
Linking test2
33 lines compiled, 0.6 sec
1 warning(s) issued

make@make:~$ ./clang
Hello from new main!
2178
233333334166666668
make@make:~$ ./gcc
Hello from new main!
2459
233333334166666668

make@make-FPC:~$ ./test2
Hello from new main!\n : 3936 \n
 : 233333334166666668 \n

可以看出和版本号也有关系 优化程度不一样了。
AMD Athlon(tm) II X4 640 Processor
换了个cpu和系统。
740那个是archlinux
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 wufan314 (真的吗) ★☆☆☆☆ -
禁用账号
2024/1/24 18:05:14
72楼: ……
被禁用帐号,帖子内容自动屏蔽!
……

----------------------------------------------
发布广告,禁用帐号!
作者:
男 wuxi15 (似水·流年) ▲▲▲▲▲ -
普通会员
2024/1/25 22:51:52
73楼: 如果光光是差不多,那是不行的,Delphi要生态没生态。定位就是高性能,即使不如C,那么也应该只比C慢一点点,但应该对其他的快,而不应该是差不多。
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2024/1/26 8:26:34
74楼: 就这段测试代码,,windows下
clang 17的编译后程序速度又提升很多,编译后运行时间是800多毫秒
gcc 13是1秒
delohi 12 是2秒多
delohi 11.3 是10秒多
差距明显,delphi不适合做服务器程序,适合做客户端这些可以忽略计算效率的程序

我测delphi在linux下的效率也差不多,总的来说,delphi的程序效率不高

有个好消息,rad 12新的测试版的c++用了clang15,值得期待
----------------------------------------------
-
作者:
男 wufan314 (真的吗) ★☆☆☆☆ -
禁用账号
2024/1/27 4:20:13
75楼: ……
被禁用帐号,帖子内容自动屏蔽!
……

----------------------------------------------
发布广告,禁用帐号!
作者:
男 wufan314 (真的吗) ★☆☆☆☆ -
禁用账号
2024/1/27 4:23:09
76楼: ……
被禁用帐号,帖子内容自动屏蔽!
……

----------------------------------------------
发布广告,禁用帐号!
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2024/1/27 8:17:40
77楼: 1、delphi的整数运算比其他语言慢一点,平时用,不是很明显。
2、delphi写的程序运行慢最明显是interface类型,相同功能,如用integrface类型要慢数倍甚至十倍速度,string类型也很慢。
3、自带的json也非常慢,比如Foo := TJson.JsonToObject(...),一秒钟转不了几个,和java或go比,差几十倍速度。
拿delphi写客户端,做界面是方便的,如果做服务器类型,速度要求不高,那也可以接受,如果对速度有要求,还是c或go更合适。
----------------------------------------------
-
作者:
男 wufan314 (真的吗) ★☆☆☆☆ -
禁用账号
2024/1/27 16:35:15
78楼: ……
被禁用帐号,帖子内容自动屏蔽!
……

----------------------------------------------
发布广告,禁用帐号!
作者:
男 nevergrief (孤独骑士) ★☆☆☆☆ -
盒子活跃会员
2024/1/27 20:49:06
79楼: wufan314 的逻辑性很强啊!! 也是啊,没人逼着你写服务器的时候用String,用interface,也不能Delphi一门语言对比所有其它语言的优点。
----------------------------------------------
只有偏执狂才能生存!
作者:
男 wufan314 (真的吗) ★☆☆☆☆ -
禁用账号
2024/1/27 22:37:29
80楼: ……
被禁用帐号,帖子内容自动屏蔽!
……

----------------------------------------------
发布广告,禁用帐号!
作者:
男 tony2u (tony2u) ★☆☆☆☆ -
普通会员
2024/2/8 10:14:10
81楼: RSP-44063 Bug in MOD operation for Win64 Release configuration
可以安装12.0的patch1
----------------------------------------------
-
作者:
男 vga (vga) ★☆☆☆☆ -
盒子活跃会员
2024/3/31 20:19:42
82楼: 对,慢慢的 python 一样站头牌,哈哈!
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行239.9902毫秒 RSS