DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: ajkwhduaduiahdui
今日帖子: 22
在线用户: 1
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2024/1/21 20:08:58
标题:
筛一亿内质数约50毫秒,十亿内不到1.5秒 浏览:1932
加入我的收藏
楼主: 用delphi 12筛一亿内质数约50毫秒,十亿内不到1.5秒
此帖子包含附件:
PNG 图像
大小:21.4K
----------------------------------------------
-
作者:
男 delphicpp (InGreen) ▲▲△△△ -
普通会员
2024/1/21 20:52:43
1楼: 你是在炫耀算法还是IDE?
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2024/1/21 20:56:49
2楼: 我看网上都c或其他语言,但没有delphi快
----------------------------------------------
-
作者:
男 roadrunner (roadrunner) ★☆☆☆☆ -
盒子活跃会员
2024/1/21 20:59:19
1楼: 我很久之前写过一个演示代码优化的例子,你看一下和你的比性能如何
此帖子包含附件:roadrunner_2024121205919.zip 大小:1,248B
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2024/1/21 21:05:52
3楼: roadrunner (roadrunner),delphi12编译不过去,弄成delphi能编译的,我测一下
你的电脑筛一亿多少时间
我的笔记本是t480s,cpu 8550u
此帖子包含附件:
PNG 图像
大小:160.1K
----------------------------------------------
-
作者:
男 roadrunner (roadrunner) ★☆☆☆☆ -
盒子活跃会员
2024/1/21 21:29:00
4楼: 我是freepascal写的
语法问题你自己修一下就是
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2024/1/21 21:38:11
5楼:  roadrunner (roadrunner),计算结果不对
----------------------------------------------
-
作者:
男 wufan314 (真的吗) ★☆☆☆☆ -
普通会员
2024/1/21 22:41:35
6楼: @hq200306:看网上的一些测试现在有一些新语言对多核优化很好,可以大幅加快运算速度,不知道最近几版的新Delphi比如10.0版本后的对多核优化如何?
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2024/1/21 22:57:40
7楼: 1、delphi多核我不是很清楚。
2、我只知道,delphi12优化一下取模运算。
3、我测了新的rad 12测试版,c++是用clang15,编译后的程序运行速度,比rad 12之前的版本快很多.
4、这段时间,我对比了delphi和gcc/clang,总体delphi写的程序的计算速度还是比c/c++慢不少。
----------------------------------------------
-
作者:
男 roadrunner (roadrunner) ★☆☆☆☆ -
盒子活跃会员
2024/1/22 0:36:45
8楼: @hq200306 那大概率错的是你了
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2024/1/22 6:53:32
9楼:  roadrunner (roadrunner),我为能将你的程序能用delphi能编译,将你的程序改了下,但算的结果和我算的结果不一样,
请问你的计算结果,1亿内有多少质数?十亿内有多少质数?
----------------------------------------------
-
作者:
男 roadrunner (roadrunner) ★☆☆☆☆ -
盒子活跃会员
2024/1/22 8:54:54
10楼: 我的代码就是数相邻的质数对(孪生素数)有多少,你改一下只数质数不就完了
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2024/1/22 9:58:02
11楼: roadrunner (roadrunner),只测你的fast,筛一亿,速度还可以,93毫秒,比我的算法慢一半。筛十亿930毫秒,比我的快不少
----------------------------------------------
-
作者:
男 roadrunner (roadrunner) ★☆☆☆☆ -
盒子活跃会员
2024/1/22 10:52:09
12楼: @hq200306 那你看看我的代码的normal在你的机器上速度是多少?

这段代码是面向32位的,没有采用64位计算优化,所以其实还有提升空间

当初是写给参加OI比赛的学生们看的,他们比赛要求是禁多线程禁优化编译禁64位
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2024/1/22 11:26:42
13楼: normal筛一亿要360毫秒,筛十亿要3.9秒,显然慢的

normal/fast的32/64位都开了优化

你的程序筛一亿没我写的快很正常,我的是用汇编去筛的

