当我想评估一些表达时,让我们说:
2*5
程序将2
和5
存储在寄存器中,然后执行MUL
操作。但是如果我们想要增加庞大的数组呢?
a = [1, ....... , 100000]
b = [1, ....... , 100000]
a * b
我们是否需要生成asm,它将逐个加载和乘法元素,或者是否可以将整个向量存储在某种寄存器中?
我知道有Advanced Vector Extensions (AVX)
允许在寄存器中存储更大的向量但是,它的大小非常有限。
我不是要求任何特定的语言或处理器,只是为了整体想法。
答案 0 :(得分:1)
除了非常非常具体的情况(即vector processors,它们主要用于超级计算机,例如Cray X1),没有处理器具有支持加载这种大型数组的寄存器。
如上所述,许多CPU可以使用SIMD,但同样,这些通常是针对特定用途而制作的(例如,图形处理器单元使用内置的SIMD系统来处理所需的所有数据),并且几乎总是需要手动编码汇编语言中的系统。
Vectorization可能是您感兴趣的领域,因为它涉及编译器(主要用于C / C ++,我相信)尝试使用向量将带有循环的传统代码编译为优化的汇编代码。不幸的是,这通常涉及比您询问的100,000件物品小得多的载体。
Tl; dr :不,大量的寄存器不存在,语言/编译器也不容易支持它们。但是有几个较小规模的解决方案可能让您感兴趣!
希望这有用!