У меня есть массив с несколькими измерениями (цель состоит в том, чтобы учесть около 100), и каждое измерение имеет размер около 2 ^ 10, и мне нужно только сохранить в нем около 1000 коэффициентов двойной точности.Мне не нужно делать никаких операций с этим массивом, кроме чтения и записи в него.Код написан на Фортране 90.
Я предполагаю, что если я буду использовать библиотеку, подобную одной из упомянутых в этот ответ , я смогу сохранить это, но будет ли этооптимизирован для простых операций чтения и записи?Есть ли библиотека, которая была бы наиболее эффективной для этой цели?
Редактировать: Под " простыми операциями чтения и записи " я имею в виду следующее.Предположим, что
REAL(8), DIMENSION(1000) :: coeff1
INTEGER, DIMENSION(1000,5) :: index
Я хочу определить coeff2
для хранения значений в coeff1
, а затем прочитать его по индексам в index
, то есть
DO i = 1,1000
index(i,:) = [something]
coeff1(i) = [another something]
coeff2(index(i,1),index(i,2),index(i,3),index(i,4),index(i,5)) = coeff1(i)
ENDDO
Тогда длялюбой i
Я хотел бы получить доступ к значению
coeff2(index(i,1),index(i,2),index(i,3),index(i,4),index(i,5))
как можно быстрее.Быть способным сделать это быстро - это то, что я имею в виду под " эффективными ".
Поскольку индексы в [something]
не превышают 2 ^ 10, в настоящее время я определяю coeff2
следующим образом:
REAL(8), DIMENSION(2**10,2**10,2**10,2**10,2**10) :: coeff2
, но это слишком расточительно для памяти, особенно потому, что мне нужно увеличить количество измерений, теперь 5, до порядка 100, и большинство элементов этого массива равны 0. Итак, еще одна мерадля меня важна эффективность в том, что память, необходимая для хранения coeff2
, не должна взорваться при увеличении количества измерений.