У меня есть матрица с двойной плавающей запятой размером 1 млн. Х 1 млн. (Таблица), которую нужно сохранить в одном файле hdf5, сама матрица симметрична, поэтому необходим только нижний / верхний треугольник, код, который записывает эту матрицу, является MPI-код, поэтому каждый MPI-процесс будет записывать часть матрицы (блок или треугольник), треугольная матрица будет выглядеть как показано ниже, каждый p [i] представляет значение матрицы, рассчитанное процессом i:
p0
p0 p0
p0 p0 p0
p0 p0 p0 p0
p1 p1 p1 p1 p2
p1 p1 p1 p1 p2 p2
p1 p1 p1 p1 p2 p2 p2
p1 p1 p1 p1 p2 p2 p2 p2
p3 p3 p3 p3 p4 p4 p4 p4 p5
p3 p3 p3 p3 p4 p4 p4 p4 p5 p5
p3 p3 p3 p3 p4 p4 p4 p4 p5 p5 p5
p3 p3 p3 p3 p4 p4 p4 p4 p5 p5 p5 p5
Исходя из моего нынешнего понимания, конечное пространство памяти hdf5 может быть сведенной версией вышеуказанного треугольника к одномерному вектору, в котором хранится вся полуматрица, поэтому фактические конечные данные в hdf5 могут быть:
p0 p0 p0 p0 p0 p0 p0 p0 p0 p0 p1 p1 p1 p1 p2 p1 p1 p1 p1 p2 p2 p1 p1 p1 p1 p2 p2 p2 p1 p1 p1 p1 p2 p2 p2 p2 p3 p3 p3 p3 p4 p4 p4 p4 p5 p3 p3 p3 p3 p4 p4 p4 p4 p5 p5 p3 p3 p3 p3 p4 p4 p4 p4 p5 p5 p5 p3 p3 p3 p3 p4 p4 p4 p4 p5 p5 p5 p5
Я действительно очень плохо знаком с hdf5, поэтому не могли бы вы указать правильный способ для каждого процесса отправить свои данные на правильную позицию в конечном файле hdf5? Кажется, мне нужно будет использовать гиперслаб, однако мне нужно будет разбить гиперслаб из каждого процесса на несколько частей с началом, шагом, смещением, чтобы данные из каждого процесса могли найти свое местоположение в конечном 1D-векторе, но это тот тип операция на самом деле поддерживается hdf5?
Надеюсь, я прояснил свою проблему, и спасибо за любые предложения!