Мощь графического процессора (GPU)

Опубликовано февраля 19, 2018 в Технология CUDA

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

Хотя первоначально GPU предназначались для визуализации компьютерной графики на экране монитора (и по сей день используются для этой цели), позже они оказались востребованы и в других, столь же требовательных к вычислительным ресурсам областях науки, техники, финансовой математики и др. Программы для GPU, которые решают задачи, не связанные с графикой, мы будем называть программами общего назначения (general purpose). Для чтения этой статьи необходим опыт работы с языками С или C++, но разбираться в компьютерной графике, к счастью, необязательно. Вообще не нужно! Программирование GPU просто открывает возможность по-новому — и с большой пользой — применить уже имеющиеся у вас навыки.

Мощь графического процессора (GPU)

Чтобы использовать NVIDIA GPU для решения задач общего назначения, необходимо знать, что такое технология CUDA. Все NVIDIA GPU построены на базе архитектуры, CUD А. Можно считать, что это та основа, на которой компания NVIDIA сконструировала GPU, умеющие решать как традиционные задачи рендеринга, так и задачи общего назначения. Для программирования GPU на основе CUDA мы будем использовать язык CUD А С. Как вы скоро увидите, CUD А С — это по существу язык С1, в который введены расширения, позволяющие программировать массивно-параллельные компьютеры, каковыми являются NVIDIA GPU.

При написании статьи мы ориентировались на опытных программистов на С или C++, не испытывающих затруднений при чтении и написании кода на языке С. Текст, изобилующий примерами, позволит вам быстро освоить разработанный компанией NVIDIA язык программирования CUDA С. Разумеется, мы не предполагаем, что вы уже разрабатывали крупномасштабные программные системы, писали компилятор языка С или ядро операционной системы либо досконально знаете все закоулки стандарта ANSI С. Но в то же время мы не тратим время на обзор синтаксиса языка С или таких хорошо известных библиотечных функций, как malloc () или memcpy (), поскольку считаем, что с этими вопросами читатель уже знаком.

Вы встретите ряд приемов, которые можно было бы назвать общими парадигмами параллельного программирования, но мы не ставили себе целью написать учебник по основам параллельного программирования. Кроме того, хотя мы так или иначе демонстрируем почти все части CUDA API, эта статья не может служить заменой полному справочнику по CUDA API, и мы не углубляемся во все детали всех инструментальных средств, помогающих разрабатывать программы на CUDA С.

Поэтому мы настоятельно рекомендуем читать эту статью вместе со свободно доступной документацией, в частности Руководством по программированию в среде NVIDIA CUDA (NVIDIA CUDA Programming Guide) и Наставлением по рекомендуемым приемам разработки в среде NVIDIA CUDA (NVIDIA CUDA Best Practices Guide). Но не стоит сразу бросаться скачивать эти документы; по ходу изложения мы расскажем, что и когда нужно делать.

Ну и хватит слов, мир программирования NVIDIA GPU на CUDA С ждет вас!