Файл: Лабораторная работа 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;

}

Результат работы программы



Ответы на вопросы:


  1. Какая версия compute capability у архитектуры NVIDIA Fermi?

Ответ: у FERMI GF104 - 2.1


  1. Какая максимальная размерность блока у GPU с compute capability 3.0?

Ответ: 1024 по X, 64 по Y и Z.

  1. Предположим, вы используете одномерную сетку и блок. Если максимальная размерность сетки на устройстве 65535, а максимальная размерность блока 512, какое максимальное количество нитей может быть запущено на GPU?

Ответ: 65535*512=33553920


  1. При каких условиях программист предпочтет не запускать максимальное количество нитей?

Ответ: разделяемая память или регистры, используемые всеми потоками


  1. Что может помешать программе запустить максимальное количество нитей?

Ответ: При разделяемой памяти или регистров, используемых всеми потоками


  1. Что такое разделяемая память?

Ответ: быстрая память с возможностью чтения и записи, доступная для всех нитей в блоке


  1. Что такое глобальная память?

Ответ: память с возможностью чтения и записи, доступная для абсолютно всех потоков


  1. Что такое константная память?

Ответ: быстрая память для чтения, которая не меняется во время выполнения ядра


  1. Что характеризует размер варпа в GPU?

Ответ: количество потоков, которые работают синхронно


  1. Поддерживаются ли числа двойной точности в GPU версии 1.3?

Ответ: Поддержка чисел двоичной точности началась с версии 1.3