Алгоритмы для оптимизации с быстрой памятью на диске (SSD)?

Почти все компиляторы C ++ будут компилировать код на C.

Я бы порекомендовал использовать Microsoft Visual Studio. Есть бесплатная версия этого.

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

Легко использовать редакторы, такие как Editplus или даже Блокнот. Некоторые из более интересных редакторов имеют подсветку синтаксиса и могут запускать команды в командном окне для вас.

В среде IDE обычно также поддерживается несколько языков. Поэтому, когда вы устали от C и хотите перейти на Python, Java, C ++, некоторые IDE могут помочь вам в этом. Я хотел бы взглянуть на них:

10
задан David Schmitt 29 October 2010 в 13:45
поделиться

5 ответов

Ваш пример хэш-таблиц действительно является ключевой структурой базы данных, которая принесет пользу. Вместо того, чтобы загружать в память целый файл размером 4 ГБ или более для проверки значений, SSD можно проверять напрямую. SSD по-прежнему на порядки медленнее ОЗУ, но вполне разумно иметь хеш-таблицу на 50 ГБ на диске, но не в ОЗУ, если только вы не платите большие деньги за большое железо.

Примером являются базы данных шахматных позиций. У меня более 50 ГБ хешированных позиций. Существует сложный код, чтобы попытаться сгруппировать связанные позиции рядом друг с другом в хэше, поэтому я могу листать по 10 МБ таблицы за раз и надеяться повторно использовать некоторые из них для нескольких похожих запросов о положении. Чтобы сделать это эффективным, требуется масса кода и сложности.

Заменен на SSD, Я смог отбросить всю сложность кластеризации и просто использовать действительно глупые рандомизированные хеши. Я также получил повышение производительности, так как я беру с диска только те данные, которые мне нужны, а не большие куски по 10 МБ. Задержка действительно больше, но чистое ускорение значительно ... а сверхчистый код (20 строк, а не 800+), возможно, даже лучше.

15
ответ дан 3 December 2019 в 18:35
поделиться

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

Я видел, что некоторые системы баз данных извлекают выгоду из этого. MySQL, например, с использованием механизма хранения MyISAM (где записи данных в основном являются прославленными CSV). Однако я думаю, что очень большие хэш-таблицы будут лучшим выбором для хороших примеров.

2
ответ дан 3 December 2019 в 18:35
поделиться

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

Хотя твердотельные накопители действительно значительно перемещают иглу, они по-прежнему намного медленнее, чем операции процессора и физической памяти. Для вашего примера хеш-таблицы 4 ГБ вы можете поддерживать 250+ МБ / с на SSD для доступа к сегментам случайной хеш-таблицы. Для вращательного привода вам повезет, если вы превысите однозначное значение МБ / с. Если вы можете сохранить эту хеш-таблицу размером 4 ГБ в памяти, вы сможете получить к ней доступ со скоростью порядка гигабайт в секунду - намного быстрее, чем даже очень быстрый SSD.

В упомянутой статье перечислены несколько изменений, внесенных MS для Windows 7 при работе на SSD, что может дать вам представление о том, какие изменения вы могли бы рассмотреть. Во-первых, отключена функция SuperFetch для предварительной выборки данных с диска - она ​​предназначена для уменьшения времени произвольного доступа к диску, которое снижается за счет твердотельных накопителей. Дефрагментация отключена, поскольку файлы, разбросанные по диску, не снижают производительность SSD.

3
ответ дан 3 December 2019 в 18:35
поделиться

Некоторые личные мнения, но я считаю, что лучше НЕ :

  • использовать устаревшие модули (использовать для них предупреждения)

  • чрезмерное использование классов и наследования (типично для возможно, унаследованные статические языки)

  • явно используют декларативные алгоритмы (как итерация с для по сравнению с использованием itertools )

  • переопределение функций из стандартной библиотеки, «потому что мне не нужны все эти функции»

  • с использованием функций ради них (снижение совместимости со старыми версиями Python)

  • с использованием метаклассов, когда вам действительно не нужно и в более общем плане делать вещи слишком "волшебными"

  • избегайте использования генераторов

  • (более личный) попробуйте микрооптимизировать код CPython на низкоуровневой основе. Лучше потратьте время на алгоритмы, а затем оптимизируйте, создав небольшую разделяемую библиотеку C, вызываемую ctypes (так легко получить 5-кратное повышение производительности во внутреннем цикле)

  • , используйте ненужные списки, когда достаточно итераторов

  • запрограммируйте проект непосредственно для 3.x до того, как все необходимые библиотеки станут доступны (сейчас этот момент может быть немного спорным!

1
ответ дан 3 December 2019 в 18:35
поделиться

Не обманывай себя. SSD по-прежнему намного медленнее, чем системная память. Любой алгоритм, который предпочитает использовать системную память вместо жесткого диска, все равно будет намного быстрее, при прочих равных.

0
ответ дан 3 December 2019 в 18:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: