编程语言如何存储数组

时间:2015-08-18 13:02:29

标签: assembly compilation processor

当我想评估一些表达时,让我们说: 2*5程序将25存储在寄存器中,然后执行MUL操作。但是如果我们想要增加庞大的数组呢?

a = [1, ....... , 100000]
b = [1, ....... , 100000]
a * b

我们是否需要生成asm,它将逐个加载和乘法元素,或者是否可以将整个向量存储在某种寄存器中? 我知道有Advanced Vector Extensions (AVX)允许在寄存器中存储更大的向量但是,它的大小非常有限。 我不是要求任何特定的语言或处理器,只是为了整体想法。

1 个答案:

答案 0 :(得分:1)

除了非常非常具体的情况(即vector processors,它们主要用于超级计算机,例如Cray X1),没有处理器具有支持加载这种大型数组的寄存器。

如上所述,许多CPU可以使用SIMD,但同样,这些通常是针对特定用途而制作的(例如,图形处理器单元使用内置的SIMD系统来处理所需的所有数据),并且几乎总是需要手动编码汇编语言中的系统。

Vectorization可能是您感兴趣的领域,因为它涉及编译器(主要用于C / C ++,我相信)尝试使用向量将带有循环的传统代码编译为优化的汇编代码。不幸的是,这通常涉及比您询问的100,000件物品小得多的载体。

Tl; dr :不,大量的寄存器不存在,语言/编译器也不容易支持它们。但是有几个较小规模的解决方案可能让您感兴趣!

希望这有用!