Ресурсы для высокопроизводительных вычислений на С++
Я ищу книги или онлайн-ресурсы, которые подробно описывают методы программирования для высокопроизводительных вычислений с использованием С++.
Ответы
Ответ 1
практически весь код HPC, о котором я слышал, предназначен либо для решения систем линейных уравнений, либо для БПФ. Вот несколько ссылок, чтобы вы могли выпустить, по крайней мере, в используемых библиотеках:
- BLAS - стандартный набор подпрограмм для линейной алгебры - материал, такой как матричное умножение
- LAPACK - стандартный набор подпрограмм линейной алгебры более высокого уровня - материал, подобный LU decomp.
- ATLAS - Оптимизированная реализация BLAS
- FFTW - Оптимизированная реализация FFT
- PBLAS - BLAS для распределенных процессоров
- SCALAPACK - распределенная реализация LAPACK
- MPI - Библиотека сообщений для распределенных систем.
- PETSc - Масштабируемые нелинейные и линейные решатели (расширяемые пользователем, интерфейс намного выше)
Ответ 2
Даже если не FOSS, Intel IPP и MKL библиотеки могут действительно сэкономить вам много времени (как в разработке, так и во время выполнения), если вам нужно выполнить любую из операций, поддерживаемых этими библиотеками (например: обработка сигналов, обработка изображений, математическая математика). Конечно, это зависит от вашей платформы, можете ли вы извлечь выгоду из них.
(Нет: я не работаю для Intel, но счастливым клиентом у них есть.)
Ответ 3
Первое, что может быть прочитано MPI (интерфейс передачи сообщений), который является стандартом де-факто в межкомпонентных соединениях HPC node.
Ответ 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
Ответ 9
Высокая масштабируемость - создание больших, быстрых и надежных веб-сайтов.
http://highscalability.com/
А также:
http://www.ddj.com/hpc-high-performance-computing/