看的你的程序用的是静态内存,我的计算是可以运行时去才代入要筛的值,比如筛1百、一千、一亿、十亿等等,计算时才去申请,如果我把我的程序改成静态,将会进一步减少计算时间
----------------------------------------------
-
作者:
男 roadrunner (roadrunner) ★☆☆☆☆ -
盒子活跃会员
2024/1/22 14:47:21
14楼: @HP200306 将i := $3ffff及i := i+$40000换成i := $2ffff及i := i+$30000试试,这样有可能在8550u上性能更好
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2024/1/22 15:04:10
15楼: 好一点,一亿88毫秒,10亿923毫秒,筛一亿还是没我的快,我的用静态内存只要49毫秒,我的十亿还是慢
----------------------------------------------
-
作者:
男 kylix2008 (kylix2008) ★☆☆☆☆ -
普通会员
2024/1/22 15:12:40
16楼: 楼主的代码能发出来学Xie一下不?
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2024/1/22 15:15:39
17楼: 我的算法没有roadrunner (roadrunner)好,只是我用了汇编,十亿次我的落后了,用了汇编,我没有能力写复杂计算
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2024/1/23 11:19:14
18楼: 一亿内,跑进50毫秒
此帖子包含附件:
PNG 图像
大小:18.7K
----------------------------------------------
-
作者:
男 wufan314 (真的吗) ★☆☆☆☆ -
普通会员
2024/1/24 16:59:41
19楼: 都在说几十毫秒,这计时用的什么函数啊,精度够?别跟我说用的Getickout函数啊,这函数虽说单位到毫秒,但据说精度不高,精度实际只有10毫秒级,达不到毫秒级精度,这几十几百毫秒的尺度上,这精度就很差了。
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2024/1/24 17:04:35
20楼: wufan314 (真的吗),有没有了解过windows高精度定时?高精度定时都有几十年了,先去了解一下
----------------------------------------------
-
作者:
男 wufan314 (真的吗) ★☆☆☆☆ -
普通会员
2024/1/24 17:08:23
20楼: @hq200306:
1.据说Delphi就是取模运算比C稍慢,其它和C基本没什么区别,但有一个Odd操作符函数比Mod效率高很多,但我没测试过。
2.据说Go语言就是多核利用很好,直接导致速度可以叠加,成倍提升。

C语言和DELPHI的整体效率比较
https://zhuanlan.zhihu.com/p/632806889

执行效率做比较,Go、python、java、c#、delphi、易语言等
https://blog.csdn.net/q158805972/article/details/109754413
此帖子包含附件:
PNG 图像
大小:265.4K
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2024/1/24 17:14:03
21楼: 1、我接触go时间不长,刚刚入门,写了个小程序,go做些计算,要比delphi慢几倍,甚至到十几倍,go的优点,有协程不需要管理内存,做通讯,是delphi无法比的。

2、@wufan314 (真的吗),你可以拿go试一下,看能做到多少时间?

3、关于计时,你可以了解QueryPerformanceCounter
----------------------------------------------
-
作者:
男 wufan314 (真的吗) ★☆☆☆☆ -
普通会员
2024/1/24 17:18:26
22楼: @hq200306:
我完全就是业余的,本科时自学的Delphi,也只会Delphi,而且是初级阶段的入门水平按此在新窗口浏览图片
Go不会,也不会去学,本科时学校开设的是Basic语言……Go不是google的语言吗?google本身就是做手机系统起家的,搞通讯占优势也是理所当然了。
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2024/1/24 17:23:08
23楼: 1、我刚刚花了一个月多一点时间学go,边学边做,用go做了数据库代码服务器和消息队列服务器,性能要比我用iocp或epoll做的服务器性能要好很多,轻松带几千客户端,如果用delphi做,要花很多技巧,用go做,几乎不需要技巧。
2、但go不适合做这些极速计算
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2024/1/24 17:28:19
24楼: 1、筛质数,完全是消遣用的。
2、之前,我是想挑战一下自己,筛一亿看能不能做到50毫秒内,结果,还是给我做到了。
3、我想,不去抄别人代码情况下,无论任何语言,能做到50毫秒内的人肯定不多。
4、我笔记本速度不慢,但也算快这种,thinkpad t480s 8550u,2018年的超极本,低压cpu,我想找个最新的i9标压cpu试一下。
----------------------------------------------
-
作者:
男 wufan314 (真的吗) ★☆☆☆☆ -
普通会员
2024/1/24 17:33:11
25楼: @hq200306:你看我上面列了2个各种语言执行效率对比的帖子,其中一个是C和Delphi执行效率对比的,且通常的各种运算都涉及到了,应该说还是挺有代表性的。
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2024/1/24 17:40:53
26楼: delphi 12的取模优化了,这里有d12取模运算的比较

