hdf5 中的并行读取

问题描述 投票:0回答:1

我的 C++/C 程序从 hdf5 文件中顺序读取数百个压缩复合数组,并将它们存储在一些向量中。我想提高它的时间性能。我希望我可以并行读取其中的 3 或 4 个,然后再读取下 3 个或 4 个,依此类推。我对多线程或 OpenMP 或任何并行编程完全陌生。我的问题是: - 是否可以在 hdf5/C/C++/Linux 上实现我想要的? - 如果是这样,你能给我一些针对初学者的信息或教程吗? 谢谢 尊敬的尼玛

c++ multithreading hdf5
1个回答
5
投票

更新

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

旧答案

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

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

© www.soinside.com 2019 - 2024. All rights reserved.