C ARM汇编程序中的可变大小int矩阵
我目前正试图在ARM汇编程序中实现矩阵乘法。我已经阅读了一些关于汇编程序中矩阵计算的教程,它们都在3x3或4x4浮点矩阵上使用霓虹灯指令。但这和我想做的完全不同。我有两个对称的int矩阵,所以两个矩阵的行数和列数是相同的,我的汇编函数将矩阵的大小作为参数,所以我不能像教程中那样为3x3或4x4矩阵编写matMul函数 所以我的问题是什么是最好最简单的方法?甚至可以将NEON指令与100x100或更大的矩阵一起使用吗?而且单精度和双精度寄存器也是不必要的,因为我只有整数 另一个问题是,我对ARM汇编程序几乎完全陌生,所以我不完全理解NEON指令。MAIN PROC NEARC ARM汇编程序中的可变大小int矩阵,c,assembly,matrix,int,arm,C,Assembly,Matrix,Int,Arm,我目前正试图在ARM汇编程序中实现矩阵乘法。我已经阅读了一些关于汇编程序中矩阵计算的教程,它们都在3x3或4x4浮点矩阵上使用霓虹灯指令。但这和我想做的完全不同。我有两个对称的int矩阵,所以两个矩阵的行数和列数是相同的,我的汇编函数将矩阵的大小作为参数,所以我不能像教程中那样为3x3或4x4矩阵编写matMul函数 所以我的问题是什么是最好最简单的方法?甚至可以将NEON指令与100x100或更大的矩阵一起使用吗?而且单精度和双精度寄存器也是不必要的,因为我只有整数 另一个问题是,我对ARM汇
MOV DI,OFFSET M_RESULT
MOV SI,OFFSET M_A
MOV BX,OFFSET M_B
背景1:
莫夫奇,N
分队
MOV列,N
背景2:
MOV AL,CH
MOV X,N
MUL X
ADD SI,AX
MOV AH,0
MOV AL,P
ADD BX,AX
MOV COUNTER,N
MOV TEMP,0
BACK3:
MOV AL,[SI]
MUL [BX]
ADD TEMP,AX
INC SI
ADD BX,N
DEC COUNTER
JNZ BACK3
MOV AX,TEMP
MOV [DI],AX
ADD DI,2
MOV SI,OFFSET M_A
MOV BX,OFFSET M_B
INC P
DEC列
JNZ BACK2
MOV P,0
DEC线
JNZ BACK1
;
MOV AX,4C00H ;8- End of
INT 21H ;9- processing
主端点;程序结束
代码结束;段末
结束-开始;节目结束
;作者:Mojtaba AlizadehINT 21H;9-处理 主端点;程序结束 代码结束;段末
结束-开始你应该看看这篇博文上链接的一些教程。它们似乎在霓虹灯指示方面对一些人有所帮助。我会花一些时间来更全面地理解NEON,它会帮助您找到答案。您还可以通过递归处理较小的(例如4x4)块来乘以较大的矩阵。我不知道一个很好的链接到一个实现的解释,但这将是一个开始。好的,这听起来已经太复杂了,所以我将从简单的实现开始,并使用3个循环。在汇编程序中有分配内存的方法吗?或者我应该在c代码中分配它,并给汇编函数3个参数,2个指针用于乘法矩阵,1个指针用于结果矩阵?您可以使用NEON,但SIMD通常针对3x3或4x4矩阵进行优化。也就是说,“多数据”部分一次处理3或4个值(对于图形等很好)。要将SIMD用于较大的矩阵,您需要将其细分为较小的4x4操作/子矩阵。谢谢您的评论,但我真的无法想象将矩阵细分为较小的矩阵会如何工作。有人对这种方法有描述或信息吗?