Ошибка Fortran «дополнительные переполнения при перемещении» при чтении огромного входного файла - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть следующий входной файл

4400000
      1       4       4    7056    4203    7190    2856       0       0       0       0       0       0       0   0.942    0.93   0.944   0.925       0       0       0       0       0       0   3.846     0.0   1.627
      2       3       3    8553     481    7734       0       0       0       0       0       0       0       0    0.63   0.923   0.322       0       0       0       0       0       0       0    1.93     2.0  -0.792
      3       3       2    7007    3625       0       0       0       0       0       0       0       0       0   0.359    0.93       0       0       0       0       0       0       0       0   1.889     2.0  -0.728
      4       4       4    1611     854    7901    8306       0       0       0       0       0       0       0   0.923   0.944   0.936   0.915       0       0       0       0       0       0   3.867     0.0   1.488
      5       3       4    7657    1180    6659    4147       0       0       0       0       0       0       0   0.332    0.69   0.346   0.574       0       0       0       0       0       0   1.969     2.0  -0.634
      6       3       2    1978     523       0       0       0       0       0       0       0       0       0   0.931   0.917       0       0       0       0       0       0       0       0   1.849     2.0  -0.805
...

В файле всего 27 столбцов. Я попытался прочитать этот файл, используя

do l=1,num
 read (1,42) atindex(l),atype(l),nbonds(l),(conn(l,j),j=1,10),molnr(l),(bos(l,j),j=1,10),abo(l),nlp(l),charge(l)
enddo

(num = количество строк) и

42  format (i7,13i7,11f7.3,f7.1,f7.3)

Я скомпилировал это с помощью компилятора intel. Однако это приводит к следующей ошибке «дополнительные переполнения при перемещении»:

....
/opt/shared/intel/2018u4/compilers_and_libraries_2018.5.274/linux/compiler/lib/intel64_lin/libifcoremt.a(for_init.o): In function `for__signal_handler':
    for_init.c:(.text+0x906): additional relocation overflows omitted from the output

Это похоже на проблему с памятью из-за слишком большого количества столбцов. Эта ошибка никогда не происходит, когда я читаю только в целочисленный столбец (столбец 14) в правильном формате. Однако, когда я пытался прочитать реальные цифры, то произошла ошибка.

Это кластер исследовательских серверов, а не мой ноутбук или настольный компьютер, поэтому я не смог бы изменить установленные настройки компилятора Intel.

Как мне избежать этой проблемы?

1 Ответ

0 голосов
/ 24 апреля 2020

На форуме Intel Fortran я узнал, что эту проблему можно избежать, скомпилировав следующим образом:

ifort ab c .f -mcmodel medium -o ab c

Также рекомендуем прочитать по этому вопросу:

https://software.intel.com/en-us/articles/avoiding-relocation-errors-when-building-applications-with-large-global-or-static-data-on-intel64/

...