c++ hdf5中的并行阅读

nwsw7zdq  于 2024-01-09  发布在  其他
关注(0)|答案(1)|浏览(230)

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

6mzjoqzu

6mzjoqzu1#

更新

请参阅https://stackoverflow.com/a/34913236以获得更完整和稍微更新的答案。

旧答案

从技术上讲,HDF 5具有线程安全模式,但它序列化所有库调用,因此没有性能优势(请参阅链接)。根据您的应用程序,您可以使用fork来创建并行进程而不是并行线程。如果采用这种方法,您可能需要使用进程间通信(IPC)将数据传输回主进程。
请注意,这些并行阅读方法是否有任何好处,在很大程度上取决于HDF 5文件在磁盘上的存储方式。如果它们位于标准7200 RPM磁盘上,你可能会因为尝试并行读取而使事情变得更慢,因为你会开始在整个文件中查找,而不是很好地流出连续的块(假设你的磁盘还没有非常碎片化)。另一方面,如果数据在更高级的文件服务器上,在具有良好控制器的SSD上,或者在RAID阵列上,我建议您先做一些性能分析,看看是否有时间花在真实的文件系统I/O上(在这种情况下,您需要更好的磁盘或将数据分布在多个磁盘上)、解压缩(如果这是瓶颈,则多线程或多处理更有可能提供很大帮助)或其他操作。

相关问题