c++ - hdf5中的并行读取

标签 c++ multithreading hdf5

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

最佳答案

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

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

关于c++ - hdf5中的并行读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22977665/

相关文章:

c# - 将 .NET C# 程序集成到已编译(非托管)C++ 程序中(无需执行单独的 .exe 文件)

c++ - 添加数组特定列的元素

multithreading - XSLT 处理器可以是多线程的吗?

java - 在 swing 1.5 中的指定时间后自动关闭非模态对话框

multithreading - Amazon SQS 处理监听器的更好方式

machine-learning - caffe hdf5 H5LTfind_dataset(file_id, dataset_name_) 找不到HDF5数据集

c++ - 使自定义 Directshow 过滤器接受参数

python - 如何通过opencv匹配纸张

c - 如何使用 HDF5 C API 从内存缓冲区打开 hdf5 文件

python - 如何将 float 的 2D std vector 写入 HDF5 文件,然后在 python 中读取它