В двух словах, основные различия IMO:
- Вы должны заранее знать, каким будет ваше вероятное узкое место (ввод / вывод или ЦП), и сосредоточиться на наилучшем алгоритме и инфраструктуре для решения этой проблемы.Ввод / вывод довольно часто является узким местом.
- Выбор и настройка алгоритма часто доминирует над любым другим сделанным выбором.
- Даже незначительные изменения в алгоритмах и схемах доступа могут повлиять на производительность на несколько порядков.Вы будете много микрооптимизировать.«Лучшее» решение будет зависеть от системы.
- Поговорите со своими коллегами и другими учеными, чтобы воспользоваться их опытом использования этих наборов данных.Много хитростей не найти в учебниках.
- Предварительные вычисления и сохранение могут быть чрезвычайно успешными.
Пропускная способность и ввод / вывод
Первоначально пропускная способность и ввод / вывод частоявляется узким местом.Чтобы дать вам представление: при теоретическом пределе для SATA 3 , чтение 1 ТБ занимает около 30 минут.Если вам нужен произвольный доступ, чтение несколько раз или запись, вы хотите делать это в памяти большую часть времени или вам нужно что-то существенно более быстрое (например, iSCSI с InfiniBand ).В идеале ваша система должна иметь возможность параллельного ввода-вывода , чтобы максимально приблизиться к теоретическому пределу того интерфейса, который вы используете.Например, простой параллельный доступ к разным файлам в разных процессах или HDF5 поверх MPI-2 I / O довольно распространен.В идеале вы также должны выполнять вычисления и ввод / вывод параллельно, чтобы один из двух был «бесплатным».
Clusters
В зависимости от вашего случая, либо я/ O или процессор может быть узким местом.Независимо от того, какой из них, с помощью кластеров, можно добиться значительного увеличения производительности, если вы сможете эффективно распределять свои задачи (пример MapReduce ).Это может потребовать совершенно других алгоритмов, чем типичные примеры из учебников.Тратить время на разработку здесь часто - лучшее время.
Алгоритмы
При выборе между алгоритмами большое значение O алгоритма очень важно, но алгоритмы с аналогичным большим значением Oможет существенно отличаться по производительности в зависимости от местности.Чем менее локальным является алгоритм (т. Е. Чем больше кеша и основной памяти), тем хуже будет производительность - доступ к хранилищу обычно на порядок медленнее, чем к основной памяти.Классическими примерами улучшений могут быть мозаика для умножения матриц или обмен циклами .
Компьютер, язык, специализированные инструменты
Если узким местом является ввод / вывод, это означает, что алгоритмы для больших наборов данных могут извлечь выгоду из большего объема основной памяти (например, 64-разрядной) или языков программирования / структур данных с меньшим потреблением памяти (например, в Python __slots__
может быть полезным), потому что больше памяти может означать меньшее количество операций ввода-вывода на процессорное время.Кстати, системы с ТБ основной памяти не являются неслыханными (например, HP Superdomes ).
Аналогичным образом, если узким местом является ЦП, более быстрые машины, языки и компиляторы, которые позволяют использовать специальные функции архитектуры (например, SIMD , например, SSE ), могутповысить производительность на порядок.
Способ, которым вы находите данные и получаете к ним доступ, а также сохраняете метаинформацию, может быть очень важен для производительности.Вы будете часто использовать плоские файлы или специфичные для домена нестандартные пакеты для хранения данных (например, не реляционные базы данных напрямую), которые позволят вам получить более эффективный доступ к данным.Например, kdb + - это специализированная база данных для больших временных рядов, а ROOT использует объект TTree
для эффективного доступа к данным.Упомянутые вами pyTables будут еще одним примером.