【问题标题】:HDF5 Read Dataset in Thread ErrorHDF5 在线程错误中读取数据集
【发布时间】:2014-02-26 11:49:43
【问题描述】:

我编写服务器应用程序,它将从 HDF5 文件中提取的数据同时发送到多个客户端

有一段代码(在单独的线程中运行):

var _fileID = H5F.open("C:\\Temp\\MLS-Aura_L2GP-Temperature_v03-33-c01_2012d347.he5", H5F.OpenMode.ACC_RDONLY);
H5D.open(_fileID, "/HDFEOS/SWATHS/Temperature/Data Fields/Temperature");
var space = H5D.getSpace(dataset);
var size = H5S.getSimpleExtentDims(space);
float[,] SatData = new float[size[0], size[1]];
var wrapArray = new H5Array<float>(SatData);
var dataType = H5D.getType(dataset);
H5D.read(dataset, dataType, wrapArray);

如果我尝试在单独的线程“H5D.read(dataset, dataType, wrapArray);”中读取 HDF5 数据集 有多个线程,我有一个错误:“无法将数据读取到数据集 5000001,状态为 -1”

有什么问题?

【问题讨论】:

  • 同样的问题,但我有 5000000 而不是 5000001。而且我只有一个线程。你最终解决了吗?
  • 在我的例子中,问题在于 reader 和 writer 是不同的应用程序,它们对复合类型的定义略有不同:writer 有一个 UTF8 字符串,而 reader 有一个常规字符串。设法通过更新合同来修复它。
  • 我收到 5000002 错误。我该怎么办?

标签: c# multithreading hdf5


【解决方案1】:

HDF5 库应使用线程安全模式编译,以便在多线程环境中使用。

./configure --enable-threadsafe ... 

然而,这种配置只保证线程安全,但不能保证线程并行。事实上,当前的 HDF5 1.10 版本实现了线程安全模式,具有非常简单的互斥保护,因此每个被多线程调用的 HDF5 操作实际上都是序列化的。

【讨论】:

    猜你喜欢
    • 2016-10-27
    • 2019-03-04
    • 2014-06-11
    • 2019-08-02
    • 2019-06-24
    • 2016-01-24
    • 2013-12-18
    • 2015-09-20
    • 2019-11-15
    相关资源
    最近更新 更多