Assembly 编程语言如何存储数组

Assembly 编程语言如何存储数组,assembly,compilation,processor,Assembly,Compilation,Processor,当我想计算某个表达式时,让我们说: 2*5程序将2和5存储在寄存器中,然后执行MUL操作。但如果我们想让巨大的阵列成倍增加,该怎么办 a = [1, ....... , 100000] b = [1, ....... , 100000] a * b 我们需要生成asm来逐个加载和乘法元素,还是可以将整个向量存储在某种寄存器中? 我知道有高级向量扩展(AVX)允许在寄存器中存储更大的向量,但它的大小非常有限。 我不是问任何特定的语言或处理器,只是为了总体想法。除非在非常非常特殊的情况下(即,主要

当我想计算某个表达式时,让我们说:
2*5
程序将
2
5
存储在寄存器中,然后执行
MUL
操作。但如果我们想让巨大的阵列成倍增加,该怎么办

a = [1, ....... , 100000]
b = [1, ....... , 100000]
a * b
我们需要生成asm来逐个加载和乘法元素,还是可以将整个向量存储在某种寄存器中? 我知道有
高级向量扩展(AVX)
允许在寄存器中存储更大的向量,但它的大小非常有限。
我不是问任何特定的语言或处理器,只是为了总体想法。

除非在非常非常特殊的情况下(即,主要用于超级计算机,例如),没有处理器具有支持加载如此大的阵列的寄存器

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

这可能是您感兴趣的一个领域,因为它涉及到编译器(我相信主要针对C/C++),这些编译器试图使用向量将带有循环的传统代码编译成优化的汇编代码。不幸的是,这通常处理的向量比您询问的100000项要小得多

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


希望这是有帮助的

你所说的“乘法”是什么意思:一个元素接一个元素、点积还是叉积?这只是一个例子。它可以是点积。一些体系结构有向量协处理器(例如Cray),许多现代CPU支持短向量(SIMD),但在一般情况下,您需要一个循环来迭代数组,每次迭代处理一个元素。因为您的问题不是针对任何特定的语言或处理器,答案是:根据语言和处理器,可以是您建议的任何选项。:)