Да, вам придется читать блок данных по частям, если он не помещается в основную память. Кроме того, обратите внимание, что ваш набор данных должен быть создан с разбивкой по частям. Затем вы можете прочитать один блок за раз, используя гиперслабы (то есть срезы).
Все это можно значительно упростить с помощью HDFql . HDFql - это язык высокого уровня, который освобождает вас от низкоуровневых деталей обработки файлов HDF5.
Например, вы можете сделать следующее в C с использованием HDFql:
// declare variables
char script[100];
int data[1024][1024];
int i;
// create a HDF5 file named 'my_file.h5'
hdfql_execute("CREATE FILE my_file.h5");
// use (i.e. open) HDF5 file 'my_file.h5'
hdfql_execute("USE FILE my_file.h5");
// create a three dimensional chunked dataset named 'my_dataset' (each chunk is 1 MB)
hdfql_execute("CREATE CHUNKED(1, 1024, 1024) DATASET my_dataset AS INT(100, 1024, 1024)");
// register variable 'data' for subsequent usage
hdfql_variable_register(data);
// loop 100 times (i.e. number of chunks that exists in dataset 'my_dataset')
for(i = 0; i < 100; i++)
{
// prepare script to read one chunk at the time using an hyperslab
sprintf(script, "SELECT FROM my_dataset(%d:::1) INTO MEMORY 0", i);
// execute script
hdfql_execute(script);
// call hypothetical function 'process' passing variable 'data' that contains the chunked data
process(data);
}
Дополнительные примеры использования HDFql в C можно найти здесь .