подходы к ускорению научных вычислений на сервере, доступном пользователям интернета - PullRequest
2 голосов
/ 27 сентября 2010

Меня интересует любая общепринятая мудрость, как подходить к следующей проблеме.Обратите внимание, что я аппаратный парень, поэтому будьте осторожны, используя отраслевые знания / терминологию / сокращения.

Я предоставляю онлайн-приложение, которое включает в себя очень сложные математические вычисления, такие как быстрые преобразования Фурье, которые включают в себя вложенныециклы for и очень большие массивы данных (1,6 ГБ каждый).Пользователи в Интернете получат доступ к этому приложению, введут некоторые пользовательские параметры и отправят задание, которое вызывает эти математические вычисления.Чтобы свести время ожидания пользователя к минимуму и разрешить несколько независимых сеансов для нескольких одновременных пользователей (каждый пользователь имеет отдельный поток), мне интересно, как я могу ускорить математические вычисления, которые, как я ожидаю, станут узким местом.

Я не очень ищу советы о том, как структурировать программу (например, используйте целочисленные типы данных, когда это возможно вместо плавающих, используйте меньшие массивы и т. Д.), Но, скорее, мне интересно, как толькоПрограмма завершена, что можно сделать дальше, чтобы ускорить процесс.

Например, как обеспечить автоматический доступ к нескольким ядрам в ЦП в зависимости от спроса?(это сделано по умолчанию или мне нужно как-то управлять процессом?

Или как выполнить параллельную обработку (прерывание цикла между несколькими ядрами и / или машинами)?

Любые практические советы очень ценятся. Я уверен, что я не первый, кто нуждается в этом, поэтому я надеюсь, что существуют лучшие отраслевые подходы, которые масштабируются в зависимости от спроса.

Заранее спасибо!

Ответы [ 2 ]

4 голосов
/ 27 сентября 2010

методы FFT очень распараллеливаемы. Особенно в многомерном.

Классические реализации: FFTW и Intel MKL .

Одним из подходов (в зависимости от доступного оборудования) является пул рабочих потоков (или процессов, в зависимости от конфигурации).

На моей работе мы добились большого успеха с пулом ПК и максимально простыми пакетами данных, которые ставятся в очередь, вычисляются (в многоядерном режиме) одним ПК и отправляются обратно пользователю.

Не пытайтесь микро-оптимизировать математические вещи, используйте вместо этого одну из вышеуказанных библиотек. Сосредоточьтесь на проектировании пакетов, постановке в очередь вычислений (не забывайте о какой-либо квоте / приоритетах), обеспечении надежной отправки вычисленных данных обратно в поток, который должен выполнять объединения пакетов.

В зависимости от оборудования (огромные SMP-компьютеры или фермы ПК) проблемы могут быть разными.

(Если у вас есть выбор, перейдите на фермы ПК.)

Редактировать: Возможно, вы захотите рассмотреть OpenMP для автоматического паралеллизации циклов. Что касается ПК-ферм, они предлагают преимущества перед большими калькуляторами с точки зрения гибкости: они хорошо масштабируются, они не так дороги, и их можно эффективно покупать / продавать / повторно использовать. Linux, вероятно, хороший выбор, но это зависит от того, в какой среде вам удобно.

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

1 голос
/ 27 сентября 2010

Вы не указываете, что вы настраиваете (java, php, .net. Будете ли вы хостить систему или она будет где-то размещаться), так что это всего лишь некоторые мысли:

Насколько мне известно, большинство современных систем, которые вы, вероятно, будете использовать, будут распределять задания по доступным ядрам процессора.

Распределение рабочей нагрузки по нескольким серверам может быть относительно легко выполнено с помощью балансировки нагрузки http://www.loadbalancing.org/

Вы также можете посмотреть на «облачные вычисления», где ваше приложение будет размещено кем-то вроде amazon, и вы платите за то, что используете (более или менее)

http://aws.amazon.com/ec2/

Доступны другие провайдеры.

Я вполне уверен, что если вы предоставите более подробную информацию, вы получите более конкретные ответы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...