[фортран, windows] Какой компилятор поддерживает массивы больше 2гб?
PS: Пояснение. Если адресное пространство в Виндах поделено как 2:2, то никакой. Если как 3:1, то может что-то и есть.
и может даже только начиная с версии адвансед сервера.
А если 64-битная ось - разве тоже 2 гига максимум?
P.S. Про итаниум знаю
А если 64-битная ось, то это пока не WindowsА АМД64 уже не считаются?
И версии виндов под них есть...
На сайте Микрософта написано, что
Windows Server 2003 x64 is currently under development, with delivery scheduled for the first half of 2005.
Win xp 64 beta - в сетке вроде уже появлялась.
А разве не 4 Гб адресное пространство XP?
А куда ось девается? У тебя на видюхе сколько памяти? Куда она отображается? В общем адресное пространство делится между ядром и процессом.
Не гнать! У процесса виртуальное адресное пространство, а у видеокарты физические адреса, ничего общего кроме 4Gb . Конечно процессу нужно несколько страниц для общения с ОС, но не более того.
А ты думаешь что процесс когда пишет в видеопямять напрямую(directx, dga,... делает это через ОС? Нет, видеопамять отображается в адресное пространство процесса.
Зачастую и через ОС. Иногда действительно отображается. Как это мешает в другое иногда иметь массив 4 Gb? Ну ладно, 3.5
О боже мой Ну вот есть драйвер(работающий в режиме ядра) видеокарты. Ему для работы нужно иметь доступ к видеопамяти. Для этого ее нужно отобразить. В адресное пространство ядра.
Но всё равно ведь мало, и я не вижу причин, почему бы компилятору Фортрана не разбивать мега-массивы на сегменты,
которые отображать по очереди.
PS: но все равно это не совместимо с бинарными дровами.
Тормоза резко подскакивают при сегментной адресации.
также не понятно, где держать массивы, которые сейчас не отображены в память
ps
в конечном счете - это все-таки должна быть забота не компилятора, а внешних библиотек.
Какая разница, если система всё равно будет подкачивать память с диска?
---
...Я работаю антинаучным аферистом...
А кому легко? Всё же лучше, чем вообще без массивов.
btw, "сегменты" - это просто куски, ничего общего с сегментными регистрами x86 не обязанные иметь
> также не понятно, где держать массивы, которые сейчас не отображены в память
не отображены в адресное пространство процесса, но могут быть в памяти, если таковой достаточно (PAE36
или просто памяти 4G, а адресного пространства доступно 2G.
> в конечном счете - это все-таки должна быть забота не компилятора, а внешних библиотек.
Как библиотека перехватит операцию типа A[i] := b, чтобы подгрузить сегмент, содержащий A[i]?
Это дело компилятора и рантайма к нему.
---
...Я работаю антинаучным аферистом...
А то и сегодня вечером.
---
...Я работаю антинаучным аферистом...
Нигде не сказано, что 4G хватит точно.
А если бы и было сказано, то я в общем-то не нанимался решать именно поставленную задачу.
Я слышал что можно делать 3 к 1. Про все - не слышал. А куда в этом случае ядро кладется? Или процесс может и код ядра модифицировать?Да-да! Я тоже хочу услышать ответ на поставленный вопрос. Что за такой "волшебный патч к Linux"?
При входе в контекст ядра весь VM переключается полностью.
Медленно, говорят, (два tlb flush на сисколл но кому-то помогает.
Это было придумано для того, чтобы дать ядру целых 4G lowmem,
для поддержки 32G и более памяти с PAE36. Обычно на таких конфигурациях
хронически не хватает памяти в lowmem-зоне, так как всё занимают структуры,
управляющие остальной памятью.
Сейчас, кажется, уже не актуально - научились хранить почти все структуры в highmem.
Оставить комментарий
stm7870384
Какой компилятор фортрана для винды поддерживает размер массивов более 2 Гб? <><>