Мне не нравятся ответы Брайана Бонди и Чими ...
Возможно, это из-за того, что я начал в другую эпоху, когда 32 КБ считалось большим объемом памяти, а на большинстве "персональных компьютеров" было 8 КБ, и что теперь я работаю в научных вычислениях, где самые большие наборы данных обрабатываются в некоторых из крупнейших систем в мире с тысячами узлов обработки и, казалось бы, невероятные объемы хранения. Поэтому я не упускаю из виду некоторые другие элементы вопроса.
Размер набора данных имеет фантастическое значение. Большинство всех ответов на этот вопрос до сих пор игнорируют это и работают для очень небольших чисел N. Все остальные, кто ответил, предположили, что «все это умещается в памяти» или что-то подобное.
Для больших наборов данных в игру вступают другие факторы, и «большой» зависит от того, какие ресурсы вы должны использовать для решения своей проблемы. Современные системы имеют возможность автономного хранения (например, DVD-дисков), сетевого хранения (например, nfs), оперативного хранения (например, последовательного ATA) и двухуровневого хранения памяти, основной памяти системы и кэш-памяти на кристалле. Какое значение имеют заемные средства и чем больше набор данных, тем больше они имеют значение. Вам может понадобиться, а может и нет, спроектировать доступ к ним в своем «алгоритме», но если вы это сделаете, это действительно имеет значение!
По мере того, как вы увеличиваете масштаб за какой-то конкретный момент - предел одного ЦП и его локальной памяти примерно равен - эти другие факторы становятся все более значительным фактором в накладных расходах рабочей нагрузки. Когда я был Digital, мы сделали одну из первых реальных коммерческих работ на многопроцессорных системах, и я помню, как проводил тест, который показал, что использование одного CPU в качестве одного «блока» возможностей рабочей нагрузки CPU, второго CPU (в тесно связанная система) даст вам в общей сложности около 1,8. То есть второй процессор прибавил около 0,8. В трех случаях увеличение упало примерно до 0,6, а в четырех оно упало намного больше, примерно до 0,2, что в сумме составило около 2,6 для четырехпроцессорного устройства, хотя у нас были некоторые проблемы с сохранением хороших чисел в четырех процессорах из-за других эффектов. (усилия по измерению стали большой долей дополнительного ресурса). ... Суть в том, что многопроцессорные системы не обязательно были такими, какими они были взломаны - в четыре раза ЦП НЕ дает вам в четыре раза больше вычислительной мощности, хотя теоретически вы получаете в четыре раза больше флопов. ... Мы повторили работу над чипом Alpha, первым в истории многоядерным процессором, и результаты оказались довольно хорошими. Конечно, могли бы быть оптимизации, чтобы улучшить долю каждого дополнительного процессора, и, конечно, с тех пор было проделано много работы, чтобы более разумно разделить вычислительные потоки, но вы никогда не достигнете 100% от каждого нового. Частично потому, что все они замедляют некоторые (дополнительные издержки) для координации.
Небольшое междометие - у нас была поговорка об этой работе: "Верни все важные вещи в компилятор!" RISC, понял? Это произошло потому, что сам компилятор должен был организовать рабочую нагрузку, чтобы конкурирующие потоки не наступали друг на друга!
В конечном итоге выполнение обработки действительно массивного перехвата данных требует действительно разумной стратегии перемещения данных из удаленного хранилища данных в локальную память и из нее. И разделение труда в алгоритме абсолютно необходимо. В работе, которую я выполнял с Роберто Мечосо в Калифорнийском университете в Лос-Анджелесе, занимался моделированием глобальной циркуляции, у них был проект брокера данных, который иллюстрирует попытки людей сделать большую работу. Честно говоря, результат был не так хорош, как мог бы, но идеи дизайна, которые в него вошли, заслуживают изучения. ... Предполагая, что вы рассматриваете эту часть своего "алгоритма" - а не только часть, где все сводится к минимуму, управление алгоритмами ресурсами является одним из наиболее важных аспектов разумного, если не оптимального использования ресурсов при выполнении существенных вычислений.
... Надеюсь, это поможет ответить на ваш вопрос.