Programming Model
data dependency 数据依赖时: 同步化处理
CPU 与 cores(kernel中)出现数据依赖时
一次只有一个kernel在执行
在同一个kernel中每一个 thread执行相同的代码
GPU中的thread与CPU中的区别:
GPU中的threads 是Physical threads:
threads 经常需要做 context switching 上下文切换,需要数据代码在register 和memory之间进行交流
context switching在cpu中不是很频繁
GPU 中每一个core 中会有多个(8个)threads
很多threads共用一个core,优点:当某一个thread在做memory access时,这个core皆可以空出来给其他threads使用。由于core是共用的,所以GPU中活跃的threads远大于cores的数量
上一章GPU架构所讲: 每一个threads都有自己的local register ,这正好供threads存储部分数据代码,在做context switching时,就不需要做memory access
kenal function 中如何确定线程的位置:两个: blockID threadID ( unit ID 统一的ID)
注意_synothreads() 和一般的同步不同:可以判断是否是在同一个warp中(量身定制)
MPI实现在 computer 和computer之间传资料
那么GPU和GPU之间通过什么传资料呢?
ping住 data在host memory中的位置不能改变
简而言之: 在GPU中执行的kernel自己可以去launch 新的kernel