今世CPU和GPU的处置处罚方式通常依赖于一种称为SIMD(单指令多数据)的技能。这意味着处置处罚器通过一条指令同时对多个数据举行利用,而不是逐个数据实行类似的利用。通常情况下,最根本的SIMD利用是处置处罚四个数据项,现实上很多时间会处置处罚更多数据,好比8个、16个乃至64个数据项。
举个例子,当我们写出类似“float x = y + 3;
”的代码时,现实实行过程中,CPU或GPU并不会单独处置处罚每一个数据项。它们会同时对多个数据项实行加法利用,比方四个 y 值加上 3,而且大概会扬弃除一个结果外的其他盘算结果。这种做法的缘故因由在于,今世处置处罚器的筹划就是为了通过一次指令处置处罚多个数据项,从而进步盘算服从。
这种筹划的目标是由于解码和处置处罚这些指令流并非无代价。处置处罚器在处置处罚这些指令时须要举行大量的工作,尤其是在实行数学运算时,使用SIMD技能可以大幅进步处置处罚器的服从,使其可以或许在更短的时间内完成更多的盘算。通过这种方式,处置处罚器可以或许淘汰指令解码和数据处置处罚的开销,从而进步团体性能。
“四个 y 值加上 3” 的意思是,今世CPU或GPU在处置处罚某些利用时并不会像我们在代码中看到的那样单独处置处罚每个数据项。它们通常会一次性处置处罚多个数据项。
以加法运算为例,如果有以下代码:
float x = y + 3;
复制代码
如果 y 是一个数组或多个数据项,而不是一个单一的值,今世处置处罚器会一次性将多个 y 的值与 3 相加。详细来说,处置处罚器大概会一次性将 y[0]、y[1]、y[2] 和 y[3] 四个值分别加上 3,并将结果保存在一个新的数据容器中。如许,处置处罚器会同时对多个 y 值举行加法利用,而不是像传统的单个运算那样按次序逐一处置处罚。
这种方式是通过 SIMD 技能实现的,意味着同一条指令同时作用于多个数据点,从而加快盘算过程。比方,处置处罚器大概会同时盘算 y[0] + 3、y[1] + 3、y[2] + 3 和 y[3] + 3,然后将这四个结果放入一个寄存器或内存位置。这种处置处罚方式大大进步了盘算服从。
黑板:一个示例指令