Многопроцессорные системы (продолжение). Графические ускорители. http://developer.nvidia.com/cuda-toolkit-32-downloads Использование графических ускорителей.

Презентация:



Advertisements
Похожие презентации
Анатолий Свириденков (сodedgers.com) Блог:
Advertisements

Половинкин А.Н.. Постановка задачи Алгоритм вычисления функции axpy на GPU Программная реализация.
Половинкин А.Н.. Постановка задачи Алгоритм умножения матриц на GPU Программная реализация.
Часть I: Введение в CUDA Александр Межов Ассистент кафедры Информатики 30 сентября 2011 Кафедра Информатики.
Технологии высокопроизводительных вычислений на GPU и гибридных вычислительных системах Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Томский.
Архитектура и программирование массивно-параллельных вычислительных систем zЛекторы: yБоресков А.В. (ВМиК МГУ)Боресков А.В. (ВМиК МГУ) yХарламов А. (NVidia)Харламов.
Структура ПО CUDA Приложения, использующие возможности CUDA для параллельной обработки данных, взаимодействуют с GPU через несколько разных программных.
Половинкин А.Н.. Вычисления общего назначения на GPU Архитектура GPU Программная модель выполнения на CUDA Программирование с использованием CUDA Настольная.
Лекторы: Боресков А.В. (ВМиК МГУ) Харламов А.А. (NVidia) CUDA Stream. Иерархия памяти в CUDA. Глобальная память.
CUDA API & Multi-GPU zЛекторы: yБоресков А.В. (ВМиК МГУ)Боресков А.В. (ВМиК МГУ) yХарламов А. (NVidia)Харламов А. (NVidia) yМикушин Д. (НИВЦ)
CUDA API Multi-GPU zЛекторы: yБоресков А.В. (ВМиК МГУ)Боресков А.В. (ВМиК МГУ) yХарламов А. (NVidia)Харламов А. (NVidia) yМикушин Д. (НИВЦ)
Лекторы: Боресков А.В. (ВМиК МГУ) Харламов А. (NVidia) Архитектура и программирование массивно- параллельных вычислительных систем.
OpenMPOpenMPРазличие между тредами и процессами ПроцессыТреды.
Лекторы: Боресков А.В. (ВМиК МГУ) Харламов А. (NVidia) Архитектура и программирование массивно- параллельных вычислительных систем.
Гречкина П.В., ПЯВУ-2, С++ Быстрое введение в язык C++ C++ Builder – консольное приложение либо Turbo C.
1. a=? b=? c=? {int a, b, c; a=(b=2+3)/2 - 4+(c=5%2); printf("%d %d %d \n", a, b, c); }
Лекторы: Боресков А.В. (ВМиК МГУ) Харламов А. (NVIDIA) Архитектура и программирование массивно- параллельных вычислительных систем.
Лихогруд Николай Задание. Постановка.
Преобразование типов Макаревич Л. Г.. Операция приведения типов Тип ( выражение ) Тип ( выражение ) (тип) выражение (тип) выражение int a = 5; float b.
Лихогруд Николай Часть восьмая.
Транксрипт:

Многопроцессорные системы (продолжение). Графические ускорители. Использование графических ускорителей для прикладных вычислений (GPGPU). Физическая организация GPU. Архитектура CUDA ( Compute Unified Device Architecture ). Интерфейс программирования CUDA C. Установка среды разработки и исполнения. CUDA_C_Programming_Guide.pdf Боресков А.В., Харламов А.А. Основы работы с технологией CUDA, Москва: ДМК, 2010

Физическое представление GPU

Логическое представление GPU (архитектура CUDA)

#include float serial(float* f, long N); __global__ void summator(float* f,float* s, long N); float parallel(float* f,long N, int num_of_blocks, int threads_per_block); int main(int argc, char* argv[]){ long N; int i; float* fun; int num_of_blocks, threads_per_block; if(argc \n"); return -1; }

N=atoi(argv[1]); num_of_blocks=atoi(argv[2]); threads_per_block=atoi(argv[3]); fun=(float*)malloc(N*sizeof(float)); for(i=0;i

float serial(float* f, long N){ int i; double s=0.0; for(i=0;i

float parallel(float* f,long N, int num_of_blocks, int threads_per_block){ float* f_dev; float* s_dev; float* s_host; float s=0.0; int i; cudaMalloc((void **) &f_dev, N*sizeof(float) ); cudaMemcpy(f_dev, f, N*sizeof(float), cudaMemcpyHostToDevice);

s_host=(float*)malloc( num_of_blocks*threads_per_block*sizeof(float)) cudaMalloc((void **) &s_dev, num_of_blocks*threads_per_block*sizeof(float)); for(i=0;i

summator >>(f _dev, s_dev,N); cudaThreadSynchronize(); cudaMemcpy(s_host, s_dev, num_of_blocks*threads_per_block*sizeof(float), cudaMemcpyDeviceToHost); for(i=0;i

__global__ void summator(float* f,float* s, long N){ int tId = blockIdx.x*blockDim.x+threadIdx.x; int num_of_threads=blockDim.x*gridDim.x; int portion=N/num_of_threads; int i; for(i=tId*portion;i nvcc test1.cu -o test1 > test Serial calculation is over! Result= Parallel calculation is over! Result=