在邊緣設(shè)備和IoT實現(xiàn)了真正智能的公司將定義計算的未來,因此谷歌、微軟、蘋果等大廠已經(jīng)花費了數(shù)十億美元來推動這種智能硬件競賽,但目前為止結(jié)果依舊不那么令人滿意。由美國東北大學(xué)王言治研究組,威廉瑪麗學(xué)院任彬研究組,和北卡州立大學(xué)慎熙鵬研究組共同完成的新研究用純算法實現(xiàn)了移動端神經(jīng)網(wǎng)絡(luò)加速,超越了專用硬件。
人們已經(jīng)達成了某種共識:那些在邊緣設(shè)備(edge device)與物聯(lián)網(wǎng)設(shè)備(IoT device)上實現(xiàn)了真正的智能的公司將定義計算的未來。為了實現(xiàn)這一目標,無論是谷歌,微軟,亞馬遜,蘋果和Facebook等大型技術(shù)公司,還是初創(chuàng)公司,每年在研發(fā)上的投入都高達數(shù)百億美元。
工業(yè)界主要致力于開發(fā)用于機器學(xué)習(xí)和推理的專用硬件加速器,這么做的原因是他們認為硬件因素是實現(xiàn)真正的移動智能的主要限制因素。為此,工業(yè)界已經(jīng)花費了數(shù)十億美元來推動這種智能硬件競賽。
我們對此有所疑問,并堅信即使在移動AI時代,軟件仍將主導(dǎo)業(yè)界。我們的中心論點是,深度學(xué)習(xí)應(yīng)用程序的軟件優(yōu)化潛力仍未得到充分開發(fā)。一旦完成了正確的軟件優(yōu)化,我們就可以立即在數(shù)十億個現(xiàn)有移動設(shè)備上啟用實時深度學(xué)習(xí),從而釋放一個萬億美元的市場。
本文我們將回顧AI硬件的概況,不同的軟件優(yōu)化方法,并深入研究了我們認為最有希望的方法,即「壓縮-編譯」(compression-compilation)聯(lián)合設(shè)計方法。我們得出的結(jié)論是,即使在移動AI時代,軟件仍在占有并將持續(xù)占有整個業(yè)界,并且通過純軟件壓縮編譯協(xié)同設(shè)計在數(shù)十億個現(xiàn)有移動設(shè)備和數(shù)萬億個新興的物聯(lián)網(wǎng)設(shè)備上啟用實時AI應(yīng)用程序是最切實可行的方法。
AI硬件的格局:數(shù)百億美元的風(fēng)險資金
工業(yè)界主要致力于開發(fā)用于機器學(xué)習(xí)和推理的專用硬件加速器,這么做的原因是他們認為硬件因素是實現(xiàn)真正的移動智能的主要限制因素。
芯片制造商英特爾與包括NVIDIA,AMD在內(nèi)的競爭對手以及一些采用ARM技術(shù)的競爭對手之間的激烈競爭已經(jīng)使芯片進入AI計算市場。如今,在美國,歐洲和亞洲,有100多家AI芯片初創(chuàng)公司,從重塑可編程邏輯和多核設(shè)計(programmable logic and multi-core designs)的公司,到開發(fā)自己的全新架構(gòu)的公司,再到使用神經(jīng)形態(tài)架構(gòu)(neuromorphic architectures)等未來技術(shù)的公司。
數(shù)百億美元的風(fēng)險資金已經(jīng)投入到這個市場中,以支持這些創(chuàng)業(yè)公司,同時也加劇了主要芯片制造商之間的競爭,我們看到英特爾以極高昂的價格收購了MobilEye,Movidius和Altera,Xilinx收購了DeePhi,谷歌開發(fā)了TPU,以及NVIDIA在自動駕駛處理器方面的大量投資。
盡管有大量投入,但到目前為止,輸出還是令人失望的,因為我們尚未看到邊緣AI加速器的任何大規(guī)模部署。這不禁使我們思考,專用硬件加速是正確的道路,還是軟件仍然主導(dǎo)移動AI時代?
經(jīng)過仔細研究,我們主張通過有效的壓縮-編譯(compression-compilation)協(xié)同設(shè)計,在不使用特殊硬件加速器的情況下,在現(xiàn)有邊緣設(shè)備上實現(xiàn)實時人工智能(AI)是可行的。
壓縮編譯協(xié)同設(shè)計的原理是以手拉手的方式對深度學(xué)習(xí)模型進行壓縮及對壓縮后的模型可執(zhí)行文件的編譯。這種協(xié)同方法可以有效地優(yōu)化深度學(xué)習(xí)模型的大小和速度,還可以大大縮短壓縮過程的調(diào)整時間,從而極大地縮短了AI產(chǎn)品上市的時間。
當我們將深度學(xué)習(xí)模型部署在主流邊緣設(shè)備上運行時,我們的設(shè)計能在大多數(shù)AI應(yīng)用上實現(xiàn)實時性,而這些AI應(yīng)用原本被廣泛的認為只有使用特殊的AI加速器才能到達實時運行的效果。得益于主流處理器相對于特殊硬件的多重優(yōu)勢,對于實時AI的特殊硬件需求可能將會逐漸降低:
上市時間:特殊硬件通常需要數(shù)年才能上市。為新開發(fā)的硬件加速器創(chuàng)建關(guān)聯(lián)的編譯器和系統(tǒng)軟件會進一步延長該過程。使用此類硬件的應(yīng)用程序經(jīng)常需要使用特殊的API并滿足許多特殊的約束(例如,將計算限制到特定大?。@會延長AI產(chǎn)品的上市時間。
成本:開發(fā)專用的ASIC處理器非常昂貴,將它們添加到現(xiàn)有系統(tǒng)中會產(chǎn)生額外的費用。
技術(shù)成熟度:與通用處理器不同,專用硬件的生產(chǎn)量要小得多;因此,其生產(chǎn)可用的技術(shù)通常比通用處理器落后幾代。例如,大多數(shù)AI加速器都基于28至65nm CMOS技術(shù),其晶體管密度比最新的移動CPU或GPU低10倍以上。
速度:由于采用了舊技術(shù),專用處理器的運行速度比通用處理器要慢得多。
生態(tài)系統(tǒng):通用處理器具有完善的生態(tài)系統(tǒng)(調(diào)試工具,優(yōu)化工具,安全措施),這使得高質(zhì)量應(yīng)用程序的開發(fā)比使用特殊處理器要容易得多。
使用:由于上述所有原因,使用特殊處理器通常僅限于創(chuàng)建該處理器的公司及其很少的密切客戶。結(jié)果,為特殊處理器開發(fā)的AI應(yīng)用程序僅可以被有限數(shù)量的設(shè)備所采用。
將完全改變AI邊緣計算的格局:壓縮編譯協(xié)同設(shè)計軟件算法方案
在本節(jié)中,我們介紹了壓縮編譯協(xié)同設(shè)計軟件算法方案的細節(jié),我們相信這將完全改變AI邊緣計算的格局。壓縮和編譯是在硬件上擬合深度學(xué)習(xí)模型以實現(xiàn)有效執(zhí)行的兩個關(guān)鍵步驟。
模型壓縮是減少深度學(xué)習(xí)模型的大小并提高其速度的常用技術(shù)。壓縮技術(shù)分為兩類,剪枝(pruning)和量化(quantization)。剪枝會刪除層或?qū)又械妮敵觯╢ilter)或輸入(channel)通道,而量化會降低參數(shù)的精度(例如,浮點數(shù)到短整數(shù))。編譯是指從給定的深度學(xué)習(xí)模型生成可執(zhí)行代碼的過程。本質(zhì)上,編譯是將深度學(xué)習(xí)中的高級操作映射到基礎(chǔ)硬件支持的低級指令的過程。編譯過程在優(yōu)化代碼以有效執(zhí)行中起著關(guān)鍵作用。
壓縮編譯協(xié)同設(shè)計的原理是同時完成壓縮與編譯兩個組件的設(shè)計,并且此協(xié)同作用體現(xiàn)在三個層次上。
需求/偏好級別:在此級別上,協(xié)同作用是在設(shè)計另一個組件時考慮一個組件的偏好或需求。一個例子是,主流處理器通常更喜歡具有某些計算模式(pattern)的代碼。如果模型壓縮步驟可以考慮該首選項,則可以創(chuàng)建一個更可修改的方案,以使得編譯步驟有效地工作。
視角/內(nèi)涵級別:在此級別上,協(xié)同作用是在處理其中一個組件的問題時采取另一個組件對該問題的視角或內(nèi)涵。一個例子就是可組合性或模塊化原則,這個原則在保持編程系統(tǒng)和編譯高效且可擴展方面一直發(fā)揮著至關(guān)重要的作用。
方法論級別:在此級別上,協(xié)同作用是將兩個組件的方法論緊密集成在一起。例如,通過自動生成代碼以啟用新的深度學(xué)習(xí)剪枝方案的編譯器框架,我們可以產(chǎn)生高達180倍的加速。
具體來說,我們在上圖中提供了壓縮編譯協(xié)同設(shè)計架構(gòu),該架構(gòu)包含以下組件:
模式化(pattern)的訓(xùn)練階段可以執(zhí)行有效的卷積核模式剪枝(kernel pattern pruning)和連通性剪枝(connectivity pruning),以便在不損失準確性的情況下實現(xiàn)最高的剪枝(加速)倍率。
首先,我們設(shè)計了一套卷積核模式(kernel pattern)來為每個內(nèi)核選擇。然后,我們使用擴展的基于ADMM(交替方向乘子算法)的算法,根據(jù)設(shè)計的卷積核模式集和連通性剪枝方案執(zhí)行模式化剪枝。
細粒度的DNN分層表示(LR)提供了高級別的表示方法,使我們能夠從各種資源對DNN模型進行常規(guī)優(yōu)化。特別地,LR包括模式(pattern)和調(diào)諧(tuning)相關(guān)信息。編譯器的優(yōu)化依賴于LR的一系列改進,以生成緊湊模型和優(yōu)化過的執(zhí)行代碼。
卷積核與輸出通道重排(filter kernel reorder)通過將具有相同長度和模式的卷積核組合在一起,解決了模式化剪枝帶來的兩個挑戰(zhàn),即密集的控制流指令以及線程分散(thread divergence)和負載不均衡(load imbalance)。由于卷積核模式數(shù)量相對有限,可以通過適當?shù)木矸e核內(nèi)核重新排序?qū)⒕哂邢嗨颇J降膬?nèi)核進行編組,從而顯著減少控制流指令并提高指令級并行度。此外,如果不同的線程處理不同的輸出通道,則由于每個輸出通道中的內(nèi)核具有相似的計算工作量,因此可以正確解決線程分散和負載不均衡的問題,從而增強了線程級并行度。
壓縮權(quán)重存儲(compressed weight storage)格式是專門為我們的卷積核模式和連通性剪枝設(shè)計的。與卷積核與輸出通道重排結(jié)合后,這種緊湊的數(shù)據(jù)結(jié)構(gòu)比傳統(tǒng)的CSR(壓縮稀疏行)格式能夠產(chǎn)生更好的壓縮率。
消除負載冗余(load redundancy elimination)通過在內(nèi)核執(zhí)行代碼生成過程中通過分析處理兩個寄存器級負載冗余問題,解決了基于卷積核模式化剪枝對內(nèi)存性能的挑戰(zhàn)。在內(nèi)存和緩存之間的數(shù)據(jù)移動已通過高級數(shù)據(jù)平鋪技術(shù)進行了優(yōu)化的前提下,我們的負載冗余消除有著更加重要的意義。
參數(shù)自動調(diào)整(parameter auto-tuning)專門測試關(guān)鍵性能參數(shù)的不同配置,包括將數(shù)據(jù)放置在各種GPU/CPU存儲器上,不同的數(shù)據(jù)平鋪大小以及每個處理單元上每個DNN層的循環(huán)置換的策略。
總而言之,壓縮編譯協(xié)同設(shè)計方法允許編譯器將剪枝后的內(nèi)核視為特殊模式,不僅可以實現(xiàn)模型的高精度與高壓縮率,還可以有效地將卷積核模式轉(zhuǎn)換為硬件上的性能提升。
軟硬件及壓縮編譯協(xié)同設(shè)計與其它軟件算法的性能對比
為了驗證我們的中心論點,即軟件仍然主導(dǎo)AI時代,我們需要回答的關(guān)鍵問題是,在現(xiàn)有的設(shè)備上,「壓縮-編譯」聯(lián)合設(shè)計方法是否優(yōu)于專用的硬件加速器。我們在三星Galaxy S10智能手機上部署了「壓縮-編譯」聯(lián)合設(shè)計的框架,并將其性能與在ASIC和FPGA上實現(xiàn)的硬件加速器進行了比較。
結(jié)果總結(jié)在上圖中:首先,使用專用ASIC硬件(包括Google的云TPU-V2和Edge TPU,NVIDIA Jetson AGX Xavier,Cambricon MLU-100,Eyeriss等)上對性能和能效進行比較的結(jié)果。與DeePhi的FPGA解決方案ESE在準確性和能效上的比較結(jié)果。這是對相同網(wǎng)絡(luò)模型的公平比較,并且我們的解決方案未采用權(quán)重量化(quantization)。
我們可以清楚地看到,我們在現(xiàn)有的移動設(shè)備上的解決方案在能效方面始終優(yōu)于代表性的ASIC / FPGA解決方案。這種獨特的現(xiàn)象歸因于三個原因:
智能手機本身具有超高的能量效率。智能手機計算芯片是使用最先進的技術(shù)(例如7nm,11nm技術(shù))構(gòu)建的,并且是技術(shù)進步的關(guān)鍵驅(qū)動力,而FPGA / ASIC解決方案則基于28nm或40nm技術(shù),而這些技術(shù)本身就不那么節(jié)能。同樣,ARM(用于移動CPU)和高通(Qualcomm)(用于移動GPU)尤其擅長高效電路/系統(tǒng)設(shè)計。
雖然現(xiàn)有的移動編譯器框架對不同神經(jīng)網(wǎng)絡(luò)的支持有限(例如,不支持RNN或大規(guī)模DNN),但我們的編譯器可以支持所有主要類型的神經(jīng)網(wǎng)絡(luò),從而釋放了移動設(shè)備的全部潛力。
由于基于軟件的解決方案具有高度的靈活性,因此我們的方法在不同的DNN基準上始終保持高性能。相反,可以清楚地看到,當前的ASIC / FPGA解決方案針對特定的DNN類型/大小進行了優(yōu)化,因此缺乏通用性。具體而言,邊緣TPU針對小型DNN優(yōu)化,而Cambricon MLU-100針對大型DNN優(yōu)化。
下一個問題就是在相同的硬件條件下,我們的方法能否超出現(xiàn)有的其它軟件優(yōu)化算法,也即壓縮編譯協(xié)同設(shè)計方法是否具有顯著的優(yōu)越性。
我們在三星Galaxy S10智能手機上測試評估我們的算法性能。S10擁有最新的高通驍龍(Qualcomm Snapdragon)855移動平臺,包含了高通Kryo 485 8核CPU和高通Adreno 640 移動GPU。下圖顯示了在CPU和GPU上,我們的算法與TFLite,TVM 以及MNN加速框架的性能對比。
我們采用了6種代表性的DNN模型結(jié)構(gòu),包括VGG-16 (VGG), ResNet-50 (RNT), and MobileNet-V2 (MBNT) ,在CIFAR-10和ImageNet這兩個數(shù)據(jù)集上做訓(xùn)練。結(jié)果顯示在所有的測試環(huán)境配置下,我們的壓縮編譯協(xié)同設(shè)計算法都超越了其它的加速框架。
在移動CPU上,我們的算法相較于TFLite,實現(xiàn)了12倍到44.5倍的加速效果,相較于TVM,實現(xiàn)了2.3倍至8.1倍的加速效果,相較于MNN,實現(xiàn)了1.9倍至15.5倍的加速效果。在GPU上,相較于TFLite,TVM以及MNN,分別實現(xiàn)了2.5倍至20倍,4.1倍至11.4倍,以及2.5倍至6.2倍的加速效果。
對于最大的DNN模型VGG以及最復(fù)雜的ImageNet數(shù)據(jù)集,我們的算法在移動GPU上只需要用18.9毫秒就能完成單一輸入圖片的所有卷積層的計算操作,滿足了實時性的要求(實時性通常要求實現(xiàn)每秒30幀,即每幀33毫秒)。
現(xiàn)有的移動環(huán)境和設(shè)備下,我們的算法可以實現(xiàn)哪些應(yīng)用?
最后但也是最重要的一個問題就是在現(xiàn)有的移動環(huán)境和設(shè)備下,我們的算法可以實現(xiàn)哪些應(yīng)用?
這個問題直接關(guān)聯(lián)到壓縮編譯協(xié)同設(shè)計方法的潛在的商業(yè)價值。
為了說明這個問題,我們研究了三種可能的DNN應(yīng)用,包括風(fēng)格遷移(style transfer),DNN上色(coloring),以及超分辨率(提高分辨率,super resolution)。風(fēng)格遷移的模型是基于在微軟COCO數(shù)據(jù)集上訓(xùn)練的生成型網(wǎng)絡(luò),可以實現(xiàn)視頻流的實時風(fēng)格遷移效果。DNN上色用Places scene數(shù)據(jù)集去訓(xùn)練一個可以同時抽取與融合全局和局部特征的模型,來實現(xiàn)將一個黑白視頻流實時地轉(zhuǎn)化為彩色視頻流的功能。
超分辨率模型主要利用在DIV2K數(shù)據(jù)集上訓(xùn)練的具有更寬激活層與線性低秩卷積的差分模塊,實現(xiàn)將低分辨率的視頻流實時轉(zhuǎn)化為高分辨率的視頻流的效果。
正如圖中所演示的,利用結(jié)構(gòu)化剪枝以及編譯優(yōu)化,我們在三星Galaxy S10智能手機上實現(xiàn)了這些應(yīng)用。對于風(fēng)格遷移,DNN上色以及超分辨率,我們的算法可以分別獲得4.2倍,3.6倍,以及3.7倍的推理加速。
結(jié)果顯示,我們團隊提出的壓縮編譯協(xié)同設(shè)計軟件算法方案可以在移動平臺上實現(xiàn)令人滿意的高速實時效果。具體來說,所有的前向推理可以在75毫秒內(nèi)完成,使得在現(xiàn)有的沒有特殊硬件結(jié)構(gòu)的移動設(shè)備上實時地運行復(fù)雜的DNN應(yīng)用成為了可能。更多的演示視頻請參考下面的網(wǎng)址。
https://search.bilibili.com/all?keyword=cocopie&from_source=nav_search&spm_id_from=333.851.b_696e7465726e6174696f6e616c486561646572.9
即使在移動AI時代,軟件仍然占據(jù)主宰地位
我們這篇文章的核心觀點是即使在AI時代,軟件仍將主導(dǎo)業(yè)界。我們希望通過這篇文章能夠向讀者表明,我們還是可以在現(xiàn)有的商業(yè)計算設(shè)備上實現(xiàn)AI,并且提供比專業(yè)的AI硬件加速器更高的加速效果以及能量效率。這能夠擴展AI在邊緣計算設(shè)備上的能力,并且改變?nèi)藗儗K端設(shè)備上實現(xiàn)實時AI就必須采用專業(yè)的特殊AI硬件的認知。
我們相信這些結(jié)果會促使工業(yè)界重新審視現(xiàn)有的移動AI的發(fā)展方向和策略。這些令人振奮的進展顯示了很多潛在的未來發(fā)展方向,我們這里列舉兩個。第一個方向是擴展基于協(xié)同設(shè)計優(yōu)化的領(lǐng)域。
目前為止,壓縮編譯協(xié)同設(shè)計的原理主要聚焦于DNN模型。除了DNN,現(xiàn)實世界的AI應(yīng)用通常包括很多其它的內(nèi)容,比如數(shù)據(jù)收集,數(shù)據(jù)預(yù)處理,以及用DNN預(yù)測之后的操作等等。
DNN在整個應(yīng)用中扮演著一個很重要的角色,導(dǎo)致我們主要聚焦于DNN的優(yōu)化,而缺乏對整個應(yīng)用的優(yōu)化,以至于難以滿足用戶的實際需求。所以一個很重要的方向就是如何將壓縮編譯協(xié)同設(shè)計的原理拓展到對整個AI應(yīng)用的全面優(yōu)化過程中。第二個方向是擴展基于協(xié)同設(shè)計的優(yōu)化的適用性。這一方向關(guān)聯(lián)到隱私性與安全性,這是在很多AI模型構(gòu)建和部署中很重要的兩個因素。如何將它們有機地與壓縮編譯協(xié)同設(shè)計過程相結(jié)合,這是一個值得研究的問題。
通常來說,模型剪枝需要訪問模型和整個訓(xùn)練數(shù)據(jù)集。但是在某些場景下,由于隱私政策或者公司之間的人造邊界,模型的優(yōu)化者可能并不能夠訪問數(shù)據(jù)集。有效規(guī)避這些攔路石可以擴展協(xié)同優(yōu)化方案的適用性。
壓縮編譯協(xié)同設(shè)計軟件算法方案可以在數(shù)十億的現(xiàn)有的移動設(shè)備以及數(shù)萬億的大有可為的物聯(lián)網(wǎng)設(shè)備上,立即實現(xiàn)實時的深度學(xué)習(xí)應(yīng)用,產(chǎn)生巨大的商業(yè)價值。比如說,這種方法可以極大地提升視頻流應(yīng)用(如抖音,Netflix,YouTube或者Snap)的用戶在低寬帶場景下的用戶體驗。
這些應(yīng)用可以推送低分辨率的視頻到用戶的設(shè)備,然后我們可以實時地將之轉(zhuǎn)化為高分辨率的視頻。類似的,視頻通信類應(yīng)用,如Zoom,Skype,和WebEx,可以利用壓縮編譯協(xié)同設(shè)計方法,達到最好的服務(wù)質(zhì)量。此外,這種方法還能夠解鎖很多之前不可能的實時深度學(xué)習(xí)應(yīng)用,例如用一個移動手機攝像頭來獲得實時的帶有藝術(shù)風(fēng)格的視頻流。
本節(jié)為感興趣的讀者提供更多的細節(jié),以理解壓縮編譯協(xié)同設(shè)計是如何運作的。利用壓縮編譯協(xié)同設(shè)計方案,我們可以方便的支持所有種類的DNN,包括CNN,RNN,transformer,語言模型等等。此外,這種實現(xiàn)了最快的DNN剪枝與加速的框架, 相較于現(xiàn)有的DNN加速方案如TensorFlow-Lite,它最高可以實現(xiàn)180倍的加速。
總而言之,壓縮編譯協(xié)同設(shè)計方案可以使得AI應(yīng)用在現(xiàn)有的移動設(shè)備上實時地運行,這在原來的觀念中,被認為是只有專業(yè)的硬件設(shè)備支持才能夠做到的。
如果您想挖掘更多的技術(shù)細節(jié),可以參考下面的完整的壓縮編譯協(xié)同設(shè)計技術(shù)概覽。
https://arxiv.org/abs/2003.06700
我們在下面的網(wǎng)址中展示了利用壓縮編譯協(xié)同設(shè)計方案在現(xiàn)有的移動設(shè)備上實現(xiàn)實時地視頻分辨率提升的視頻。
https://search.bilibili.com/all?keyword=cocopie&from_source=nav_search&spm_id_from=333.851.b_696e7465726e6174696f6e616c486561646572.9
關(guān)于基于卷積核模式化剪枝以及算法層優(yōu)化的細節(jié)與結(jié)果,讀者可以參考下面的研究論文:
[AAAI’2020] Xiaolong Ma, Fu-Ming Guo, Wei Niu, Xue Lin, Jian Tang, Kaisheng Ma, Bin Ren, and Yanzhi Wang, PCONV: The Missing but Desirable Sparsity in DNN Weight Pruning for Real-Time Execution on Mobile Device, The 34th AAAI Conference on Artificial Intelligence, February, 2020.
關(guān)于基本卷積核模式化剪枝的編譯代碼生成以及優(yōu)化的框架,以及與算法層優(yōu)化和系統(tǒng)層優(yōu)化相結(jié)合的細節(jié)與結(jié)果,讀者可以參考下面的研究論文
[ASPLOS’2020] Wei Niu, Xiaolong Ma, Sheng Lin, Shihao Wang, Xuehai Qian, Xue Lin, Yanzhi Wang, and Bin Ren, PatDNN: Achieving Real-Time DNN Execution on Mobile Devices with Pattern-based Weight Pruning, The 25th International Conference on Architectural Support for Programming Languages and Operating Systems, March, 2020.
關(guān)于更快實現(xiàn)DNN剪枝的基于具有可組合性(composability)的編譯框架的細節(jié)與結(jié)果,讀者可以參考下面的研究論文
[PLDI’2019] “Wootz: A Compiler-Based Framework for Fast CNN Pruning via Composability”, Hui Guan, Xipeng Shen, Seung-Hwan Lim, Programming Language Design and Implementation, Phoenix, AZ, USA, June, 2019.