Традиционно каждый программист, изучая новый язык программирования или новую технологию, начинает свой путь с написания программы “Hello, World!” Также поступим и мы, изучая архитектуру CUDA, но, изменив слово “Мир” на “CUDA” — это будет оригинальнее.
Итак, создаем проект, как показано на рис. 1, 2, 3 (рисунки где показано создание проекта, они выше). Назовем его “Hello, CUDA!” (только без кавычек).
Сгенерированный код CUDA разберем ниже (в программе происходит сложение двух векторов), сейчас же очистим наш проект от этого кода и добавим следующий:
#include<iostream> using namespace std; __global__ void kernel( void ){ } int main( void ) { kernel<<< 1, 1 >>>(); cout<< "Hello, CUDA!\n" ; return 0; }
Первые две строки кода объяснять нет смысла, так как это базовые конструкции С++, а вот далее происходит ровным счетом то же самое, что и было в примере 1 – происходит вызов от CPU к GPU, в программе выделяется один блок и один тред, после чего печатаем Hello CUDA на экран и ничего не возвращаем (так как по сути нечего возвращать, мы просто выводим фразу в консоли). Компиляция программы в Visual Studio ничем не отличается от компиляции Си-программ, а ниже продемонстрирована команда, с помощью которой можно скомпилировать и запустить программу в терминале.
1) Nvcc hw.cu —o hw.o – компиляция программы
2) ./hw.o – исполнение программы
Результат показан на следующем рисунке 1.
Появилось предупреждение (warning), которое указывает на то, что архитектуры compute_20, sm_20, sm_21 могут быть удалены в будущем релизе. Оно никак не влияет на работу программы – результат вы видите.
Естественно, это был простейший пример работы с CUDA, но не менее важным, так как он является входной программой в практический курс программирования на CUDA.