第97章 他不會是在瞎寫吧
第97章 他不會是在瞎寫吧
李東剛才太過興奮,這會兒才反應過來自己坐錯位置了。
「啊,不好意思啊,我看錯座號了。」
李東連忙站起身,把靠窗的A座讓了出來,坐到了旁邊靠過道的C座上。
那個男生見李東態度挺好,也客氣的點了點頭,把行李塞進行李架後,便在靠窗的位置坐了下來。
他叫秦飛,是北理工計算機科學與技術專業的一名大三學生。
作為常年混跡在京都地鐵4號線上的高校學子,秦飛平時的課業壓力其實非常大,尤其是他主攻的方向還是「高性能計算(HPC)與底層算法優化」。
今年大三升大四,秦飛正處於衝刺考研的關鍵期。
本來這個暑假他是沒打算回老家的,想留在學校實驗室里繼續肝他的算力項目。
但由於自己太過優秀,前期複習進度遠超預期,考研保底基本沒啥懸念了。
再加上過年那會兒就沒回家,於是才回家看了看爸媽。
現在開學了,他自然也要回學校了。
坐到座位上後,秦飛掏出一副降噪耳機戴上,就將目光投向窗外飛速倒退的風景。
而坐在旁邊的李東,已經從包里拿出了那台聯想筆記本電腦,直接架在了高鐵的摺疊小桌板上。
「今天,我非得把那座屎山代碼給推平了不可!」
李東打開電腦。
他果斷拋棄了之前那個效率低下的Python腳本,打開了C++的集成開發環境(
IDE)。
要跑黎曼Zeta函數的非平凡零點驗證,必須上底層語言,同時要用GMP和MPFR
庫來保證計算精度。
0.3的基礎屬性直接拉滿,配上【代碼直覺(基礎版)】
他覺得自己現在強的可怕————
「噼里啪啦——————噼里啪啦————」
戴著降噪耳機的秦飛被身旁李東的動作給吸引了。
他微微偏過頭,瞥了一眼。
」ThinkBook?」
秦飛在心裡暗暗搖了搖頭。
「買個主打輕薄商務的輕薄本用來敲代碼?這散熱壓得住嗎?這同學怕是被割韭菜了吧————」
帶著一絲懂行人的優越感,秦飛又看向了李東的電腦屏幕,然後就愣了一下。
void RiemannSiegelZ(...)
mpfr—ttheta—t;
「嗯?」
秦飛眉頭微挑。
「用C++寫黎曼—西格爾公式?這小子在跑黎曼Zeta函數的非平凡零點驗證?
,秦飛心裡多少有些意外,在高鐵上居然遇到了同專業的學生?
不過他還是帶著上位者的心態在看李東的代碼。
因為在他們北理工的高性能計算實驗室里,這種項目實在是太常見了。
計算機算力發展到今天,用經典的數學難題,比如計算圓周率百億位呀、大素數篩法這些來作為Benchmark(基準測試),去檢驗一套底層算法的優化程度,是他們這幫HPC方向學生的家常便飯。
而且,秦飛前段時間為了準備考研複試和畢業設計的開題,自己也手搓過一套驗證黎曼零點的程序。
「想法倒是不錯,用這個來練手。」
秦飛搖了搖頭,看著那台筆記本電腦,在心裡暗暗吐槽。
「不過,就憑這台被割韭菜的輕薄本,你這算法能跑到什麼級別?」
「十萬級?還是百萬級?」
「估計跑到一百萬個零點,這內存分配的碎片和CPU的溫度,就能把這台機子直接干藍屏吧。」
秦飛心中篤定。
因為他自己當時做這個項目的時候,可是動用了學校實驗室的高性能伺服器集群。
通過極其嚴苛的多線程並發控制和CPU三級緩存的命中率優化,他硬生生將零點計算推到了上億級的恐怖規模!
他甚至覺得,如果當時自己再把內存指針的回收機制打磨一下,摸到十億級的門檻也不是不可能。
「還是太業餘了呀————」
秦飛有些好為人師的搖了搖頭,索性也不看風景了,就這麼饒有興致的盯著李東的屏幕,權當是在旅途中找點樂子了。
此時,李東也沒注意旁邊有個高手在,他只優化自己的算法。
秦飛看著,先是暗自點頭。
「嗯,不錯。」
「知道拋棄原始的歐拉乘積公式,直接上Riemann—Siegelformula。」
「主和項的循環寫得很規範,餘項展開的泰勒截斷也算合理。」
「時間複雜度標準的0(t^(1/2)),對於一個普通學生來說,這代碼底子算得上紮實了。」
秦飛在心裡給出了一個「中規中矩」的評價。
然而,就在秦飛以為李東接下來會順理成章的去寫多線程加速代碼時。
李東卻突然停了下來。
然後就按下了退格鍵,竟然把剛剛寫好的,那段堪稱教科書般標準的黎曼一西格爾主和項循環計算代碼————
刪掉了一大半!
秦飛愣了一下。
「他幹嘛?寫錯撤回了?」
但接下來李東敲出的代碼,卻讓秦飛徹底看迷糊了。
李東沒有去糾結如何加快單次計算的速度。
他有【代碼直覺】還有《黎曼絕筆》里的那種降維數學思維,他現在已經可以初步找到通往現代計算機底層邏輯的完美橋樑了。
他在代碼頂部,重新引入了一個名為&It;fftw3.h>的頭文件。
這是著名的快速傅立葉變換(FFT)開源庫。
然後又在代碼中定義一個密集的評估網格。
voidMultiPointEvaluation Grid(...)
他將需要逐個點代入t值去硬算的黎曼Zeta函數,通過構建局部多項式,強行轉化為了在網格點上的泰勒級數展開。
緊接著,李東調用了FFT算法,讓這些多項式在頻域內進行高速相乘。
秦飛已經把降噪耳取了下來,眼睛看著李東的電腦屏幕,呼吸都變得有些急促了。
「等等————這特麼是在幹什麼?」
秦飛想用自己學過的知識去去解析這套代碼背後的邏輯。
「算黎曼Zeta函數,你引個快速傅立葉變換(FFT)進來幹嘛?這兩者八竿子打不著啊!」
「還有這個多點求值矩陣?他把泰勒展開放在網格上————」
突然,他好像想到了什麼「他————他不是在算單點!他是在利用FFT的高效卷積特性,把一個大區間內的所有零點求值,強行打包成了一個並行的多項式運算?」
「用多點求值去分攤黎曼—西格爾公式主和項那恐怖的計算開銷?」
這其實就是黎曼寫在手稿里,沒未被後世學界發現的零點計算的思路。
比後來公開的Odlyzko—Schonhage算法早了近一個半世紀,甚至在數學底層上,把後者的時間複雜度又往下壓了整整一個維度。
但秦飛不可能知道啊!
在他的認知里,黎曼—西格爾公式帶來的0(t^(1/2))複雜度,就是單零點計算的理論下限。
哪怕是學界最快的0S算法,也只是工程化的極限優化,根本不可能跳出這個數學框架。
而現在,眼前這個傢伙,他到底在幹什麼?是想要推翻整個計算架構嗎?
「這怎麼可能?!」
秦飛感覺他瘋了。
「把主和項展開成矩陣運算,理論上雖然能降低平均複雜度,但誤差怎麼控制?你這麼搞,浮點數的截斷誤差絕對會呈指數級爆炸的!」
然而,還沒等秦飛在心裡反駁完。
李東繼續在多點求值的網格間,穿插了幾段帶限函數的插值濾波代碼,完美的將積分路徑的截斷誤差死死的鎖在了一個極小的數學邊界內!
每一行指針的遊走,每一次內存的復用,都用的很優雅。
「不對————就算是0S算法,也不可能用這麼少的代碼、這麼低的內存開銷實現!」
「他這個插值邏輯,根本不是現代數值分析的思路————這到底是哪來的算法?!」
秦飛徹底看呆了。
雖然他認識那些C++的語法,但組合在一起的算法邏輯,他已經完全跟不上了。
「他不會是在瞎寫吧?」
「這樣寫————真的可以跑通嗎?」
秦飛陷入了深深的自我懷疑中。
李東剛才太過興奮,這會兒才反應過來自己坐錯位置了。
「啊,不好意思啊,我看錯座號了。」
李東連忙站起身,把靠窗的A座讓了出來,坐到了旁邊靠過道的C座上。
那個男生見李東態度挺好,也客氣的點了點頭,把行李塞進行李架後,便在靠窗的位置坐了下來。
他叫秦飛,是北理工計算機科學與技術專業的一名大三學生。
作為常年混跡在京都地鐵4號線上的高校學子,秦飛平時的課業壓力其實非常大,尤其是他主攻的方向還是「高性能計算(HPC)與底層算法優化」。
今年大三升大四,秦飛正處於衝刺考研的關鍵期。
本來這個暑假他是沒打算回老家的,想留在學校實驗室里繼續肝他的算力項目。
但由於自己太過優秀,前期複習進度遠超預期,考研保底基本沒啥懸念了。
再加上過年那會兒就沒回家,於是才回家看了看爸媽。
現在開學了,他自然也要回學校了。
坐到座位上後,秦飛掏出一副降噪耳機戴上,就將目光投向窗外飛速倒退的風景。
而坐在旁邊的李東,已經從包里拿出了那台聯想筆記本電腦,直接架在了高鐵的摺疊小桌板上。
「今天,我非得把那座屎山代碼給推平了不可!」
李東打開電腦。
他果斷拋棄了之前那個效率低下的Python腳本,打開了C++的集成開發環境(
IDE)。
要跑黎曼Zeta函數的非平凡零點驗證,必須上底層語言,同時要用GMP和MPFR
庫來保證計算精度。
0.3的基礎屬性直接拉滿,配上【代碼直覺(基礎版)】
他覺得自己現在強的可怕————
「噼里啪啦——————噼里啪啦————」
戴著降噪耳機的秦飛被身旁李東的動作給吸引了。
他微微偏過頭,瞥了一眼。
」ThinkBook?」
秦飛在心裡暗暗搖了搖頭。
「買個主打輕薄商務的輕薄本用來敲代碼?這散熱壓得住嗎?這同學怕是被割韭菜了吧————」
帶著一絲懂行人的優越感,秦飛又看向了李東的電腦屏幕,然後就愣了一下。
void RiemannSiegelZ(...)
mpfr—ttheta—t;
「嗯?」
秦飛眉頭微挑。
「用C++寫黎曼—西格爾公式?這小子在跑黎曼Zeta函數的非平凡零點驗證?
,秦飛心裡多少有些意外,在高鐵上居然遇到了同專業的學生?
不過他還是帶著上位者的心態在看李東的代碼。
因為在他們北理工的高性能計算實驗室里,這種項目實在是太常見了。
計算機算力發展到今天,用經典的數學難題,比如計算圓周率百億位呀、大素數篩法這些來作為Benchmark(基準測試),去檢驗一套底層算法的優化程度,是他們這幫HPC方向學生的家常便飯。
而且,秦飛前段時間為了準備考研複試和畢業設計的開題,自己也手搓過一套驗證黎曼零點的程序。
「想法倒是不錯,用這個來練手。」
秦飛搖了搖頭,看著那台筆記本電腦,在心裡暗暗吐槽。
「不過,就憑這台被割韭菜的輕薄本,你這算法能跑到什麼級別?」
「十萬級?還是百萬級?」
「估計跑到一百萬個零點,這內存分配的碎片和CPU的溫度,就能把這台機子直接干藍屏吧。」
秦飛心中篤定。
因為他自己當時做這個項目的時候,可是動用了學校實驗室的高性能伺服器集群。
通過極其嚴苛的多線程並發控制和CPU三級緩存的命中率優化,他硬生生將零點計算推到了上億級的恐怖規模!
他甚至覺得,如果當時自己再把內存指針的回收機制打磨一下,摸到十億級的門檻也不是不可能。
「還是太業餘了呀————」
秦飛有些好為人師的搖了搖頭,索性也不看風景了,就這麼饒有興致的盯著李東的屏幕,權當是在旅途中找點樂子了。
此時,李東也沒注意旁邊有個高手在,他只優化自己的算法。
秦飛看著,先是暗自點頭。
「嗯,不錯。」
「知道拋棄原始的歐拉乘積公式,直接上Riemann—Siegelformula。」
「主和項的循環寫得很規範,餘項展開的泰勒截斷也算合理。」
「時間複雜度標準的0(t^(1/2)),對於一個普通學生來說,這代碼底子算得上紮實了。」
秦飛在心裡給出了一個「中規中矩」的評價。
然而,就在秦飛以為李東接下來會順理成章的去寫多線程加速代碼時。
李東卻突然停了下來。
然後就按下了退格鍵,竟然把剛剛寫好的,那段堪稱教科書般標準的黎曼一西格爾主和項循環計算代碼————
刪掉了一大半!
秦飛愣了一下。
「他幹嘛?寫錯撤回了?」
但接下來李東敲出的代碼,卻讓秦飛徹底看迷糊了。
李東沒有去糾結如何加快單次計算的速度。
他有【代碼直覺】還有《黎曼絕筆》里的那種降維數學思維,他現在已經可以初步找到通往現代計算機底層邏輯的完美橋樑了。
他在代碼頂部,重新引入了一個名為&It;fftw3.h>的頭文件。
這是著名的快速傅立葉變換(FFT)開源庫。
然後又在代碼中定義一個密集的評估網格。
voidMultiPointEvaluation Grid(...)
他將需要逐個點代入t值去硬算的黎曼Zeta函數,通過構建局部多項式,強行轉化為了在網格點上的泰勒級數展開。
緊接著,李東調用了FFT算法,讓這些多項式在頻域內進行高速相乘。
秦飛已經把降噪耳取了下來,眼睛看著李東的電腦屏幕,呼吸都變得有些急促了。
「等等————這特麼是在幹什麼?」
秦飛想用自己學過的知識去去解析這套代碼背後的邏輯。
「算黎曼Zeta函數,你引個快速傅立葉變換(FFT)進來幹嘛?這兩者八竿子打不著啊!」
「還有這個多點求值矩陣?他把泰勒展開放在網格上————」
突然,他好像想到了什麼「他————他不是在算單點!他是在利用FFT的高效卷積特性,把一個大區間內的所有零點求值,強行打包成了一個並行的多項式運算?」
「用多點求值去分攤黎曼—西格爾公式主和項那恐怖的計算開銷?」
這其實就是黎曼寫在手稿里,沒未被後世學界發現的零點計算的思路。
比後來公開的Odlyzko—Schonhage算法早了近一個半世紀,甚至在數學底層上,把後者的時間複雜度又往下壓了整整一個維度。
但秦飛不可能知道啊!
在他的認知里,黎曼—西格爾公式帶來的0(t^(1/2))複雜度,就是單零點計算的理論下限。
哪怕是學界最快的0S算法,也只是工程化的極限優化,根本不可能跳出這個數學框架。
而現在,眼前這個傢伙,他到底在幹什麼?是想要推翻整個計算架構嗎?
「這怎麼可能?!」
秦飛感覺他瘋了。
「把主和項展開成矩陣運算,理論上雖然能降低平均複雜度,但誤差怎麼控制?你這麼搞,浮點數的截斷誤差絕對會呈指數級爆炸的!」
然而,還沒等秦飛在心裡反駁完。
李東繼續在多點求值的網格間,穿插了幾段帶限函數的插值濾波代碼,完美的將積分路徑的截斷誤差死死的鎖在了一個極小的數學邊界內!
每一行指針的遊走,每一次內存的復用,都用的很優雅。
「不對————就算是0S算法,也不可能用這麼少的代碼、這麼低的內存開銷實現!」
「他這個插值邏輯,根本不是現代數值分析的思路————這到底是哪來的算法?!」
秦飛徹底看呆了。
雖然他認識那些C++的語法,但組合在一起的算法邏輯,他已經完全跟不上了。
「他不會是在瞎寫吧?」
「這樣寫————真的可以跑通嗎?」
秦飛陷入了深深的自我懷疑中。