C ++ среда / IDE, чтобы избежать многократного чтения больших наборов данных - PullRequest
0 голосов
/ 02 июня 2018

В настоящее время я работаю над большим набором данных (примерно миллиард точек данных), и я решил использовать C ++ поверх R, в частности, для удобства распределения памяти.Тем не менее, похоже, что не существует эквивалента R Studio для C ++ для того, чтобы «хранить» набор данных и избегать необходимости читать данные каждый раз, когда я запускаю программу, что занимает очень много времени ... Какиеметоды, которые пользователи C ++ используют для больших данных, чтобы читать данные «раз и навсегда»?

Спасибо за вашу помощь!

Ответы [ 3 ]

0 голосов
/ 02 июня 2018

как избежать многократного чтения большого набора данных.Какие методы используют пользователи C ++ для больших данных, чтобы читать данные «раз и навсегда»?

Я не знаю ни одного инструмента C ++ с такими возможностями, но я сомневаюсь, что у меня естькогда-либо искал ... кажется, что вы могли бы сделать.Ключевые слова выглядят как «фрейм данных» и «статистический анализ» (и C ++).


Если вы знаете формат «набора данных» и хотите обрабатывать необработанные данные не более одного раза, выможет рассмотреть возможность использования общей памяти Posix.

Я могу себе представить, что (а) «чрезвычайно трудоемкое» усилие может (считывать и) преобразовывать «необработанные» данные и записывать в «набор данных» (файл), подходящий для будущих усилий (т. Е.'раз и навсегда').

Тогда (b) будущие усилия могут просто «отобразить» созданный «набор данных» (файл) в область памяти программы, все готово для использования без (или, по крайней мере, значительно сокращено) времени.усилия.

Расширение карты памяти вашей программы связано с использованием доступа Posix к общей памяти.(В Ubuntu 17.10 он есть, я «осторожно» использовал его в C ++). Терминология включает в себя: shm_open, mmap, munmap, shm_unlink и некоторые другие.

Из 'man mmap':

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

0 голосов
/ 01 августа 2018

как избежать многократного чтения большого набора данных.Какие методы используют пользователи C ++ для больших данных, чтобы читать данные «раз и навсегда»?

Недавно я повторил попытку измерения длительности переключения контекста std :: thread (в моей Ubuntu17.10, 64 битный рабочий стол).Мое приложение записало <30 миллионов записей за 10 секунд времени измерения.Я также экспериментировал с более длительным временем измерения и с большими захватами.</p>

В рамках сбора отладочной информации я решил записать промежуточные результаты в текстовый файл для проверки того, что будет входить в анализ.

Код потратил всего 2,3 секунды, чтобы сохранить эту информацию в текстовом файле захвата.Мое оригинальное программное обеспечение затем приступит к анализу.

Но эта задержка с тестированием результатов анализа (> 12 сек = 10 + 2,3) быстро стала утомительной.

Мне показалось, что анализ труден иначе, и я понял, что могу сэкономить времяпутем сбора промежуточных данных и, таким образом, избегая большинства (но не всех) измерений и сбора данных.Таким образом, отладочный захват в промежуточный файл стал удобным разделением для общих усилий.

Часть 2 приложения split считывает промежуточный файл <30 миллионов байт за несколько менее 0,5 секунд, что значительно сокращает цикл разработки анализа (edit-compile-link-run -valu), которая была (обычно) больше не обременена 12+ вторым показателем и генератором данных.</p>

Хотя 28 M байт не являются БОЛЬШИМИ данными, я оценил экономию времени на моих усилиях по разработке кода анализа.


К вашему сведению - мой промежуточный файл содержал по одной букве для каждой записи потокав событие критической секции ».С 10 нитями буквы были «A», «B», ... «J».(напоминает мне о кодировке днк)

Для каждого потока мой анализ поддерживал количество подсчетов на поток.В тех случаях, когда vxWorks «балансирует» потоки, заблокированные на семафоре, Linux НЕ ... что было для меня новостью.

Каждый поток проходил разное количество раз через один критический раздел, но каждый поток получал около10% возможностей.

Техника: простой закодированный текстовый файл с захваченной информацией, готовой для анализа.

Примечание: я ожидал проверить передачу вывода части приложения 1 в часть приложения 2Думаю, все еще мог.WIP.

0 голосов
/ 02 июня 2018

Если я понимаю, чего вы пытаетесь достичь, то есть один раз загрузить некоторые данные в память и использовать одни и те же данные (в памяти) с несколькими запусками вашего кода, с возможными изменениями в этом коде, такой IDE не существует, так какIDE не предназначен для хранения каких-либо данных.

Что вы можете сделать, это сначала загрузить данные в некоторую базу данных в памяти и написать программу на С ++ для чтения данных из этой базы данных вместо чтения их непосредственно из источника данных в C ++.

...