В этой серии из двух статей о производительности и памяти описываются базовые принципы и приводятся советы для разработчиков по повышению производительности программного обеспечения. Эти статьи затрагивают, в частности, работу памяти и компоновку. В первой части было рассказано об использовании регистров и о применении алгоритмов блокирования для повышения многократного использования данных. В этой части статьи сначала описывается компоновка данных для обычного распараллеливания — программирования для общей памяти с потоками, а затем распределенные вычисления по сетям MPI. В статье описываются понятия, связанные с распараллеливанием: векторизация (инструкции SIMD) и работа с общей памятью (многопоточная архитектура), а также вычисления с распределенной памятью. И наконец, в этой статье сравниваются компоновки данных «массив структур» (AOS) и «структура массивов» (SOA).
Читать полностью »
Рубрика «Modern Code»
Приводим данные и код в порядок: данные и разметка, часть 2
2016-05-12 в 13:46, admin, рубрики: c/c++, c++, Intel Advanced Vector Extensions, Intel Math Kernel Library, Modern Code, parallel computing, Vectorization, Блог компании Intel, ПрограммированиеПриводим данные и код в порядок: оптимизация и память, часть 1
2016-05-04 в 13:30, admin, рубрики: c/c++, c++, Intel Advanced Vector Extensions, Intel Math Kernel Library, Modern Code, parallel computing, Vectorization, Блог компании Intel, Программирование, метки: Intel Advanced Vector Extensions, Intel Math Kernel Library, Modern Code, Parallel Computing, VectorizationВ этой серии из двух статей говорится о том, как структура данных и памяти влияет на производительность. Предлагаются определенные действия для повышения производительности программного обеспечения. Даже простейшие действия, показанные в этих статьях, позволят добиться существенного прироста производительности. Многие статьи, посвященные оптимизации производительности программ, рассматривают распараллеливание нагрузки в следующих областях: распределенная память (например, MPI), общая память или набор команд SIMD (векторизация), но на самом деле распараллеливание необходимо применять во всех трех областях. Эти элементы очень важны, но память также важна, а про нее часто забывают. Изменения архитектуры программ и применение параллельной обработки влияют на память и на производительность.