没有合适的资源?快使用搜索试试~ 我知道了~
软件X 12(2020)100517原始软件出版物torcpy:在Python中支持任务并行体育Hadjidoukas,A.Bartezzaghi,F.沙伊德格河伊斯特拉泰角Bekas1,A.C.I.Malossi瑞士苏黎世IBM研究院ar t i cl e i nf o文章历史记录:收到2020年收到修订版2020年4月30日接受2020年关键词:并行PythonMPI多线程a b st ra ct基于任务的并行性已经被确立为代码并行化的主要形式之一,其中异步任务被启动并分布在本地机器的处理单元上,集群或超级计算机。任务可以完全解耦,对应于一组独立的作业,或者是处理任务结果的迭代算法的一部分并推动下一步。典型的用例包括将相同的函数应用于不同的数据,参数搜索和数值优化中使用的算法以及贝叶斯不确定性量化。在这项工作中,我们介绍了torcpy,一个与平台无关的自适应负载平衡库,它编排了任务的异步执行,表示为带有参数的可调用项,共享和分布式内存平台。该库在MPI和多线程之上实现,并为嵌套循环和映射函数提供轻量级支持。使用代表性的应用程序的实验结果表明,建议的Python包的灵活性和效率。©2020 Elsevier B.V.这是一个在CC BY-NC-ND许可下的开放获取文章(http://creativecommons.org/licenses/by-nc-nd/4.0/)中找到。代码元数据当前代码版本v0.1.1用于此代码版本的代码/存储库的永久链接https://github.com/ElsevierSoftwareX/SOFTX_2020_9Code Ocean computecapsulehttps://codeocean.com/capsule/9000816/法律代码许可证EPL 1.0使用git的代码版本控制系统软件代码语言、工具和服务使用Python3、MPI编译要求,操作环境依赖性mpi4py与兼容的MPI实现,termcolor,coloredlogs,pytest,numpy,termcolor,cma,枕头链接到开发人员文档/手册https://github.com/IBM/torc_py问题支持电子邮件phadjido@gmail.com1. 动机和意义在当代并行计算平台中,硬件和软件的异构性日益增加,任务并行化成为利用其分层体系结构的一种自然方式异步任务,无论是完全解耦的还是算法的一部分,都可以在不同的并行级别上产生,并最终由可用的处理单元执行由于需要显式通信,消息传递接口*通讯作者。电子邮件地址:hat@zurich.ibm.com(P.E. Hadjidoukas)。1目前隶属机构:Citadel Securities,LLC。https://doi.org/10.1016/j.softx.2020.100517(MPI)仍然是分布式存储系统的主要编程模型。与此同时,Python的使用不断增加,主要是作为一个方便的平台,用于开发通过高级接口连接到其他语言和高性能计算(HPC)库的应用程序和算法结合MPI和Python的一个典型应用案例是神经网络的分布式训练,如Keras [5]和PyTorch [6]等框架中实现的。然而,这种组合并不存在于支持基于任务的并行性的可用Python库中。 此外,这些库中的大多数缺乏对多级并行的有效甚至基本的支持,并且没有导出用于顺序、共享内存和分布式内存执行的统一运行时环境。2352-7110/©2020 Elsevier B. V.这是CC BY-NC-ND许可证下的开放获取文章(http://creativecommons.org/licenses/by-nc-nd/4.0/)。可在ScienceDirect上获得目录列表SoftwareX期刊主页:www.elsevier.com/locate/softx2体育 Hadjidoukas,A. Bartezzaghi,F. Scheidegger等人/ SoftwareX 12(2020)100517+相反,它们依赖于处理器分区、主进程和工作进程之间的区分以及利用代理服务器来处理任务调度等技术。背景在Python中,基于任务的并行性的一个典型例子可以在输入数据列表上顺序执行相同的函数(工作)data =range(10)r e s u l ts =[]对于数据中的x:y = work(x)r e s u l ts.append(y)此外,for循环可以用内置的map替换作用:数据= 范围(10)r e s u l ts =l i s t(map(work,data))Python提供了两种用于表示和执行并行性的内置解决方案:多处理[7]和并发[8]包裹。多进程包支持单节点并行多进程,从而避免了全局解释器锁的影响基于任务的并行性可以通过apply_parallelc函数或Pool对象的更方便的map函数来支持,该函数将一组多个输入值分布在可用进程中,然后将相同的函数并行应用于这些值。下面描述了一个使用apply_applyc函数将任务提交到4个进程池从多处理导入池数据=范围(10)p =池(4)任务=[]为我在数据类型:t = p。apply_pixec(work,(i,))任务。append(t)为不在工作:print(t . return()通过使用Pool对象提供的map函数,可以大大简化代码,代码变得非常类似于其顺序版本如前所示。从多处理导入池数据=范围(10)P =宾馆(4)r e s u l ts =l i s t(p.map(work,data)concurrent.futures模块最初是在Python 3.2中引入的,根据Python增强提案(PEP)3148 [9],它为任务的异步执行提供了一个简 单 的 接 口 。 此 接 口 由 两 种 类 型 的 执 行 程 序 支 持 :ThreadPoolExecutor和ProcessPoolExecutor类,它们分别基于线程和进程。任务并行性可以用submit/wait函数或parallelmap函数表示 , 如 以 下 两 个 示 例 代 码 所 示 。 在 这 两 种 情 况 下 ,ProcessPoolExecutor都可以替换为ThreadPoolExecutor,从而允许由多个线程而不是进程执行任务。我使用map()函数:数据= 范围(10)p=同时进行。 期货 进程池执行器(max_workers=4)r e s ul ts =l is t(p.map(work,data)贡献不幸的是,这两个模块的目标单节点多核系统,不能用于高性能的计算环境,如集群和超级计算机。在本文中,我们介绍torcpy,一个平台无关的自适应负载平衡库,协调共享和分布式内存平台上的任务调度作为一个开源的任务库,torcpy旨在提供一个并行计算框架,它可以:• 提供了一种统一的方法,用于在共享和分布式内存平台上表达和执行• 以一种对用户透明的方式在内部利用MPI,但也允许在应用程序级别• 为并行嵌套循环和映射函数• 支持所有并行• 通过一个简单的Python包torcpy 导 出 一 个 与 PEP 3148 类 似 的 接 口 。 前 面 的 任 务(futures)可以通过submit和wait调用生成并加入.提供了一个并行映射函数,而导出的spmd函数允许切换到MPI本机支持的典型该 库 是 在 MPI 和 多 线 程 之 上 实 现 的 , 它 可 以 被 认 为 是TORCC/C++运行时库的Python实现[10]。TORC已经广泛用于小型和大型HPC环境中的一系列并行应用,例如:数值微分[11,12],模拟模型中不确定性的量化[13],拟合原子间势的数值优化[14]和人工游泳者的多目标优化[15]。同样的逻辑也被用在了H4U不确定性量化和优化包[16]和HOMPI混合编程框架[17]的核心。TORC作为XNUMX4U的一部分,已广泛用于小型和大型HPC环境,例如苏黎世联邦理工学院的Euler多核集群和瑞士国家超级计算机中心(CSCS)的Piz Daint GPU超级计算机。例如,过渡马尔可夫链蒙特卡罗(TMCMC)方法[16,18]的基于TOC的实现在运行混合MPI GPU分子模拟代码的Piz Daint的 1024个计算节点上实现了超过90%的总体并行效率,其中对于不同的相互作用参数,模拟之间的求解时间高度可变。在所有这些情况下,任务调用外部脚本,该脚本接收函数参数作为输入,运行模拟并将结果返回给任务。由于核心计算工作在任务并行算法之外执行,因此很明显,整体性能不受算法的C/C++或Python实现以及相应任务库(TORC或torcpy)的使用的相关工作。 有许多Python包和框架可以在各种计算平台上实现基于任务的并行性的编排和执行。这些软件包的简要总结如表1所示。如前所述,在单节点多核系统上,Python提供了两种本地解决方案:多处理和并发.futures模块。mpi4py的futures包在MPI编程模型之上提供了futures的扩展该包遵循典型的主进程不参与计算,因此,同时导入。期货数据=范围(10)p =并发。期货进程池执行器(max_workers=4)任务= []为我在数据类型:任务append(p.submit(work,i))concurrently.期货 wait(tasks)fortin tasks:print(t . r es u l t())体育 Hadjidoukas,A. Bartezzaghi,F. Scheidegger等人/ SoftwareX 12(2020)1005173表1基于任务的并行性的Python框架摘要框架PEP 3148集群嵌套并行MPI SPMD多处理不不不不期货是否mpi4py.futures是是否否DTM(deap 0. 9. 2)否是低效(线程)是SCOOP(0. 7. 1. 1)是(协程)否解析(0. 9. 0)否是限制(分区)否Celery(4. 2. 0)否是否否Dask(1.2.2)否是效 率 低 下 ( 更 多 工 人 ) 否PyCOMPS(2.6)否是是否torcpy(0.1)是不支持并行和MPI SPMD代码(例如集体MPI操作)。DTM [19]是一个过时的基于MPI的框架,是DEAP包[20]的一部 分 , 支 持 基 于 任 务 的 并 行 性 。 任 务 派 生 可 以 通 过apply_pandec/waitAll或map调用来执行,与mpi 4py future不同,DTM应用程序的主进程DTM还通过内核级线程提供对嵌套任务的支持。由于线程安全问题,MPI支持在DEAP包的最新版本(>0.9.2 )中被删除,DTM最终停止使用。此外, DTM 被SCOOP [21,22]取代,SCOOP遵循更基于分布式的方法,而不依赖MPI。由于轻量级协程,SCOOP有效地支持嵌套任务。通信基于套接字或消息队列(代理),而全局数据通过容器支持。Parsl [4,23]允许通过针对低延迟,高吞吐量或极端规模用例定制的不同expert在各种计算平台上可扩展地执行任务并行Parsl中的并行性是用Python装饰器来表示的管理器与工作器之间的通信基于MPI,而管理器与交换机之间的通信则通过消息队列来完成,交换机中部署了任务队列。MPI进程可以划分为多个组,其中等级0成为管理者,其余进程作为工作者。Parsl对嵌套并行性提供了有限的支持此外,不支持MPI SPMD代码的直接支持。Celery [24]和Dask [25,26]都是主要针对云计算环境的框架两者都是基于消息队列的,并遵循客户端在Celery中,客户端和任务代码是解耦的,并且部分支持嵌套任务,因为它们可以提交执行,但没有等待操作可用。在Dask中,任务的嵌套仅通过额外的工作线程来支持。最后,PyCOMPSs [3,27]是COMPSs的Python绑定,这是一个最先进的HPC框架,支持多种编程语言。核心运行时是用Java实现的,允许包含MPI代码的任务,但不支持在任务并行Python代码中直接注入MPI SPMD代码2. 软件描述基于torcpy的应用程序由多个MPI进程组成,这些进程空闲工作进程提取队列的任务,首先访问本地队列集,如果本地队列集为空,则访问远程驻留在其他MPI进程中的队列集。与任务和数据管理相关的远程操作是通过显式但完全透明的方式执行的Fig. 1. torcpy库的并行架构。对于用户,消息发送到专用服务器线程,由每个MPI进程使用。如果应用程序作为纯多线程代码运行,即具有一个MPI进程和多个torcpy的软件架构如图所示。 1,假设每个节点有一个MPI进程。在一般情况下,计算节点可以执行多个MPI进程,因此,术语节点和进程可以互换使用2.1. 软件构架torcpy构建在mpi4py包之上,并使用了线程和队列模块。任务被实例化为Python字典,这比对象化产生更少的开销。任务函数的结果透明地存储在产生任务的MPI进程上的任务描述符(future)中。根据PEP 3148,结果可以作为task.result()访问。类似地,输入参数可以作为task.input()访问。所有远程操作都通过服务器线程异步执行。此线程负责:• 将传入任务插入到进程• 接收已完成的任务及其结果• 服务任务窃取请求空闲工作线程总是首先尝试从最高级别的非空本地队列中提取工作。如果没有找到工作,它会尝试从远程队列中窃取任务。具体地,它根据等级向下一个MPI进程的服务器线程发送同步窃取请求,并继续直到返回可用任务或访问所有进程。服务器线程从最低级别的本地队列开始搜索工作,对于最内层的并行任务默认任务生成策略在工作者之间循环分发第一级任务与任务窃取相结合,此策略支持粗粒度任务的窃取和更深层次并行性的本地执行2.2. 软件功能torcpy导出一个应用程序编程接口(API),其中包括与定义4体育 Hadjidoukas,A. Bartezzaghi,F. Scheidegger等人/ SoftwareX 12(2020)100517−PEP 3184。此外,它还提供了一些例程,允许用户设置库,控制执行模式(此外,一些环境变量可用于指定每个进程的工作线程数、任务窃取机制的初始状态以及空闲线程释放处理器的时间下面是API最重要部分的概述2.2.1. 库例程• start(f):启动库并在rank为0的进程上启动函数f()作为主要应用程序任务。当f()完成时,它关闭库。它是一个必须在main中调用的集合函数。• submit(f,*args,qid=-1,callback=None,**kwargs):提交一个新任务,它对应于异步执行带有输入参数args的函数f()。任务被提交给具有全局标识符qid的工作线程。如果qid等于1,则执行任务到工作者的当任务完成并且其结果已返回到该节点时,在派生任务的等级上调用回调函数• map(f,*seq,chunksize=1):对参数序列(列表)执行函数f()。 它返回一个包含所有任务结果的列表。• wait(tasks=None):当前任务等待所有子任务完成。底层工作线程被释放,可以执行其他任务。• spmd(f,*args):在所有MPI进程上执行函数f()。它允许从主工作者到SPMD执行模式的动态切换2.2.2. 环境变量• TORCPY_WORKERS(整数):每个MPI处理器使用的工作线程数(默认值:1)• TORCPY_STEALING(boolean):确定是否启用节点间任务窃取。(默认值:• TORCPY_SERVER_YIELDTIME(float):一个空闲的服务器线程在释放处理器时会休眠多少(默认值:0.01)• TORCPY_WORKER_YIELDTIME(float):一个空闲的工作线程将在释放进程时休眠多少(默认值:0.01)torcpy的性能最初是使用mpi4py.futures包中现有的基准代码( 如作 为 run_julia.py 和 perf_primes.py ) 。 我 们 观 察 到 阻 塞MPI_Recv调用必须由服务器线程避免。相反,非阻塞调用与处理器让步相结合是必不可少的,因为服务器线程允许工作线程更快地进行。但是,如果有多个工作线程执行Python字节码,性能仍然会受到全局解释器锁(GIL)的影响。3. 说明性实例清单1显示了一个常用的并行化示例递归Fibonacci,其中通过递归地产生两个任务并等待其结果来利用几个并行级别。代码在某个深度之后顺序执行,而不会创建过多的任务。该示例演示了对递归并行的支持和利用。因此,它不会重用具有相同输入参数的函数调用的结果,而是创建第二个任务(task2),而不是直接调用函数。进口 托 尔 皮deff i b(n):i fn == 0:r es u l t =零e l i fn == 1:r es u l t= 1个否则:n_1 = n 1n_2 = n 2i fn 30:结果1 = f i b(n_1)结果2= f i b(n_2)r es u l t= 结果1 +结果2否则:task1 = torcpy。submit(f ib,n_1)task2 = torcpy . submit ( f ib, n_2 )torcpy . wait()r es u l t = task1.results()+task2.r es u l t()返回 r es u l t定义main():n = 35r es u l t = f i b(n)print(“f i b({})={}“.格式(n,r es u l t))i f__name__ ==“__main__“:清单1:递归斐波那契第二个示例(清单2)演示了MPI SPMD代码在任务并行应用程 序 中 的 用 法 全 局 数 组 A 由 MPI 进 程 上 的 主 应 用 程 序 任 务(main)初始化0. 接下来,spmd函数在所有MPI进程触发bcast_task的执行,从而切换到SPMD执行模型,并允许使用mpi4py的Bcast进行直接数据广播importnumpy从 mpi4py 导入MPI进口托尔皮N = 3一 = 麻木。零(N,dtype=numpy。f loat 64)defbcast_task(root):全球一MPI . COMM_WORLD#广播一从排名0通信Bcast([ A, MPI。DOUBLE],root=root)defwork():全球一print(“node: { }: A={}“. 格式(torcpy . node_id(),(A))定义main():全球一#主要任务我不知道阵列A对排名0因为我在 range(0,N):A[ i ]= 100i#开关关于SPMDtorcpy。spmd(bcast_task,torcpy。node_id())#辛格勒初级任务在这里继续i f__name__ ==“__main__“:torcpy。s t a r t(main)清单2:切换到SPMD执行模式4. 绩效评价深度学习工作负载的典型预处理阶段包括将原始图像的数据集转换为HDF5格式的单个这些图像是按目录组织的,其中每个子文件夹的名称表示所包含的体育 Hadjidoukas,A. Bartezzaghi,F. Scheidegger等人/ SoftwareX 12(2020)1005175+图二、在 两个IBM Power S822LC计算节点上的并行预处理性能。图像. 对于每个图像,打开文件并将二进制数据加载到缓冲区(numpy数组)。如果图像以JPEG格式存储,则这些操作包括数据解压缩。然后,图像被调整大小和重新缩放,并且还可以应用附加的预处理最后,将结果写入HDF5文件,我们将在深度学习的训练阶段使用defprocess_train_image(i,target_dim):全球阅读器、管道#加载的图像和i t s拉贝尔IM,拉贝尔=读者 get_train_image(i)#适用预处理fil t er sim = 管道 f i l t e r(im)#r es i z e因此DX=image_to_4d_tensor(im,target_dim)dy = l a bel#返回r es u l t s返回dx,dy顺序for循环的并行化是通过map函数执行的,使用32的块大小,以减少派生任务的数量。seq_i=range(n_train)seq_t=[ target_dim ]科隆火车#巴阿勒块大小映射tas k _ r esu l ts=torcpy。map(process_train_image,块大小,seq_i,seq_t)#写的r es u l t s到的 HDF5数据集我=零fortin ta s k _ r esu l ts:dx,dy = tdataset_x [ i,:] = dx dataset_y[ i ] = dy我= i +1Imagenet [28]是一个非常大的数据集,包含1000个类,每个类包含1300张JPEG格式的图像。我们对Imagenet数据集的前20个训练类的图像进行预处理。我们在两个IBM2 Power S822 LC(8335-GTA)[29]计算节点上进行实验每个节点都有两个POWER8处理器插槽,配备256GB RAM,10个核心,每个核心有8个硬件线程和8MB L3缓存。2IBM、IBM徽标和ibm.com是商标或注册商标国际商业机器公司,在全球多个司法管辖区注册。其他产品和服务名称可能是IBM或其他公司的商标。 IBM商标的最新列表可在Web上获得,网址为http://www.ibm.com/legal/copytrade。shtml。软件配置包括Python 3.6.9 、 mpi 4py/3.0.1 和IBM Spectrum MPI10.3.0。使用NR MPI进程执行基准测试的命令行,每个进程都有TORCPY_WORKERS工作线程,如下所示:mpirun -n$NR-x TORCPY_WORKERS=$NW--bind-to core --map-by socket\--mca btlself,tcp python benchmark.py测量包括用于产生并行、并行执行预处理和等待完成所有任务的时间,即,把结果收集回来 图 2,我们观察到,应用程序表现出良好的伸缩性,并达到约62%的效率时,每个工作线程的40个进程使用。性能不随内核数量线性扩展,因为图像解压缩和处理会给节点的内存子系统带来压力。我们还观察到,多线程进一步提高了性能,允许最大达到31.6倍的加速比(40个进程,4个线程)。5. 影响Python越来越受欢迎,再加上它在机器学习中的广泛使用,强烈地推动了torcpy的引入,torcpy是一个高性能任务库的纯Python实现。这一动机还得到了任务并行库的缺乏的支持:支持PEP 3148的未来API,允许通过将任务与实际工作者解耦来实现任务的任意嵌套,利用MPI,但也能够直接集成MPI代码,通过任务窃取提供透明的负载平衡,并自动适应底层执行环境。6. 结论torcpy是一个Python库,它使用多线程和MPI来支持共享和分布式内存平台上基于任务的多级并行。它提供了透明的数据移动和负载平衡,隐藏了与用户的显式通信的细节。相同的Python脚本可以用多个线程、进程或混合模式执行,类似于MPI X编程模型。该库在内部利用MPI,并通过基于任务的轻量级功能对其进行扩展。此外,它与MPI正交,允许动态切换到SPMD执行模式,从而集成遗留MPI代码。6体育 Hadjidoukas,A. Bartezzaghi,F. Scheidegger等人/ SoftwareX 12(2020)100517我们目前的工作重点是改进PEP 3148的兼容性和支持异常处理的任务功能。此外,我们的目标是在GPU集群上高效并行执行中小型深度学习训练任务。竞合利益作者声明,他们没有已知的竞争性财务利益或个人关系,可能会影响本文报告的工作确认这项工作已获得欧盟地平线2020研究和创新计划的资助引用[1][1] Vincent P,Witherden F,Vermeire B,Park JS,Iyer A.用千万亿次的Python实现绿色航空。在:SC '16:高性能计算,网络,存储和分析国际会议的会议记录。IEEE; 2016,p. 1比11[2]Conejero J,Ramon-Cortes C,Serradell K,Badia RM.利用pycompss增强大气沙尘预报。2018年IEEE第14届电子科学国际会议( E-Science)。2018年,第四六四比七四[3]Tejedor E,Becerra Y,Alomar G,Queralt A,Badia RM,Torres J,Cortes T,Labelor J. PyCOMPSs:Python中的并行计算工作流。 Int JHigh PerformanceComput Appl2017;31(1):66-82.[4][10]杨文,李文. Parsl:Python中的普适并行编程。第28届ACM高性能并行与分布式计算国际研讨会(HPDC)。 HPDC '19,2019,p. 25比36[5]Keras:Python深度学习库。https://keras.io/网站。[6]PyTorch:从研究到生产https://pytorch.org/网站。[7]Python标准库,Python多处理。https://docs.python.org/3/library/multiprocessing.html。[8]Python标准库,Python concurrent.futures. https://docs.python的网站。org/3/library/concurrent.futures.html。[9] PEP 3148 -期货-异步执行计算。网址://www. python.org/dev/peps/pep-3148/网站。[10]Hadjidoukas PE,Lappas E,Dimakopoulos VV.用于平台无关任务并行的运行 时 库 。 第 20 届 并 行 、 分 布 式 和 基 于 网 络 的 处 理 ( PDP ) 国 际 会 议 。Euromicro;2012,p. 229比36[11]Voglis C,Hadjidoukas PE,Lagaris IE,Papageorgiou DG.一个利用并行体系结构的数值微分库。Comput Phys Comm2009;180(8):1404-15.[12]Hadjidoukas PE,Angelikopoulos P,Voglis C,Papageorgiou DG,LagarisIE. NDL-v2.0:用于并行体系结构的数值微分库的新版本。Comput PhysComm2014;185(7):2217-9.[13]HadjidoukasPE , AngelikopoulosP , RossinelliD , AlexeevC ,Papadimitriou C,Koumoutsakos P.颗粒材料离散元模拟的贝叶斯不确定性量化和传播。计算方法应用机械工程2014;282:218-38.[14]Voglis C,Hadjidoukas PE,Papageorgiou DG,Lagaris IE.一种拟合原子间相互作用势的并行混合优化算法。Appl Soft Comput2013;13(12):4481-92.[15]Verma S,Hadjidoukas PE,Wirth P,Koumoutsakos P.人工游泳者的多目标优化。 In:2017 IEEE congress on evolutionarycomputation, CEC 2017 ,Donostia,San Francisco,Spain. 2017年,p.1037-46[16]吴伟杰,李伟杰. 4U:一个高性能计算框架,用于复杂模型的贝叶斯不确定性量化。J Comput Phys 2015;284:1[17]Dimakopoulos VV,Hadjidoukas PE. HOMPI:一个混合编程框架,用于表达和部署基于任务的并行性。在:欧洲标准2011并行处理。2011年,第14比26[18]J. Y.程杰,陈永春.用于贝叶斯模型更新、模型类选择和模型平均的过渡马尔可夫链蒙特卡罗方法。 JEng Mech2007;133(7):816-32.[19]DTM,http://deap.gel.ulaval.ca/doc/0.9/api/dtm.html。[20]Fortin F-A , De Rainville F-M , Gardner M-A , Parizeau M , Gagné C.DEAP:进化算法变得简单。J Mach Learn Res2012;13:2171-5.[21]SCOOP,https://github.com/soravux/scoop/.[22]放大图片作者:J.一旦你挖,不需要叉。2014年极端科学与工程发现环境年会。ACM; 2014,p. 六十[23]Parsl:Python中的生产性并行编程。https://github.com/www.example.com[24]Celery:分布式任务队列。https://github.com/celery/celery网站。[25]Dask,https://github.com/dask/dask.[26]罗克林Dask:使用分块算法和任务调度的并行计算。第14届Python in Science会议2015年,p.130-6[27]PyCOMPSs,https://pypi.org/project/pycompss/。[28]邓军,董伟,苏彻R,李林杰,李凯,李飞飞。ImageNet:一个大规模的分层图像数据库。在:CVPR 09。2009年[29]Caldeira A , E. KM , Saverimuthu G , Vearner KC. IBM Power SystemsS822LC技术概述和介绍。IBM红皮书; 2015.
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功