Intro to Parallel Programming课程笔记001

Intro to Parallel Programming

How do you dig a hole faster?

GPU理念

很多很多简单计算单元;

清洗的并行计算模型;

关注吞吐量而非延迟;

CPU: HOST

GPU:DEVICE

A Typical GPU Program

1,CPUallocates(分配) storage on GPU  cuda Malloc

2,CPUcopies input data from CPU-GPU         
cuda Memcpy

3,CPUlaunches kernel(s) on GPU to process the data            
Kernel launch

4,CPUCOPIES RESULTS BACK TO CPU FROM GPU          
cuda Memcpy

最好是最后一步将GPU数据拷回

DEFINING THE GPU COMPUTATION

BIG IDEA

KERNELS LOOK LIKE SERIAL PROGRAMS

WRITE YOUR PROGRAM AS IF IT WILL RUN ON ONE THREAD

THE GPU WILL RUN THAT PROGRAM ON MANY THREADS

MAKE SUREYOU UNDERSTAND THIS

THIS ISIMPORTANT

WHAT IS GPU GOOD AT?

1,EFFICIENTLY LAUNCHING LOTS OF THREADS

2,RUNNING LOTS OF THREADS IN PARALLEL

SIMPLE EXAMPLE:

IN:    FLOATARRAY   [0 1 2 … 36]

OUT:                   FLOATARRAY   [0 1X1 2X2 … 63X63]

[0 1 4 9 … ]

KERNEL:            SQUARE

CPU CODE: SQUARE EACH ELEMENT OF ANARRAY

For (i=0; i<64;i++){

Out[i]=in[i]*in[i];

}

1, ONLYONE THREAD OF EXECUTION

