CUDA课程-CS-139G-1:Introduction to Massively Parallel Computing

size_t是为了软件的兼容性和可移植性而产生的,使应用程序不依赖于具体的系统实现

size_t是针对系统定制的一种数据类型,一般是整形,因为C/C++标准只定义一最低的位数,  
  而不是必需的固定位数。而且在内存里,对数的高位对齐存储还是低位对齐存储各系统都不一样。为了提高代码的可移植性,就有必要定议这样的数据类型。一般这 种类型都会定义到它具体占几位内存等。当然,有些是编译器或系统已经给定义好的。具体要查看技手册。

 

 

===CS-139G-1:Introduction to Massively Parallel Computing===
一,课程目标:大规模平行运算的目的是要达到:
1,高性能;2,函数性和可维护性;3,与新生代的兼容性
为此需要掌握:
1,并行编程的原则和模式;
2,处理器的架构特征和局限性;
3,API编程,工具以及技巧。
二,教学人员
三,Web资源
http://stanford-cs193g-sp2010.googlecode.com
四,评分标准
五,个人小灶日
六,学术诚信
七,课程设备
八,文字和注释
九,时间安排(10 weeks)
十,摩尔定律(阐释)
十一,摩尔定律(直观图)
十二,电源功耗的购买表现力
十三,连续功效按比例已经结束
1,处理器频率按比例发展--不超过10G
2, 能量功耗不能继续上升--烧芯片
3,可以继续增加晶体管集成度--摩尔定律
十四,怎样使用晶体管
1,指令的平行(无序执行,臆测;功耗限制使得机会的丢失)
2,数据的平行
(向量单元,SIMD 执行)SIMD-single instruction, mutiple data
 增加:SSE,AVX,Cell SPE,Clearspeed,GPU
 3,线程的平行
 增加多线程,多核,超多核
 intel 双核,Amd,Sun,STL Nvidia Fermi;
 十五,为什么需要并行处理?
 默然的变革和潜在上升的计算,带宽
 十六,新的摩尔定律
 1,计算机不是变快二十变宽了
 2,必须要重新考虑用平行算法
 3,数据平行的计算是最具扩展性的解决方案
  (否则还要求更多的核心,而且数据总比核心多,计算总围绕在数据周围)
  十七,传统多核心
  1,多个核心支持同一个线程
  2,片上存储空间在处理器周围(缓存,RAM,或二者)
  3,共享存储空间(外部DRAM)
 十八,传统超多核心
 1,多个核心支持多个硬件线程
 2,片上存储空间在处理器周围(缓存,RAM,或二者)
 3,共享存储空间(外部DRAM)
 十九,走进GPU
 1, 规模效益
 2,规模并行
 二十,GPU的革命
 1,高吞吐量的计算
 2, 高记忆体带宽
 3,高可用性
 二十一,图形管线课程
 1,吞吐量是最重要的(在架构时间内完成每一个像素;可伸缩性)
 2,非常迅速的创建,运行,释放多个线程
 3,多线程来隐藏延迟
 二十二,为什么和CPU不一样?
 1,不同的目的引发不同的设计
 2,CPU将延迟熟练最小化到1个线程(大容量的缓存和精通控制逻辑)
 3,CPU将所有线程吞吐量最大化
 (运行的线程受资源限制;多线程掩盖了延迟;共享控制逻辑来存取多个线程)
 
 二十三,NVIDIA GPU架构
 Fermi GF100;
 二十四,多核处理器的SM处理单元(Streaming Multiprocessor)
 1,每个SM有32个cuda处理核心,一共512个
 2,8倍64位浮点峰值能力(50%的32位浮点数峰值)
 3,直接加载和存储能力(按位的线性序列和高带宽)
 4,64k的高速片上RAM(由软硬件管理,多个CUDA核心共享,可线程间通信)
 二十四,关键架构观点
 1,SIMT(single instruction, mutiple data)执行
   32个线程一组,成为warps
   一个warps共享指令单元,(IU)
   硬件自动处理分歧
 2,硬件多线程
   硬件资源分配和线程期限
   硬件依赖线程来隐藏延迟
 3,线程拥有所有需要运行的资源
   warp不等待就可以运行
   上下文切换很自由

=============================================


 走进CUDA
 
 1,可伸缩的并行编程模型
 2,为熟悉C/C++环境而进行最小化的扩展
 3,非均匀的串并行计算

 

 

 

CUDA:可伸缩的并行编程

1,在C/C++中增加最小化的简单抽象

   使得程序员可以专注于并行算法;而不用另外学习一门并行编程语言

2,提供和硬件平台的直接映射

   很合适GPU架构;同样和多核CPU也能良好的映射

3,数以百计地核与数以千计的并行线程来衡量

  GPU本身的线程是轻量级的--创建和切换都很自由

  GPU需要数以千计的线程进行全力运用

 

CUDA中并行抽象的关键点:

==============

1,并发线程的等级

  1,有许多线程构成的并行化kernel:所有进程都在执行同一连续的程序

  2,线程按组构成线程块:同一个线程块内地线程可以协作

  3,线程和线程块都具有独一无二的标识号

==================

2,轻量级的同步基元

3,合作线程的共享存储模型

 

CUDA不像一些平面式的多重处理器:

1,全局同步起来消耗资源大

2,全局的存储空间存取起来代价高

3,PRAM(并行随机存储机器模型)

CUDA不像一些分布式的处理器:

1,分布式的计算是不同的设定

2,大批量同步并行模型,MPI

 

非均匀的计算:

多核CPU<->超多核GPU

 

==============================

 

CUDA的C

 

1,原则就是:为了达到扩大性能而需进行的最小化扩展的设定

2,函数的标识符

__global__ void my_kernel() { }
__device__ float my_device_func() { }

3,变量的标识符(内置)

__constant__ float my_constant_array[32];
__shared__ float my_shared_array[32];

4,执行时代配置

dim3 grid_dim(100, 50); // 5000 thread blocks
dim3 block_dim(4, 8, 8); // 256 threads per block
my_kernel <<< grid_dim, block_dim >>> (...); // Launch kernel

5,在GPU端内建的有效变量和功能函数:

dim3 gridDim; // Grid dimension
dim3 blockDim; // Block dimension
dim3 blockIdx; // Block index
dim3 threadIdx; // Thread index
void __syncthreads(); // Thread synchronization

 

========

例子:向量相加:

 

 

应用程序的加速

 

1,用GeForce 8800 GTX和2.2GHz的皓龙处理器248比较

2,只要kernel能够占据足够的并行线程,正常kernel可达到10倍加速

3,如果功能函数的数据需求和控制流和GPU与优化过的应用程序相搭配,可达到25到400倍的加速。

 

最终观点:

 

1,并行化的硬件将为人通用;

2,GPU系列产品及是大规模并行超多核新处理器:容易获得和全面可编程

3,并行化和可伸缩性是成功关键点

4,给许多重要研究挑战提供了便利,同样也给教育意义的挑战性提供了便利。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值