没有合适的资源?快使用搜索试试~ 我知道了~
BenchCouncil交易基准,标准和评估2(2022)100082短通信通过LiveCache和细节预热实现缩减的Simpoint大小Jose Renaua,Fangping Liub,Hongzhang Shanb,Sang Wook Stephen Dob,aUncore LLC,美国bIC LAB,Futurewei Technologies,Santa Clara,CA,USA R T I C L E I N F O关键词:体系结构SimpointLiveCache细节预热模拟采样周期精确模拟微体系结构仿真A B S T R A C TSimpoint技术(Sherwood等人,2002)已经被现代微体系结构研究社区广泛使用,以显著加快仿真时间。然而,典型的Simpoint大小仍然是数千万到数亿条指令。在这样的规模下,周期精确的模拟器仍然需要运行数十小时或者甚至几天来完成模拟,这取决于体系结构复杂性和工作负载特性。在本文中,我们通过将LiveCache和 Detail-warmups与 Dromajo( https://chipyard.readthedocs.io/en/latest/Tools/Dromajo.html ) 和Kabylkas et al.(2005)集成开发了一个新的模拟框架,使我们能够使用更小的Simpoint大小(200万条指令)而不会损失准确性。我们的评估结果表明,平均仿真时间可以加快9.56倍以上的50 M的大小和大部分的工作负载模拟可以在几十分钟内完成,而不是小时。1. 介绍现代计算机体系结构的研究主要依靠计算机模拟来研究新的体系结构特征或估计性能、功耗和面积。一个周期精确的模拟器通常需要数百个模拟小时,禁止其在实践中使用。为了扩展模拟,现有技术已经探索了各种技术。采样是一种流行的方法,其中模拟器运行采样的执行而不是整个基准。抽样可以基于统计抽样[1Simpoint [4,5]是最广泛使用的采样技术之一,它可以将模拟时间从几个月大幅减少到几个月 几天到几小时仅运行由Simpoint工具集生成的程序执行的代表性检查点(所谓的“Simpoints”),使计算机体系结构模拟能够比从头到尾运行相同程序更早完成。 然而,典型的Simpoint大小仍然是数千万到数亿条指令,以保持准确性。根据建筑的复杂性,它仍然需要几十个小时才能完成,仍然不够快,快速周转在本文中,我们开发了一个基于Dromajo [6,7]的框架,使我们能够使用仅200万条指令(2M)的Simpoints。与具有数亿条指令或更多指令的常规模拟点相比,几分钟,不损失准确性。Dromajo是一个RISC-VRV 64 GC仿真器,它可以在快速软件*通讯作者。仿真,在给定数量的指令之后生成检查点,并且在另一个缓慢的、周期精确的仿真器中恢复这样的检查点以生成微体系结构仿真结果。为了使用更小的Simpoint大小,需要解决的一个挑战是模拟器需要从最新的架构状态开始。否则无法保持模拟精度。较大的simpoint大小可能满足此需要。 为了实现这一目的,我们将[8,9]中的LiveCache技术集成到Dromajo中,以便Dromajo可以按照时间顺序记录内存操作,直到检查点文件中的Simpoint位置。要记录的存储器操作的数量是根据模拟的目标微架构的高速缓存大小设置的配置参数。当周期精确模拟器启动时,通过读取检查点文件,它可以重复这些内存操作,并快速更新缓存状态。显示其他建筑构件的状态迄今为止,例如分支预测器,我们求助于细节预热,其允许我们正好在Simpoint位置之前运行指定数量的指令,模拟器被指示从Simpoint位置开始以测量性能数字。相应地,实际的Simpoint位置也将根据Detail-warmup定义的指令数量进行调整。综上所述,Simpoint执行之前先执行LiveCache- warmup,然后执行Detail-warmup,然后开始收集性能数据。与只运行Simpoint本身相比,LiveCache和Detail-warmup使我们能够更新机器状态,保持模拟精度。远这是第一个将LiveCache和Detail-warmup结合在一起的框架,可以在RISC-V平台上生成200万个Simpoints。电子邮件地址:renau@uncore.io(J. Renau),julius. futurewei.com(F. Liu),hshan@futurewei.com(H. Shan),sdo@futurewei.com(S.W.S.Do).https://doi.org/10.1016/j.tbench.2022.100082接收日期:2022年9月23日;接收日期:2022年12月12日;接受日期:2022年12月12日2022年12月21日在线提供2772-4859/©2022作者。Elsevier B. V.代表KeAi Communications Co. Ltd.提供的出版服务。这是CC BY-NC-ND许可证下的开放获取文章(http://creativecommons.org/licenses/by-nc-nd/4.0/)。可在ScienceDirect上获得目录列表标准和评价期刊主页:www.keaipublishing.com/en/journals/benchcouncil-transactions-on-benchmarks-standards-and-evaluations/BenchCouncil交易基准,J. Renau,F.Liu,H.Shan等人BenchCouncil交易基准,标准和评估2(2022)1000822总而言之,我们对最新技术水平做出了以下(1) 开发了一个开源框架,使我们能够 使用更小(2M)的Simpoint大小,而不会损失精度。(2) 使用SPEC 2006 CPU基准测试套件评估了2M Simpoint大小。与50M Simpoint规模相比,平均仿真时间提高了9倍以上(3) 定量研究LiveCache和Detail-warmup对模拟速度和准确性的性能影响。包括LiveCache技术在内,[1-本文的其余部分分为以下几个部分。第2节描述了执行情况。第三节介绍了评价结果并进行了分析。最后,第4节对未来的发展方向进行了评论。2. 执行我们的实现基于Dromajo [6,7],一个开源的RISC-V仿真器。我们扩展了Dromajo,使其能够使用用户可配置的LiveCache和Detail预热生成Simpoints。2.1. 基本Simpoint创建和执行首先,我们修改了Dromajo源代码,使其能够分析基于Simpoint要求的基准测试。分析应遵循Simpoint文件[4,5]中描述的基本块表征。我们使用Dromajo现有的检查点选项在每个Simpoint位置生成两个检查点文件。第一文件包括要被执行以恢复目标机器的架构状态的RISC-V指令,诸如在对应的Simpoint创建时物理寄存器文件和控制寄存器的内容。第二个文件包含内存映像,包括指令和数据区域以及运行基准测试所需的其他内存内容。据我们所知,我们首先在Dromajo上使用,设计和实现了Simpoint支持,因为它在[7]中首次讨论。为了运行Simpoints,我们修改了目标周期精确模拟器将内存映像复制到目标模拟器的内存空间中,并从第一个Simpoint(检查点)文件中的第一条指令开始执行。由Dromajo检查点选项插入的RISC-V 'dret'指令应该执行跳转到所需的Simpoint位置。我们还修改了目标模拟器,以重置并开始(重新)收集模拟统计数据,例如缓存未命中和分支误预测等。2.2. LiveCache对于LiveCache,我们实现了[9]中描述的类似机制,该机制采用了[8]中的MTR(内存时间戳记录)技术,在如上所述的基础Simpoint框架之上,让Dromajo记录到当前Simpoint位置的内存操作,并使用记录的内存地址将其转换为用于干净缓存行的RISC-V“加载”指令或用于脏缓存行的“加载”和“存储”指令对。这些加载和存储指令存储在第一个Simpoint文件中,稍后将由模拟器执行,以更新缓存状态。 由于这些额外的加载和存储指令的执行时间,总的模拟时间应该相应地增加。为了限制LiveCache加载和存储指令的数量,我们的框架将'Bootrom'大小作为输入参数。例如,如果Bootrom大小为8KB,则记录有1024个64位地址,其对应于最大1024个加载或加载,商店对。实际的Bootrom大小应根据模拟目标微体系结构的高速缓存大小进行设置。为了验证,我们在目标周期精确模拟器上测试了以下C语言代码片段。我们在第三次循环迭代中设置了两个检查点,LiveCache处于打开和关闭状态。实验结果表明,在LiveCache开启的情况下,IPC提高了约11%,验证了该机制的有效性//an阵列的 32k32-b i t words//占用 2048缓存林内斯10intvec [0 x8000 ];20 r e gis t e r int sum = 0的整数;30 为 (int)我 = 0的整数;我 < 5 ; ++i){40用于 (int)J = 0的整数;J <0x8000 ;J += 16){1}//do one 负载交流T i O N//每一个字符串或64字节50 sum += vec [ j ] ; 60}70}2.3. 细节-热身细节预热旨在通过在Simpoint之前执行一些指令来预热微架构组件,如分支预测器和指令和数据缓存,而LiveCache专门针对数据缓存。目标是尽可能地恢复目标模拟器的机器状态,就好像目标模拟器一直运行到Simpoint位置一样。实现的目标是在Simpoint之前的位置上建立一个检查点,检查点的数量是由Detail-warmup size参数指定的指令数。基本Simpoint创建不考虑这些额外的指令,我们必须添加一个额外的步骤来相应地调整Simpoint位置。在最后一步之前,我们用脚本干预了基本Simpoint创建过程,以通过细节预热大小提前调整实际Simpoint位置。对于需要在执行开始时创建基本模拟点的罕见情况,需要调整整个模拟点窗口,以便为细节预热腾出空间,因为在开始之前无法指定从描述中,我们可以发现Detail-warmup在更新架构状态方面比LiveCache更强大。然而,细节预热要贵得多。 LiveCache可以帮助减少细节预热大小。LiveCache和Detail-warmup的结合使Simpoint的大小更小、更快、更准确。总之,我们将LiveCache和Detail-warmup修改应用到Dromajo源代码中的相关位置,原始代码分别在检查点文件中添加LiveCache内存指令和捕获相应的架构快照。我们希望可以在Dromajo之外的其他工具集中移植修改。3. 评价3.1. 仿真设置对于基准测试设置,我们使用SPEC CPU 2006基准测试套件[22]。我们使用Buildroot [23]在Simpoint中包含Linux内核以支持系统调用。对于目标模拟器设置,我们使用内部周期精确模拟器,它运行未经修改的RISC-V指令。目标模拟器,ulator还实现了硬件支持,以处理中断和异常的基础上RISC-V规范运行的基准测试应用程序的预期。表1显示了目标模拟器配置。J. Renau,F.Liu,H.Shan等人BenchCouncil交易基准,标准和评估2(2022)1000823Fig. 1. 2 M Simpoints(使用LiveCache和4 M Detail-warmup指令)和50 M Simpoints(使用50 M Detail-warmup)的相对IPC错误。使用2M模拟点可以将IPC的平均误差从5.46%降低到3.89%。表1模拟器配置。内核单核,96 Inst. Q条目调度宽度- 8 Int,4 Fp指令3-ALU,DIV,MUL,FP48位VA、40位MAX PA说明64 KB,4路,64 B-linefetch完全流水线48-条目TLB,32条目RASBTB,TAGE预测器L1数据64 KB,4路,64 B线LRU,4周期延迟L2 1 MB,8路,64 B线LRU,9周期延迟L3 4 MB,16路,64 B线LRU,13周期延迟内存167周期延迟表2Simpoint配置。设置描述执行窗口大小10B指令Simpoint大小2M指令Bootrom大小256 KBLiveCache预热打开或关闭详细-预热0、2或4 M说明对于Simpoint设置,我们选择100亿个执行窗口大小以避免非常长的模拟时间,这仍然允许我们进行公正的评价。我们还让Dromajo将这100亿条指令窗口移动了1亿条指令,以允许在执行开始时创建Simpoint表2显示了用于评估的Simpoint配置3.2. 仿真结果本节重点介绍我们的Simpoint方法的准确性和速度评估。我们使用SPEC CPU2006基准测试套件作为我们的驱动应用程序,其中包括28个整 数 和 浮 点 应 用 程 序 , 将 我 们 的 2M Simpoint 结 果 与 流 行 的 50MSimpoint结果进行比较。Sphinx 3目前没有包括在内,因为我们的RISC-V模拟器无法正确处理其输入数据集3.2.1. IPC准确度为了比较准确性,我们计算相对于提到的100亿条指令引用的IPC(每周期指令数)错误图二. LiveCache开/关和细节预热的0 M/2 M/4 M情况下的相对IPC错误。最好的结果是同时使用4 M Detail-warmup和LiveCache,而最差的结果是在没有LiveCache和Detail-warmup的情况下运行2 M Simpoints(LiveCache关闭/0 M Detail-warmup)。以前图1显示了我们的2 M Simpoints(启用LiveCache和4 M Detail-warmup)和50 M Simpoints(使用50 M Detail-warmup,类似于[24,25]的方法)的相对误差,其中包含所有28个单独应用程序的条形图(左侧,单个结果)和须状框(右侧,整体结果)。须状框说明2MSimpoints 产 生 的 平 均 误 差 ( 3.89% ) 低 于 流 行 的 50M Simpoints(5.80%)。此外,2M Simpoints具有更低的最大误差值和更严格的边界范围。最小误差值是相似的,都接近于零。显然,2M Simpoints显示出更集中的误差分布和更高的IPC精度。在晶须盒中存在一个异常值,GemsFDTD,其使用时域有限差分法在时域中求解3D中的麦克斯韦方程。无论是2M大小还是50M大小都不能很好地与此应用程序配合使用。两种尺寸产生的IPC结果均远高于参比品。完整IPC迹线具有高IPC和短的低IPC尖峰,Simpoint无法正确捕获。我们认为这应该与Simpoint技术使用的统计方法有关。进一步的研究超出了这篇短文的范围3.2.2. 细节预热和LiveCache效果图1所示的2 M Simpoint结果是使用LiveCache和4 M Detail-warmup获得的。为了了解它们各自对IPC准确度的影响,我们使用须状图显示了相应的结果J. Renau,F.Liu,H.Shan等人BenchCouncil交易基准,标准和评估2(2022)1000824图三. 每千条指令的二级未命中(MPKI)与50M模拟点(使用50M详细预热)和2M模拟点(使用Livecache)的基准的差异 4M细节预热)。见图4。使用2M Simpoint大小的最差模拟时间加速比超过50M Simpoint。当使用LiveCache和4 M Detail-warmup运行2 M Simpoints时,加速约为10倍。图LiveCache开/关6种情况下为2,Detail- warmup为0 M/2 M/4 M。最左边的框用于在没有实时缓存和细节预热的情况下运行2 M模拟点(LiveCache关闭/0 M细节)。显然,它产生了最高的错误。启用LiveCache或Detail-warmups对于提高准确性至关重要首先,我们研究LiveCache的性能影响。通过比较LiveCache开启和关闭的情况(左三个须盒与对应的右三个须盒),我们发现,LiveCache开启时获得的误差集中在较窄的盒范围内,所有最大、平均和中值误差值都较小。这种差异在没有细节预热(0 M指令情况)时更为显著。随着Detail预热大小的增加,LiveCache预热效果变得越来越不重要。但是,增加细节预热大小肯定会增加模拟时间。使用LiveCache可以缩短细节预热时间,这样我们就可以避免在细节预热上花费大量模拟时间的问题[1]。类似地,当将细节预热指令从0增加到2M时,IPC精度可以显著提高。从2M到4M,结果仍然可以改进。然而,使用8M或更大的尺寸,精度不再能进一步提高。我们最好的结果时,获得4M细节热身大小使用3.2.3. L2缺失除了IPC的准确性,我们还比较了L2未命中的数量,这是衡量内存性能的一个重要指标观察对缓存的直接影响,尽管这些影响应该反映在IPC结果中。图3示出了具有50M细节预热的50M模拟点和具有LiveCache和4M细节预热的2M模拟点在100亿基本参考下的MPKI(每千条指令的未命中)差异。左侧条形图显示单个基准的结果(较低的值表示MPKI与基准参考的差异较小),而右侧须状图显示单个基准的结果(较低的值表示MPKI与基准参考的差异较小)。 方框显示了总体结果。不同于图在图1中,使用绝对差而不是图3中的相对比率是由于对于某些应用,L2 MPKI相当小的事实。使用比率可能会夸大差异并导致错误的结论。例如,用于tonto的L2 MPKI仅0.03作为其基础参考。对于50M模拟点和2M模拟点,它们分别为0.01和0.03。两者都非常接近基本情况。如果我们使用相对误差,50M模拟点和2 M模拟点之间的差异将分别为67%((0.03总之,图3显示,与IPC精度类似,使用2M simpoints不仅显著降低了最大误差,而且提供了更高的平均精度。此外,2M simpoint结果是通过LiveCache和4M Detail预热获得的。 仅运行2M simpoints本身将产生更高的错误,并且必须伴随LiveCache和Detail预热以保持准确性。3.2.4. 仿真速度使用2 M Simpoint大小而不是50 M,我们希望模拟时间可以大大加快,理想情况下为50倍((50 M+ 50 M)/2 M)。然而,考虑到LiveCache和Detail-warmup开销,尤其是Detail-warmup开销,实际的加速比会低得多。我们使用最差的Simpoint模拟时间比较了2M和50MSimpoint大小的运行时间。应用程序的所有模拟点同时并行启动,直到完成所有模拟点。基准运行时间由模拟时间最长的Simpoint决定。图4显示了使用2M Simpoint大小超过50M大小的加速比在最差运行时间方面。仅使用LiveCache而不使用Detail- warmup,最大加速约为45倍,接近理想的50倍加速。平均加速比约为23。打开LiveCache会引入读取数据文件和将数据加载到缓存中的恒定开销。它需要大约2分钟与我们的模拟器。但是,与细节预热相比,它对模拟时间的影响相对较小。随着细节预热大小的增加,平均加速比会降低,4M热身尺寸。50M尺寸的实际平均运行时间约为450分钟,而2M尺寸的平均实际运行时间为22分钟,0M、2M和4M细节预热分别为34和49分钟J. Renau,F.Liu,H.Shan等人BenchCouncil交易基准,标准和评估2(2022)10008254. 结论在本文中,我们提出了一个框架,以创建减少大小的模拟采样Simpoints,进一步减少模拟时间的标准Simpoint模拟略有提高精度。我们通过将成熟的LiveCache和细节预热技术结合到我们的基础Simpoint框架中来实现这一目标。该框架将有利于谁依赖于计算机体系结构仿真,通过显着减少模拟时间与体面的采样误差。未来的工作包括,但不限于,详细研究LiveCache和细节预热的性能影响,扩展我们的框架,工作,以支持多核多线程的基准测试应用程序;探索和结合各种其他预热技术;和增强检查点功能的任意位置的兴趣。竞合利益作者声明以下可能被视为潜在竞争利益的经济利益/个人关系:作者目前受雇于Futurewei Technologies。引用[1]R.E.Wunderlich , T.F. 韦 尼 施 湾 Falsafi , J.C.Hoe , SMARTS :Acceleratingmicroarchitecture simulation via strict statistical sampling,in:Proceedingsofthe30th AnnualInternational SymposiumonComputerArchitecture,ISCA,2003,pp. 84比95[2]T.M. Conte,文学硕士Hirsch,K.N. Menezes,Reducing State Loss for EffectiveTraceSampling of Superscalar Processor , in : Proceedings InternationalConference onComputerDesign : VLSI in Computers and Processors , ICCD ,1996,pp. 468-477.[3]T.M. Conte,文学硕士 赫希 胡,结合跟踪采样与单通道方法有效的高速缓存模拟,IEEE trans.comput。47(6)(1998)714-720。[4]T. Sherwood , E. 佩 雷 尔 曼 湾 Hamerly , B. Calder , Automaticallycharacterizinglarge scale program behavior , in : Proceedings of the 10thInternationalConference on Architectural Support for Programming Languagesand OperatingSystems,ASPLOS,2002,pp. 45比57[5]E. 佩 雷 尔 曼 湾 Hamerly , B. Calder , Picking statistically valid and earlysimulationpoints , in : Proceedings of the 12th International Conference onParallelArchitectures and Cimpilation Techniques,PACT,2003,pp. 244-255。[6]https://chipyard.readthedocs.io/en/latest/Tools/Dromajo.html网站。[7]N. Kabylkas , T. Thorn , S. Srinath , P. Xekalakis , J. Renau , EffectiveProcessorVerification with Logic Fuzzer Enhanced Co-simulation,第54届微架构国际研讨会论文集,MICRO,2005年,第103页。667-678.[8]K.C. Barr,H.潘,M。Zhang,K.张氏K. Asanovic,使用内存时间戳记录加速多处理器仿真,在:2005年IEEE系统和软件性能分析国际研讨会论文集,ISPASS,2005年,pp. 66比77[9] S.Hassani , G.Southern , J. Renau , LiveSim : GoingLivewithmicroarchitecturesimulation , in : Proceedings of 2016 IEEE InternationalSymposium on HighPerformance Computer Architecture,HPCA,2016,pp.606-617[10] A. Agarwal,J. Hennessy,M.霍罗威茨,操作系统和多道程序设计工作负载的缓存性能,ACM Trans.Comput。6(4)(1988)393-431。[11] S.Laha , J.A.Patel , R.K.Iyer ,Accuratelow-costmethodsforperformanceevaluation of cache memory systems , IEEE Trans. Comput. 37(11)(1988)1325-1336。[12] S.K. Reinhardt, 医 学博 士 希 尔, J.R. Larus,A.R. Lebeck,J.C. Lewis,D.A.Wood,Wisdom风洞:并行计算机的虚拟原型,在:1993年ACM SIGMETRICS计算机系统测量和建模会议论 文 集 ,SIGMETRICS,1993年,pp. 48比60[13] R.E. 凯 斯 勒 医 学 博 士 Hill , D.A. Wood , A comparison of trace-samplingtechniquesformulti-megabyte caches , IEEE Trans. Comput. 43( 6) ( 1994)664[14] J.W. Haskins , K. Skadron , Minimal subset evaluation : Rapid warm-upforsimulated hardware state , in : Proceedings of 2001 IEEE InternationalConferenceonComputer Design : VLSI in Computers and Processors , ICCD ,2001,pp. 32比39[15] J.W. Haskins , K. Skadron , Memory reference reuse latency : Acceleratedwarmupfor sampled microarchitecture simulation , in : Proceedings of 2003IEEEInternationalSymposiumonPerformanceAnalysisofSystemsandSoftware,ISPASS,2003,pp. 195-203.[16] Y.卢湖,加-地约翰湖Eeckhout,用于微处理器仿真的自监控自适应缓存预热,在:第16届计算机体系结构和高性能计算研讨会(SBAC-PAD)会议记录,2004年,第11页。10-17[17] L. Eeckhout,Y. Luo,K.D. Bosschere,L.K.约翰,BLRL:准确和有效的热身采样处理器模拟,计算。 J. 48(4)(2005)451-459。[18] T.F. 韦 尼 施 河 文 德 利 希 湾 Falsafi , J.C.Hoe , TurboSMARTS :Accuratemicroarchitecture simulation sampling in minutes,in:Proceedings ofthe 2005ACM SIGMETRICS International Conference on Measurement andModeling ofComputer Systems,2005,pp. 408-409[19] T.F. 韦尼施河 文德利希湾法尔萨菲,J.C.锄头,仿真采样2006 IEEEInternational Symposium onPerformanceAnalysis of Systems and Software ,ISPASS,2006,pp. 2比12[20] N. Nikoleris , D. Eklov , E. Hagersten , Extending statistical cache modelstosupport detailed pipeline simulators , in : Proceedings of 2014 IEEEInternationalSymposium on Performance Analysis of Systems and Software ,ISPASS,2014,pp. 86比95[21] N.尼古莱里斯湖Eeckhout,E. Hagersten,T. E.卡尔森,定向统计温-通过时间旅行,在:第52届IEEE/ACM国际微架构研讨会论文集,MICRO,2019年,第101页。1037-1049[22] https://www.spec.org/cpu2006/网站。[23] https://buildroot.org/网站。[24] T.E. Carlson,W.海尔曼湖Eeckhout,多线程应用程序的采样模拟,在:2013IEEE系统和软件性能分析国际研讨会论文集,ISPASS,2013年,第113页。2比12[25] T.草,T. E。Carlson,A.里科湾Ceballos,E.艾瓜德湾卡萨斯湾Moreto,基于任务的程序的抽样模拟,IEEE Trans. Comput. 68(2)(2018)255-269。
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- SSM动力电池数据管理系统源码及数据库详解
- R语言桑基图绘制与SCI图输入文件代码分析
- Linux下Sakagari Hurricane翻译工作:cpktools的使用教程
- prettybench: 让 Go 基准测试结果更易读
- Python官方文档查询库,提升开发效率与时间节约
- 基于Django的Python就业系统毕设源码
- 高并发下的SpringBoot与Nginx+Redis会话共享解决方案
- 构建问答游戏:Node.js与Express.js实战教程
- MATLAB在旅行商问题中的应用与优化方法研究
- OMAPL138 DSP平台UPP接口编程实践
- 杰克逊维尔非营利地基工程的VMS项目介绍
- 宠物猫企业网站模板PHP源码下载
- 52简易计算器源码解析与下载指南
- 探索Node.js v6.2.1 - 事件驱动的高性能Web服务器环境
- 找回WinSCP密码的神器:winscppasswd工具介绍
- xctools:解析Xcode命令行工具输出的Ruby库
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功