我的C++/C程序从hdf5文件中顺序读取数百个压缩的复合数组,并将它们存储在某些 vector 中。我想改善其时间表现。我希望可以并行读取3或4,然后再读取3或4,依此类推。我对多线程或OpenMP或任何并行编程完全陌生。我的问题是:
-是否可以在hdf5/C/C++/Linux上实现我想要的?
-如果是这样,您能指导我一些初学者的信息或教程吗?
谢谢
尊重奈山
最佳答案
HDF5从技术上讲具有thread-safe mode,但它会序列化所有库调用,因此没有性能优势(请参阅链接)。根据您的应用程序,可以使用fork创建并行进程而不是并行线程。如果采用这种方法,则可能需要使用进程间通信(IPC)将数据传输回主进程。
请注意,这些并行读取方法是否能带来任何好处,很大程度上取决于HDF5文件在磁盘上的存储方式。如果它们位于标准的7200 RPM磁盘上,则可能会尝试进行并行读取,从而使处理过程变慢,因为您将开始在整个文件中进行查找,而不是很好地流式传输连续的块(假设您的磁盘尚未非常分散)。另一方面,如果数据位于更高级的文件服务器上,具有良好 Controller 的SSD上或RAID阵列上,则很有可能会看到 yield 。我建议先做一些分析,看看是否花时间在执行真实的文件系统I/O(在这种情况下,您需要更好的磁盘或将数据分散到多个磁盘上),解压缩(多线程或多处理的可能性更大)帮助(如果这是瓶颈)或其他操作。
关于c++ - 在HDF5中并行读取,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22977665/