2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2
 
 Re: Оптимальное распределение переменных и динмассивов в памяти
Сообщение08.11.2012, 20:09 
Заслуженный участник


09/09/10
3729
В 2005 году Реймонд Чен писал небольшую программку, которая читала бы txt-файл с китайско-английским словарем и парсила бы его. Писалось на С++, шесть раз переделывалось, пока программа не стала работать "быстро". А некий Рико Мариани (тоже майкрософтовский разработчик) ради хохмы тупо переписал самую первую версию на C# (в лоб, без всяких выкрутасов) и сравнил время работы. Угадайте, где была лучше производительность? Вот реальный график:
Изображение

Синим показано время работы C++ версии: 5.1 и 5.2 — это пятая версия, багованная и исправленная соответственно. Желтым показано время работы C# программы — перевода самой первой версии С++ программы без всякой оптимизации и с небольшой оптимизацией. Причем чтобы достичь такого увеличения скорости работы С++ программы, Реймонду пришлось: написать собственный файловый ввод-вывод; собственный класс для строк; собственный выделитель памяти; собственный преобразователь кодировок.

Какой отсюда следует главный вывод? Такой, что вся эта оптимизация бессмысленна — ну было полторы секунды, стала одна десятая, ну и что? Тут и пять секунд — приемлемый результат. Зато сколько труда и времени программиста ушло — а время программиста куда дороже времени компьютера.

Так что Sonic86, если интересно — почитайте, конечно, но особо голову не забивайте. Вот если реально будет тормозить, и именно из-за организации работы с памятью... у вас же есть профилировщик, да?.. вот тогда и будете свои структуры данных изобретать.

 Профиль  
                  
 
 Re: Оптимальное распределение переменных и динмассивов в памяти
Сообщение08.11.2012, 20:33 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Joker_vD в сообщении #641768 писал(а):
Такой, что вся эта оптимизация бессмысленна — ну было полторы секунды, стала одна десятая, ну и что?

Ну, в данном случае бессмысленна. А вот если вам удаётся время счёта с месяцев до часов сократить - ещё подумаешь. Впрочем, такие задачи обычно оптимизируются плохо...

 Профиль  
                  
 
 Re: Оптимальное распределение переменных и динмассивов в памяти
Сообщение08.11.2012, 20:48 
Заслуженный участник


27/04/09
28128
Sonic86 в сообщении #641673 писал(а):
С другой стороны, мне сказали, что в C++.net есть какие-то двойные списки, в которых 2-й аргумент может быть произвольным типом. TList и THashMap вроде. Если найду, наверное буду их использовать. Неохота мучиться...
Возможно, вы имели в виду generics? Это классы, параметризованные какими-нибудь типами (примерно как шаблоны в C++, но с информацией, доступной во время выполнения, и аккуратной реализацией). Например, типу vector<int> в C++ соответствует List<int> в .NET. Разумеется, параметров-типов может быть много: например, Dictionary<K, V>, реализующий доступ к значениям типа V, индексируя их ключами типа K; он реализован на хеш-таблице и, по идее, аналогичен hashtable из STL, но сколько у этого шаблона параметров — не знаю (если это вообще шаблонный класс). Есть ещё Hashtable, но это не generic, просто класс без параметров, и потому возвращает Object, и к нужному типу надо будет приводить. Есть ещё специализированные классы (параметры сейчас не помню, но должны быть, кроме последнего, те же, что и у Dictionary): HybridDictionary — использует хеш-таблицу при большом числе элементов и список при маленьком, OrderedDictionary — можно индексировать ещё и целыми числами, SortedDictionary — поддерживается упорядоченность записей, StringDictionary — оптимизирован для строк. В STL тоже должно быть разнообразие.

Кстати, имена типов в .NET не начинаются с T (кроме интерфейсов, которые всегда с I и перечислений, которые рекомендуется называть словом во множественном числе).

 Профиль  
                  
 
 Re: Оптимальное распределение переменных и динмассивов в памяти
Сообщение10.11.2012, 07:36 
Заслуженный участник


08/04/08
8562
Всем спасибо большое. Значит буду про STL читать. Я про нее пока ничего не знаю. :-( А узнать все прочее было все равно не вредно.

Joker_vD в сообщении #641768 писал(а):
Вот реальный график:
Я его не вижу :-(

Joker_vD в сообщении #641768 писал(а):
Так что Sonic86, если интересно — почитайте, конечно, но особо голову не забивайте. Вот если реально будет тормозить, и именно из-за организации работы с памятью... у вас же есть профилировщик, да?.. вот тогда и будете свои структуры данных изобретать.
Да я просто ознакомится хотел. Просто с самого начала было непонятно, как обращаться к элементам массива, который в памяти разбит на куски. Да и забыл я про С++ - ные типы.
А кто такой профилировщик?
И вообще - я дома балуюсь.

arseniiv в сообщении #641803 писал(а):
Возможно, вы имели в виду generics?
Я не знаю. Мне сказали на слух ключевые слова, по которым искать, я их написал.

Munin в сообщении #641705 писал(а):
Это хорошо бы, но шишки у всех разные, индивидуальные.
Ну не знаю. Например, тот факт, что пузырьковая сортировка медленнее, чем двоичная, начиная с некоторого числа элементов - это универсальная шишка.

 Профиль  
                  
 
 Re: Оптимальное распределение переменных и динмассивов в памяти
Сообщение10.11.2012, 10:55 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Sonic86 в сообщении #642375 писал(а):
Я его не вижу

Изображение
А так?

Sonic86 в сообщении #642375 писал(а):
А кто такой профилировщик?

Profiler, один из важнейших инструментов программиста, занимающегося оптимизацией. Например, http://en.wikipedia.org/wiki/List_of_performance_analysis_tools#C_and_C++

Sonic86 в сообщении #642375 писал(а):
Ну не знаю. Например, тот факт, что пузырьковая сортировка медленнее, чем двоичная, начиная с некоторого числа элементов - это универсальная шишка.

Ну, речь всё-таки о серьёзных шишках, а не элементарных. Кстати, пузырьковая сортировка медленнее вообще, в том смысле, что у неё асимптотика другая.

 Профиль  
                  
 
 Re: Оптимальное распределение переменных и динмассивов в памяти
Сообщение10.11.2012, 11:04 
Заслуженный участник


08/04/08
8562
Munin в сообщении #642406 писал(а):
А так?
Вижу, спасибо :-)

Munin в сообщении #642406 писал(а):
Profiler, один из важнейших инструментов программиста, занимающегося оптимизацией. Например, http://en.wikipedia.org/wiki/List_of_pe ... #C_and_C++
Ооо....

Munin в сообщении #642406 писал(а):
Ну, речь всё-таки о серьёзных шишках, а не элементарных. Кстати, пузырьковая сортировка медленнее вообще, в том смысле, что у неё асимптотика другая.
А, ну тогда да.

 Профиль  
                  
 
 Re: Оптимальное распределение переменных и динмассивов в памяти
Сообщение10.11.2012, 12:51 
Заслуженный участник
Аватара пользователя


30/01/06
72407

(Оффтоп)

Позволю себе ещё раз напомнить, что преждевременная оптимизация - смертный грех...

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу Пред.  1, 2

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group