Файл: Лабораторная работа 1 Обращение к устройству студент группы биб2102 Скороходов. К. М проверил Соловьев А. С. Москва.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 12.01.2024
Просмотров: 29
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Министерство цифрового развития, связи и массовых коммуникаций Российской Федерации
Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования «Московский технический университет связи и информатики»
Кафедра «Системное программирование»
Предмет: «Распределенные вычислительные системы»
Лабораторная работа №1
Обращение к устройству
Выполнил: студент группы
БИБ2102
Скороходов.К.М
Проверил: Соловьев А.С.
Москва
2022
Цель работы
Цель данной лабораторной – дать студентам представление об аппаратных ресурсах CUDA наряду с их возможностями. Не требуется понимание кода, но важно понять процесс его компилирования и исполнения, который будет использоваться в следующих модулях.
Код программы:
#include
#include
#include
#include "wb.h"
#include
int main(int argc, char** argv) {
int deviceCount;
wbArg_read(argc, argv);
cudaGetDeviceCount(&deviceCount);
wbTime_start(GPU, "Getting GPU Data."); //@@ Запуск таймера
for (int dev = 0; dev < deviceCount; dev++) {
cudaDeviceProp deviceProp;
cudaGetDeviceProperties(&deviceProp, dev);
if (dev == 0) {
if (deviceProp.major == 9999 && deviceProp.minor == 9999) {
wbLog(TRACE, "No CUDA GPU has been detected");
return -1;
}
else if (deviceCount == 1) {
//@@ WbLog предоставляет API логгирования (схожее с Log4J).
//@@ Функции логгирования wbLog принимает уровень
//@@ логгирования, который может быть одним из
//@@ OFF, FATAL, ERROR, WARN, INFO, DEBUG или TRACE, и
//@@ сообщение, которое нужно напечатать.
wbLog(TRACE, "There is 1 device supporting CUDA");
}
else {
wbLog(TRACE, "There are ", deviceCount,
" devices supporting CUDA");
}
}
wbLog(TRACE, "Device ", dev, " name: ", deviceProp.name);
wbLog(TRACE, " Computational Capabilities: ", deviceProp.major, ".",
deviceProp.minor);
wbLog(TRACE, " Maximum global memory size: ",
deviceProp.totalGlobalMem);
wbLog(TRACE, " Maximum constant memory size: ",
deviceProp.totalConstMem);
wbLog(TRACE, " Maximum shared memory size per block: ",
deviceProp.sharedMemPerBlock);
wbLog(TRACE, " Maximum block dimensions: ",
deviceProp.maxThreadsDim[0], " x ", deviceProp.maxThreadsDim[1],
" x ", deviceProp.maxThreadsDim[2]);
wbLog(TRACE, " Maximum grid dimensions: ", deviceProp.maxGridSize[0],
" x ", deviceProp.maxGridSize[1], " x ",
deviceProp.maxGridSize[2]);
wbLog(TRACE, " Warp size: ", deviceProp.warpSize);
}
wbTime_stop(GPU, "Getting GPU Data."); //@@ остановка таймера
return 0;
}
Результат работы программы
Ответы на вопросы:
-
Какая версия compute capability у архитектуры NVIDIA Fermi?
Ответ: у FERMI GF104 - 2.1
-
Какая максимальная размерность блока у GPU с compute capability 3.0?
Ответ: 1024 по X, 64 по Y и Z.
-
Предположим, вы используете одномерную сетку и блок. Если максимальная размерность сетки на устройстве 65535, а максимальная размерность блока 512, какое максимальное количество нитей может быть запущено на GPU?
Ответ: 65535*512=33553920
-
При каких условиях программист предпочтет не запускать максимальное количество нитей?
Ответ: разделяемая память или регистры, используемые всеми потоками
-
Что может помешать программе запустить максимальное количество нитей?
Ответ: При разделяемой памяти или регистров, используемых всеми потоками
-
Что такое разделяемая память?
Ответ: быстрая память с возможностью чтения и записи, доступная для всех нитей в блоке
-
Что такое глобальная память?
Ответ: память с возможностью чтения и записи, доступная для абсолютно всех потоков
-
Что такое константная память?
Ответ: быстрая память для чтения, которая не меняется во время выполнения ядра
-
Что характеризует размер варпа в GPU?
Ответ: количество потоков, которые работают синхронно
-
Поддерживаются ли числа двойной точности в GPU версии 1.3?
Ответ: Поддержка чисел двоичной точности началась с версии 1.3