![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Массив из 5 и выше млн. элементов типа single-переполнение стека [D6, WinXP]
alexander_ua © (2005-07-21 18:11:00)В процедуре объявляю массив типа single, размерность - 5 млн. элементов. Программа компилируется, запускается. При попытке работать с массивом дает ошибку "Переполнение стека". Размер стека сделал максимально возможным, но это ничего не дало. Как лечить?
alexander_ua (2005-07-25 12:43:00) [1]Уважаемые коллеги! Спасибо говорю ВСЕМ, Вы ничего такого не подумайте! Действительно, всем огромное спасибо, так быстро и качественно решили мою проблему!
Fay (2005-07-22 19:03:00) [2]2 evvcom © (22.07.05 17:41) [35]
Уверен, Юрий Зотов как-нибудь перезимует без этих лавров 8)
evvcom (2005-07-22 17:41:00) [3]
> 2 evvcom
> Ок, спасибо. Попробовал - работает.
Странные люди. Лавры достаются последнему? Еще Юрий Зотов © (21.07.05 18:16) [2] об этом говорил. Пост [32] должен был быть после [2]
Юрий Зотов (2005-07-22 17:27:00) [4]> alexander_ua (22.07.05 17:13) [32]
> матрица 3200*3200 на intel pentium IV 2.8 Гц решается 25
> минут
Это еще немного. Численное решение многих задач матмоделирования тоже сводится к решению СЛАУ и счет может длиться неделями.
Оптимизируйте алгоритм и сами вычисления, больше тут ничего не придумаешь.
Digitman (2005-07-22 17:18:00) [5]
> alexander_ua (22.07.05 17:13) [32]
на то интел придумал хренову тучу технологий/механизмов : MMX, SSE и иже с ними
alexander_ua (2005-07-22 17:13:00) [6]2 evvcom
Ок, спасибо. Попробовал - работает. Теперь уже возникают проблемы другого плана - скорость решения этой самой СЛАУ. Так, к примеру матрица 3200*3200 на intel pentium IV 2.8 Гц решается 25 минут, что же будет на моем домашнем celeron 850... Но это как говорится уже другая песня...
evvcom (2005-07-22 17:10:00) [7]
> я тоже по русски написал - не одного уравнения, а системы.
ну да, систему и я имел ввиду.
> Если я правильно понял вопрос, конечно
Правильно. Тогда динамический массив, однозначно. Имхо.
alexander_ua (2005-07-22 17:06:00) [8]2 evvcom
я не по-русски написал?
я тоже по русски написал - не одного уравнения, а системы.
Только 3000 неизвестных? Или будут другие уравнения, 2000, 2500 неизвестных?
Количество неизвестных определяется исходя из задаваемых пользователем параметров, т.е. к примеру при одних заданных условиях количество=3000, при других условиях - 2500.
Если я правильно понял вопрос, конечно.
evvcom (2005-07-22 16:59:00) [9]
> что Вы имеете ввиду под фразой "Для решения одного единственного уравнения?".
я не по-русски написал?
> "Одной единственной размерности?" - что имеется ввиду?
Только 3000 неизвестных? Или будут другие уравнения, 2000, 2500 неизвестных?
alexander_ua (2005-07-22 14:01:00) [10]2 _Lucky_
Система линейных алгебраический уравнений
a11*x1+a12*x2+...+a1n*xn=b1
...............
an1*x1+an2*x2+...+ann*xn=bn
_Lucky_ (2005-07-22 13:51:00) [11]А чего за уравнения-то? примерчик приведи.
Digitman (2005-07-22 13:34:00) [12]
> Или я неправильно считаю?
да по колено как ты считаешь)
хоть 5 хоть 34 мбайта - такие объемы слишком серьезны для дел, касаемых стека ... впору призадуматься о переделке алгоритма в части переноса таких аллокаций из стека в кучу
Anatoly Podgoretsky (2005-07-22 13:31:00) [13]alexander_ua (22.07.05 13:26) [23]
3000*3000*SizeOf(Single) Я ошибся посчитал для Double
Все равно для такого размера стек потребуется мегабайт 40 и то если нет рекурсии.
alexander_ua (2005-07-22 13:27:00) [14]2 Джо
Ну не знаю, как насчет избаловал... Я бы сказал не так, а к примеру "дал возможность считать то (или с такой точностью), о какой раньше можно было только мечать..."
alexander_ua (2005-07-22 13:26:00) [15]2 Anatoly Podgoretsky
Интересно, почему у Вас такой размер большой получается. Если взять массив 3000*3000 типа single (4 byte), то получаем объем памяти 3000*3000*4/(1024*1024)=34 мегабайта. Или я неправильно считаю?
Джо (2005-07-22 13:26:00) [16]Читаешь про такие массивы и диву даешься - насколько Виндовс людей избаловал, да...
Anatoly Podgoretsky (2005-07-22 13:19:00) [17]TUser © (22.07.05 12:42) [18]
В 80 мегабайт?
alexander_ua (2005-07-22 12:48:00) [18]2 evvcom
Так, поясните тогда пожалуйста что Вы имеете ввиду под фразой "Для решения одного единственного уравнения?". Как я уже сказал, решается СИСТЕМА уравнений.
"Одной единственной размерности?" - что имеется ввиду?
Digitman (2005-07-22 12:48:00) [19]
> В процедуре объявляю массив типа single, размерность - 5
> млн. элементов
больше так не делай.
TUser (2005-07-22 12:42:00) [20]Еще одно решение в догонку - локальный статический массив, + диррективы $M/$MAXSTACKSIZE.