首先我说一下什么叫内核,这里的内核很狭义就是ANSI C关键字 CUDA扩展关键字编写的设备代码~
它是主机代码(Host Coda)通过内核调用的方式来启动的。再简单点就是,内核调用的含义是我们从主机代码启动设备代码。通常来说,内核调用会生成大量的(Block)和线程(Thread)来在GPU上并行的处理数据。内核代码和普通的代码没有什么差异,只不过是由多个线程并行执行。
语法是以__global__开始,然后是<<<xxx>>>,这个语法来配置内核参数,一个是表示希望执行的快数,二是每个快具有的线程数数。
代码语言:javascript复制程序启动的线程数=块数x单个线程数
最后一个参数是可选的,指定内核共享的内存大小
这里就拿上文的程序看
表示我们想用每一个快启动一个线程
后面的括号是三个参数,这里就说最后 一个参数。是指向设备显存的指针
指向设备显存中的位置,内核将在那里存储相加的结果
作为程序员需要知道的是,作为参数传递给内核的指针应该仅指向设备显存,指向主机会程序崩溃。内核执行完成后,设备指针指向的结果可以复制会主机内存,取回来这个值再使用。这里还要说一句,一个块上面就一个Thread的写法对资源利用不好~