(Re) Начиная с С++ (для научных вычислений)
У меня есть честная система программирования на разных языках. Я внедряю свои коды для исследований с использованием MATLAB (в течение последних нескольких месяцев) и впервые замечал разницу в скорости выполнения MATLAB v $C. (Насколько мне нравятся невероятно быстрые возможности прототипирования).
Я ищу пикап С++ и начну использовать его в своих исследованиях. Я знаю ООП и запрограммировал справедливый бит Java (относительно долго назад) и С++ (еще больше назад). Я хотел бы действительно углубиться в С++ сейчас и, следовательно, для этого нужны предложения для ресурсов:
- Какие вещи С++ мне нужно подобрать (STL и.), чтобы действительно использовать С++?
- Что такое хороший учебник/руководство для начала работы?
- Что такое числовые/научные библиотеки для С++? GSL? Есть ли эквивалент (функции) Scipy/Numpy для С++?
Я буду программировать на Linux, поэтому я буду использовать g++.
Также были оценены любые указатели на предыдущие вопросы SO.
Ответы
Ответ 1
Вам нужно как можно быстрее получить доступ к параллельному программированию. Для передачи сообщений мне нравится эта книга Karniadakis and Kirby. Из книг OpenMP, для программирования с распределенной памятью, этот является лучшим.
Если вы можете получить к ним доступ, тогда Intel Building Building Blocks, Maths Kernel Library и Integrated Performance Primitives будут хороши. Если нет, существует множество альтернатив с открытым исходным кодом, начните смотреть Netlib.
О, я почти забыл BOOST, который является обязательным.
Ответ 2
Что касается числа, такого как Numpy, вы должны посмотреть на оба:
Blitz ++ http://www.oonumerics.org/blitz/
и
Jama/TNT http://math.nist.gov/tnt/download.html
Ответ 3
На стороне библиотеки проверьте Armadillo. Он почти дает вам полный синтаксис манипуляции массивом MATLAB и использует LAPACK и BLAS (ATLAS) под капотом.
Ответ 4
Этот учебник абсолютно потрясает, но вы, возможно, не захотите его решать изначально.
http://www.parashift.com/c++-faq/
Обязательно прочитайте STL (стандартную библиотеку шаблонов) и другие материалы, используя такие сайты, как:
http://cplusplus.com/
И, проверьте библиотеку Boost:
http://www.boost.org/
Чтобы действительно использовать С++, вам нужно узнать хотя бы STL, это само по себе позволит вам сэкономить много времени, но, как указывает Parashift, С++ OOP только программирует объекты, если вы не используете динамические привязки.
Ответ 5
TRNG - это библиотека генерации параллельных случайных чисел. Он позволяет создавать несколько независимых потоков и был предназначен для использования в кластерах.