下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、科學(xué)計(jì)算編程中的 Fortran科學(xué)計(jì)算編程中的 Fortran 與C+之爭(zhēng)自從有了程序設(shè)計(jì)語言,“哪種編程語言好就成為了亙古不變的話題。這個(gè)問題一 經(jīng)提出,必然會(huì)招來一場(chǎng)巨大的口水仗。作者曾經(jīng)在某些論壇上提出了類似“ Fortran 和 C+那個(gè)用的多之類的問題,回帖全部達(dá)幾十個(gè)以上,各種意見針鋒相對(duì),猶如Fortran和C+信徒之間的“圣戰(zhàn)"一般好看。有很多人曾經(jīng)請(qǐng) C+語言之父Bjarne Stroustrup 做一個(gè)C+與其它編程語言的比擬, 而 Stroustrup 明確的拒絕了。他指出,從技術(shù)上講,一個(gè)所謂的“公平的比擬將會(huì)涉 及到大量的技術(shù),這是一個(gè)工作量巨大的任務(wù),絕
2、對(duì)不是簡(jiǎn)單的用C+和其它語言寫同一段代碼然后比擬其運(yùn)行時(shí)間就能完成的。這種比擬涉及到具體的應(yīng)用領(lǐng)域和用戶需求,所 處理的信息類型,編譯器的質(zhì)量不同語言的編譯器開發(fā)的投入是有相當(dāng)大差異的,程 序員的水平與“偏好,編程語言的標(biāo)準(zhǔn)如究竟是C+97與Fortran90比擬,還是應(yīng)該C+0x與Fortran2021 比擬?等等。他甚至認(rèn)為,這種比擬是“ rarely meaningful "的1 。因此,今天作者也不打算為某種編程語言搖旗吶喊,而是僅就科學(xué)計(jì)算編程領(lǐng)域,特 別是,限于作者專業(yè)即量子化學(xué)和分子模擬,來談一談兩大“主流編程語言:Fortran和C+的在理論化學(xué)界的應(yīng)用歷史,以及某些
3、人包括作者對(duì)它們的看法。1 Fortran 的美好時(shí)代毋庸置疑, 1957 年出現(xiàn)的 Fortran 是世界上第一個(gè)高級(jí)編程語言。它的出現(xiàn),大大 降低了普通科研人員學(xué)習(xí)編程的門檻,而且增強(qiáng)了代碼的可移植性。在此之前,人們都是 用機(jī)器語言直接書寫程序,這種語言對(duì)于一般人而言難度太大了,而且是與運(yùn)行機(jī)器相關(guān), 因此很難寫出高效且具有可移植性的程序。例如, Roothaan 在研究原子自洽場(chǎng)的計(jì)算時(shí)專門為 IBM 7030 數(shù)字計(jì)算機(jī)寫了一些程 序,這些程序用來優(yōu)化 Slater 基組已經(jīng) 10多年了。不幸的是,由于該程序是完全使用 IBM 的機(jī)器語言所書寫,因此在 20世紀(jì) 60年代,當(dāng)這種機(jī)器逐
4、漸消失時(shí),這些程序逐漸 成為了廢品。意識(shí)到這個(gè)資源的重要性, Clementi 及其同事決定把這些程序用 Fortran 全部重寫,并且增加了處理 Gauss 基組的功能 2 。這段代碼從此復(fù)活,成為了量子化學(xué) 程序庫中一個(gè)重要局部。Fortran 語言的重要性從此被理論化學(xué)家所知。它的優(yōu)點(diǎn)幾乎數(shù)不勝數(shù)。首先,它的 語法簡(jiǎn)單,任何一個(gè)理論化學(xué)的研究生幾乎一天就能學(xué)會(huì),可以迅速用它開展工作;其次, 它的運(yùn)行效率極高,不要說現(xiàn)代編譯器如 GNU Fortran 或 intel Fortran 編譯器,就 是世界上第一個(gè) Fortran 編譯器都可以將其每一語句都翻譯成幾乎沒有冗余的、效率至少 不低
5、于手寫的機(jī)器碼;第三, Fortran 代碼具有可移植性,與機(jī)器無關(guān)。很快,在 20世 紀(jì)7080年代,一批批量子化學(xué)程序如雨后春筍般出現(xiàn),如早期的Gaussian ,Polyatom,以及后來的GAMESS NWChen等等,幾乎全部都是由 Fortran77編寫的。Fortran77 在量子化學(xué)領(lǐng)域絕對(duì)是功不可沒,它為普及和開展量子化學(xué)做出了巨大的奉獻(xiàn)。 那個(gè)時(shí)代, Fortran77 是很多自然科學(xué)研究生的必修課。自此, Fortran 成為了數(shù)值計(jì)算領(lǐng)域的“主流語言。2 C 語言的崛起20 實(shí)際 70年代, C 語言逐漸崛起。這個(gè)語言是為了編寫 Unix 操作系統(tǒng)而開發(fā)的。 很快,這種
6、“半?yún)R編性質(zhì)的高級(jí)語言,由于其具有極其靈活的控制機(jī)器的能力而深受計(jì) 算機(jī)專業(yè)人士的喜愛。不過,由于其學(xué)習(xí)難度較之 Fortran 稍高,而量子化學(xué)以純粹數(shù)值 計(jì)算為主, Fortran 足以滿足要求,因此 C 在量子化學(xué)領(lǐng)域沒有什么明顯優(yōu)勢(shì),因此大多 數(shù)量子化學(xué)家對(duì)其不感興趣。此時(shí), C 和 Fortran 處于“井水不犯河水的狀態(tài)。而 80 年代左右,分子模擬科學(xué)開始開展。由于分子模擬的流程相對(duì)復(fù)雜,F(xiàn)ortran77語言在實(shí)現(xiàn)某些功能時(shí)稍顯繁瑣,如對(duì)某些配置文件進(jìn)行語法分析,一些模式識(shí)別和人工 智能過程等等,此時(shí) C 語言的優(yōu)勢(shì)開始顯露,大量分子模擬領(lǐng)域的研究組開始用 C 開發(fā) 程序,如分
7、子對(duì)接軟件 Autodock 等等。 Fortran 壟斷地位的打破,說明理論化學(xué)領(lǐng)域編 程語言之戰(zhàn)的種子已經(jīng)悄然的埋下。3 理論化學(xué)軟件開發(fā)的瓶頸在任何軟件開發(fā)領(lǐng)域?qū)W術(shù)界還是商業(yè)界,前人留下的代碼庫都是無比珍貴的財(cái)富。 因?yàn)闊o論程序員的水平有多高,代碼畢竟是一個(gè)字一個(gè)字的敲進(jìn)去的。比方矩陣乘法這種 通用的操作都需要每次重新寫,那會(huì)浪費(fèi)大量珍貴的人力財(cái)力。在前人的根底上開發(fā)新的 功能,是大型軟件開發(fā)的通用規(guī)那么。量子化學(xué)自 60 年代以來,積累了大量的 Fortran 程 序庫,它們的開發(fā)都是非常艱苦的,是無數(shù)量子化學(xué)家智慧的結(jié)晶,每個(gè)研究組都要在前 人的根底上繼續(xù)的研究,例如現(xiàn)在的 Gaus
8、sian09 里面還使用著當(dāng)年 Pople 親手敲進(jìn)去的 代碼。不幸的是,到了 90 年代,這種長(zhǎng)期的積累,既是這個(gè)組的財(cái)富,同時(shí)卻也是軟件繼 續(xù)開展的一個(gè)致命的阻礙。這些開發(fā)于 60 年代的量子化學(xué)程序,幾乎都是“無組織無紀(jì) 律的開發(fā)的,根本沒有料到后來的開展程度。因此,很多組逐年積累達(dá)萬行的程序,幾 乎毫無任何代碼美感可言:變量命名難以理解我見過一個(gè) Ewald 求和程序里面充滿著 p , pp , ppp 這樣的變量名,邏輯結(jié)構(gòu)雜亂無章 goto , if 之類隨意嵌套。維護(hù) 人員在閱讀以前的源碼時(shí)需要消耗大量的精力,而這是一個(gè)痛苦的過程。早期的量子化學(xué) 程序都有大量的common塊,而
9、每個(gè)subroutine 有大量的參數(shù)傳遞有個(gè)軟件的 subroutine 居然有 100 多個(gè)參數(shù)!。閱讀這種代碼簡(jiǎn)直讓人崩潰!而最大的問題是,由于程序最初的設(shè)計(jì)沒有任何軟件工程的考慮,要繼續(xù)開發(fā)和改良 這種沒有封裝和可擴(kuò)展性的代碼將會(huì)變得異常困難。舉一個(gè)例子 3 。開發(fā)相對(duì)論量子化 學(xué)軟件 DIRAC 時(shí)涉及到了一個(gè)四元矩陣,這種四元矩陣有兩種存儲(chǔ)方式: AN, N, 4 和A(4, N, N) 。由于某些歷史原因,最初的設(shè)計(jì)采用了 A(N, N, 4) ?,F(xiàn)在,由于內(nèi)存硬件的 改變, A(N, N, 4) 的乘法操作比 A(4, N, N) 要慢 4 倍。但是,由于最初設(shè)計(jì)的缺陷,幾 乎
10、所有的 subroutine 都是顯式的處理 A 的各個(gè)下標(biāo),因此,假設(shè)要改良 A 的存儲(chǔ)方式幾乎 要對(duì)所有的代碼進(jìn)行大手術(shù),這簡(jiǎn)直就是不可能的任務(wù)。因此,直到現(xiàn)在(2021),DIRAC 還在忍受著這種四倍的性能懲罰!這是不重視軟件工程的一個(gè)慘痛教訓(xùn)。由于學(xué)術(shù)領(lǐng)域的特性,一個(gè)組常常是“鐵打的營(yíng)盤流水的兵,一個(gè)學(xué)生參與軟件開 發(fā)往往最多四五年就會(huì)離開,新來的學(xué)生要從頭學(xué)起。由于學(xué)生根本不具有軟件工程的背景, 而寫代碼水平又參差不齊,導(dǎo)致不同時(shí)期參加程序的代碼,不管風(fēng)格還是性能都相差甚遠(yuǎn), 這種差異更使得軟件的開展走向死胡同。Fortran 的結(jié)構(gòu)化特性是把雙刃劍。它使得程序開發(fā)的入門變得非常容
11、易,但又使長(zhǎng) 期維護(hù)變得異常困難。特別是代碼到達(dá)萬行級(jí)別以上時(shí)候,后續(xù)開發(fā)者的工作量越來越大。 此時(shí),軟件開發(fā)者逐漸開始反思過去的教訓(xùn)。新的概念:封裝,多態(tài),面向?qū)ο箝_始走入 他們的視野。4 后起之秀: C+C+ 作為一種混血語言,兼具面向過程和面向?qū)ο蟮奶匦?,很快穩(wěn)坐了大型商業(yè)軟件 開發(fā)語言的霸主地位。但是,不知為什么,理論化學(xué)界的會(huì)Fortran的人往往對(duì)C+有一種說不清楚的“敵視的態(tài)度。也許是一種情節(jié)吧,畢竟用 Fortran 人們開發(fā)了很多經(jīng)典 的程序,就像 Visual C+出現(xiàn)之初,很多人還在戀戀不舍的使用著Turbo C+,因?yàn)門urbo C+ 開發(fā)了無數(shù)經(jīng)典的軟件。在 90 年
12、代末,一些理論化學(xué)研究組終于決定放棄 Fortran ,這個(gè)決定應(yīng)該來說是很 需要勇氣的,因?yàn)橐馕吨艞壡叭苏滟F的 Fortran 程序庫。 Frank Neese 在開發(fā) ORCA (一個(gè)量子化學(xué)程序)時(shí)毅然決定使用C+,因?yàn)樗J(rèn)為保持代碼的結(jié)構(gòu)性和統(tǒng)一性與程序運(yùn)行的性能是同等重要的。十幾年過去了,ORCA的代碼已達(dá)百萬行,他發(fā)現(xiàn) C+為保持代碼的可維護(hù)性做出了重要的奉獻(xiàn)。每一個(gè)新進(jìn)入組的學(xué)生在一到兩周內(nèi)就可以對(duì)程序作 出實(shí)質(zhì)性的奉獻(xiàn)。他提到,新進(jìn)入組的某些人確實(shí)對(duì)C+和C抱有極大的敵意,但是經(jīng)過一段時(shí)間后,他們都同意“ It is much more convenient to use t
13、he ORCA C+ infrastructure compared to the Fortran codes they were used to.4不過,他也說, Fortran 也可以做到這一點(diǎn)。但是, Fortran 的面向?qū)ο筇匦允窃?Fortran90 后才參加的(如 module ,但有人認(rèn)為這簡(jiǎn)直是個(gè)“ ugly hack ),而歷史 上大多數(shù)量子化學(xué)程序都是 Fortran77 的,設(shè)計(jì)本身又沒考慮軟件工程這一點(diǎn),因此 Fortran 的面向?qū)ο筇匦院苌僦苯拥耐度霊?yīng)用。90 年代中期,分子動(dòng)力學(xué)軟件NAMD開始開發(fā)。其設(shè)計(jì)者也決定采用C+。開發(fā)者之一 An drew Dalke
14、稱,他們選擇C+的原因是為了處理復(fù)雜的空間分解數(shù)據(jù)結(jié)構(gòu)和進(jìn)程間 通信5。NAMD是目前為止軟件工程做的最好的科學(xué)軟件之一。直到現(xiàn)在,NAMD還在維護(hù)和開發(fā)中,其性能和可擴(kuò)展性在同類軟件中都是一流的。Gaussian 是用 Fortran77 編寫的,而 90 年代中期,從 Gaussian 公司中跑出來的一 批人Pople和Head-Gordan在編寫Q-Chem時(shí),也采用了 C+5 大論戰(zhàn):Fortran 和C+孰優(yōu)孰劣好吧,終于還是到了這個(gè)讓人頭痛的問題。首先,我們還是看看性能吧。一些軟件工程專業(yè)人士說,代碼的“可維護(hù)性遠(yuǎn)比“性能更重要。作者認(rèn)為,在 科學(xué)計(jì)算領(lǐng)域,這個(gè)說法是不適宜的,至少
15、換成“代碼的可讀性與性能同等重要,因?yàn)?這些軟件,一旦運(yùn)行起來常常都是以天為單位,其存儲(chǔ)讀取和浮點(diǎn)數(shù)操作及其巨大,一個(gè) 小小的性能提升可以使運(yùn)行時(shí)間縮短幾天,這對(duì)提高科研效率是及其重要的。因此,這里 將性能的考慮放在第一位。大家都比擬公認(rèn), Fortran 和 C 在性能上沒有實(shí)質(zhì)差異,因?yàn)樗麄兊南鄬?duì)底層性,每 一條語句都可以比擬直接的翻譯成對(duì)應(yīng)的機(jī)器語言。因此決定性能的因素幾乎只有算法。 而C+那么不同,C+為了實(shí)現(xiàn)多態(tài)等特性,添加了大量額外代碼,這些性質(zhì)可能會(huì)對(duì)性能造 成損害。最為人詬病的,就是虛函數(shù)和大型對(duì)象的復(fù)制。例如,某軟件涉及到大量頻繁的 I/O操作例如量子化學(xué)中分子積分的緩存文件
16、,測(cè)試發(fā)現(xiàn),使用C+標(biāo)準(zhǔn)庫iostream的 cout 對(duì)象類要比 C 的 fprintf 函數(shù)和 Fortran 的 write 語句要慢三倍左右。也有人認(rèn)為,這些所謂的“性能殺手的責(zé)任不在語言,而在程序員。例如,大循環(huán) 體內(nèi)的虛函數(shù)會(huì)大大降低程序的性能,而這完全可以通過重新設(shè)計(jì)類的層次結(jié)構(gòu)或使用內(nèi) 聯(lián)函數(shù)來解決事實(shí)上有人認(rèn)為在理論化學(xué)程序的設(shè)計(jì)中虛函數(shù)根本就沒有必要使用; 大型對(duì)象的復(fù)制可以通過預(yù)取緩存的技術(shù)來解決,或者干脆防止這種操作。當(dāng)然,這有偷 換概念之嫌。除此之外,一般認(rèn)為對(duì)于同樣的算法,F(xiàn)ortran , C , C+啲性能沒有實(shí)質(zhì)性的差異。數(shù)值計(jì)算的經(jīng)典名著 Numerical
17、 Recipe ,在第一版時(shí),里面的程序都是用 Fortran 也有 Lisp , Pascal 之類 寫的,而 2021 年第三版時(shí),所有的程序都改成了 C+,里面也用了模板,繼承等技術(shù),可見他們也認(rèn)為C+和 Fortran 的性能不會(huì)有明顯差異。但是,還有一個(gè)不可忽略的因素,就是編譯器!像C+這樣的群眾語言,新技術(shù)廠商會(huì)為其投入巨資進(jìn)行研究,而 Fortran 這種現(xiàn)在小眾的語言,他們的開發(fā)受到冷落。一旦編譯器的質(zhì)量下降,這種語言的性能和應(yīng)用也會(huì)遭到致命的打擊。一個(gè)分子模擬軟件MODELLERS用Fortran95寫的,在編譯軟件時(shí),無論是 intel 還是GNU Fortran編譯器 都
18、會(huì)產(chǎn)生各種各樣的錯(cuò)誤,開發(fā)人員不得不禁用一些優(yōu)化選項(xiàng)來防止這些錯(cuò)誤6 。另一個(gè)表達(dá)是,直到現(xiàn)在 2021,幾乎沒有哪個(gè)廠商生產(chǎn)了完全支持 Fortran2021 標(biāo)準(zhǔn)的編 譯器!如果這樣下去, Fortran 在性能上的優(yōu)勢(shì)也可能逐漸消失。下面我們看看軟件工程上的考慮。Vincent Leroux 稱,他確實(shí)發(fā)現(xiàn)“ maintaining large Fortran projects may turn into a nightmare easily,C+在清晰的表達(dá)抽象數(shù)據(jù)關(guān)系上有明顯的優(yōu)勢(shì)。他以分子動(dòng)力學(xué)軟件 CHARM和NAMD為例,前者是Fortran 寫的,后者是 C+寫的,這兩者代
19、碼的清晰程度幾乎有天地之別7。前面提到的ORCA也是一例。因此,人們傾向于認(rèn)為 C+開發(fā)的程序更具有長(zhǎng)遠(yuǎn)的生命力,更易擴(kuò)展和維護(hù)。當(dāng)然,用 Fortran 寫出好的代碼也并非不可能。一個(gè)例子是分子動(dòng)力學(xué)軟件 TINKER , 另一個(gè)就是量子化學(xué)軟件 GAMESS GAMESS已逾二十余年,它使用 Fortran77編寫。由于 它的開發(fā)非常標(biāo)準(zhǔn)含有程序員手冊(cè);代碼寫作堅(jiān)持統(tǒng)一風(fēng)格;代碼注釋詳細(xì)等,并具 有統(tǒng)一的DDI接口,因此GAMESS臺(tái)終得到了量子化學(xué)界的廣泛擁護(hù)。直到現(xiàn)在,很多新 的電子結(jié)構(gòu)方法都借助 GAMESS勺平臺(tái)來開展,女口 XMVB, XIAN CI , SAPT等等。但是, 這
20、兩個(gè)似乎只是特例。大多數(shù)組里 Fortran 的程序人們之所以還在改良,似乎更多是出于 本錢的緣故。畢竟組里累計(jì)了多年的程序是舍不得扔的,而重寫代碼所需的工作量太巨大 了,或者說,根本不會(huì)做。這一點(diǎn)常被人忽略,但卻很實(shí)在。比方,作者學(xué)校某個(gè)化學(xué)組 至今 2021還在使用一個(gè)用 QBASIC 寫的磁性計(jì)算程序,這并不是因?yàn)樗麄儗?duì)當(dāng)初寫這 段代碼的師兄懷有感情,而是因?yàn)椋含F(xiàn)在組里根本沒有人會(huì)寫代碼。6 迎合新技術(shù)?Fortran 在某些方面確實(shí)有些不思進(jìn)取。從 77 到 95 標(biāo)準(zhǔn)整整經(jīng)歷了 19 年,指針、 動(dòng)態(tài)內(nèi)存分配、模塊技術(shù)才姍姍來遲,而迄今類似于“析構(gòu)函數(shù)的東西也不存在,從而 使垃圾回收
21、變得非常麻煩,這對(duì)大型程序的開發(fā)十分不利。而C+不僅天然存在這些特性,其豐富的 STL 可以很容易的構(gòu)造高層次的數(shù)據(jù)結(jié)構(gòu)堆棧,鏈表等。在這一方面, Fortran 是應(yīng)當(dāng)受到批評(píng)的。盡管并行技術(shù),如 OpenMP, MPI等同時(shí)支持 Fortran 和C so C+,但是這些技 術(shù)都是在90年代出現(xiàn)的。事實(shí)上,對(duì)于大型程序的并行很多人還是提倡使用C+。C+的抽象技術(shù)可以減少節(jié)點(diǎn)通信模塊與純粹數(shù)值計(jì)算模塊之間的耦合,而Fortran 很難做到這一點(diǎn)。就連以Fortran77為標(biāo)準(zhǔn)的GAMESS勺數(shù)據(jù)接口程序 DDI也是用C寫的。前面提到, NAMD的作者也是這么認(rèn)為的。2021 年左右開始流行的CUDA加速技術(shù)大大提高了理論化學(xué)的計(jì)算效率,它只支持Fortran 的CUDA技術(shù)還有些問題(Porland Group Fortran),不知何年才能見到正式版本。Terachem作為第一個(gè)支持 GPU加速的量子化學(xué)軟件,就是使用C編寫的。如果Fo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年健身器材租賃及體育場(chǎng)地管理服務(wù)合同3篇
- 2024年房地產(chǎn)包銷合作協(xié)議范本與合同履行監(jiān)督3篇
- 2024年度中鐵電子商務(wù)采購(gòu)信息平臺(tái)數(shù)據(jù)備份與恢復(fù)合同2篇
- 2024年度商業(yè)活動(dòng)單位廣告制作服務(wù)合同范本3篇
- 2024年度網(wǎng)絡(luò)主播與廣告公司合作推廣協(xié)議6篇
- 2024年新能源汽車充電設(shè)施合作銷售合同范本3篇
- 2024年度羊群代放牧技術(shù)指導(dǎo)與質(zhì)量保障合同書3篇
- 2024年大型養(yǎng)殖場(chǎng)承包養(yǎng)殖保險(xiǎn)合作協(xié)議書3篇
- 2024年新能源電池材料購(gòu)銷合同3篇
- 2024在線學(xué)生安全協(xié)議電子簽署及風(fēng)險(xiǎn)評(píng)估合同3篇
- 高中英語新外研版必修1單詞英譯漢
- 鹿角形腎結(jié)石診斷治療指南
- 天津市河西區(qū)2023-2024學(xué)年高二上學(xué)期1月期末化學(xué)試題(解析版)
- 1.3 中華文明的起源 課件 2024-2025學(xué)年部編版七年級(jí)歷史上學(xué)期
- DB15-T 3600-2024 黑土地質(zhì)量等級(jí)劃分技術(shù)規(guī)范
- 《民用爆炸物品企業(yè)安全生產(chǎn)標(biāo)準(zhǔn)化實(shí)施細(xì)則》解讀
- MIL-STD-1916抽樣計(jì)劃表(抽樣數(shù))大
- 當(dāng)代民航精神與文化智慧樹知到期末考試答案章節(jié)答案2024年中國(guó)民用航空飛行學(xué)院
- 第一單元 春之聲-《渴望春天》教學(xué)設(shè)計(jì) 2023-2024學(xué)年人教版初中音樂七年級(jí)下冊(cè)
- 養(yǎng)老護(hù)理員培訓(xùn)課件
- 裝修增項(xiàng)補(bǔ)充合同協(xié)議書
評(píng)論
0/150
提交評(píng)論