GPU编程模型

来源:互联网 发布:活塞五虎有多厉害 知乎 编辑:程序博客网 时间:2024/05/16 08:04

前言:如果想要学习CUDA编程,对GPU的编程模型的了解是必不可少的。就像如果想要追一个女孩子,就得去了解这个女孩子是什么样的性格一样,编程模型就像是女孩子的性格,必须先得去摸索。然后再针对性格采用相应的手段。


概念

1, 线程块: 线程的概念大家应该都懂(线程标识符、pc指针、寄存器、堆栈几部分组成,但CUDA编程模型中的线程略有不同,后面会介绍)

       而线程块就是将众多的线程进行分块,每一块中的线程个数是一样的(就是在设计之初,将GPU的资源进行均分)。

                                                        

2,多处理机: 在CPU的模型中,一个线程对应一个处理机, 而由于在GPU中有众多的线程和众多的处理机,所以都会将线程和处理机进行分块处      理,这样线程块就会和多处理机进行对应。而多处理机就是多个处理机的集合,里面会有一块共享内存,以便于线程的合作。                                                                                              

                                                                       

可以看到在一个多处理机上有8个处理机,这样就可以实现八个线程的同步执行, 而且由于是一个块对应一个多处理机,而一个块中的线程数是根据待解决的问题来进行设定的,比如是32个线程。虽然表面上这一个块是同步执行,但实际是对这32个线程进行编号 0-31, 0-7、8-15、16-23...是真正意义上的同步。

而这个看似复杂的多处理机,只是GPU众多多处理机的一个

                                                         

​  

3,全局内存

     在上面的介绍中已经有了两个内存 一个是线程里的局部内存,一个是线程块中的共享内存,接下来就是要介绍全局内存。全局内存是对整个GPU设备分配的,所以很大,但速度慢。



模型:

GPU代码和CPU代码:CUDA中的代码都是在通过CUDA提供的接口作用于GPU,将CPU中缓存的数据拷贝到GPU的全局内存中,然后利用对数据进行分块处理以实现高效的并行计算。

GPU线程和CPU线程:CUDA中的线程只有一些局部内存和寄存器,与CPU中的线程比更轻

0 0