【发布时间】:2017-01-15 15:35:22
【问题描述】:
我想知道 CUDA 硬件/运行时系统如何处理以下情况。
如果一个warp(以下为warp1)指令涉及访问全局内存(加载/存储);运行时系统安排下一个准备好的扭曲执行。
当新的warp被执行时,
warp1 的“内存访问”是否会并行进行,即在新的 warp 运行时?
运行时系统会将warp1放入内存访问等待队列吗?一旦内存请求完成,warp 会被移到可运行队列中吗?
与warp1执行相关的指令指针是否会自动递增并与新的warp执行并行,以注释内存请求已完成?
例如,考虑这个伪代码output=input+array[i];,其中output 和input 都是映射到寄存器的标量变量,而array 保存在全局内存中。
要运行上述指令,我们需要在更新输出之前将array[i] 的值加载到(临时)寄存器中;即上面的指令可以翻译成2条宏汇编指令load reg,reg=&array[i],output_register=input_register+reg。
我想知道硬件和运行时系统如何处理上述2条宏汇编指令的执行,因为加载不能立即返回
【问题讨论】: