[фортран, windows] Какой компилятор поддерживает массивы больше 2гб?

stm7870384

Какой компилятор фортрана для винды поддерживает размер массивов более 2 Гб? <>
<>

Julie16

Эээээ.... Никакой?
PS: Пояснение. Если адресное пространство в Виндах поделено как 2:2, то никакой. Если как 3:1, то может что-то и есть.

Julie16

Я тут погуглил... Похоже в виндах можно это как-то переключить...
http://www.microsoft.com/resources/documentation/WindowsServ/2003/all/techref/en-us/Default.asp?url=/Resources/Documentation/windowsserv/2003/all/techref/en-us/W2K3TR_4GT_what.asp

krishtaf

если не подводит память - то можно переключить на серверной версии виндов
и может даже только начиная с версии адвансед сервера.

durka82

А если 64-битная ось - разве тоже 2 гига максимум?

ava3443

А если 64-битная ось, то это пока не Windows (см. subj).
P.S. Про итаниум знаю

durka82

А если 64-битная ось, то это пока не Windows
А АМД64 уже не считаются?
И версии виндов под них есть...

ava3443

Где?
На сайте Микрософта написано, что
Windows Server 2003 x64 is currently under development, with delivery scheduled for the first half of 2005.

Dasar

Win xp 64 beta - в сетке вроде уже появлялась.

stm7870384

А разве не 4 Гб адресное пространство XP?

Julie16

А куда ось девается? У тебя на видюхе сколько памяти? Куда она отображается? В общем адресное пространство делится между ядром и процессом.

rosali

Не гнать! У процесса виртуальное адресное пространство, а у видеокарты физические адреса, ничего общего кроме 4Gb . Конечно процессу нужно несколько страниц для общения с ОС, но не более того.

Julie16

А ты думаешь что процесс когда пишет в видеопямять напрямую(directx, dga,... делает это через ОС? Нет, видеопамять отображается в адресное пространство процесса.

rosali

Зачастую и через ОС. Иногда действительно отображается. Как это мешает в другое иногда иметь массив 4 Gb? Ну ладно, 3.5

Julie16

О боже мой Ну вот есть драйвер(работающий в режиме ядра) видеокарты. Ему для работы нужно иметь доступ к видеопамяти. Для этого ее нужно отобразить. В адресное пространство ядра.

Marinavo_0507

3.5G - теоретически можно, по крайней мере для Linux был (есть?) патч, чтобы все 4G мог использовать userspace.
Но всё равно ведь мало, и я не вижу причин, почему бы компилятору Фортрана не разбивать мега-массивы на сегменты,
которые отображать по очереди.

Julie16

Я слышал что можно делать 3 к 1. Про все - не слышал. А куда в этом случае ядро кладется? Или процесс может и код ядра модифицировать?
PS: но все равно это не совместимо с бинарными дровами.

Dasar

> компилятору Фортрана не разбивать мега-массивы на сегменты
Тормоза резко подскакивают при сегментной адресации.
также не понятно, где держать массивы, которые сейчас не отображены в память
ps
в конечном счете - это все-таки должна быть забота не компилятора, а внешних библиотек.

Ivan8209

В конечном счёте --- это забота человека.
Какая разница, если система всё равно будет подкачивать память с диска?
---
...Я работаю антинаучным аферистом...

Marinavo_0507

> Тормоза резко подскакивают при сегментной адресации.
А кому легко? Всё же лучше, чем вообще без массивов.
btw, "сегменты" - это просто куски, ничего общего с сегментными регистрами x86 не обязанные иметь
> также не понятно, где держать массивы, которые сейчас не отображены в память
не отображены в адресное пространство процесса, но могут быть в памяти, если таковой достаточно (PAE36
или просто памяти 4G, а адресного пространства доступно 2G.
> в конечном счете - это все-таки должна быть забота не компилятора, а внешних библиотек.
Как библиотека перехватит операцию типа A[i] := b, чтобы подгрузить сегмент, содержащий A[i]?
Это дело компилятора и рантайма к нему.

Ivan8209

"Более двух" не означает "более четырёх."
---
...Я работаю антинаучным аферистом...

Marinavo_0507

Ну если сегодня не хватает двух, то очень может быть, что завтра не хватит четырёх.
А то и сегодня вечером.

Ivan8209

Но это уже другая задача, отличающаяся от поставленной.
---
...Я работаю антинаучным аферистом...

Marinavo_0507

Это частный случай поставленной задачи.
Нигде не сказано, что 4G хватит точно.
А если бы и было сказано, то я в общем-то не нанимался решать именно поставленную задачу.

sergey_m

Я слышал что можно делать 3 к 1. Про все - не слышал. А куда в этом случае ядро кладется? Или процесс может и код ядра модифицировать?
Да-да! Я тоже хочу услышать ответ на поставленный вопрос. Что за такой "волшебный патч к Linux"?

Marinavo_0507

Называется "4:4 split" или вроде того.
При входе в контекст ядра весь VM переключается полностью.
Медленно, говорят, (два tlb flush на сисколл но кому-то помогает.

Marinavo_0507

Вспомнил, кому помогает.
Это было придумано для того, чтобы дать ядру целых 4G lowmem,
для поддержки 32G и более памяти с PAE36. Обычно на таких конфигурациях
хронически не хватает памяти в lowmem-зоне, так как всё занимают структуры,
управляющие остальной памятью.
Сейчас, кажется, уже не актуально - научились хранить почти все структуры в highmem.
Оставить комментарий
Имя или ник:
Комментарий: