我的学习群里全是真大佬 第110节
“ThinkBook?”
秦飞在心里暗暗摇了摇头。
“买个主打轻薄商务的轻薄本用来敲代码?这散热压得住吗?这同学怕是被割韭菜了吧……”
带著一丝懂行人的优越感,秦飞又看向了李东的电脑屏幕,然后就愣了一下。
voidRiemannSiegelZ(...)
mpfr_ttheta_t;
“嗯?”
秦飞眉头微挑。
“用C++写黎曼-西格尔公式?这小子在跑黎曼Zeta函数的非平凡零点验证?”
秦飞心里多少有些意外,在高铁上居然遇到了同专业的学生?
不过他还是带著上位者的心态在看李东的代码。
因为在他们北理工的高性能计算实验室里,这种项目实在是太常见了。
计算机算力发展到今天,用经典的数学难题,比如计算圆周率百亿位呀、大素数筛法这些来作为Benchmark(基准测试),去检验一套底层算法的优化程度,是他们这帮HPC方向学生的家常便饭。
而且,秦飞前段时间为了准备考研复试和毕业设计的开题,自己也手搓过一套验证黎曼零点的程序。
“想法倒是不错,用这个来练手。”
秦飞摇了摇头,看著那台笔记本电脑,在心里暗暗吐槽。
“不过,就凭这台被割韭菜的轻薄本,你这算法能跑到什么级别?”
“十万级?还是百万级?”
“估计跑到一百万个零点,这内存分配的碎片和CPU的温度,就能把这台机子直接干蓝屏吧。”
秦飞心中笃定。
因为他自己当时做这个项目的时候,可是动用了学校实验室的高性能服务器集群。
通过极其严苛的多线程并发控制和CPU三级缓存的命中率优化,他硬生生将零点计算推到了上亿级的恐怖规模!
他甚至觉得,如果当时自己再把内存指针的回收机制打磨一下,摸到十亿级的门槛也不是不可能。
“还是太业余了呀……”
秦飞有些好为人师的摇了摇头,索性也不看风景了,就这么饶有兴致的盯著李东的屏幕,权当是在旅途中找点乐子了。
此时,李东也没注意旁边有个高手在,他只优化自己的算法。
秦飞看著,先是暗自点头。
“嗯,不错。”
“知道抛弃原始的欧拉乘积公式,直接上Riemann-Siegelformula。”
“主和项的循环写得很规范,余项展开的泰勒截断也算合理。”
“时间复杂度标准的O(t^(1/2)),对于一个普通学生来说,这代码底子算得上扎实了。”
秦飞在心里给出了一个“中规中矩”的评价。
然而,就在秦飞以为李东接下来会顺理成章的去写多线程加速代码时。
李东却突然停了下来。
然后就按下了退格键,竟然把刚刚写好的,那段堪称教科书般标准的黎曼-西格尔主和项循环计算代码……
删掉了一大半!
秦飞愣了一下。
“他干嘛?写错撤
回了?”
但接下来李东敲出的代码,却让秦飞彻底看迷糊了。
李东没有去纠结如何加快单次计算的速度。
他有【代码直觉】还有《黎曼绝笔》里的那种降维数学思维,他现在已经可以初步找到通往现代计算机底层逻辑的完美桥梁了。
这是著名的快速傅里叶变换(FFT)开源库。
然后又在代码中定义一个密集的评估网格。
voidMultiPointEvaluation_Grid(...)
他将需要逐个点代入t值去硬算的黎曼Zeta函数,通过构建局部多项式,强行转化为了在网格点上的泰勒级数展开。
紧接著,李东调用了FFT算法,让这些多项式在频域内进行高速相乘。
秦飞已经把降噪耳取了下来,眼睛看著李东的电脑屏幕,呼吸都变得有些急促了。
“等等……这特么是在干什么?”
秦飞想用自己学过的知识去去解析这套代码背后的逻辑。
“算黎曼Zeta函数,你引个快速傅里叶变换(FFT)进来干嘛?这两者八竿子打不著啊!”
“还有这个多点求值矩阵?他把泰勒展开放在网格上……”
突然,他好像想到了什么
“他……他不是在算单点!他是在利用FFT的高效卷积特性,把一个大区间内的所有零点求值,强行打包成了一个并行的多项式运算?”
“用多点求值去分摊黎曼-西格尔公式主和项那恐怖的计算开销?”
这其实就是黎曼写在手稿里,没未被后世学界发现的零点计算的思路。
比后来公开的Odlyzko–Schonhage算法早了近一个半世纪,甚至在数学底层上,把后者的时间复杂度又往下压了整整一个维度。
但秦飞不可能知道啊!
在他的认知里,黎曼-西格尔公式带来的O(t^(1/2))复杂度,就是单零点计算的理论下限。
哪怕是学界最快的OS算法,也只是工程化的极限优化,根本不可能跳出这个数学框架。
而现在,眼前这个家伙,他到底在干什么?是想要推翻整个计算架构吗?
“这怎么可能?!”
秦飞感觉他疯了。
“把主和项展开成矩阵运算,理论上虽然能降低平均复杂度,但误差怎么控制?你这么搞,浮点数的截断误差绝对会呈指数级爆炸的!”
然而,还没等秦飞在心里反驳完。
李东继续在多点求值的网格间,穿插了几段带限函数的插值滤波代码,完美的将积分路径的截断误差死死的锁在了一个极小的数学边界内!
每一行指针的游走,每一次内存的复用,都用的很优雅。
“不对……就算是OS算法,也不可能用这么少的代码、这么低的内存开销实现!”
“他这个插值逻辑,根本不是现代数值分析的思路……这到底是哪来的算法?!”
秦飞彻底看呆了。
虽然他认识那些C++的语法,但组合在一起的算法逻辑,他已经完全跟不上了。
“他不会是在瞎写吧?”
“这样写……真的可以跑通吗?”
秦飞陷入了深深的自我怀疑中。
第97章 我自己想的
李东从上车没多久就开始敲代码,现在已经硬生生敲了四个多小时了。
对于一个“初学者”来说,要把黎曼的降维算法完美的嵌套进C++的底层内存管理中,还要调用FFT库进行多点求值,确实非常的消耗脑力。
“啪!”
李东敲下了最后一行代码的回车键,然后伸了一个懒腰。
他又从头到尾仔细检查了一遍内存指针的释放和边界条件的设定。
“没问题,完美。”
然后深吸了一口气,轻轻的点了下“Run”键。
屏幕上的黑色控制台窗口瞬间弹出。
首行赫然显示著初始搜索参数:【TargetInterval:t∈[10^20,10^20+1.5×10^6]】
紧接著,一行行绿色的数字倾泻而下。
10,000...
100,000...
1,000,000...
每跳一次计数,都代表著成百上千个黎曼Zeta函数的非平凡零点被捕捉验证,累计数量飞速攀升。
李东看著屏幕也不由的有些激动。
“跑得通!真的跑得通!”
而且因为算法的时间复杂度从黎曼-西格尔公式的O(t^(1/2)),直接降到了比Odlyzko–Schonhage算法的O(t^(1/3+ε))还要低的量级,再加上优雅的内存复用机制,这台轻薄本根本没有出现之前那种卡死蓝屏的情况。
“我的思路是对的!黎曼的算法真的可以代入……”
就在李东看著屏幕的时候,他并没有注意到,被他扔在小桌板一角的手机屏幕,突然亮了一下。
微信“青龙学习小组”的界面后台。
在李东头像旁边的那个【群主(实习)】的头衔里。
“(实习)”这两个字,正在一点一点的变淡。
群里……
【约翰?冯?诺依曼】:快了。
上一篇:我家艺人太没上进心了
下一篇:返回列表
