Софт: Windows 7, 64bit; CUDA Toolkit 6.0; Microsoft Visual Studio 2008
Начал осваивать CUDA с чтения книги:
Сандерс Дж., Кэндрот Э. Технология CUDA в примерах. Введение в программирование графических процессоров. — М.: ДМК Пресс, 2013. — 232 с.: ил. — ISBN: 978-5-94074-504-4.
Что необходимо для работы с CUDA
Для работы с CUDA необходимо иметь:
- графический процессор (видеокарту), поддерживающий архитектуру CUDA;
- драйвер для этого устройства от NVIDIA;
- компилятор языка C;
- комплект средств разработки CUDA (CUDA Toolkit).
Пункты 1-3 у меня были, включая компилятор из набора Visual Studio 2008.
CUDA Toolkit можно скачать здесь. Вместе с ним поставляются многочисленные примеры, которые находятся в папке
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v6.0
В папке 0_Simple\template
находится заготовка для стандартного CUDA-проекта.
Как создавать проекты CUDA в Visual Studio и запускать примеры из книги
В VS при создании нового проекта выбираем тип NVIDIA/CUDA 6.0 и из шаблонов: CUDA Runtime 6.0.
После этого VS формирует заготовку проекта, содержащую единственный исходный файл kernel.cu
. Он нам не нужен. Вместо него вставляем пример из книги:
//hello.cu, п.3.2
#include <iostream>
__global__ void kernel( void ) {
}
int main( void ) {
kernel<<<1,1>>>();
printf( "Hello, World!\n" );
return 0;
}
Расширение файла .CU
имеет значение! Только в таких файлах можно пользоваться CUDA-расширениями языка C++.
Чтобы настроить подсветку синтаксиса в файлах .CU
как в C++, нужно в окне
Tools -> Options -> Text Editor -> File Extension указать расширение .cu
и в списке Editor: — Microsoft Visual C++. После перезапуска VS получим подсветку синтаксиса.
Сообщения об ошибках
В примере из Главы 4 "Вычисление фрактала Джулиа на GPU" (который, вообще говоря, называется множество Жюлиа){rel="nofollow"}, при компиляции появляются сообщения вида:
julia_gpu.cu(42): error: calling a host function("cuComplex::cuComplex") from a __device__/__global__ function("julia") is not allowed
...
Для исправления нужно добавить квалификатор __device__
в конструктор структуры:
__device__ cuComplex( float a, float b ) : r(a), i(b) {}
Решение проблемы "Видеодрайвер nVidia перестал отвечать и был успешно восстановлен"
Такое сообщение появилось у меня при выполнении примера "Вычисление фрактала Джулиа на GPU" (глава 4). Драйвер видеокарты стоял самый новый, конфликтов с предыдущими версиями драйвера не обнаружилось. Видеокарта работала штатно и не была перегрета. Тем не менее сообщение появлялось.
Обзор возможных способов решения этой проблемы приведен здесь. В моем случае помог следующий рецепт.
Необходимо настроить в системном реестре два параметра:
TdrLevel
– управляет восстановлением. По умолчанию равен "3", что означает „TdrLevelRecover – Recover on timeout”, т. е. автоматическое восстановление по истечению времени задержки (TdrDelay
). Значение "0" соответствует „TdrLevelOff – Detection disabled”, т. е. отключению детектирования ошибок драйвера.TdrDelay
– время задержки (в секундах), иначе: время реагирования на бездействие драйвера. Значение по умолчанию равно "2". При отключении детектирования ошибок (TdrLevel = 0
) значениеTdrDelay
игнорируется.
Желательно не отключать проверку ошибок, а увеличить время задержки, установив его равным 3-м или более секундам. Значение подбирается экспериментально: можно начать с 10, и постепенно уменьшать время задержки.
Ключи TdrLevel
и TdrDelay
устанавливаются в редакторе реестра, в ветке HKLM\System\CurrentControlSet\Control\GraphicsDrivers
. Возможно, что их придется создать. Ключи имеют тип REG_DWORD, не забудьте указать галочку «десятичная система счисления» при редактировании параметра.
Изменения в реестре вступят в силу после перезагрузки системы.
В результате получим:
Комментарии
comments powered by Disqus