在hdf5中并行读取

时间:2014-04-10 02:35:19

标签: c++ multithreading hdf5

我的C ++ / C程序从hdf5文件中顺序读取数百个压缩复合数组,并将它们存储在某些向量中。我想提高它的时间表现。我希望我可以并行读取其中的3个或4个,然后再读取3个或4个等等。我对多线程或OpenMP或任何并行编程都是全新的。我的问题是: - 是否可以在hdf5 / C / C ++ / Linux上实现我想要的? - 如果是这样,你能指导我一些初学者的信息或教程吗? 谢谢 尊重Nyama

1 个答案:

答案 0 :(得分:4)

HDF5在技术上有thread-safe mode,但它序列化所有库调用,因此没有性能优势(请参阅链接)。根据您的应用程序,您可以使用fork创建并行进程而不是并行线程。如果采用此方法,则可能需要使用进程间通信(IPC)将数据传输回主进程。

请注意,这些并行读取方法中的任何一种是否带来任何好处在很大程度上取决于HDF5文件如何存储在磁盘上。如果他们坐在一个标准的7200 RPM磁盘上,你可能会通过尝试并行读取来使更慢,因为你将开始寻找整个文件,而不是很好地流出连续的块(假设您的磁盘尚未碎片化)。另一方面,如果数据位于更高级的文件服务器,具有良好控制器的SSD或RAID阵列上,则更有可能看到好处。我建议先做一些分析,看看是否花时间做真正的文件系统I / O(在这种情况下你需要更好的磁盘或将数据分布在多个磁盘上),解压缩(多线程或多处理更可能是一个大的帮助,如果这是瓶颈)或其他操作。