ePython: An implementation of Python for the many-core Epiphany coprocessor
Epiphany是一种多核、低功耗、低片上存储器架构,可以非常便宜地访问多个并行内核,这对HPC教育和原型设计非常有益。这些架构的极低功耗特性也意味着它们在未来的HPC机器中有可能使用,但是由于相关的复杂性和支持工具的不成熟性,在对它们进行编程时存在很高的准入门槛。在本文中,我们介绍了我们在ePython上的工作,ePython是用于Epiphany和类似众核协处理器的Python子集。由于每个内核的片上内存有限,我们开发了一个新的Python解释器,再加上对并行性的额外支持,这意味着新手可以利用Python在Epiphany上快速编写并行代码,并使用较小规模的并行机探索HPC的概念。Python的高级性质为Epiphany开辟了新的可能性,我们从可编程性和性能的角度研究了计算密集型Gauss-Seidel代码,讨论了在主机CPU和Epiphany上运行Python混合,以及CPU上的完整Python解释器和Epyphany上的ePython之间的互操作性。这项工作的结果是支持在Epiphany上开发Python,它可以应用于其他类似的架构,社区已经开始采用和使用这些架构来探索并行和HPC的概念。
2020-10-28 cs.DC cs.PL
Extended Abstract: Productive Parallel Programming with Parsl
Parsl是一个Python的并行编程库,旨在简化程序中的并行性,并在任意并行和分布式计算系统上实现这种并行性。Parsl依赖于开发人员对Python函数进行注释(包装Python或外部应用程序),以表明这些函数可以并发执行。然后,开发人员可以通过数据交换将功能链接在一起。Parsl建立一个动态依赖关系图,并在解决依赖关系时发送任务,以便在连接的资源上执行。Parsl的运行时系统允许使用不同的计算资源,从笔记本电脑到超级计算机,而无需修改Parsl程序。
2022-05-04 cs.DC
Python Workflows on HPC Systems
Fraunhofer ITWM(弗劳恩霍夫工业数学研究所);Offenburg University(奥芬堡大学)
计算密集型机器学习和数据分析方法最近的成功和广泛应用促进了Python程序设计语言在HPC系统上的使用。虽然Python为用户提供了许多优势,但它的设计并没有专注于多用户环境或并行编程,这使得在HPC系统上维护稳定和安全的Python工作流变得非常具有挑战性。在本文中,我们分析了在HPC集群上使用Python所引发的关键问题,并概述了有效维护多用户Python软件环境、保护和限制Python作业资源以及包含Python进程的适当解决方案,同时重点关注在GPU集群上运行的深度学习应用程序。
2020-12-01 cs.DC cs.LG
Parallel Astronomical Data Processing with Python: Recipes for multicore machines
高性能计算已经应用于天体物理研究的各个领域。但大多数都是在大规模并行系统(超级计算机)或图形处理单元集群上实现的。随着近十年来多核处理器的出现,许多串行软件代码已经以并行模式重新实现,以充分利用这些处理器的潜力。在本文中,我们提出了多核机器的天文数据处理的并行处理配方。目标受众是使用Python作为首选脚本语言的天文学家,他们可能使用PyRAF/IRAF进行数据处理。在三种不同类型的多核处理器上对不同复杂度的三个问题进行了基准测试,以证明并行数据处理任务在执行时间方面的好处。Python中的原生多处理模块使得实现并行代码成为一项相对简单的任务。我们还比较了三种多处理方法-池/映射,进程/队列和并行Python。我们的测试代码是免费提供的,可以从我们的网站下载。
2013-06-03 astro-ph.IM cs.DC
Advanced Python Performance Monitoring with Score-P
在过去的几年里,Python在科学界变得更加突出,现在用于模拟,机器学习和数据分析。所有这些任务都得益于并行和卸载提供的额外计算能力。在高性能计算(HPC)领域,我们可以回顾几十年来在核心、节点或节点间级别利用不同级别并行性以及利用加速器的经验。通过使用性能分析工具来调查所有这些级别的并行性,我们可以优化应用程序以获得前所未有的性能。不幸的是,标准Python性能分析工具无法处理高度并行的程序。由于这种软件的开发是复杂的,容易出错,我们展示了一个易于使用的解决方案,基于现有的工具基础设施的性能分析。在本文中,我们描述了如何应用所建立的插装框架\scorep来跟踪Python应用程序。最后,我们研究了用户可以预期的仪器他们的应用程序的开销。
2021-10-25 cs.DC cs.PF cs.SE
A Python Extension for the Massively Parallel Multiphysics Simulation Framework waLBerla
我们提出了一个Python扩展的大规模并行HPC仿真工具包waLBerla。waLBerla是一个基于模板的算法框架,在块结构网格上运行,主要应用领域是使用格子玻尔兹曼方法在复杂几何形状中进行流体模拟。精心的性能工程可实现出色的节点性能和超过400,000个内核的良好可扩展性。为了提高框架的可用性和灵活性,开发了一个Python接口。Python扩展用于仿真管道的所有阶段:它们简化和自动化场景设置,评估和绘图。我们展示了我们的Python接口如何优于现有的基于文本文件的配置机制,提供了物理量的自动无量纲化和复杂参数依赖关系的处理等功能。此外,Python用于在模拟运行时处理和评估结果,从而导致输出文件更小,并且可以根据当前模拟状态调整参数。C++数据结构被导出,从而可以无缝地连接到其他数值Python库。Python的表达能力和C++的性能使得以较低的时间工作量开发高效的代码成为可能。
2015-11-23 cs.DC cs.MS
PTRAIL -- A python package for parallel trajectory data preprocessing
Memorial University(纪念大学);Universidade Federal de Santa Catarina (UFSC)(圣卡塔琳娜联邦大学);National Research Council of Italy(意大利国家研究委员会)
轨迹数据表示随时间改变其在空间中的位置的对象的轨迹。这类数据的处理和分析非常复杂,因为它通常是大量产生的,往往容易产生由地理定位设备,人类错误处理或区域覆盖范围限制产生的错误。因此,需要专门针对预处理轨迹数据而定制的软件。在这项工作中,我们提出了PTRAIL,一个Python包提供了几个轨迹预处理步骤,包括过滤,特征提取,插值。PTRAIL使用并行计算和向量化,适用于大型数据集,与其他python库相比速度更快。
2021-08-26 cs.AI cs.DC
Virtual Garbage Collector (VGC): A Zone-Based Garbage Collection Architecture for Python's Parallel Runtime
VGC通过基于区域的内存管理和分区执行,提高Python运行时的可预测性和可扩展性。
2026-01-01 cs.DC cs.PL
Evaluating performance and portability of high-level programming models: Julia, Python/Numba, and Kokkos on exascale nodes
本文在百亿亿次 HPC 节点上评估 Julia、Python/Numba 和 Kokkos 的性能与可移植性,发现 Julia 和 Kokkos 在 CPU 上接近 C/OpenMP,Julia 在 GPU 上接近 CUDA/HIP,而 Python/Numba 性能差距明显。
2023-03-10 cs.DC cs.PL
Automatic Parallelization of Python Programs for Distributed Heterogeneous Computing
本文介绍了一种新的方法来自动提前(AOT)并行化和优化的顺序Python程序在分布式异构平台上执行。我们的方法支持Python程序的AOT源到源转换,由包含函数参数和返回值的类型提示驱动。这些提示可以由程序员提供,也可以通过动态分析器工具获得;多版本代码生成保证了AOT转换在所有情况下的正确性。我们的编译框架执行自动并行化和复杂的高级代码优化的目标分布式异构硬件平台。它包括对多面体框架的扩展,统一了矩阵/张量运算符中的用户编写的循环和隐式循环,以及CPU与GPU代码变体的自动化部分。此外,我们的多面体优化使节点内和节点间的并行。最后,使用Ray运行时部署优化的输出代码,以跨集群中的多个异构节点调度分布式任务。我们的经验评估显示,在单节点和多节点实验中,相对于顺序Python,性能有了显著的提高,当在OLCF Summit超级计算机中使用24个节点和144个GPU进行空时自适应处理(STAP)雷达应用时,性能提高了20,000多$\times$。
2022-03-11 cs.DC
Comparative analysis of large data processing in Apache Spark using Java, Python and Scala
Ternopil Ivan Puluj National Technical University(特诺皮尔伊万普鲁日国立技术大学);Rochester Institute of Technology(罗切斯特理工学院);Institute of Telecommunications and Global Information Space of the National Academy of Sciences of Ukraine(乌克兰国家科学院电信与全球信息空间研究所)
本研究基于Apache Spark与Apache Iceberg,对比Java、Python、Scala处理不同规模及复杂度数据的ETL性能,发现小数据量下Python更快,大数据量及复杂操作中Scala、Java更高效,可为数据处理流程优化提供参考。
2025-10-21 cs.DB cs.DC cs.PL
Operator-oriented programming: a new paradigm for implementing window interfaces and parallel algorithms
我们提出了一个新的编程范式,可以是有用的,特别是,用于实现窗口接口和并行算法。这个范例允许用户定义可以包含嵌套运算符的运算符。这种新的范式被称为面向运营商。这种模式的目标之一是避免许多面向对象语言中固有的对象定义的复杂性,并转向透明的算法定义。
2010-04-23 cs.DC cs.PL
D2O - a distributed data object for parallel high-performance computing in Python
我们介绍了D2 O,一个集群分布式多维数值数组的Python模块。它充当算法代码和数据分发逻辑之间的抽象层。主要目标是在不损失数值性能和可伸缩性的情况下实现可用性。D2 O的全局接口类似于numpy.ndarray的接口,而集群节点的本地数据可以直接访问,以便在定制的高性能模块中使用。D2 O是用纯Python编写的,这使得它具有可移植性,易于使用和修改。昂贵的操作由专门的外部库执行,如numpy和mpi 4py。对于串行应用程序,D2 O的性能与numpy相当,并且在迁移到MPI集群时可以很好地扩展。D2 O是在GNU通用公共许可证v3(GPL-3)下提供的开源软件,网址为https://gitlab.mpcdf.mpg.de/ift/D2O
2016-08-13 cs.DC cs.MS
Process-Oriented Parallel Programming with an Application to Data-Intensive Computing
我们介绍面向过程的编程作为一个自然的扩展面向对象的编程并行计算。它基于这样的观察:面向对象语言的每个类都可以实例化为一个进程,可以通过远程指针访问。进程指针的引入不需要语法扩展,用编程对象标识进程,并使进程能够通过执行远程方法简单地交换信息。面向过程的编程是一种高级语言,可以替代多线程、MPI和当前用于并行计算的许多其他语言、环境和工具。它只使用现有语言(如C++和Python)的最小语法扩展来实现自然的基于对象的并行性,因此有可能导致并行编程的广泛采用。我们实现了一个原型系统运行进程使用C++与MPI,并使用它来计算一个大型的三维傅立叶变换的计算机集群上建立的商品硬件组件。三维傅立叶变换是具有复杂数据访问模式的数据密集型应用程序的原型。面向进程的代码只有几百行,通过实现大规模并行和最大化硬件利用率来实现非常高的数据吞吐量。
2014-07-21 cs.DC cs.PL
OMB-Py: Python Micro-Benchmarks for Evaluating Performance of MPI Libraries on HPC Systems
The Ohio State University(俄亥俄州立大学)
Python已经成为机器学习(ML)、深度学习(DL)和数据科学(DS)等新兴领域的主导程序设计语言。Python的一个吸引人的特性是它提供了易于使用的编程接口,同时允许库开发人员通过利用高性能计算(HPC)平台提供的计算能力来提高应用程序的性能。高效的通信是在并行系统上扩展应用程序的关键,这通常由HPC硬件上的消息传递接口(MPI)标准和兼容库实现。mpi4py是一个基于Python的通信库,它为Python应用程序提供了一个类似于MPI的接口,允许应用程序开发人员利用包括GPU在内的并行处理元素。然而,目前还没有基准测试套件来评估现代HPC系统上mpi4py(以及一般的Python MPI代码)的通信性能。为了弥合这一差距,我们提出了OMB-Py-开源OSU Micro-Benchmark(OMB)套件的Python扩展-旨在评估Python中基于MPI的并行应用程序的通信性能。据我们所知,OMB-Py是第一个用于并行Python应用程序的通信基准套件。OMB-Py由各种点对点和集体通信基准测试组成,这些测试是为一系列流行的Python库实现的,包括NumPy,CuPy,Numba和PyCUDA。我们的评估表明,与原生MPI库相比,mpi4py引入了一个小的开销。我们计划公开发布OMB-Py,以造福Python HPC社区。
2022-08-24 cs.AI cs.DC cs.LG
DuctTeip: An efficient programming model for distributed task based parallel computing
用于科学计算的当前高性能计算机系统通常在分布式存储器环境中组合共享存储器计算节点。从这些复杂的系统中提取高性能需要量身定制的方法。基于任务的并行编程在简化编程和利用共享存储器系统的硬件并行性方面都取得了成功。本文重点讨论如何将任务并行编程扩展到分布式内存系统。我们使用任务和数据的分层分解,以适应不同级别的硬件。我们测试所提出的编程模型在两个不同的应用程序,Cholesky分解,和浅水方程求解器。我们还比较了我们的实现与其他框架的分布式任务并行编程的性能,并表明它是有竞争力的。
2018-01-10 cs.CE cs.DC cs.PF
Benchmarking the Parallel 1D Heat Equation Solver in Chapel, Charm++, C++, HPX, Go, Julia, Python, Rust, Swift, and Java
本文在 Intel、AMD 和 ARM64FX 架构上基准测试十种语言实现的共享内存并行一维热扩散求解器,发现 C++、Rust、Chapel、Charm++ 和 HPX 性能领先。
2023-07-10 cs.DC
Parallel parametric linear programming solving, and application to polyhedral computations
参数线性规划是多面体计算和某些控制应用的核心,我们提出了一种基于任务的并行化方案,在大型问题上具有准线性加速比。
2019-04-12 cs.CG cs.DC
UPIR: Toward the Design of Unified Parallel Intermediate Representation for Parallel Programming Models
异构计算体系结构的复杂性,以及对高效和可移植并行应用程序开发的需求,推动了并行编程模型的发展,使其变得比以前更全面和复杂。增强传统编译技术和软件基础设施的并行意识已成为近年来编译器发展的主要目标之一。在本文中,我们提出了设计统一的并行中间表示(UPIR)的多个并行编程模型,并使统一的编译器转换的模型。UPIR规定了三种常用的并行模式(SPMD、数据和任务并行)、数据属性和显式数据移动和存储管理以及并行编程中使用的同步操作。我们通过在ROSE编译器中的原型实现来演示UPIR,用于统一OpenMP和OpenACC以及C/C++和Fortran中的IR,用于统一将OpenMP和OpenACC代码降低到LLVM运行时的转换,以及用于将UPIR导出到LLVM MLIR方言。
2022-10-28 cs.DC
Parallel Programming Applied Research Projects for Teaching Parallel Programming to Beginner Students
在本文中,我们讨论了几个中型和一个大型应用研究项目在计算机科学系的Okanagan学院(OC)和巴黎东克雷泰伊(LACL)和奥尔良大学(LIFO)在法国的教育价值。我们发现,从第二学期开始,一些大一学生非常积极,渴望参与应用研究项目。他们积极参加编程比赛,并希望参与应用研究项目,与大二和大四学生竞争。我们的观察是基于五个NSERC参与学院和应用研究与发展(ARD)赠款,以及几个小型应用项目。学生参与应用研究是我们活动的关键动机和成功因素,但我们也参与将应用研究的一些成果,即编程技术,转移到高级和第一年MSc水平的初学者的并行编程课程中。我们用初学者的编程概念,实用的工具来说明这个反馈过程,以及在我们的法国大学课程中经历了10多年的学生的整体成功/失败。
2021-05-31 cs.DC
Pipeflow: An Efficient Task-Parallel Pipeline Programming Framework using Modern C++
流水线是一种基本的并行编程模式。主流流水线编程框架依靠数据抽象来执行流水线调度。这种设计对于以数据为中心的流水线应用是方便的,但对于只利用流水线中任务并行性的算法是低效的。因此,我们引入了一个新的任务并行流水线编程框架称为Pipeflow。Pipeflow并没有设计另一个数据抽象,而是专注于流水线调度本身,使任务并行流水线算法的实现比现有的框架更有效。我们已经在微基准测试和实际应用中评估了Pipeflow。例如,Pipeflow在采用流水线并行来加快运行时间的VLSI布局和时序分析工作负载中,分别比oneTBB快24%和10%。
2022-02-01 cs.DC
Bind: a Partitioned Global Workflow Parallel Programming Model
高性能计算因其漫长而昂贵的软件开发周期而臭名昭著。为了解决这一挑战,我们提出绑定:一个“分区的全球工作流”的C++应用程序的并行编程模型,使快速原型和敏捷的开发周期的高性能计算软件的目标异构分布式众核架构。我们提出了绑定到线性代数和MapReduce算法的应用程序,以及性能结果。
2016-06-15 cs.DC
Teaching Parallel Programming Using Both High-Level and Low-Level Languages
我们讨论了MPI和OpenMP在并行编程的高年级本科生和低年级研究生课程教学中的使用。我们简要介绍了OpenMP标准,并讨论了为什么我们选择使用它在并行编程类。讨论了使用OpenMP优于消息传递方法的优点。我们还简要列举了使用OpenMP的一些缺点,以及如何通过使用额外的MPI代码和项目补充OpenMP来解决这些缺点。本文还介绍了我在课堂上所做的几个项目。
2001-10-29 cs.DC
Performance Evaluation of Parallel Message Passing and Thread Programming Model on Multicore Architectures
共享内存系统上的多核架构的当前趋势强调了并行性的需求。虽然有一些编程模型来表示并行性,线程编程模型已经成为一个标准,以支持这些系统,如OpenMP,和POSIX线程。MPI(消息传递接口)仍然是当今高性能计算中使用的主要模型,它面临着这一挑战。以前的MPI版本MPI-1没有共享内存的概念,而当前的MPI版本2 MPI-2对共享内存系统的支持有限。在这项研究中,MPI的MPI-2版本将与OpenMP进行比较,看看MPI在多核/ SMP(对称多处理器)机器上的性能如何。将在多核共享内存机器架构上比较用于线程编程模型的OpenMP和用于消息传递编程模型的MPI,以查看谁在速度和吞吐量方面具有更好的性能。用于评估评估并行编程解决方案的可扩展性的应用程序是可定制矩阵维数的矩阵乘法。大量的大规模并行计算的研究都是使用NSA Parallel Benchmark(NPB)等大规模测试标准进行测试的[1]。本文的研究将在一个小规模的并行计算环境下进行,重点是利用自行开发的测试程序对MPI和OpenMPI并行编程模型进行性能评估。
2010-12-10 cs.DC
Teaching Parallel Programming Using Java
本文介绍了"应用并行计算"课程讲授的最后一年软件工程本科生在2014年春季在巴基斯坦NUST的概述。该课程的主要目标是介绍实用的并行编程工具和技术,用于共享和分布式内存并发系统。该课程的一个独特之处是Java被用作主要的程序设计语言。课程分为三个部分。第一部分介绍了用于共享内存系统的并行编程技术,包括多核和对称多处理器(SMP)系统。在本节中,我们将Java线程作为一种可行的编程API来介绍。第二部分专门介绍用于分布式内存系统(包括计算机集群和网络)的并行编程工具。我们使用MPJ-一个Java MPI库-来进行本节的编程作业和实验工作。第三节也是最后一节涵盖了高级主题,包括使用Hadoop的MapReduce编程模型和图形处理单元上的通用计算(GPGPU)。
2014-08-27 cs.CY cs.DC
High performance Python for direct numerical simulations of turbulent flows
Navier-Stokes方程的直接数值模拟(DNS)是流体动力学中一个非常有价值的研究工具。尽管如此,仍然很少有公开的研究代码,由于隐含的大量数字运算,可用的代码通常是用低级语言编写的,如C/C++或Fortran。在本文中,我们描述了一个纯科学的Python伪谱DNS代码,它在数千个处理器和数十亿个未知数的情况下几乎与C++的性能相匹配。我们还描述了一个通过Cython优化的版本,该版本被发现与C++的速度相匹配。求解器是用Python从头开始编写的,包括网格、MPI域分解和时间积分器。求解器已经在KAUST超级计算实验室的Shaheen超级计算机上进行了验证和基准测试,我们能够很好地扩展到数千个核心。实现的一个非常重要的部分是网格分解(我们实现了板和铅笔分解)和3D并行快速傅立叶变换(FFT)。网格分解和FFT例程已在Python中使用串行FFT例程(NumPy,pyFFTW或任何其他串行FFT模块),NumPy数组操作以及MPI for Python(mpi 4py)处理的MPI通信来实现。我们展示了如何使用4行紧凑的Python代码在Python中执行3D并行FFT以进行平板网格分解,发现Shaheen上的并行性能略好于FFTW库提供的类似例程。对于铅笔网格分解,需要7行代码来执行变换。
2016-02-11 cs.DC cs.MS
QSW_MPI: a framework for parallel simulation of quantum stochastic walks
QSW_MPI是一个Python包,用于连续时间量子随机漫步的时间序列模拟。这个模型允许研究马尔可夫开放量子系统的Lindblad形式主义,包括推广的连续时间随机游走和连续时间量子游走。QSW_MPI由一个使用稀疏数据结构访问并行Fortran库的Python接口组成,可扩展到大规模并行计算机,这使得在任意复杂度的有向和无向图上模拟广泛的行走动力学成为可能。
2020-07-08 cs.DC physics.comp-ph quant-ph
A task-based approach to parallel parametric linear programming solving, and application to polyhedral computations
参数线性规划是多面体计算以及某些控制应用中的核心操作.本文提出了一种基于任务的并行化方案,在大型问题上具有准线性加速比.这种类型的并行应用具有挑战性,因为多个任务可能计算同一区域.在本文中,我们提出了算法本身的并行冗余消除算法,并进行了深入的性能分析。
2020-09-29 cs.CG cs.DC
A Lattice Linear Predicate Parallel Algorithm for the Dynamic Programming Problems
并行LLP(Lattice Linear Predicate)算法解决了最短路问题、稳定婚姻问题和市场出清价格问题等组合优化问题。本文给出了多个动态规划问题的并行LLP算法。特别是,我们表明,LLP算法解决了最长的子序列问题,最佳二叉搜索树问题,和背包问题。此外,该算法可以用来解决这些问题的约束版本,只要约束是格线性的。并行LLP算法只需要读写原子性,不需要更高级别的原子指令。
2021-03-10 cs.DC cs.DS
Temporal Parallelisation of Dynamic Programming and Linear Quadratic Control
本文提出了最优控制问题动态规划时间并行化的一般公式。我们推导出的元素和关联运算符能够使用并行扫描来解决这些问题的对数时间复杂度,而不是线性时间复杂度。我们应用这种方法的问题,有限的状态和控制空间,线性二次跟踪控制问题,一类非线性控制问题。并行方法的计算效益通过在图形处理单元上运行的数值模拟来证明。
2022-01-24 cs.DC cs.SY eess.SY