Из-за проблем с производительностью при передаче кода из статического в динамическое распределение я начал походить о том, как управление памятью управляется в коде Fortran.Является ли порядок или синтаксис выражения allocate влиять на производительность? (Fortran)
В частности, в этом вопросе я блуждаю, если порядок или синтаксис, используемые для оператора allocate, имеют значение. То есть, он делает никакой разницы для выделения векторов, таких как:
allocate(x(DIM),y(DIM))
против
allocate(x(DIM))
allocate(y(DIM))
Синтаксис предполагает, что в первом случае программа будет выделять все пространство для векторов сразу, возможно, улучшая производительность, а во втором случае он должен выделять пространство для одного вектора за раз, чтобы они могли оказаться далеко друг от друга. Если нет, то есть, если синтаксис не имеет никакого значения, я блуждаю, если есть способ контролировать это распределение (например, выделение вектора для всего пространства и использование указателей для адреса пространства, выделенного в виде нескольких переменных).
Наконец, я замечаю, что я даже не знаю одного: выражение allocate гарантирует, что хотя бы один вектор занимает смежное пространство в памяти (или, что самое лучшее, что может?).
спасибо. Я постарался более точно сформулировать свой вопрос. Я не думаю, что думают или другие, я блуждаю, если есть такая разница, и если это имеет значение для производительности. – leandro
Этот ответ - http://stackoverflow.com/questions/13308684/increase-of-virtual-memory-without-increse-of-vmsize/13309395#13309395 - и другие расскажут вам, что в системах Linux по крайней мере , 'allocate' вряд ли вызовет выделение памяти, он будет интерпретироваться скорее как уведомление o/s, чтобы получить больше памяти. Затем, когда вы пишете свежеопределенную память, вещи действительно начинают происходить. Как это влияет на производительность вашего кода, я не знаю. Но мне было бы интересно прочитать ваши отчеты о ваших экспериментах, чтобы узнать. –
Также http://stackoverflow.com/questions/11335108/fortran-allocate-deallocate, –