насколько большим может быть объект
От: Hard_Club  
Дата: 11.03.15 10:43
Оценка:
Есть задача обрабатывать некую матрицу. Причем она может быть размера приемлемого для размещения в памяти так и большой (тогда надо ее дампить на диск).

Обычно матрицы создаются как vector<vector<int>> размера N. Вопрос — как определить єто N, чтобы матрицу еще можно было разместить в памяти?
Re: насколько большим может быть объект
От: Igore Россия  
Дата: 11.03.15 11:04
Оценка:
Здравствуйте, Hard_Club, Вы писали:

H_C>(тогда надо ее дампить на диск).

Забудь об этом решении, скорость работы будет такая что программа будет уже никому не нужна. Писал я класс для работы с матрицей с диска, после проверки это решение выкинули. Поэтому смотри в сторону uBLAS, Eigen и т.д.

H_C>Обычно матрицы создаются как vector<vector<int>> размера N. Вопрос — как определить єто N, чтобы матрицу еще можно было разместить в памяти?

Если получилось сделать resize то место есть
Зависит от того какое у тебя приложение, x64 или x32, и есть ли достаточно непрерывной памяти.
Re[2]: насколько большим может быть объект
От: Hard_Club  
Дата: 11.03.15 11:40
Оценка:
Этот ubLas умеет дампить?
Re: насколько большим может быть объект
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 11.03.15 11:58
Оценка: +1
Здравствуйте, Hard_Club, Вы писали:

H_C>Есть задача обрабатывать некую матрицу. Причем она может быть размера приемлемого для размещения в памяти так и большой (тогда надо ее дампить на диск).

Насколько большая? Тут многие до тебя говорили про большие размеру, а на поверку оказалось меньше 10 мб. Если матрица в сотни мегабайт смотри как решают эти проблемы в картографии и как обрабатывают аэрофотоснимки. Подход будет тот же. Где-то тут были такие вопросы уже, кстати.
H_C>Обычно матрицы создаются как vector<vector<int>> размера N. Вопрос — как определить єто N, чтобы матрицу еще можно было разместить в памяти?
Нет, обычно они создаются на базе vector<int> размера N*M.
Sic luceat lux!
Re[2]: насколько большим может быть объект
От: nen777w  
Дата: 11.03.15 21:02
Оценка:
H_C>>(тогда надо ее дампить на диск).
I>Забудь об этом решении, скорость работы будет такая что программа будет уже никому не нужна. Писал я класс для работы с матрицей с диска, после проверки это решение выкинули.
Ну есть навпример memory_mapped файлы (смотреть boost::interprocess)

I>Поэтому смотри в сторону uBLAS, Eigen и т.д.

Это смотря какая матрица, если разреженная тогда да, а так нет.

H_C>>Обычно матрицы создаются как vector<vector<int>> размера N. Вопрос — как определить єто N, чтобы матрицу еще можно было разместить в памяти?

I>Если получилось сделать resize то место есть
I>Зависит от того какое у тебя приложение, x64 или x32, и есть ли достаточно непрерывной памяти.
Вовсе не зависит, точнее завист, но до какого то предела, который в зависимости от задачи может быть легко достигнут.
Re[2]: насколько большим может быть объект
От: Pavel Dvorkin Россия  
Дата: 12.03.15 02:24
Оценка:
Здравствуйте, Igore, Вы писали:

I>Зависит от того какое у тебя приложение, x64 или x32, и есть ли достаточно непрерывной памяти.


Поскольку там vector<vector<int>>, непрерывной памяти (виртуальной) в большом количестве вовсе не нужно, нужен лишь суммарный объем. Храниться непрерывно будут элементы vector<int>, а сами эти вектора будут лежать как угодно.

В терминах без STL :

int a[N][M] требует непрерывной памяти N*M*sizeof(int)

int* a[N] (или int**a = new int*[N] ) с последующим a[i] = new int [M]

— не требует, нужно лишь, чтобы разместились все строки, на которые показывает a[i], то есть их суммарный объем будет тот же, но лежать эти строки могут как угодно друг относительно друга
With best regards
Pavel Dvorkin
Re: насколько большим может быть объект
От: Pavel Dvorkin Россия  
Дата: 12.03.15 02:29
Оценка:
Здравствуйте, Hard_Club, Вы писали:

H_C>Есть задача обрабатывать некую матрицу. Причем она может быть размера приемлемого для размещения в памяти так и большой (тогда надо ее дампить на диск).


Можно использовать memory mapped файлы. В этом случае можно иметь матрицу сколь угодно большого размера, периодически маппируя ее куски в адресное пространство. Дампить не придется, так как матрица автоматически записывается в файл, на основе которого сделан мэппинг.
With best regards
Pavel Dvorkin
Отредактировано 12.03.2015 2:29 Pavel Dvorkin . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.