没有合适的资源?快使用搜索试试~ 我知道了~
ANACIN-X:MPI应用程序非确定性研究的软件框架
软件影响10(2021)100151原始软件出版物ANACIN-X:一个用于研究MPI应用程序中的非确定性的软件框架PatrickBella, Kae Suareza,DylanChappa,Nigel Tana,SanjuktaBhowmickb,Michela Taufera,田纳西大学诺克斯维尔分校,诺克斯维尔,TN 37996,美国b北德克萨斯大学,丹顿,TX 76203,美国A R T I C L E I N F O保留字:MPI通信复制轨迹分析A B标准MPI应用程序中的非确定性对高性能计算(HPC)和科学模拟的调试和正确性产生了负面影响。帮助开发人员和科学家研究和理解源代码的非确定性,我们提出了ANACIN-X,一个软件框架量化点到点通信的MPI应用程序的非确定性作为图形核距离。ANACIN-X包括三个用于测试的基准应用程序(即,消息竞争、代数多重网格和非结构化网格)。代码元数据当前代码版本v3.1用于此代码版本的代码/存储库的永久链接https://github.com/SoftwareImpacts/SIMPAC-2021-125Reproducible Capsule的永久链接https://codeocean.com/capsule/0309009/tree/v3法律代码许可证Apache 2.0许可证,带LLVM许可证使用git的代码版本控制系统软件代码语言、工具和服务使用C++、Python、MPI、bash、MySQL Notebook、CMake编译要求、操作环境依赖性https://github.com/TauferLab/ANACIN-X/tree/v3.1/requirements.md如果有开发人员文档/手册https://github.com/TauferLab/ANACIN-X/tree/v3.1/README.md问题支持电子邮件mtaufer@utk.edu1. 动机和贡献高性能计算(HPC)和科学模拟通过使用异步风格的消息传递程序员接口(如MPI [1])在超级计算机上实现可扩展的性能。异步通信模式通常表现出不确定性行为:MPI进程之间交换的消息的类型和顺序在同一应用程序的运行过程中会发生变化。这种非确定性,如果不加以有效管理,可能会阻碍对软件缺陷的搜索[2,3],并可能阻碍科学结果的可解释性[4,5]。计算系统和科学模拟的不断发展放大了非确定性的负面影响鳞片反过来,这种增长使得它不断更难以隔离和理解潜在的非决定论[6,7]。开发人员和科学家需要软件工具来帮助他们理解非确定性的根本原因。为此,我们提出了ANACIN-X,一个软件框架,通过图形内核在MPI应用程序中的异步点对点通信模型的非确定性。ANACIN-X首先将MPI应用程序执行中的通信模式建模为图形,然后使用这些图形之间的内核距离作为执行中存在的非确定性量的代理,允许用户识别代码中的特定非确定性源(例如,终止于对MPI函数的调用本文中的代码(和数据)已由Code Ocean认证为可复制:(https://codeocean.com/)。更多关于生殖器的信息徽章倡议可在https://www.elsevier.com/physical-sciences-and-engineering/computer-science/journals上查阅。∗通讯作者。电子邮件地址:taufer@acm.org(M. Taufer)。https://doi.org/10.1016/j.simpa.2021.100151接收日期:2021年9月16日;接收日期:2021年9月18日;接受日期:2021年9月22日2665-9638/©2021作者。由Elsevier B.V.出版。这是一篇开放获取的文章,使用CC BY许可证(http://creativecommons.org/licenses/by/4.0/)。可在ScienceDirect上获得目录列表软件影响杂志 首页:www.journals.elsevier.com/software-impactsP. 贝尔,K。Suarez,D.Chapp等人软件影响10(2021)1001512本文介绍了ANACIN-X软件包,并描述了ANACIN-X对HPC软件开发和科学成果的影响。2. 软件描述和功能ANACIN-X是一套软件模块,用于MPI应用程序中基于跟踪的非确定性行为分析。这四个核心模块如下:(i)用于跟踪生成和收集应用程序执行的软件模块;(ii)用于事件图构造的软件模块;(iii)用于事件图内核计算的软件模块;以及(iv)用于内核距离数据的可视化和分析的软件模块,其中内核距离是非确定性行为的代理。图1显示了ANACIN-X的概述和分解 它的模块。2.1. ANACIN-X框架2.1.1. 跟踪生成和收集MPI应用程序通常作为作业集合运行多次;非确定性(即,在此上下文中可以研究通信量的运行到运行的变化(或整个集合)。通过运行应用程序的多个执行,用户可以提高他们与非确定性比较的统计显著性。ANACIN-X通过三个工具生成执行跟踪数据来量化和表征此类应用程序中的非确定性,每个工具都依赖于MPI分析接口(PMPI)[8]。这些工具是:(SST)DUMPI [9],它跟踪MPI通信调用及其执行顺序,Pluto [10],它收集与这些MPI通信调用相关的内存地址以补充(SST)DUMPI具体而言,(SST)DUMPI [9]是Sandia National公司开发的一种工具; ANACIN-X根据其软件发布许可证使用该工具。它为每个MPI进程生成一个跟踪文件,其中包含涉及该进程的MPI通信事件的明确顺序。同时,(SST)DUMPI对被跟踪应用程序的开销很低,因此探测效果最小[12]。 Pluto [10]是由作者开发的,它跟踪与非阻塞MPI调用相关的MPI请求的内存地址。ANACIN-X使用这些内存地址来区分不同类型的非阻塞MPI调用(MPI应用程序中非确定性的主要来源之一)。CSMPI [11]也是由作者开发的,并跟踪调用路径(即,从可执行程序入口点开始的函数调用序列)终止于对MPI函数的调用。在这样做时,CSMPI将运行时事件(可能是不确定的)与有关程序结构的静态信息相关联。通过PnMPI [13,14]组合(SST)DUMPI [9],Pluto [10]和CSMPI [11](即,一个动态的,开源的,MPI工具基础设施,建立在标准化的PMPI接口之上),ANACIN-X可以 在MPI应用程序上同时运行三个PMPI模块(SST)DUMPI、Pluto和CSMPI都通过记录来自所使用的每个MPI进程的每个MPI事件的信息来跟踪应用程序它们的补充信息用于工作流中,以获得给定执行中执行的通信的ANACIN-X提供了设置PnMPI的脚本,以便在任意MPI应用程序中轻松使用这些工具。在当前的ANACIN-X版本中,我们提供了三个测试基准,实现了三种MPI点对点通信模式:Message Race,Alge Multigrid 2013(AMG 2013)[15]和Unstructured Mesh [16]。这些模式在科学应用中很常见[17],因此在ANACIN-X中用作测试基准。第2.2节详细描述了所提供的基准。ANACIN-X将本节中描述的跟踪数据转换为图形结构化数据,并计算它们(在第2.1.2节和第2.1.3节中描述),而不是使用对齐方法[18],来识别代码中执行的差异和相关的非确定性程度。(SST)DUMPI和Pluto需要从跟踪数据中构建事件图,该跟踪数据精确地模拟了在执行过程中发生的通信事件。相比之下,CSMPI仅用于将来自应用程序源代码的函数调用序列与运行时通信事件相关联。2.1.2. 事件图构造ANACIN-X 将 ( SST ) DUMPI 、 Pluto 和 CSMPI 跟 踪 文 件 提 供 给dumpi_to_graph工具[19],以生成每个执行的进程间通信的图模型或dumpi_to_graph工具由作者开发,用于构建有向无环图(DAG)表示在输入跟踪对应的执行期间发送的所有MPI消息的顺序/交织。实际上,dumpi_to_graph将每个进程的跟踪数据转换为图形:每次执行都会生成一个图形文件。图2示出事件图构造的示例[21]。2.1.3. 事件图内核计算ANACIN-X通过Weisfeiler-Lehmann子树(WLST)图形内核量化事件图之间的差异,从而执行ANACIN-X使用GraphKernels [23]软件包计算两个图之间的WLST核距离。WLST图形内核通过使用其邻居标签的散列迭代地细化每个节点标签来将图形结构编码为节点标签。 虽然存在许多图形内核[24],但我们选择WLST内核主要是因为它的性能特征。WLST核算法的渐近时间复杂度为λ(λ),其中λ是���最大的输入图和顶点标签细化迭代计数,其中通常是��� 由于研究目标的MPI执行都是高度并行和长时间运行的,因此实际上,时间复杂度非常大,这反过来又禁止使用具有超线性时间复杂度的图内核。对于每对图(即,ANACIN-X提供了一个API,用于在图上定义一个滑动窗口,为该窗口计算一系列成对的核距离-实际上是核距离时间序列(KNN)。克钦量化了两个执行的消息顺序之间的差异如何随时间变化。当K值较低时,执行的消息顺序相似,反之亦然。从系综中的所有执行对获得的KDTS的集合量化一个应用程序的非确定性作为一个整体。实际上,各个KDTS(即,对应于执行对的那些)被合并成核距离分布的时间序列(即,对应于整个执行集合)。2.1.4. 可视化工具为了查看应用程序中内核距离和非确定性百分比(ND%)之间的关系,ANACIN-X支持两种类型的KNOWN文件可视化:(i)小提琴图,显示同一应用程序多个配置的成对内核距离分布;(ii)条形图,显示高非确定性执行区域中调用路径的相对频率。 第一种类型的可视化的示例在图1中提供。四、这些可视化可以通过以下方式获得:(i)一个Python笔记本,它引导用户完成可视化过程并在其中显示每个生成的图形,或者(ii)一组实现命令行界面的Python脚本,它允许用户从他们提交作业的同一位置生成图形。每个可视化方法的脚本都可以在ANACIN-X存储库中找到,使用说明可以在存储库的README中找到P. 贝尔,K。Suarez,D.Chapp等人软件影响10(2021)1001513Fig. 1. 概述ANACIN-X框架及其四个软件模块。内部软件模块是指作者开发的软件包。外部软件 模块是指由其他小组开发的软件包图二. 将MPI执行建模为事件图的示例。图的顶点表示模式中的MPI事件(MPI发送和接收)。MPI中的边进程表示逻辑优先级。进程之间的边表示点对点MPI消息。有向无环图是由以下对象之间的MPI通信产生的:三个MPI过程(即,p0、p1和p2)。表1ANACIN-X应用程序基准测试中提供的通信模式。A表示表达给定类型的非确定性的通信模式是否存在,而A表示不存在该类型的非确定性。在表中,Recv代表接收方非确定性;Send代表发送方非确定性; Topo代表进程拓扑非确定性; RNG代表用于随机化进程邻域的随机数生成。Comm. 模式接收发送拓扑源消息竞赛MPI_ANY_SOURCEAMG 2013消息竞赛MPI_ANY_SOURCE非结构化网格计算MPI_Waitany + RNG2.2. 测试应用程序基准ANACIN-X为用户提供了三个应用程序基准,用于测试其表征非确定性的能力。每个基准测试应用程序都采用非确定性源和非确定性类型的唯一组合。表1列出了每个基准的非确定性来源和类型。关于每个非确定性来源和类型的使用的更多信息可以在作者以前的工作中找到[25]。对于给定的基准应用,用户可以通过定义以下参数来生成跟踪数据• MPI进程:用于基准测试执行的MPI进程数(整数);• Compute Nodes:用于基准测试执行的计算节点数(整数);• Message Size(bytes):正在传递的消息的大小(整数值);• 模式迭代:通信模式在应用程序执行中迭代的次数(整数值);• 消息不确定性百分比:应用程序中由其不确定性源启用的消息不确定性的峰值量(百分比);由于可以由进程以可变顺序接收或发送的消息;• 拓扑非确定性百分比:拓扑非确定性的量(百分比);由于应用程序,其中给定进程与之通信的一组进程可以从运行到运行而变化-这对于非结构化网格基准是唯一的;以及• 应用程序执行:运行应用程序的次数(整数值为2或更大)。通过上面列出的输入,可以为三个基准生成不同级别的非确定性。首先,用户可以通过参数定义模拟规模:MPI进程、计算节点、消息大小和模式迭代。更大的尺度增加了非确定性模拟中存在的非确定性的量。其次,对于固定的标度,用户可以通过设置消息和拓扑ND%s来定义由基准的非确定性源引起的非确定性的量通过设置三个值来定义消息ND%s:最低百分比、最高百分比和异步MPI调用的每个百分比之间的恒定间隔。拓扑非确定性用单个百分比值定义。ANACIN-X用户可以通过控制哪些过程对非确定性来源敏感来进一步更改ND%。图图3通过两次运行嵌入消息竞争通信模式的代码并呈现50%的非确定性百分比来可视化这一点。第三,用户P. 贝尔,K。Suarez,D.Chapp等人软件影响10(2021)1001514图三. 直观描述如何使用消息竞争通信模式改变非确定性百分比(ND%)。当ND%为50%并且有8个工作进程时,正好有4个进程以固定顺序到达其他人可以按任何顺序到达见图4。AMG 2013仿真内核距离时间序列(Kests)数据的可视化设置:16个进程、1个节点、10次迭代、1字节消息大小、0%-通过执行次数定义结果的统计显著性:执行次数越大,统计输出越显著图4显示了AMG 2013基准测试执行的可视化示例,参数列于表2中。在图中,我们使用ANACIN-X来比较允许的非确定性消息的不同峰值百分比(就异步MPI点对点通信而言)的执行的内核距离,范围从0%到100%,间隔为10%。小提琴图可视化了对于每个非确定性百分比,在100次执行中观察到的内核距离的变化。该图显示了ND%s中非确定性与核距离之间的正相关关系。具体而言,随着基准应用程序中的潜在非确定性程度的增加,对其执行进行建模的事件图对之间的相应核距离也会增加。3. 影响3.1. 对软件正确性的最近的一份报告[3]强调了在HPC应用程序中定位非确定性错误时“非确定性控制”的必要性。 在HPC调试案例研究[26]中记录了这种必要性,该案例研究报告了手动调试HYPRE 2.10.1中的非确定性错误所花费的表2模拟设置用于测试ANACIN-X与AMG 2013通信模式。使用的设置值MPI进程16计算节点1消息大小(字节)1模式迭代10消息非确定性百分比0%AMG 2013的拓扑非确定性百分比N/A应用程序执行100线性代数软件[27],因为缺乏自动检测非确定性根源的工具。有三种主要方法可以帮助开发人员控制或理解代码中的非确定性。它们是:(i)记录&重放工具,如ReMPI [28],使应用程序的执行决定性,抑制非确定性,从而暂时影响结果的再现性,同时忽略软件的正确性;(ii)用于基序检测的工具,如SABALAN [ 6 ],确定性在应用程序执行中产生模式,但受到其学习模型中基元数量的限制,并且只能识别单个应用程序执行中的基序;以及(iii)崩溃检测软件, 如PopMine [6],P. 贝尔,K。Suarez,D.Chapp等人软件影响10(2021)1001515软件崩溃,但对于非崩溃应用程序中的非确定性执行无效。ANACIN-X通过(i)暴露而不是抑制非确定性来响应这些限制;(ii)识别代码源(例如,函数调用)通过量化多个应用程序执行之间的非确定性,消除对学习的基元的数量的限制来实现非确定性;以及(iii)揭示非确定性的根本原因,其可能是非崩溃应用程序中不可避免地发生的错误的根源。 通过这样做,ANACIN-X改进了上述现有方法,以减轻非确定性的影响。借助ANACIN-X提供的洞察力,开发人员和科学家可以降低与HPC应用程序中的非确定性调试3.2. 对科学再现性的多项研究[4,29,30]已经表明非决定论如何损害科学模拟的可信度。 其中之一,一项关于计算科学结果可复制性的研究[4]通过证明恩佐天体物理学软件(一种定位星系晕的工具)的多次运行缺乏一致的结果,显示了非决定论如何影响科学的可复制性[31]。ANACIN-X通过捕获非确定性的特定根源(例如, 与大内核距离相关联的调用路径)。 在此过程中,ANACIN-X确定了科学不可再现性的可能原因4. 结论和今后的工作ANACIN-X量化了与MPI点对点通信的异步模式相关的非确定性;它的能力可以通过三个应用程序基准测试来测试。ANACIN-X在作者[25]的先前工作中用于评估两个现实世界应用中存在的非确定性:miniAMR[32],证明ANACIN-X可以以自动方式恢复关于非确定性根本原因的知识,以及Monte Carlo Bench mark(MCB)[33],证明ANACIN-X可以量化由配置参数变化引起的在未来的工作中,我们将扩展ANACIN-X,以支持更广泛的通信模式,超越点对点消息传递,包括集体和单边通信。我们还将使用ANACIN-X来评估宇宙学和分子动力学中CRediT作者贡献声明帕特里克·贝尔:概念化,软件,验证,调查,数据管理,写作-原始草稿,写作-审查编辑,可视化。概念化,方法论,软件,验证,调查,写作迪伦·查普:概念化,方法论,写作- Nigel Tan:概念化,软件,数据管理. Sanjukta Bhowmick:写作概念化,方法论,写作竞合利益作者声明,他们没有已知的竞争性财务利益或个人关系,可能会影响本文报告的工作致谢这 项 工 作 得 到 了 美 国 国 家 科 学 基 金 会 ( National ScienceFoundation)的资助,资助号为1900888和1900765。作者通过共享大学研究奖以及Krishna Sai Ujwal和Chet Lockwood的反馈来支持IBM。附录A. 补充数据与 本 文 相 关 的 补 充 材 料 可 以 在 网 上 找 到在https://doi.org/10.1016/j.simpa.2021.100151。引用[1]陈文龙,等.[2]佐藤健人,东豪。放大图片创作者:Ahn.放大图片创作者:John M. Chambreau,Noise injection techniques to expose intense and un-intendedmessage races,in:Proceedings of the 22nd ACM SIGPLAN Symposiumon Principles and Practice ofParallel Programming,PPoPP '17,ACM,New York,NY,USA,2017,pp. 89比101[3]GaneshGopalakrishnan , PaulDHovland ,CostinIancu ,SriramKrishnamoorthy,Pastacio Laguna,Richard A Lethin,Koushik Sen,Stephen FSiegel,Armando Solar- Lezama,HPC正确性峰会报告,2017年1月25日[4]放大图片作者:Victoria Stodden,Matthew S. Krafczyk,评估再现性:HPC环境中计算不确定性的天体物理学示例,收录于:会议记录2018年SC'18第一届HPC可复制、可定制和可移植工作流研讨会[5]Dylan Chapp,Travis Johnston,Michela Taufer,关于通过在极端规模下智能运行时选择归约算法来实现可再现的数值精度的需求,在:2015年IEEE国际集群计算会议论文集,CLUSTER 2015,芝加哥,IL,美国,2015年9月8日至11日,2015年,pp. 166-175。[6]Saba Alimadadi,Ali Mesbah,Karthik Pattabiraman,从执行跟踪中推断层次图案,在:2018年IEEE/ACM第40届软件工程国际会议论文集,ICSE,IEEE,2018年,pp. 776-787。[7]Eunsoo Seo,Mohammad Maifi Hasan Khan,Prasant Mohapatra,Jiawei Han,Tarek F. Abdelzaher,Exposing complex bug-triggering conditions in distributedsystems via graph mining,in:Proceedings of the International Conference onParallel Processing,ICPP 2011,Taipei,Taiwan,September 13 186-195.[8]Bernd Mohr,PMPI Tools,in:Encyclopedia of Parallel Computing, SpringerUS,Boston,MA,2011,pp. 1570-1575年。[9]Jeremiah Wilke,结构仿真工具包(SST)DUMPI跟踪库,https://github.com/sstsimulator/sst-dumpi网站。[10] Kae Suarez,Michela Taufer,Pluto:A PMPI tool for Tracing Non-blocking MPIEvents,https://github.com/TauferLab/Pluto.[11] Dylan Chapp,Patrick Bell,Kae Suarez,Michela Taufer,CSMPI:一个PMPI工具对于跟踪MPI函数Callstacks,请访问https://github.com/TauferLab/CSMPI/tree/master。[12] Jason Gait,并发程序中的探针效应,Softw。- 实际有效期16(3)(1986)225-233。[13] Martin Schulz,Bronis R. De Supinski,MPI工具互操作性的灵活和动态基础设施,2 0 0 6 年国际会议论文集并行处理,ICPP'06,IEEE,2006,pp. 193-202.[14] Martin Schulz,Bronis R. De Supinski,P.M.MPI工具:整体大于其部分之和,在:2007年ACM/IEEE超级计算会议论文集,2007年,pp. 1-10。[15] Jongsoo Park,Mikhail Smelyanskiy,Ulrike Meier Yang,Dheevatsa Mudigere,Pradeep Dubey,基于多核分布式并行系统优化的高性能代数多重网格求解器,在:国际会议论文集高性能计算、网络、存储和分析会议,2015年,pp。1-12号。[16] Nikhil Jain , Abhinav Bhatele , Chatterbug 通 信 代 理 应 用 程 序 套 件 ,https://github.com/LLNL/chatterbug。LLNL-CODE-756471.[17] Franck Cappello,Amina Guermouche,Marc Snir,并行HPC应用中的通信确定性,第19届国际会议论文集计算机通信和网络,IEEE,2010年,pp。1-8号。[18] 马成玉,廖中寿,蛋白质相互作用网络比对的研究进展:从路径比较到全局比对,计算机科学,2000。结构。Biotechnol. J.18(2020)2647.[19] Dylan Chapp,Kae Suarez,Michela Taufer,dumpi_to_graph:将执行跟踪转换为图形表示的工具,https://github.com/TauferLab/dumpi_to_graph.[20] Dieter Kranzlmüller,大规模并行程序的事件图分析(Ph.D.),2000年。P. 贝尔,K。Suarez,D.Chapp等人软件影响10(2021)1001516[21] 王晓刚,大规模并行程序的事件图分析,北京,2000。[22] Nino Shervashidze,Pascal Schweitzer,Erik Jan van Leeuwen,Kurt Mehlhorn,Karsten M Borgwardt , Weisfeiler-lehman graph kernels , J. Mach. 学 习 . 第 12(Sep)(2011)号 决 议第 2539-2561段。[23] Mahito Sugiyama , M. Elisabetta Ghisu , Felipe Llinares-López , KarstenBorgwardt , graphkernels : R 和 python packages for graph comparison ,Bioinformatics 34(3)(2017)530-532。[24] Swarnendu Ghosh , Nibaran Das , Teresa Gonçalves , Paulo Mesresma ,MahantapasKundu,图内核二十年的旅程,Comp. Sci.修订版27(2018)88-111。[25] Dylan Chapp , Nigel Tan , Sanjukta Bhowmick , Michela Taufer , Identifyingdegreeand sources of non-determinism in MPI applications via graph kernels,IEEETrans. Parallel Distrib. 32(12)(2021)2936-2952。[26] Kento Sato, Dong H Ahn,Kazacio Laguna, Gregory L Lee, Martin Schulz,Christo-pher M Chambreau , Noise injection techniques to expose intense andunintended message races , in : Proceedings of the 22Nd ACM SIGPLANSymposium on Principles and Practice of Parallel Programming,2017,pp.89比101[27] Robert D. Falgout,Ulrike Meier Yang,HYPRE:高性能预处理器库,在:计算科学国际会议论文集,Springer,2002,pp. 632-641[28] 佐 藤 健 人 , 东 豪 。 放 大 图 片 创 作 者 : Ahn. Lee, Martin Schulz , ClockDeltacompressionforscalable order-replayofnon-deterministic parallelappli-cations , in : ProceedingsoftheInternationalConferenceforHighPerformanceComputing, Networking,Storage and Analysis, 2015, pp. 1-12号。[29] Philippe Langlois、Rafife Nheili、Christophe Denis,恢复流体动力学模拟中的数值再现,收录于:2016年IEEE第23届计算机算术研讨会论文集,ARITH,IEEE,2016年,pp. 63比70[30] MichelaTaufer , OmarPadron , PhilipSaponaro , SandeepPatel ,Improvingnumericalreproducibilityandstabilityinlarge-scalenumericalsimulation on GPU,in:Proceedings of the 2010 IEEE International Symposiumon Parallel& DistributedProcessing,IPDPS,IEEE,2010,pp. 一比九[31] Greg L Bryan,Michael L Norman,Brian W O'Shea,Tom Abel,John H Wise,Matthew J Turk,Daniel R Reynolds,David C Collins,Peng Wang,Samuel WSkillman, et al.,Enzo: an adaptive mesh refinement code for astrophysics,in:The Astrophysical Journal Supplement Series,211,(2)2014,p. 十九岁[32] 考特尼湾作者:Richard F. Barrett,启用自适应网格细化性能的易处理探索,在:2015年IEEE集群计算国际会议论文集,IEEE,2015年,pp. 746-752[33] Nick Gentile , Brian Miller , Monte Carlo Benchmark ( MCB ) , https ://computing. llnl.gov/projects/co-design/mcb网站。LLNL-CODE-507091.
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 黑板风格计算机毕业答辩PPT模板下载
- CodeSandbox实现ListView快速创建指南
- Node.js脚本实现WXR文件到Postgres数据库帖子导入
- 清新简约创意三角毕业论文答辩PPT模板
- DISCORD-JS-CRUD:提升 Discord 机器人开发体验
- Node.js v4.3.2版本Linux ARM64平台运行时环境发布
- SQLight:C++11编写的轻量级MySQL客户端
- 计算机专业毕业论文答辩PPT模板
- Wireshark网络抓包工具的使用与数据包解析
- Wild Match Map: JavaScript中实现通配符映射与事件绑定
- 毕业答辩利器:蝶恋花毕业设计PPT模板
- Node.js深度解析:高性能Web服务器与实时应用构建
- 掌握深度图技术:游戏开发中的绚丽应用案例
- Dart语言的HTTP扩展包功能详解
- MoonMaker: 投资组合加固神器,助力$GME投资者登月
- 计算机毕业设计答辩PPT模板下载
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功