首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Chapel并行IO?

如何使用Chapel并行IO?
EN

Stack Overflow用户
提问于 2020-11-18 07:26:44
回答 1查看 77关注 0票数 2

我一直在探索教堂里的并行IO。Chapel文档提到了并行IO标志,通道可以并行工作。但是,我看不到其他的东西。

我没有特别的问题,只是想知道更多关于它的信息。

Chapel团队或健全的Chapel从业者是否可以讨论适当使用Chapel并行IO范例的任何示例?

EN

回答 1

Stack Overflow用户

发布于 2020-11-18 08:24:30

并行I/O可能对不同的人意味着不同的事情,这使得对这个问题有一个单一、简单的答案是具有挑战性的(尽管它可能建议Chapel项目应该在其文档中添加一个指向其他资源的并行I/O登录页面?)。例如,“并行I/O”可能意味着:

  • 使用多个任务(在单个节点上或跨多个节点)写入单个文件
  • 使用多个任务写入多个文件
  • 使用某种类型的并行文件系统

另一个重要因素是所需的文件格式:文本、二进制或特定的文件格式,如HDF5、NetCDF等。

一般而言,在Chapel中执行并行I/O的显式方法是使用Chapel的语言特性来表示并行性(例如,coforallcobeginbegin),然后为每个任务提供自己的读/写通道。如果所有通道都引用单个文件,则这些任务可能需要在它们之间进行协调,以确保它们是从文件的不连续段中写入/读取的。如果每个通道都引用它自己的文件,那么这种协调就没有必要了。

在Chapel中获得并行I/O的另一种主要方法是隐式的,通过调用一个库例程,其中并行性是在例程本身中创建和管理的-或者使用上面针对Chapel编写的例程的技术,或者通过调用外部并行函数(例如,来自C库的并行I/O例程)。

最后,您可以创建多个同时调用串行(或并行) I/O库例程的任务。

有关第一种显式方法的示例,请参阅我最近在回答类似问题时组合在一起的this sample program。它声明了一个二维数组,它的行是块分布的,然后使用每个区域设置(计算节点)的任务将该区域设置的子数组写出到单个/共享的二进制格式文件。然后,它执行类似的操作,将数据读回第二个数组,并验证两个数组是否匹配。在这两种情况下,每个任务都会将其通道前进到与其要写入/读取的值相对应的适当文件偏移量。

基于库的并行I/O方法的示例包括hdf5WriteDistributedArray()例程,该例程在逻辑上执行与前一个示例非常相似的操作,但使用的是HDF5文件格式。或者,readAllHDF5Files()例程是并行读取多个文件的库例程的一个示例。

我认为可以肯定地说,Chapel应该支持比现在更多的库例程来帮助处理并行I/O。主要的挑战是了解上述领域中的哪些模式和格式对用户最重要。在这方面,我们总是对请求和输入持开放态度。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64884863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档