最好8个线程或8的倍数线程,绑定为一个group.
原因是: VIP7000有2个shader, 每个shader有4个线程并发.(线程并发表示线程来回切换非常的快)
同一时刻,一个group里有2个线程并行操作.
假设8个线程A,B,C,D,E,F,G,H绑定为一个group,则同一时刻这个group里有2个线程并行操作. 若其中一个线程A执行完(kernel里的所有操作如读图像A,B,图像处理A+B,写数据C等),线程B未完成,则切换到C,D,此时B中所需的数据(DDR到寄存器)仍在操作. 线程C、D同时运行(有可能C和B同时运行), C线程执行完毕(kernel执行完所有操作), 线程D未完成. 依次类推,当A,B,C,D,E,F,G,H线程都执行一遍后(此时,A,C,E,G执行完,B,D,F,H未执行完),group进行切换.
线程未执行完的原因:DDR数据未给寄存器.
gpu比cpu快的原因: 隐藏数据+2个线程同时操作. 由于一个线程内部同一时刻有2个线程并行操作,并且group内部线程并发执行,group切换零开销,导致不用等待DDR数据给寄存器的时间. 减少了DDR递给寄存器的时间.
向硬件部同事学习的新知识:
hello.c--->hello.bin (指令段+数据段+堆栈)