("thread”=one Independentpath of execution through the code”)

2,NOEXPLICIT PARALLELSIM

GPU CODE:  A HIGH-LEVEL VIEW

CPU

ALLOCATEMEMORY

COPYDATA TO/FROM GPU

LAUNCHKERNEL

SPECIFIES DEGREE OFPARALLELISM

GPU

EXPRESSOUT = IN . IN

SAMS NOTHING

ABOUT THE DEGREE OFPARALLELISM

CPU CODE:  square kernel <<< 64 >>>(outArrayinArray)

BUT HOW DOES IT WORK IF I LAUNCH 64INSTANCES OF THE SAME PROGRAM?

CPU LAUNCHES 64 THREADS

#include <stdio.h>

__global__ void cube(float * d_out, float *d_in){

//Todo: Fill in this function

}

int main(int argc, char ** argv) {

constint ARRAY_SIZE = 96;

constint ARRAY_BYTES = ARRAY_SIZE * sizeof(float);

//generate the input array on the host

floath_in[ARRAY_SIZE];

for(int i = 0; i < ARRAY_SIZE; i++) {

h_in[i]= float(i);

}

floath_out[ARRAY_SIZE];

//declare GPU memory pointers

float* d_in;

float* d_out;

//allocate GPU memory

cudaMalloc((void**)&d_in, ARRAY_BYTES);

cudaMalloc((void**)&d_out, ARRAY_BYTES);

//transfer the array to the GPU

cudaMemcpy(d_in,h_in, ARRAY_BYTES, cudaMemcpyHostToDevice);

//launch the kernel

cube<<<1,ARRAY_SIZE>>>(d_out, d_in);

//copy back the result array to the CPU

cudaMemcpy(h_out,d_out, ARRAY_BYTES, cudaMemcpyDeviceToHost);

//print out the resulting array

for(int i =0; i < ARRAY_SIZE; i++) {

printf("%f",h_out[i]);

printf(((i% 4) != 3) ? "\t" : "\n");

}

cudaFree(d_in);

cudaFree(d_out);

return0;

}

Configuring the kernel Launch

SQUARE<<<1,64>>>(d_ou,d_in)

<<<block数量,每个block的线程>>>

1,可以一次run多个block

2,每个threads/block的最大值(512老版本)

(1024新版本)

128县城          SQUARE<<<1,128>>>( ….)

1280县城         SQUARE<<<10,128>>>( ….)

SQUARE<<<5,256>>>( …. )

KERNAL<<<GRID OF BLOCKS,BLOCK OFTHREADS>>>(…)

KERNAL<<<1,2OR3D, 1,2OR3D >>>(…)

Dim3(x,y,z)

Dim3(w,1,1)==dim3(w)==w

Square<<<1,64>>>==square<<<dim3(1,1,1),dim3(64,1,1)>>>

Kernel<<<grid of blocks,block ofthreads>>>( … )

Square<<<dim3(bx,by,bz),dim3(tx,ty,tz),shmem>>>(… )

Square<<<gridof blocks bx.by.bz,block of threads tx.ty.tz, shared memory per block in bytes>>>

Thread idx :thread within block

Thread idx.xthread idx.y

Block dim: size ofa block

Block idx: blockwithin grid

gridDim: size ofgrid

MAP

setof elements to process [64 floats]

functionto run on each element        [“square”]

map(elements,function)

gpuare good at map

--gpu have many parallel processors

--gpu optimize for throughput

Struct uchar4{

Unsigned char x;

Unsigned char y;

Unsigned char z;

Unsigned char w;

}

Converting color to black and white

I = (R+G+B)/3

I = .299f*R + .587f*G + .114f*B

时间: 2024-10-10 22:01:04

Intro to Parallel Programming课程笔记001的相关文章

算法面试课程笔记001 算法面试到底是什么鬼

算法面试课程笔记001算法面试到底是什么鬼 =============================================================================== 本文地址 : =============================================================================== 算法面试是什么? 让大家在面对面试中的算法问题时,有一个合理的思考路径: ·不代表能够"正确"回答每一个算法问题

CUDA Intro to Parallel Programming笔记--Lesson 1 The GPU Programming Model

1.  3 traditional ways computes run faster Faster clocks More work/clock cycle More processors 2. Parallelism A high end Gpu contains over 3,000 arithmatic units,ALUs, that can simultanously run 3,000 arithmetic operations. GPU can have tens of thous

Linux System Programming 学习笔记(七) 线程

1. Threading is the creation and management of multiple units of execution within a single process 二进制文件是驻留在存储介质上,已被编译成操作系统可以使用,准备执行但没有正运行的休眠程序 进程是操作系统对 正在执行中的二进制文件的抽象:已加载的二进制.虚拟内存.内核资源 线程是进程内的执行单元 processes are running binaries, threads are the smal

跟我学《JavaScript高程3》第一讲,课程笔记

跟我学<JavaScript高程3> 第一讲:第1~3章 课程制作:bling,兴哥,5年Java,3年前端 课程知识:JavaScript.Html.Css 课程目标:前端体系课程,逐步深入,找到一份前端工作    课程大纲:本书目录结构 适合人群:前端初学者,可以0基础,但要认真,踏实 回答几个问题 1.为什么要学习前端?JavaScript有哪些用处?为什么要讲这本书? 移动互联网是未来的趋势,移动设备H5开发带动了前端趋势,今后App基本都是Native+H5实现. 页面效果,数据交互

Andrew Ng机器学习课程笔记(四)之神经网络

Andrew Ng机器学习课程笔记(四)之神经网络 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7365730.html 前言 学习了Andrew Ng课程,开始写了一些笔记,现在写完第5章了,先把这5章的内容放在博客中,后面的内容会陆续更新! 这篇博客主要记录Andrew Ng课程第四章和第五章的神经网络,主要介绍前向传播算法,反向传播算法,神经网络的多类分类,梯度校验,参数随机初始化,参数的更新等等 1.神经网络概述

《nodejs+gulp+webpack基础实战篇》课程笔记(四)-- 实战演练

一.用gulp 构建前端页面(1)---静态构建 npm install gulp-template --save-dev 通过这个插件,我们可以像写后台模板(譬如PHP)一样写前端页面.我们首先学习一下写法. 现在我们创建一个新任务:创建一个裸的index.html文件,然后在body里面写上 ,我的年龄是:<%= age %> 下载好gulp-template,我们引用并配置 var gulp_tpl = require("gulp-template"); gp.tas

[C++11笔记001]修改通用库中的XDynamicArray,使它可以支持C++11的初始化列表和for循环

今天,有空翻了一下<C++Primer plus(第六版)>,看到里面有介绍新的for循环和初始化列表,但是我实现的动态数组XDynamicArray不支持这些新特性,没办法,只好进行改造了. 首先是for循环,如下面的样式 for(auto e:stList) { cout<<e<<endl; } 是于就各种google,和查找C++11的array的源代码,总结:就是提供一个标准的iterator和begin,end这两个方法,就可以了. 是于定义了一个iterat

Linux操作系统及应用课程笔记 索引

第0部分  软件的安装与配置 Linux下软件的安装与配置 第1部分*   绪论 第2部分*  Linux的安装过程 第3部分   系统Shell和常用命令 Shell文件相关常用命令及参数总结 Linux下常用命令 第4部分  VI编辑器 Linux下vi编辑器的使用 <<学习vi和vim编辑器>>1 <<学习vi和vim编辑器>>2 第5部分  Shell脚本 Shell入门之脚本管理 Shell入门之测试操作 Shell入门之条件循环 Shell入门之

Andrew Ng机器学习课程笔记(五)之应用机器学习的建议

Andrew Ng机器学习课程笔记(五)之 应用机器学习的建议 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7368472.html 前言 学习了Andrew Ng课程,开始写了一些笔记,现在写完第5章了,先把这5章的内容放在博客中,后面的内容会陆续更新! 这篇博客主要记录了Andrew Ng课程第五章应用机器学习的建议,主要介绍了在测试新数据出现较大误差该怎么处理,这期间讲到了数据集的分类,偏差,方差,学习曲线等概念,帮