整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          「源碼示例」3D圖片矩陣

           最近在學(xué)習(xí)Web頁(yè)面3D效果方面的東西,感覺十分有趣。在Web方面實(shí)現(xiàn)3D現(xiàn)在手段十分豐富,可以純javascript,也可以HTML5+CSS3,另外還有其他一些手段。對(duì)于Access實(shí)現(xiàn)3D相對(duì)來說手段就要少很多,不過少并不意味著不能。于是乎便寫了這個(gè)示例,來說明Access實(shí)現(xiàn)3D的一些基本的方法。

            為了簡(jiǎn)化問題,便也就用了最為簡(jiǎn)單的3D矩陣來作為問題的原型。在這個(gè)示例中我們來實(shí)現(xiàn)一個(gè)1×4×5的靜態(tài)圖片矩陣。由于Access比較難以實(shí)現(xiàn)圖片的透明度設(shè)置,所以你將只能看到一個(gè)近大遠(yuǎn)小的效果,而看不出透明度的變化。即便如此,還是能感覺出3D來。

            如果你有興趣,還可以進(jìn)一步修改這個(gè)示例,將其變化為l×m×n的圖片矩陣,也可再進(jìn)一步加入矩陣隨鏡頭移動(dòng)的變化效果來。不過我要告訴你,這些改進(jìn)會(huì)比較復(fù)雜,而且演示的效果并不一定好。

          演 示:


          示例下載:

          【Access小品】3D圖片矩陣【Access軟件網(wǎng)】

          文首發(fā)于計(jì)算化學(xué)公社,RTX4090 配置方案與軟件搭配(DeePMD,Gromacs等)詳情咨詢 “庚子計(jì)算” 客服。

          0 寫在前面

          這次測(cè)試最初的目的是證明用何種性能級(jí)別的CPU可在運(yùn)行GPU加速GROMACS(簡(jiǎn)稱GMX)時(shí)榨干最新頂級(jí)消費(fèi)級(jí)GPU——NVIDIA GeForce RTX 4090,對(duì)RTX 4090進(jìn)行迄今全網(wǎng)最具系統(tǒng)性的分子動(dòng)力學(xué)(MD)模擬性能測(cè)試。由于中文互聯(lián)網(wǎng)上與GPU加速M(fèi)D相關(guān)的benchmark文章較少,本文的討論將不會(huì)局限于RTX 4090本身,會(huì)做一些擴(kuò)展討論。

          NVIDIA官方對(duì)相關(guān)軟件已經(jīng)進(jìn)行了一些測(cè)試,但其測(cè)試只針對(duì)極度昂貴的數(shù)據(jù)中心GPU產(chǎn)品,以展示多GPU并行性能和其GPU節(jié)點(diǎn)對(duì)CPU節(jié)點(diǎn)的替代能力為主要目的;且筆者發(fā)現(xiàn),其在使用不同軟件運(yùn)行STMV模型的測(cè)試中所用具體參數(shù)大相徑庭,無法實(shí)現(xiàn)不同程序間的公平對(duì)比。因此,筆者特意在本次測(cè)試中使用了一些公平的模型和參數(shù)。此外,本次測(cè)試僅考慮單GPU運(yùn)行的使用場(chǎng)景,因?yàn)檫@是實(shí)際使用中的大多數(shù)狀態(tài),且RTX 4090不具備NVLink,使用多GPU并行意義不大。

          1 測(cè)試平臺(tái)

          硬件平臺(tái)(由于51972暫時(shí)不能提供RTX 3090Ti,故用ROG STRIX RTX 3090額外超頻150MHz并將功耗上限設(shè)為480W以模擬RTX 3090Ti):軟件環(huán)境:Ubuntu 22.04.1 LTS Desktop; Linux version 5.15.0-52-generic; GNU 11.2; CUDA Tookit 11.8; NVIDIA GPU Driver 520.56.06

          2 測(cè)試程序信息及相應(yīng)模型參數(shù)

          本次測(cè)試涉及GMX、AMBER、NAMD3、LAMMPS共4款MD軟件,基準(zhǔn)數(shù)據(jù)集和測(cè)試腳本在SI中(tar.bz2)。GMX、AMBER、NAMD3所用各模型主要參數(shù)如下表:

          其中,A和A-2為表面活性劑在油-水界面的slab模型;B為體相的表面活性劑膠束模型;B-TI為模擬單個(gè)表面活性劑(134原子)從膠束中解耦過程的ΔG的熱力學(xué)積分(TI)模擬的某個(gè)λ窗口模擬;4個(gè)STMV開頭的模型均為STMV(煙草花葉病毒衛(wèi)星病毒,經(jīng)典的benchmark專用模型,近20年來被廣泛用于HPC性能測(cè)試)在水環(huán)境中的模型,后3個(gè)是相應(yīng)程序此前已公開報(bào)道的測(cè)試所用的模型與參數(shù);benchPEP-h為若干小肽鏈在水環(huán)境中的模型。A、A-2、B、B-TI均選自筆者此前研究工作,與5月發(fā)布的HPC benchmark報(bào)告所用模型完全相同。

          值得一提的是,STMV-AMBER測(cè)試中額外使用了AMBER官方benchmark文件包中的優(yōu)化版參數(shù)進(jìn)行測(cè)試,即所謂“Boost”設(shè)置,具體機(jī)制是通過手動(dòng)指定合適的“skin_permit”參數(shù)以減少pair list的頻繁更新引起的性能下降,根據(jù)AMBER開發(fā)組的說法,將此參數(shù)設(shè)為0.75可在多數(shù)體系中獲得8-12%的性能提升,并兼顧模擬的“安全性”,但此功能未在公平版mod中啟用。

          10月11日筆者在BB空間發(fā)布“預(yù)告”后,有網(wǎng)友要求增加LAMMPS測(cè)試,但實(shí)際上筆者一開始特意將LAMMPS排除在測(cè)試列表外,因?yàn)槠渲鞴ス腆w材料模擬,力場(chǎng)基本與另3款軟件不兼容,故無法與另3款軟件橫向?qū)Ρ龋淮送?,其GPU加速功能對(duì)GPU的雙精度浮點(diǎn)性能需求高,較不適合用來測(cè)試雙精度浮點(diǎn)性能孱弱的游戲GPU。不過既然網(wǎng)友已明確提出需求,又考慮到RTX 4090的雙精度浮點(diǎn)性能已超過1 TFLOPS,有一定測(cè)試價(jià)值,遂將LAMMPS加入測(cè)試列表。LAMMPS測(cè)試所用文件即為NVIDIA網(wǎng)站上公布的測(cè)試所用的文件,3個(gè)任務(wù)分別為L(zhǎng)J 2.5、EAM、Tersoff。經(jīng)過測(cè)試,目前使用RTX 4090運(yùn)行ReaxFF/C任務(wù)有bug,故放棄ReaxFF/C。也有網(wǎng)友提出希望測(cè)試VASP,但此軟件是純商業(yè)軟件,筆者個(gè)人未購(gòu)買使用許可,故無法進(jìn)行測(cè)試,Material Studio同理(建議自發(fā)抵制VASP、MS這類溢價(jià)軟件,尤其是MS)。本次測(cè)試所用的4款經(jīng)典MD軟件是當(dāng)前最主流的,參考2021年計(jì)算化學(xué)公社論壇“你最常用的計(jì)算化學(xué)程序和DFT泛函”投票結(jié)果統(tǒng)計(jì)。

          GROMACS 2022.3根據(jù)筆者博客上公布的流程編譯CUDA版本;AMBER22根據(jù)筆者博客上公布的流程編譯串行+CUDA版本,因?yàn)椴粶y(cè)試多GPU并行,所以不編譯MPI版本,也不啟用NCCL;NAMD3直接使用官網(wǎng)提供的Alpha13預(yù)編譯版本(NAMD_3.0alpha13_Linux-x86_64-multicore-CUDA-SingleNode.tar.gz,NVIDIA最新的測(cè)試也使用了此版本);LAMMPS版本為23Jun2022_update1,使用cmake預(yù)設(shè)文件“basic.cmake”和“kokkos-cuda.cmake”進(jìn)行編譯(“kokkos-cuda.cmake”中“Kokkos_ARCH_PASCAL60”改為“Kokkos_ARCH_AMPERE86”,未選擇針對(duì)Ada Lovelace架構(gòu)優(yōu)化是因?yàn)槟壳皼]有相關(guān)選項(xiàng)),同時(shí)額外指定編譯REAXFF包(-D PKG_REAXFF=on)。

          3 發(fā)揮RTX4090的最大性能——選擇合適的CPU

          GMX的開發(fā)遵循硬件資源利用率最大化的原則,因此近些年來其GPU加速一直采用CPU+GPU的方案,運(yùn)行MD模擬時(shí)需要CPU參與部分計(jì)算工作,CPU-GPU的任務(wù)分配在一定程度上可人工調(diào)節(jié),以獲得最優(yōu)效率。在最新的版本中,GMX最多可將非鍵相互作用、成鍵相互作用、PME、坐標(biāo)/速度/力更新和約束計(jì)算完全offload到GPU上運(yùn)行(GPU-resident模式,須在mdrun命令中添加“-bonded gpu -update gpu”),但域分解(domain decomposition)、對(duì)搜索(pair search)、一些特殊力的計(jì)算以及特殊算法仍必須使用CPU執(zhí)行。值得一提的是,只有當(dāng)CPU資源嚴(yán)重匱乏時(shí),采用GPU-resident模式才能快于使用CPU計(jì)算成鍵相互作用(J. Chem. Phys. 2020, 153, 134110 Fig. 10),而“CPU資源嚴(yán)重匱乏”對(duì)于不同模型并無確定的分界點(diǎn),因此本次測(cè)試將分別記錄以這兩種方式運(yùn)行GMX的性能數(shù)據(jù)。

          近些年來,GPU性能增速飛快,CPU的性能開始表現(xiàn)出不足,例如2020年9月發(fā)布的NVIDIA GeForce RTX 3090,若用來運(yùn)行GPU加速GMX,須配合同期的高端CPU——AMD Ryzen R9 5900X才能發(fā)揮出大部分性能。而RTX 4090的理論性能相較于RTX 3090翻倍有余,CPU性能的瓶頸將更為明顯,因此,非常有必要研究如何讓RTX 4090在GROMACS任務(wù)中發(fā)揮最大性能。

          AMBER、NAMD3、LAMMPS這3款MD軟件的GPU加速模塊均采用了“純GPU”方案,這與GMX不同。采用這種方案的程序在運(yùn)行時(shí)僅會(huì)占用1個(gè)CPU線程,幾乎所有計(jì)算都在GPU上完成。但CPU單核性能對(duì)這類MD任務(wù)運(yùn)行速度的影響依然值得考慮。

          本次測(cè)試使用了4款典型的CPU,其中,AMD Ryzen R9 7950X和intel Core i9 13900K都是最新的頂級(jí)MSDT平臺(tái)CPU,特點(diǎn)是單核性能都非常強(qiáng),多核性能也不弱;AMD EPYC 7R32適合計(jì)算密集型應(yīng)用,具有48顆Zen2核心;intel XEON Platinum 8369B是近期intel陣營(yíng)的高性價(jià)比服務(wù)器CPU,具有32顆Sunny Cove核心,在GMX測(cè)試中最多同時(shí)使用了2顆此CPU(64核)。

          測(cè)試使用shell腳本自動(dòng)運(yùn)行,詳見SI。在GMX測(cè)試中,STMV-NPT、STMV-GMX和benchPEP-h的性能數(shù)據(jù)并非直接取自mdrun運(yùn)行日志,而是扣除Write traj.項(xiàng)的Wall time后重新計(jì)算。因?yàn)檫@3個(gè)模型模擬過程中不寫軌跡,但GPU計(jì)算完成后會(huì)花較長(zhǎng)時(shí)間寫gro文件,而mdrun運(yùn)行日志給出的性能數(shù)據(jù)包含了這一耗時(shí)。在運(yùn)行時(shí)間較長(zhǎng)的生產(chǎn)模擬中這一耗時(shí)可忽略不計(jì),而在benchmark任務(wù)中理應(yīng)扣除這一耗時(shí)。

          圖1展示了GMX運(yùn)行各模型MD模擬的速度與所使用的CPU核數(shù)之間的關(guān)系。A和A-2模型中有大量成鍵項(xiàng)數(shù)量與原子數(shù)比值很大的分子(即烷烴和表面活性劑,其原子數(shù)占總原子數(shù)的60%),因此成鍵相互作用使用CPU計(jì)算與使用GPU計(jì)算的性能差異很明顯,在圖中直觀地表現(xiàn)為兩條曲線的交叉角度很大。其中A-2模型的cutoff更小,非鍵相互作用計(jì)算量更少,進(jìn)一步突出了上述差異。在1250萬(wàn)原子的benchPEP-h模型的測(cè)試中,通過檢查nvidia-smi dmon性能監(jiān)控日志可發(fā)現(xiàn),如果使用CPU計(jì)算成鍵相互作用,RTX 4090運(yùn)行此模型時(shí)會(huì)出現(xiàn)間歇性的低時(shí)鐘占用率、低功耗狀態(tài),且PCIe實(shí)時(shí)數(shù)據(jù)傳輸速率一直維持在近10GB/s,峰值可達(dá)20GB/s;而若采用GPU-resident模式,可以觀察到GPU間歇性“熄火”的狀況有一定改善,且PCIe數(shù)據(jù)傳輸量也有所減少;圖1也顯示對(duì)于該模型采用GPU-resident模式的模擬速度完全快于使用CPU計(jì)算成鍵相互作用。總之,對(duì)于大多數(shù)體系,只要CPU資源不是極度匱乏,都建議把成鍵相互作用放在CPU上計(jì)算(在mdrun命令中添加“-update gpu”,不添加“-bonded gpu”);而對(duì)于主觀估計(jì)為CPU資源極度匱乏(例如使用服務(wù)器CPU搭配多塊高性能GPU),或體系中成鍵項(xiàng)數(shù)量與原子數(shù)比值很大且使用了較小cutoff,或體系極度龐大(近千萬(wàn)原子級(jí)別)的情況,應(yīng)當(dāng)嘗試采用GPU-resident模式,觀察其速度是否更快。

          7R32作為4款CPU中多核理論性能最強(qiáng)者,運(yùn)行GPU加速GMX卻最慢,其原因是GPU加速GMX時(shí)CPU部分的計(jì)算是純OpenMP并行,這種并行模式在高并行度下并行效率低,且對(duì)CPU核心間通信延遲很敏感,而7R32的理論單核性能較差,其多核理論性能靠核心數(shù)量支撐,且CPU本身采用小芯片設(shè)計(jì),48個(gè)CPU核心分布在6個(gè)CCD上,跨CCD延遲較高。

          8369B雖然理論單核性能沒有比7R32高很多,但它是單Die設(shè)計(jì),核心間通信延遲很低,所以運(yùn)行GPU加速GMX時(shí)其表現(xiàn)明顯優(yōu)于7R32(部分項(xiàng)目略低于之是因?yàn)槭艿娇陀^條件限制,8369B使用了機(jī)架式平臺(tái),散熱較差,RTX 4090高負(fù)載下的Boost頻率比7R32所用的塔式平臺(tái)低50MHz)。

          7950X的表現(xiàn)比8369B更好,主要原因是其單核理論性能極強(qiáng),達(dá)到了7R32、8369B的2倍以上,然而,7950X仍稍弱于13900K。

          13900K采用了混合架構(gòu),P-Core與E-Core的性能差異極大,線程綁定的OpenMP并行在這種CPU上會(huì)使線程間有明顯的負(fù)載不均衡問題,最終導(dǎo)致無法發(fā)揮出CPU的完整性能。從圖1中也可發(fā)現(xiàn),8-9核處普遍有一斷層,但是,從第12核左右開始,混用P-Core與E-Core的速度就會(huì)反超使用8個(gè)P-Core的速度,intel Raptor Lake相較于前代Alder Lake增加E-Core數(shù)量、增大E-Core緩存、優(yōu)化P-Core與E-Core間延遲是有明顯益處的。13900K也是4款CPU中表現(xiàn)最好者。此外,從圖中還可看出,24核稍慢于23核,因此,在使用13900K時(shí),建議留一個(gè)E-Core供系統(tǒng)進(jìn)程和GPU驅(qū)動(dòng)使用,這也是GMX手冊(cè)所建議的。

          值得注意的是,13900K中16個(gè)E-Core的性能在本測(cè)試中僅相當(dāng)于5-6個(gè)P-Core,且13900K本身還有混合架構(gòu)導(dǎo)致的線程負(fù)載不均衡問題,但其配合RTX 4090運(yùn)行GPU加速GMX的性能卻比7950X稍強(qiáng),出現(xiàn)這一現(xiàn)象的原因除了13900K P-Core的理論單核性能稍強(qiáng)于7950X外,也包括其核心間通信延遲總體上比7950X更低。7950X跨CCD的延遲過高,嚴(yán)重限制了其性能發(fā)揮。實(shí)際上從圖1中也能看出,部分7950X的曲線在8-10核處有一凹陷,且8核之后曲線斜率明顯變小。@ECSM_Official在這2款CPU的首發(fā)評(píng)測(cè)中就已測(cè)試了它們的核心間延遲:Raptor Lake S,再進(jìn)一步,Intel Core i9 13900K評(píng)測(cè);它很接近完美了,AMD R9 7950X全面評(píng)測(cè)。

          綜上,在GPU加速GMX這一應(yīng)用場(chǎng)景中對(duì)CPU的需求有以下特征:首先,需要單核性能與多核性能都強(qiáng)的CPU,相同理論多核性能下,單核越強(qiáng)、核數(shù)越少越好;其次,核心間通信延遲對(duì)CPU性能發(fā)揮有很大負(fù)面影響。

          圖2展示了4款CPU配合RTX 4090運(yùn)行GMX、AMBER、NAMD3和LAMMPS的性能,0%基準(zhǔn)線是7950X。前2幅小圖是圖1的另一種表現(xiàn)形式,從中可以發(fā)現(xiàn),對(duì)于GMX,CPU多核性能對(duì)不以GPU-resident模式運(yùn)行MD任務(wù)的速度有很大影響,但對(duì)GPU-resident模式影響較小。從后4幅小圖中可以發(fā)現(xiàn),CPU單核性能對(duì)4款MD軟件運(yùn)行MD任務(wù)的速度均有影響,其中對(duì)GMX和AMBER的影響很明顯,而對(duì)NAMD3和LAMMPS的影響相對(duì)小一些。

          再談?wù)劜少?gòu)建議。若使用RTX 4090加速GMX,當(dāng)下最佳搭檔CPU是intel Core i9 13900KF,如果采購(gòu)時(shí)發(fā)現(xiàn)AMD Ryzen R9 7950X及其主板的價(jià)格遠(yuǎn)低于前者,也可買之。如果預(yù)算較低,打算選4080 16GB、3090Ti級(jí)別的GPU,推薦13700KF,不推薦7900X。暫不推薦任何服務(wù)器CPU,尤其是AMD EPYC CPU,若已有這類CPU,可在此基礎(chǔ)上添加多塊RTX 4090,為每塊RTX 4090保留8-16核,以GPU-resident模式運(yùn)行MD模擬。采購(gòu)用于搭配RTX 4090運(yùn)行AMBER、NAMD3或LAMMPS的CPU時(shí),單核性能同樣是首要關(guān)注因素,但不必選13900K,用13600KF配2塊RTX 4090即可。


          4 發(fā)揮RTX4090的最大性能——選擇合適的CPU

          RTX 4090的理論性能是RTX 3090Ti的2倍,這一次的性能提升可能是十多年來NVIDIA消費(fèi)級(jí)GPU性能提升最大的一次,非常有必要測(cè)試并對(duì)比兩者用于GPU加速經(jīng)典MD模擬時(shí)的實(shí)際性能。此外,實(shí)際做研究時(shí),在系統(tǒng)穩(wěn)定的前提下計(jì)算速度越快越好,能效并不重要,超頻是可行的操作,筆者自己跑生產(chǎn)模擬時(shí)也會(huì)對(duì)硬件進(jìn)行一些保守的超頻,所以有必要測(cè)試保守超頻的收益。

          圖3展示了RTX 4090和超頻150MHz且功耗上限提升至600W的RTX 4090相較于RTX 3090Ti在各MD任務(wù)下的性能提升百分比,數(shù)據(jù)在3號(hào)和4號(hào)硬件平臺(tái)(13900K平臺(tái))上測(cè)得。從圖中可以發(fā)現(xiàn),RTX 4090運(yùn)行經(jīng)典MD模擬的性能并沒有實(shí)現(xiàn)普遍的“翻倍”,在不同模型、不同軟件下的表現(xiàn)各不相同,超頻收益普遍較明顯。

          對(duì)于GMX,當(dāng)成鍵相互作用在CPU上計(jì)算時(shí),不同模型的表現(xiàn)差異非常大,其中A-2模型極低的提升幅度顯然是由于CPU性能有嚴(yán)重瓶頸,benchPEP-h模型提升幅度較低是因?yàn)镃PU-GPU通信有明顯瓶頸,這些都已在第3節(jié)有所討論。從圖1中可以知道,上述2個(gè)模型以GPU-resident模式運(yùn)行速度明顯更快,在實(shí)際生產(chǎn)模擬中必然會(huì)以GPU-resident模式運(yùn)行,故可忽略圖3第1幅小圖中的這2個(gè)模型。當(dāng)GMX以GPU-resident模式運(yùn)行時(shí),不同模型的表現(xiàn)差異顯著縮小。對(duì)于GMX和AMBER來說,幾個(gè)STMV模型基本實(shí)現(xiàn)了“翻倍”,其中AMBER的STMV-NPT模型提升幅度高達(dá)108.65%。作為“純GPU”程序,AMBER和NAMD3下各個(gè)模型的提升幅度均達(dá)到了70%以上;AMBER的上限更高,且超頻收益與超頻幅度相符;而NAMD3下沒有任何模型實(shí)現(xiàn)“翻倍”,超頻的收益也不大。對(duì)于LAMMPS,LJ 2.5和EAM兩個(gè)任務(wù)中RTX 4090性能實(shí)現(xiàn)“翻倍”,Tersoff任務(wù)離“翻倍”還有較大距離。而對(duì)比NVIDIA公布的測(cè)試結(jié)果,RTX 4090運(yùn)行LAMMPS的性能(具體數(shù)據(jù)見SI)仍明顯不如A100,甚至不如V100,這顯然是因?yàn)镽TX 4090無FP64執(zhí)行單元,雙精度浮點(diǎn)性能太弱??傊?,以上結(jié)果體現(xiàn)了模型大小以及MD程序本身的設(shè)計(jì)對(duì)RTX 4090性能發(fā)揮的重要影響,實(shí)際上,模型大小的影響在一定程度上是軟件優(yōu)化的問題。

          此外,通過檢查nvidia-smi dmon性能監(jiān)控日志還可發(fā)現(xiàn),在測(cè)試運(yùn)行過程中,全程顯存占用率不超過60%,對(duì)GMX而言甚至不超過40%,所以顯存不存在瓶頸,這否定了此前一些人關(guān)于“顯存瓶頸”的猜想。需注意,顯存占用率和顯存使用量不同,前者是指在采樣周期內(nèi)GPU讀寫顯存的時(shí)間百分比。

          結(jié)合本節(jié)和第3節(jié)內(nèi)容可得出結(jié)論:當(dāng)前,制約RTX 4090的性能在GMX、AMBER、NAMD3和LAMMPS中發(fā)揮的主要瓶頸是CPU單核性能以及軟件優(yōu)化,對(duì)于GMX,CPU多核性能、CPU核間通信延遲以及CPU-GPU通信能力是次要瓶頸;當(dāng)前,RTX 4090運(yùn)行經(jīng)典MD模擬的性能相較于RTX 3090Ti總體上有62~109%的提升,在使用合適的軟件和模型的情況下,確實(shí)可實(shí)現(xiàn)“翻倍”,超頻150MHz后實(shí)際提升幅度為1~6%。如今Ada Lovelace架構(gòu)剛剛上市,并無針對(duì)性優(yōu)化,預(yù)計(jì)在將來幾個(gè)月,隨著幾款MD軟件以及編譯器和驅(qū)動(dòng)層面對(duì)于Ada Lovelace架構(gòu)的優(yōu)化,RTX 4090運(yùn)行MD模擬的性能還會(huì)有進(jìn)一步提升。

          5 發(fā)揮RTX4090的最大性能——選擇合適的CPU

          去年12月有朋友對(duì)NVIDIA官網(wǎng)測(cè)試結(jié)果做了詳細(xì)分析( http://bbs.keinsci.com/thread-27072-1-1.html ,4樓),討論的是STMV模型,但NVIDIA官方在使用不同軟件運(yùn)行STMV模型時(shí)所用的具體參數(shù)區(qū)別很大,無法實(shí)現(xiàn)不同程序間的公平對(duì)比,因此,筆者重新使用一些公平的參數(shù)對(duì)GMX、AMBER和NAMD3這3款主流MD軟件的速度進(jìn)行對(duì)比。

          圖4選取了在3號(hào)和4號(hào)硬件平臺(tái)(13900K平臺(tái))上測(cè)得的數(shù)據(jù),以在單CPU線程、GPU-resident模式下運(yùn)行GMX的速度為100%基準(zhǔn);“max perf.”指的是圖1中相應(yīng)曲線最高點(diǎn)的數(shù)值,即充分利用13900K CPU資源后能達(dá)到的最高性能。從圖4中可發(fā)現(xiàn),雖然GMX的GPU-resident模式未徹底將MD計(jì)算轉(zhuǎn)移到GPU,但其只用1個(gè)CPU線程來與AMBER公平對(duì)比時(shí)并無明顯弱勢(shì),而GMX充分利用CPU資源后,性能還有巨幅提升,最終遠(yuǎn)超AMBER;此外,NAMD3的性能明顯弱于GMX和AMBER。綜上,當(dāng)前還是最推薦廣大研究者使用GMX和AMBER做經(jīng)典MD模擬,這2款軟件性能都不錯(cuò)(根據(jù)NVIDIA的測(cè)試,后者多GPU并行效率極高),且在功能方面可以互補(bǔ),足以勝任絕大部分研究工作。

          SI

          致謝

          本次測(cè)試所用的硬件由bilibili UP主@51972和庚子計(jì)算(濟(jì)南庚子矩陣云科技有限公司)遠(yuǎn)程贊助,同時(shí)感謝他們專業(yè)且高效的協(xié)作,使本次測(cè)試得以順利完成。

          數(shù)學(xué)中,矩陣(Matrix)是一個(gè)按照長(zhǎng)方陣列排列的實(shí)數(shù)集合 ,最早來自于方程組的系數(shù)及常數(shù)所構(gòu)成的方陣。矩陣是高等代數(shù)學(xué)中的常見工具,也常見于統(tǒng)計(jì)分析等應(yīng)用數(shù)學(xué)學(xué)科中。 矩陣的運(yùn)算是數(shù)值分析領(lǐng)域的重要問題。將矩陣分解為簡(jiǎn)單矩陣的組合可以在理論和實(shí)際應(yīng)用上簡(jiǎn)化矩陣的運(yùn)算。

          矩陣在統(tǒng)計(jì)學(xué)中的用途廣泛且多樣,主要用于表示和操作數(shù)據(jù)、簡(jiǎn)化計(jì)算過程以及解決各種統(tǒng)計(jì)問題。通過矩陣運(yùn)算可以簡(jiǎn)化和加速統(tǒng)計(jì)數(shù)據(jù)分析、建模和計(jì)算過程。無論是基本的線性代數(shù)操作,還是高級(jí)的統(tǒng)計(jì)分析方法,矩陣都為我們提供了強(qiáng)大而靈活的工具。

          1、矩陣基礎(chǔ)函數(shù)

          (1)生成空矩陣

          【語(yǔ)法】

          // 函數(shù)
            webTJ.Matrix.getMEmpty(rows, col);
          // 參數(shù) 
            【arrs:二維數(shù)組】

          【代碼】

          webTJ.clear();
          var oArrs=webTJ.Matrix.getMEmpty(4,5);
          oArrs[3][3]=100;
          oArrs[0][0]=200; 
          oArrs[2][1]=300;
          webTJ.display(oArrs,1)

          (2)矩陣加

          【語(yǔ)法】

          // 函數(shù)
          webTJ.Matrix.getPlus(arrs1, arrs2);
          // 參數(shù)
          【arrs1, arrs2】
          【二維數(shù)組1 二維數(shù)組2】

          【代碼】

          webTJ.clear();
          var oTxt1="3:2:6:5:2:7,5:3:6:5:9:6,5:2:1:5:2:6,1:2:6:5:2:0"; //格式字符串
          var oTxt2="2:1:2:3:2:2,5:3:5:5:2:6,5:2:1:3:2:2,3:2:2:5:1:1"; //行分割符","、列分割符":"
          var oArr1=webTJ.getArrs(oTxt1,",",":");  //按行、列分割符轉(zhuǎn)換為二維矩陣
          var oArr2=webTJ.getArrs(oTxt2,",",":");
          webTJ.display(oArr1,1);
          webTJ.display(oArr2,1);
          var oArr=webTJ.Matrix.getPlus(oArr1,oArr2); //兩矩陣相加
          webTJ.display(oArr,1);

          注:矩陣(二維數(shù)組)加或減時(shí),arrs1和arrs2的行和列相等

          (3)矩陣減

          【語(yǔ)法】

          ## 函數(shù) ##
            webTJ.Matrix.getMinus(arrs1, arrs2);
          ## 參數(shù) ##
            【arrs1, arrs2】
            【二維數(shù)組1, 二維數(shù)組1】

          【代碼】

          webTJ.clear();
          var oTxt1="3:2:6:5:2:7,5:3:6:5:9:6,5:2:1:5:2:6,1:2:6:5:2:0";
          var oTxt2="2:1:2:3:2:2,5:3:5:5:2:6,5:2:1:3:2:2,3:2:2:5:1:1";
          var oArr1=webTJ.getArrs(oTxt1,",",":");
          var oArr2=webTJ.getArrs(oTxt2,",",":");
          webTJ.display(oArr1,1);
          webTJ.display(oArr2,1);
          var oArr=webTJ.Matrix.getMinus(oArr1,oArr2);
          webTJ.display(oArr,1);

          (4)矩陣乘

          【語(yǔ)法】

          // 函數(shù)
            webTJ.Matrix.getMultiply(arrs1, arrs2);
          // 參數(shù)
            【arrs1, arrs2】
            【二維數(shù)組1, 二維數(shù)組2】

          【代碼】

          webTJ.clear();
          var oTxt1="3:2:6:5:2:7,5:3:6:5:9:6,5:2:1:5:2:6,1:2:6:5:2:0";
          var oTxt2="2:1:2:3,5:5:2:6,5:2:2:2,3:2:2:5,3:4:2:1,5:2:6:4";
          var oArr1=webTJ.getArrs(oTxt1,",",":");
          var oArr2=webTJ.getArrs(oTxt2,",",":");
          webTJ.display(oArr1,1);
          webTJ.display(oArr2,1);
          var oArr=webTJ.Matrix.getMultiply(oArr1,oArr2);
          webTJ.display(oArr,1);

          注:兩矩陣相乘,arrs1的列和arrs2的行相等(Ai×j × Bj×k = Ci×k

          (5)矩陣轉(zhuǎn)置

          【語(yǔ)法】

          // 函數(shù)
            webTJ.Matrix.getTranspose(arrs);
          // 參數(shù)
            【arrs】
            【二維數(shù)組】

          【代碼】

          webTJ.clear();
          var oArr=[
          [3,2,6,5,2,7], [5,3,6,5,9,6],
          [5,2,1,5,2,6], [1,2,6,5,2,0]];
          webTJ.display(oArr,1);
          var oArr1=webTJ.Matrix.getTranspose(oArr);
          webTJ.display(oArr1,1);

          (6)計(jì)算逆矩陣

          【語(yǔ)法】

          // 函數(shù)
            webTJ.Matrix.getInverse(arrs);
          // 參數(shù)
            【arrs】
            【二維數(shù)組】

          【代碼】

          webTJ.clear();
          var oArrs=[[2,2,3],[2,1,2],[1,3,4]];
          webTJ.display(oArrs,1);
          var oArrs1=webTJ.Matrix.getInverse(oArrs);
          webTJ.display(oArrs1,1);

          注:矩陣(二維數(shù)組)arrs為方陣

          (7)計(jì)算矩陣的行列式

          【語(yǔ)法】

          // 函數(shù)
            webTJ.Matrix.getDet(arrs);
          // 參數(shù)
            【arrs】
            【二維數(shù)組】

          【代碼】

          webTJ.clear();
          var oArrs = [
          [6,8,4,2,8,5], [3,5,2,4,9,2], [7,6,8,3,4,5],
          [5,5,2,8,1,6], [3,2,2,4,2,2], [8,3,2,2,4,1]];
          var oV=webTJ.Matrix.getDet(oArrs);
          webTJ.display(oV,0);

          注:矩陣(二維數(shù)組)arrs為方陣

          2、矩陣編輯(修改)

          (1)在指定位置添加行

          【語(yǔ)法】

          // 函數(shù)
            webTJ.Matrix.getInsertRRow(arrs, rarr, row);
          // 參數(shù)
            【arrs, rarr, row】
            【二維數(shù)組, 行數(shù)組, 添加行位置】
          

          【代碼】

          webTJ.clear();
          var oArrs=[[3,2,5,1],[2,5,4,3],[3,1,2,4],[2,1,1,5],[4,1,3,1]];
          webTJ.display(oArrs,1);
          var oRowv=[3,4,1,7]; //添加數(shù)組
          var oTs=webTJ.Matrix.getInsertRRow(oArrs,oRowv,1); //在第2行插入添加行

          (2)在指定位置添加列

          【語(yǔ)法】

          // 函數(shù)
            webTJ.Matrix.getInsertRCol(arrs,carr,col);
          // 參數(shù)
            【arrs, carr, col】
            【二維數(shù)組, 給定數(shù)組, 添加列位置】  

          【代碼】

          webTJ.clear();
          var oArrs=[[3,2,5,1],[2,5,4,3],[3,1,2,4],[2,1,1,5],[4,1,3,1]];
          webTJ.display(oArrs,1);
          var oColv=[1,3,2,4,5]; //添加數(shù)組
          var oTs=webTJ.Matrix.getInsertRCol(oArrs,oColv,1); // 在第2列添加數(shù)組
          webTJ.display(oTs,1);

          (3)刪除行

          【語(yǔ)法】

          // 函數(shù)
            webTJ.Matrix.getRemoveRow(arrs, row);
          // 參數(shù)
            【arrs, row】
            【二維數(shù)組, 刪除行位置】

          【代碼】

          webTJ.clear();
          var oArrs=[[3,2,5,1],[2,5,4,3],[3,1,2,4],[2,1,1,5],[4,1,3,1]];
          webTJ.display(oArrs,1);
          var oTs=webTJ.Matrix.getRemoveRow(oArrs,1); //刪除第2行
          webTJ.display(oTs,1);

          (4)刪除列

          【語(yǔ)法】

          ## 函數(shù) ##
            webTJ.Matrix.getRemoveCol(arrs,col);
          ## 參數(shù) ##
            【arrs:二維數(shù)組】
            【col: 刪除列位置】

          【代碼】

          webTJ.clear();
          var oArrs=[[3,2,5,1],[2,5,4,3],[3,1,2,4],[2,1,1,5],[4,1,3,1]];
          webTJ.display(oArrs,1);
          var oTs=webTJ.Matrix.getRemoveCol(oArrs,1); //刪除第2列
          webTJ.display(oTs,1);

          文中介紹了矩陣的基本運(yùn)算和編輯操作,所有的示例代碼都經(jīng)過了在線工具“http://www.galaxystatistics.com/webTJX.html”的運(yùn)行驗(yàn)證。


          主站蜘蛛池模板: 一区二区三区四区在线播放| 色婷婷亚洲一区二区三区| 无码少妇一区二区性色AV| 亚洲av成人一区二区三区在线观看 | 亚洲国产成人一区二区三区| 国产精品美女一区二区三区| 精品中文字幕一区二区三区四区| 一区二区在线观看视频| 91精品一区二区综合在线| 任你躁国产自任一区二区三区| 无码国产精品一区二区免费| 亚洲福利视频一区| 日本人真淫视频一区二区三区| 久久国产精品一区| 中文字幕精品一区二区日本| 国产伦理一区二区三区| 亚欧成人中文字幕一区 | 在线播放偷拍一区精品| 一区二区三区人妻无码| 免费一区二区三区| 日韩一本之道一区中文字幕| 国产精品免费一区二区三区| 一本色道久久综合一区| 国产av天堂一区二区三区| 亚洲av成人一区二区三区在线播放| 波霸影院一区二区| 色婷婷AV一区二区三区浪潮| 精品一区二区三区免费观看| 日本成人一区二区| 亚洲国产精品自在线一区二区| 69福利视频一区二区| 国产精品亚洲一区二区麻豆| 国产激情一区二区三区小说| 无码人妻aⅴ一区二区三区| 国产精品一区二区无线| 亚洲综合无码精品一区二区三区| 制服丝袜一区在线| 性色av一区二区三区夜夜嗨| 农村乱人伦一区二区| 冲田杏梨AV一区二区三区| 色屁屁一区二区三区视频国产 |