https://bbs.2ccc.com/topic.asp?topicid=681941
----------------------------------------------
-
作者:
男 wufan314 (真的吗) ★☆☆☆☆ -
普通会员
2024/1/24 18:39:30
27楼: 看了,D12取模比D11.3快6倍的话,那等于是D12已经解决了取模慢的问题了,和其它语言差不多
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2024/1/28 18:34:32
28楼: 软件优化是无止境的,启动了线程筛一亿,只要35毫秒,估计还有很多提升空间
此帖子包含附件:
PNG 图像
大小:27.4K
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2024/1/30 10:51:58
29楼: 继续优化一下,现在筛一亿只要27毫秒
此帖子包含附件:
PNG 图像
大小:18.6K
----------------------------------------------
-
作者:
男 dbyoung (dbyoung) ★☆☆☆☆ -
普通会员
2024/1/30 12:06:00
30楼: https://github.com/kimwalisch/primesieve.git
----------------------------------------------
武汉天气不好
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2024/1/30 12:39:57
31楼: @dbyoung (dbyoung),我多年前,大概知道github.com代码,计算个数,100亿才几个毫秒,我没去看他们代码,但我是直接筛出来的

在筛的过程,我看网上大部分代码置位时只完成跳2、3,我完成了跳5,后面跳7以上还没开始做
----------------------------------------------
-
作者:
男 bdl1 (bdl1) ▲▲▲▲▲ -
普通会员
2024/1/30 13:54:16
32楼: 牛批!!!
----------------------------------------------
-我的博客
作者:
男 roadrunner (roadrunner) ★☆☆☆☆ -
盒子活跃会员
2024/1/30 14:20:10
33楼: 理论上, 欧拉筛是最优算法, 但在现代CPU体系下, 分段埃筛的性能可以反杀欧拉筛,我的代码和github上的基本原理都是分段埃筛,当然github上的做得更极致,实现了缓存大小精准检测和多线程,不清楚有没有嵌入汇编。

欧拉筛感觉对分段很不友好, 我也没仔细想过,有兴趣的可以研究一下欧拉筛算法的分段实现

delphi在windows和linux下是两个不同的编译器,windows下的优化能力很弱,已经落后于时代了,linux下的是LLVM后端,和CLANG是同一套,应该不会落后太多。

一般应用这些编译效率差距是看不出来的,但是计算量越重数据量越大,差距会越来越明显。
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2024/1/30 15:57:52
34楼: 欧拉筛有个耗时的地方用到乘、除法指令,乘、除法指令周期要比加法慢很多。

我采用的是最简单埃氏筛,有点笨就是会重复置位合数,浪费不少时间。
----------------------------------------------
-
作者:
男 roadrunner (roadrunner) ★☆☆☆☆ -
盒子活跃会员
2024/2/1 12:25:11
35楼: 有个误区,除法很慢不佳,但乘法是非常快的,现代CPU做乘法速度等同于加法

欧筛对于普通埃筛优势还是很大的,不作优化性能已经和分段埃筛很接近
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2024/2/1 13:32:06
36楼: 1、欧拉筛有取模运算不容易优化,用欧拉筛在我的机c++/go筛一亿都要几百毫秒。
2、埃氏筛,现在仅是优化到2/3/5,筛一亿25毫秒,假设能优化到7又可以减少10%的时间
此帖子包含附件:
PNG 图像
大小:21.4K
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行175.7813毫秒 RSS