Ресурсы для высокопроизводительных вычислений на С++

Я ищу книги или онлайн-ресурсы, которые подробно описывают методы программирования для высокопроизводительных вычислений с использованием С++.

Ответы

Ответ 1

практически весь код HPC, о котором я слышал, предназначен либо для решения систем линейных уравнений, либо для БПФ. Вот несколько ссылок, чтобы вы могли выпустить, по крайней мере, в используемых библиотеках:

  • BLAS - стандартный набор подпрограмм для линейной алгебры - материал, такой как матричное умножение
  • LAPACK - стандартный набор подпрограмм линейной алгебры более высокого уровня - материал, подобный LU decomp.
  • ATLAS - Оптимизированная реализация BLAS
  • FFTW - Оптимизированная реализация FFT
  • PBLAS - BLAS для распределенных процессоров
  • SCALAPACK - распределенная реализация LAPACK
  • MPI - Библиотека сообщений для распределенных систем.
  • PETSc - Масштабируемые нелинейные и линейные решатели (расширяемые пользователем, интерфейс намного выше)

Ответ 2

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

(Нет: я не работаю для Intel, но счастливым клиентом у них есть.)

Ответ 4

Trilinos набор библиотек и пакетов предлагает широкий спектр библиотек промежуточного программного обеспечения для HPC, включая разреженные, итеративные линейные решатели; нелинейные решатели; собственные решатели; Интеграторы ODE и DAE, включая анализ чувствительности; оптимизация (как инвазивный, так и черный ящик); интерфейсы конечных элементов; сетчатые интерфейсы; переобуславливатели; и т.д. Все эти пакеты разработаны с использованием довольно современных методов С++ (есть API-интерфейсы Python, а также некоторые C и Fortran). С большим успехом использовались в очень больших масштабах параллельные (5000+ CPU) симуляции исключительных последствий (дизайн ядерного оружия). Эти пакеты предлагают большой набор возможностей, которые намного выше, чем BLAS и т.д.

Ответ 5

Несмотря на то, что он старше 14 лет, новаторская работа Expression Templates по-прежнему считается одной из самых исключительных работ на С++ за многие годы. Быстро, эффективно, безопасно... Я использовал методы, и они действительно замечательные.

Edit: В случае, если вышеуказанная ссылка остается нарушенной, здесь альтернативная ссылка для шаблонов выражений. В этой статье DDJ приводятся оригинальные работы Veldhuizen.

Ответ 6

Просмотрите Eigen Vector/Matrix library. Api очень изящна, и результирующие программы быстро растут (из-за явной векторизации для архитектур SSE2).

Ответ 7

Взгляните на АДАПТИВНАЯ среда связи (ACE). Это библиотека шаблонов и объектов для высокопроизводительных приложений на С++. Он имеет отличные кросс-платформенные примитивы для потоковой передачи, сетей и т.д.

Ответ 8

Независимо от того, что вы пишете, и сколько вы разрабатываете для производительности с самого начала, шансы довольно хорошие, это будет полезно для настройки производительности. Обычно чем больше программа, тем больше она приносит пользу. ЭТО - простой и эффективный способ сделать эту настройку. Он основан на "глубокой выборке", методе, который дает точность диагностики при снятии подчеркивания.

Вы также можете посмотреть http://en.wikipedia.org/wiki/Performance_analysis#Simple_manual_technique