Форум: "Начинающим";
Текущий архив: 2007.11.04;
Скачать: [xml.tar.bz2];
Внизвыделение большого объема памяти Найти похожие ветки
← →
Unknown user © (2007-10-10 12:21) [0]как выделить максимально доступный процессу объем памяти? и какие это значения для WinXP? зависит ли это число от объема физической памяти или система руководствуется более тонкими материями при определении значения макс. объема доступной процессу памяти :)
← →
Сергей М. © (2007-10-10 12:25) [1]
> зависит ли это число от объема физической памяти
Не зависит.
> какие это значения для WinXP?
Теоретически - до 2 Гб (до 3 Гб при определенных условиях)
Практически - горазло меньше 2 Гб.
> система руководствуется более тонкими материями
Да, именно так.
← →
Unknown user © (2007-10-10 12:38) [2]может есть способ обмануть систему? например, использовать многократные вызовы CreateHeap, тогда суммарная память выделенная процессу может быть больше чем при использовании HeapAlloc с одной кучей. это сработает?
← →
clickmaker © (2007-10-10 12:40) [3]
> [2] Unknown user © (10.10.07 12:38)
а в чем проблема? зачем столько?
← →
Unknown user © (2007-10-10 12:47) [4]обработка больших массивов данных
← →
clickmaker © (2007-10-10 12:55) [5]а где эти массивы?
в конце-концов, есть же VirtualAlloc, memory-mapped files...
← →
Сергей М. © (2007-10-10 12:55) [6]
> Unknown user © (10.10.07 12:47) [4]
Ликбез здесь:
http://www.biblioteka.net.ru/data/c/msvc1/THEORY/HTM/glava23.html
> обработка больших массивов
Обработка обработке рознь.
Поясни ..
← →
Unknown user © (2007-10-10 13:00) [7]>Обработка обработке рознь.
>Поясни ..
Согласен. Нерационально. Я бы так не делал. Но наш программист хочет именно все и сразу. Так что с моей стороны присутствует только теоретический интерес.
Кто-то подскажет как выжать максимум? Возможно уже и не с помощью кодинга, а настройкой системы.
← →
homm © (2007-10-10 13:08) [8]Поставь 64-бит винду.
← →
Сергей М. © (2007-10-10 13:08) [9]
> наш программист хочет именно все и сразу
А ты-то кто ?)
Разве не программист ? Или того "программиста" зовут О.И.С.Б.М.Бендер-Бей ?)
Понимаешь ли, heap - "рудиментарный орган", доставшийся в наследство от Win16, где вирт.память была сегментированной, а не плоской.
В Win32 все вызовы Global/Local/HeapAlloc сводятся, в конечном итоге, к вызову VirtualAlloc, т.е. выделению в ВАП процесса региона из смежных страниц фиксированного размера (4K)
ВАП процесса в Win32 имеет фиксированный размер, равный 4Гб. Из них прикладному коду доступны менее 2Гб.
← →
Unknown user © (2007-10-10 13:09) [10]>а где эти массивы?
эти массивы в файлах на диске. цель - минимизировать обращения к диску. memory-mapped files помогут это сделать?
← →
homm © (2007-10-10 13:17) [11]Единственный способ минимизмровать обращениек диску, при ограниченном объеме памяти — сделать обработку линейной и по возможности однопроходной.
← →
Сергей М. © (2007-10-10 13:20) [12]
> memory-mapped files помогут это сделать?
Помогут.
Но выше 2Гб все равно не прыгнешь.
← →
Unknown user © (2007-10-10 13:22) [13]конкретных рекомендаций я так и не услышал :( кроме сменить винду на 64-bit версию.
вопрос такой: как можно увеличить объем выделяемой процессу памяти?
несколько непонятно поведение системы: на двух машинах по 2 Гб RAM, одна версия ОС, но на первой выделяемый предел около 1400 Мб, на второй около 700 Мб.
а кто я есть в данном вопросе не столь важно :)
← →
Unknown user © (2007-10-10 13:23) [14]>Но выше 2Гб все равно не прыгнешь
выше и не пытаюсь :)
← →
Сергей М. © (2007-10-10 13:27) [15]
> как можно увеличить объем выделяемой процессу памяти?
Выгрузив из АП процесса "лишние" модули.
> конкретных рекомендаций я так и не услышал
А использовать MMF разве не рекомендация ?
← →
homm © (2007-10-10 13:35) [16]> [13] Unknown user © (10.10.07 13:22)
> несколько непонятно поведение системы: на двух машинах по
> 2 Гб RAM, одна версия ОС, но на первой выделяемый предел
> около 1400 Мб, на второй около 700 Мб.
когда 512 мб оп было, ради интереса тестировал.
Выделялось 2052, если не изменяет память, метра. Естественно это в диспетчере задач. Пользовательский размер был хоть и ментше, но не существенно, никак не меньше 1,5 гб.
Так что ищи проблему в коде. Как выделяешь память?
← →
Unknown user © (2007-10-10 14:01) [17]>Как выделяешь память?
h:=GetProcessHeap;
size1:=...;
mem:=heapalloc(h,0,size1);
size2:=HeapSize(h,0,mem);
>А использовать MMF разве не рекомендация?
при использовании memory-mapped files система сама организует кеш и считывает в оп память нужные фрагменты с диска? насколько эффективным в этом случае будет приложение с точки зрения уменьшения времени затрачиваемого на работу с диском.
← →
Leonid Troyanovsky © (2007-10-10 14:04) [18]
> Unknown user © (10.10.07 14:01) [17]
> эффективным в этом случае будет приложение с точки зрения
> уменьшения времени затрачиваемого на работу с диском
Зависит от того, как организована работа с данными.
--
Regards, LVT.
← →
homm © (2007-10-10 14:15) [19]> [17] Unknown user © (10.10.07 14:01)
> насколько эффективным в этом случае будет приложение с точки
> зрения уменьшения времени затрачиваемого на работу с диском.
Ненасколько. Рпботать только удобнее.
Еше раз помедитируй над [11], и ксатаи, ответь обработка данных линейная? однопроходная?
← →
Unknown user © (2007-10-10 14:25) [20]> обработка данных линейная? однопроходная?
данные считываются последовательными блоками с одного файла и после обработки в памяти записываются в другой файл. что происходит при обработке, это отдельный разговор, в данном контексте это не суть важно. (проще говоря, не знаю :) )
← →
Ping (2007-10-10 14:28) [21]Unknown user © (10.10.07 14:25) [20]
Для такой работы, в общем случае, и 64 КБ достаточно.
← →
Leonid Troyanovsky © (2007-10-10 14:30) [22]
> Unknown user © (10.10.07 14:25) [20]
> данные считываются последовательными блоками с одного файла
> и после обработки в памяти записываются в другой файл. что
Никакой mmf здесь не требуется.
Выбрать размеры буферов кратными размеру кластера,
только не heapalloc but VirtualAlloc(Ex)
--
Regards, LVT.
← →
Unknown user © (2007-10-10 14:34) [23]> только не heapalloc but VirtualAlloc
поясните чем VirtualAlloc лучше в моем случае, плиз.
← →
Ping (2007-10-10 14:37) [24]Более того, если на компьютере даже и 2 ГБ ОЗУ, все равно система не даст процессу все 2 ГБ, даже если и очень просить. То есть, часть данных будут скинуты в своп, что, в свою очередь, значительно уменьшит быстродействие. Так что - определяй оптимальный, как с точки зрения системы, так и с точки зрения алгоритма размер буфера в памяти - и вперед!
← →
homm © (2007-10-10 14:42) [25]> [20] Unknown user © (10.10.07 14:25)
> и после обработки в памяти
Тьфу… Обработка данных линейная? однопроходная?
> проще говоря, не знаю
Тогда на основании каких данных ты решил, что программе нехватает именно оперативной памяти?
← →
clickmaker © (2007-10-10 14:43) [26]
> однопроходная?
судя по всему, заднепроходная )
← →
homm © (2007-10-10 14:48) [27]> [26] clickmaker © (10.10.07 14:43)
> судя по всему, заднепроходная )
Выразил то, что я стеснялся сказать :)
← →
Сергей М. © (2007-10-10 14:59) [28]
> Unknown user © (10.10.07 14:25) [20]
Т.е. у вас "разделение мартышкиного труда" - ты отвечаешь за ститывание-запись тех самых "блоков", а тот самый программист-"Бендер" отвечает за обработку каждого переданного тобой ему блока, я правильно понял ?
← →
Leonid Troyanovsky © (2007-10-10 15:02) [29]
> Unknown user © (10.10.07 14:34) [23]
> поясните чем VirtualAlloc лучше в моем случае, плиз.
Первая выделяет блок в куче, (на хрена, в данном случае, куча)
а вторая - совершенно прямолинейный кусок ВАП.
--
Regards, LVT.
← →
Unknown user © (2007-10-10 15:28) [30]>Т.е. у вас "разделение мартышкиного труда" - ты отвечаешь за >ститывание-запись тех самых "блоков", а тот самый программист-"Бендер" >отвечает за обработку каждого переданного тобой ему блока, я правильно >понял ?
нет, неправильно. тот самый программист "Бендер" все делает сам, просто поинтересовался у меня как выделить больший объем памяти, чем ему возвращает система.
>судя по всему, заднепроходная )
может и так, но тем не менее его программа решает такие задачи, какие Вам в жизни не придется решать. его программа обрабатывает данные самолетного сканера, с использованием данных калибровки камеры, полетных данных инерциальной системы позиционирования, параметров геоида и т.д. алгоритмы очень непростые, не однопроходные и не линейные, если это в сам деле важно :)
может он и неважный программист, но математик отменный. он решил, что ему надо память всю и сразу, переубедить его не удалось, поэтому решил выяснить как помочь ему выбить у системы побольше памяти.
← →
homm © (2007-10-10 15:31) [31]> [30] Unknown user © (10.10.07 15:28)
> его программа обрабатывает данные самолетного сканера, с
> использованием данных калибровки камеры, полетных данных
> инерциальной системы позиционирования, параметров геоида
> и т.д.
Сейчас мне стало реально страшно за будующее нашей страны и собственную безопасность :(
← →
clickmaker © (2007-10-10 15:32) [32]
> как помочь ему выбить у системы побольше памяти
и что, гига с лишним ему мало?
включайте режим AWE, там больше будет доступно
Или, если уж совсем все плохо - ставьте Win64
← →
homm © (2007-10-10 15:40) [33]> [30] Unknown user © (10.10.07 15:28)
> он решил, что ему надо память всю и сразу, переубедить его
> не удалось
Это не вопрос веры, религии, переубеждения или волевого решения. Либо память нужна, и это очевидно, либо алгоритм кривой. Если ты пытался его переубедить, что вся память не нужна, значит это все-же не очевидно, а значит алгоритм таки кривой. Не подпускай его к компу, пусть формулы пишет на бумаге, а для кодинга нормального программиста найдите.
← →
Сергей М. © (2007-10-10 15:42) [34]
> программа обрабатывает данные самолетного сканера
Стесняюсь спросить, неужели в режиме реального времени ?)
← →
Leonid Troyanovsky © (2007-10-10 15:44) [35]
> Unknown user © (10.10.07 15:28) [30]
> может он и неважный программист, но математик отменный.
> он решил, что ему надо память всю и сразу, переубедить его
Наймите программиста.
--
Regards, LVT.
← →
Сергей М. © (2007-10-10 15:45) [36]
> он решил, что ему надо память всю и сразу
Гнать его из программистов надо.
И вообще - сапожник должен тачать сапоги, а пирожник печь пироги.
А когда чистой воды математик берется за не свое дело, да еще и с амбициями - вот тогда самолеты с этими самыми "сканерами" и начинают сыпаться с неба аки горох)
← →
Unknown user © (2007-10-10 15:45) [37]>Стесняюсь спросить, неужели в режиме реального времени ?)
этим занимается другая программа. та о которой речь - это уже постобработка, но ей надо перелопатить гигабайты данных и длиться это может долгие часы.
← →
Unknown user © (2007-10-10 15:51) [38]ладно, закроем эту тему.
мне просто интересно было выяснить почему так разнится значение выделяемой процессу памяти на разных компах с одинаковым объемом RAM и версией ОС, и как эту разницу нивелировать (в большую сторону). но разговор пошел не в том русле..
← →
Сергей М. © (2007-10-10 15:51) [39]
> это уже постобработка, но ей надо перелопатить гигабайты
> данных и длиться это может долгие часы
Купите под эту задачу приличную по производительности станцию и наймите программиста.
← →
clickmaker © (2007-10-10 15:58) [40]
> почему так разнится значение выделяемой процессу памяти
> на разных компах
потому что процесс, как правило, не одинок.
А для перелопачивания гектаров данных за многие часы нужна и правда станция типа mainframe, обычный "офисный" ПК, пусть даже и сервер, для этого мало подходит
← →
Leonid Troyanovsky © (2007-10-10 16:11) [41]
> clickmaker © (10.10.07 15:58) [40]
> и правда станция типа mainframe, обычный "офисный" ПК, пусть
> даже и сервер, для этого мало подходит
Да и в Windows как-то слабо верится.
--
Regards, LVT.
← →
Сергей М. © (2007-10-10 16:17) [42]Впрочем, м.б. и не все так страшно выглядит на самом деле.
Просто за дело должен взяться опытный программист, способный реализовать алгоритм наиболее оптимальным (с т.з. производительности) способом, с учетом особенностей конкретной программно-аппаратной среды.
← →
Denis__ © (2007-10-10 17:42) [43]Массивы гигабайтного размера? Зачем?
← →
Ping (2007-10-10 18:08) [44]Массивы гигабайтного размера? Зачем?\
Аэрофотосъемкой они занимаются, судя по контексту. А потом перелопачивают гигабайты изображений. То ли фильтруют каким-то особым способом, то ли и вовсе векторизируют. То есть, это единственное оправдание "грузить все в память", ибо векторизируемый объект может оказаться на границе загруженного участка, и тогда его трудно связать с тем, что окажется на соседнем участке.
Хотя, возможно, я ошибаюсь.
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.11.04;
Скачать: [xml.tar.bz2];
Память: 0.57 MB
Время: 0.063 c