Need help! Не решается задача, упираюсь в ограничения железа - страница 2

 
ALXIMIKS:

вспомнил о сайте, там похожею задачу обговаривали и варианты ее решения на с++.

Спасибо, почитаю.

 

IvanIvanov:
я конечно извинсь а что если попробовать 64 бита или мт крутит только 32 
я по наивности считал что такая высоко математичная штука должна вращаться на 64х битах
взять те же проги по расчету аэродинамики летательных аппаратов так они в принципе не работают на 32х
по поводу основного аргумента что на 32х быстрее машина шевелится знаю но вот это уже действительно проблема железа имхо

Переход на х64 просто отодвинет потолок, при чем не очень далеко. Не бежать же мне еще за 16 Гб памяти? ;)

 
anonymous:

1. Естественно, использовать x64 систему.

2. Арендовать машину помощнее в облаке Amazon EC2 и сделать расчёты на ней.

3. Использовать сжатые данные, распаковывать в памяти на лету. Вещественные данные лучше сжимаются, если разделить их на потоки (знак/мантисса/экспонента); можно использовать 12-bit float (в ущерб точности).

4. Сделать расчёт вне советника чем-нибудь, что умеет работать с большими данными (Matlab/R/etc).

1,2: это про отодвигание потолка, а хочется решить задачу без привязки к конкретной цифре.

3. Проблема не в объеме данных на диске, а наоборот - на объеме в памяти. Я могу сжать еще на процентов 10-20, но, повторюсь, это не решит проблему.

4. Пока питаю надежду остаться в песочнице. Чтоб потом копировщики/синхронизаторы не писать...

 

Спасибо за участие! 

 
komposter:
 Переход на х64 просто отодвинет потолок, при чем не очень далеко. Не бежать же мне еще за 16 Гб памяти? ;)

Вы же не всё время работаете с такими данными? Пишите сразу под x64 и запускайте на amazon, когда нужно. Можно и дебажить там же на micro инстансе.

Если всё-таки такая задача возникает постоянно - 64 ГБ памяти можно купить примерно за $1k, e.g. Corsair Vengeance Pro CMY64GX3M8A2133C11.

Либо пересмотреть устройство алгоритма, чтобы он мог работать в один проход по данным

p.s. Можно и в памяти сжатые данные хранить, а разжимать по мере необходимости на время, достаточное для обработки

 
komposter:

Спасибо, почитаю.

 

Переход на х64 просто отодвинет потолок, при чем не очень далеко. Не бежать же мне еще за 16 Гб памяти? ;)

издеваетесь :-)
 я чайник у меня на компе 8гиг играться
 

Вариант 1. Порезать файл на кусочки.

Вариант 2. Тоже порезать на кусочки, но еще систематизировать. Как слово в словаре ищем. Начинается на букву "А" ищем в файле "A.txt". Так можно расположить данные в форме дерева (по аналогии с словарем: папки А, Б... в папке А папки АА, АБ и т.д.), поиск будет выполняться очень быстро.

 
komposter:

Поэтому читать придется много раз, а это:

  • ооооочень медленно
  • протрет дырку в винте

виртуальный RAM диск в помощь ;)

и дырки не будет, и скорость понравится.

и весь объем сразу доступен.

резать на куски не надо, ибо по задаче куски не подходят

 
Я бы попытался порезать файл на куски и стал бы загружать каждый кусок по мере необходимости (т.е. как Дима предлагает). Точнее сказать сложно, т.к. зависит от конкретной задачи. Но проблема интересная, держи в курсе о своих находках.
 
komposter:

1. Это и есть кэш... Или я не понимаю, что ты имеешь в виду. Мой вариант с постоянным чтением необходимых кусков?

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

komposter:

Черт...

Те же яйца, только сбоку. Чтение, может, и ускорится, но глобально проблему это не решает.

Ну я думал повторяющиеся действия в пределах небольшого масштаба.

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

anonymous:

3. Использовать сжатые данные, распаковывать в памяти на лету. Вещественные данные лучше сжимаются, если разделить их на потоки (знак/мантисса/экспонента); можно использовать 12-bit float (в ущерб точности).

4. Сделать расчёт вне советника чем-нибудь, что умеет работать с большими данными (Matlab/R/etc).

Или так (с)
 
Без знания специфики структуры данных и выполняемых операций можно давать лишь общие советы. Суть одного из вариантов в том, чтобы в один или несколько проходов (но без протирания диска) преобразовать сырые данные в метаданные меньшего размера - те же 4 Гб - и дальше работать уже с метаданными (агрегатные значения, разрезы по какому-то параметру и пр.). Если это не получается, то - загнать данные в СУБД.
 
komposter:

Есть большой объем информации (около 20 Гб в текстовом файле).

...

А если этот файл сжать архиватором, какой получится объём (ведь текст должен очень хорошо сжиматься)?