标签:
一个芯片从需求的诞生到最后的芯片封装成功,需要经历一个非常漫长的过程。如果是一些不可编程的芯片,
相比全新的ISA,两类芯片所对应的软件工作量,完全不在一个数量级上。不可编程芯片,不需要ISA设计,不
需要compiler的设计,而这两部分软件,无论是从难度上,亦或是工作量上,都是具有一定难度的。尤其是
compiler,在国内算是稀缺资源了。一套高效而优秀的ISA,需要对芯片的应用场景做大量的前期研究,需要
充足的统计数据,才能最终确定下来。以第一款GPU为例,当初进行GPU设计时,由于GPU中的顶点染色与像素
染色渲染部件均为可编程的,因此需要为GPU提供一套指令集,而当时也是第一次进行GPU设计,拿着ARB所
提供的虚拟ISA就直接设计了,根本就没有进行深入地研究和统计导致最后,渲染处理器设计出来了,繁杂的ISA
造成硬件规模的不必要扩大。而在进行第二款GPU设计时,就对第一版的ISA进行大量的裁剪,由此一来,渲染
处理器的硬件规模就小了不少。这些是ISA设计所带来的问题。对于GPU的compiler而言,由于当时团队没有做
compiler的人,起初的渲染软件全部是自己用ISA一条一条地给折腾了出来。通常情况下,自己与计算机交流的
语言是C,第一次使用汇编给GPU写代码,由于不够熟练,硬着头皮在空白的纸条上将寄存器分配着使用。常见的
处理器,只有少数的寄存器,手动进行汇编编程,需要程序员自己去进行寄存器的分配,稍不留神,通常会导致程
序第一次运行正确,而在第二次执行时,由于寄存器的问题,使程序运行错误。这种问题又是最难调试的。如果有
compiler,他会把寄存器的分配全部搞定,就节省了大量的时间,这也是高级语言的一个好处,当然,通常情况下,
高级语言程序员是不会考虑这些问题的。
标签:
原文地址:http://www.cnblogs.com/DennisHwang/p/4737654.html