![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| o2n3e |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 19.8.2011 Репутация: -4 Всего: -5 |
Есть строки вида "X123.123Y123.123I123.123J123.123" - это набор координат. Строк в файле от десятков тысяч, до десятков миллионов.
Задача: Производительность. На парсинг пары миллионов строк есть милисекунд 200, т.е. раза в два быстрее. Изначально было реализованно на atof(), но это медленно. Числа имеют вид .###, т.е. всегда 3 знака после запятой - atof() был выпилен, и заменён atoi(из "123.123" просто убералась точка) - медленно. Моих знаний хватило на Это - медленно, примерно в 10раз бысрее atof() и 6раз atoi(). Числа всегда правильные и в одном порядке, грязный хак "*p > ',' && *p < 'A'" допустим, так же как и stoi() без проверки, числа от -60000.000 до 60000.000 - char g[12] хватит. Прошу указать ляпы, влияющие на производительность и направить на путь истинный, если что-то не так. На моей машине - это 1100мс. Код должен работать на атоме 1.6ггц, который раза в 3медленней моего процессора. Процессор: model name : Intel® Core2 CPU 6320 @ 1.86GHz cpu MHz : 3149.476 Компилятор: gcc версия 4.6.2 (Gentoo 4.6.2 p1.0, pie-0.4.5) -O3 P.S. Опыт программирования месяца 3, реально часов 30-40, прошу сильно не пинать. Это сообщение отредактировал(а) o2n3e - 11.11.2011, 06:31 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
o2n3e, приаттач файл. и побольше.
Добавлено через 14 секунд в смысле, файл со строками. |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
stoi лучше переписать так (чтобы не было лишних разыменоваий указателя):
Добавлено через 5 минут и 18 секунд Компилировать лучше в C без плюсов, использовать можно и в C++ |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
Длина строки = 32 символа. Пара миллионов строк ~ 66,000,000 байт. Милисекунд 200, то есть за секунду нужно обработать 330 мб. Имхо, упрется в производительность диска. 330 Мб/сек - это слишком дофига, если это не RAID сервер какой-нибудь. Хотя может я уже отстал от жизни, и такие диски номальны? |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Вроде похожую скорость выдает самый навороченный SSD.
|
|||
|
||||
| o2n3e |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 19.8.2011 Репутация: -4 Всего: -5 |
200мс - это на парсинг, без учёта io. time ./symbols 123.pp (программка, которую я скопипастил где-то в интернетах.) File contains 28331954 symbols. real 0m0.439s user 0m0.431s sys 0m0.007s time cat 123.pp &> /dev/null real 0m0.008s user 0m0.001s sys 0m0.008s Файл с миллионом строк, 28331954 символов. И да, там ссд стоит 200МБ на чтение. |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
||||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |