我一直在探索教堂里的并行IO。Chapel文档提到了并行IO标志,通道可以并行工作。但是,我看不到其他的东西。
我没有特别的问题,只是想知道更多关于它的信息。
Chapel团队或健全的Chapel从业者是否可以讨论适当使用Chapel并行IO范例的任何示例?
发布于 2020-11-18 08:24:30
并行I/O可能对不同的人意味着不同的事情,这使得对这个问题有一个单一、简单的答案是具有挑战性的(尽管它可能建议Chapel项目应该在其文档中添加一个指向其他资源的并行I/O登录页面?)。例如,“并行I/O”可能意味着:
另一个重要因素是所需的文件格式:文本、二进制或特定的文件格式,如HDF5、NetCDF等。
一般而言,在Chapel中执行并行I/O的显式方法是使用Chapel的语言特性来表示并行性(例如,coforall、cobegin或begin),然后为每个任务提供自己的读/写通道。如果所有通道都引用单个文件,则这些任务可能需要在它们之间进行协调,以确保它们是从文件的不连续段中写入/读取的。如果每个通道都引用它自己的文件,那么这种协调就没有必要了。
在Chapel中获得并行I/O的另一种主要方法是隐式的,通过调用一个库例程,其中并行性是在例程本身中创建和管理的-或者使用上面针对Chapel编写的例程的技术,或者通过调用外部并行函数(例如,来自C库的并行I/O例程)。
最后,您可以创建多个同时调用串行(或并行) I/O库例程的任务。
有关第一种显式方法的示例,请参阅我最近在回答类似问题时组合在一起的this sample program。它声明了一个二维数组,它的行是块分布的,然后使用每个区域设置(计算节点)的任务将该区域设置的子数组写出到单个/共享的二进制格式文件。然后,它执行类似的操作,将数据读回第二个数组,并验证两个数组是否匹配。在这两种情况下,每个任务都会将其通道前进到与其要写入/读取的值相对应的适当文件偏移量。
基于库的并行I/O方法的示例包括hdf5WriteDistributedArray()例程,该例程在逻辑上执行与前一个示例非常相似的操作,但使用的是HDF5文件格式。或者,readAllHDF5Files()例程是并行读取多个文件的库例程的一个示例。
我认为可以肯定地说,Chapel应该支持比现在更多的库例程来帮助处理并行I/O。主要的挑战是了解上述领域中的哪些模式和格式对用户最重要。在这方面,我们总是对请求和输入持开放态度。
https://stackoverflow.com/questions/64884863
复制相似问题