matrix-multiplication 相关问题

与矩阵乘法有关的问题,尤其是实现。数学问题应该考虑线性代数标签。

如何使用 SSE 对向量矩阵乘积进行向量化?

我在C++中有这个函数 无效例程2(浮动阿尔法,浮动贝塔){ 无符号整型 i, j; 对于 (i = 0; i < N; i++) for (j = 0; j < N; j++) w[i] = w[i] - beta + alph...

回答 1 投票 0

如何使用 SSE 正确向量化向量矩阵乘积?

我在C++中有这个函数 无效例程2(浮动阿尔法,浮动贝塔){ 无符号整型 i, j; 对于 (i = 0; i < N; i++) for (j = 0; j < N; j++) w[i] = w[i] - beta + alph...

回答 1 投票 0

为什么使用 SSE 对向量矩阵乘积进行向量化结果不正确?

我在C++中有这个函数 无效例程2(浮动阿尔法,浮动贝塔){ 无符号整型 i, j; 对于 (i = 0; i < N; i++) for (j = 0; j < N; j++) w[i] = w[i] - beta + alph...

回答 1 投票 0

矩阵乘法逆向应用是什么意思?

我不明白这一点,这是来自 https://learnopengl.com/Getting-started/Transformations 教程,它解释了在代码中我们首先翻译然后旋转,实际上旋转...

回答 1 投票 0

如何加速密集矩阵乘法?

我想加速倍增打击: 这是我需要改进的代码: 无效乘法(int大小,int ** matA,int ** matB,int ** matC){ for(int i=0;i 我想加速倍增打击: 这是我需要改进的代码: void multiply(int size, int **matA, int **matB, int ** matC) { for(int i=0;i<size;i++) { for(int j=0;j<size;j++) { int t = matC[i][j]; for(int k=0;k<size;k++) { t += matA[i][k] * matB[k][j]; } matC[i][j] += t; } } } 我有两个矩阵和一个大小为 5000x5000 的结果矩阵。 巨大的矩阵可能意味着它们无法完全加载到缓存中? for循环中是否出现过多页错误?我想知道如何加快乘法速度,以及如何组织数据(使用一维数组还是二维数组?) 我的答案代码是列表blow,我选择使用1d数组来模拟2d数组(每个矩阵使用new []一次),但我不确定使用2d数组时是否更快。 我使用临时矩阵来存储 matB 的转置矩阵,以避免 for 循环中的页面错误。 我添加 AVX2 以获得更高的性能。 使用大小为 5000x5000 的一维数组或二维数组哪个更好? 还有其他想法或技巧吗? int** allocate(int rows, int cols) { int ** mat; mat = new int*[rows]; int *temp = new int[rows*cols]; for(int i = 0; i<rows; i++) { mat[i] = temp + i * cols; } return mat; } void multiply(int size, int **matA, int **matB, int ** matC) { int i; int n = size*size; // total size // column-major order int **transMatB = allocate(size, size); int *transArrB = transMatB[0]; //copy transposed data, maybe many page faults here. #pragma omp parallel for for(i = 0; i < n; i++) { transMatB[i/size][i%size] = matB[i%size][i/size]; } #pragma omp parallel for for(i = 0; i < n; i ++) { int *row = matA[i / size]; int *col = transMatB[i % size]; int temp; #ifdef __AVX2__ temp = multiplyAndSumArrays(row, col, size); #else temp = 0; for (int k = 0; k < size; k ++) { temp += row[k] * col[k]; } #endif matC[i / size][i % size] += temp; } // remove temp transposed mastrix delete[] transMatB[0]; delete[] transMatB; transMatB = nullptr; } 在优化方面,矩阵-矩阵乘法可能是研究最多的内核。对于最终结果,请阅读 Goto 和 van de Geijn 的论文,引用如下。 关键在于 该算法对 n^2 数据进行 n^3 次操作,因此具有在缓存中重用数据的潜力。 简单的 3 循环版本无法重复使用,因此您需要做一些事情。 幸运的是,所有输出组件都是独立的,因此您可以对操作进行重大改组。 特别是最后一点:简而言之,3 个循环中的每一个都分为两个循环,一个在块上,一个在块内。然后你有 6 个循环(意味着 5 个!左右不同的算法)和 3 个块大小作为调整参数。上面的论文对此分析得很完整。 请注意,这并不简单!对于合理可行的解决方案,请执行递归 2x2 乘法:将每个矩阵划分为 2x2 块结构,然后递归地相乘。当块足够小以适合缓存时,您将停止递归。 这应该可以作为课堂作业来实现,从而提高成绩。您甚至可以简单地进行多线程处理。 Goto, Kazushige / Geijn, Robert A. van de Anatomy of high-performance matrix multiplication 2008 ACM Trans. Math. Softw. , Vol. 34, No. 3 ACM: New York, NY, USA p. 1-25

回答 1 投票 0

使用 Numba JIT 与转置 NumPy 数组进行矩阵乘法不起作用

环境 操作系统:Windows 10 Python版本:3.10 Numba 版本:0.57.0 NumPy 版本:1.24.3 例子 将 numpy 导入为 np 从 numba 导入 njit @njit def matmul_transpose(a: np.ndarray, b: np.nda...

回答 3 投票 0

当我乘以 3 个矩阵时,Wolfram 和 Numpy 之间的结果不同?

首先,我确信 Wolfram 的答案是正确的,因为两个三明治矩阵是特征向量矩阵,所以答案必须采用特征基的形式。 所以,问题...

回答 1 投票 0

如何在 C++ 中使用矩阵求幂计算高阶广义斐波那契数列的第 n 项?

我有兴趣在 C++ 中使用矩阵求幂计算高阶斐波那契序列的第 n 项,同时允许 n 相当大(在数百范围内)。 序列 I

回答 1 投票 0

有没有一种(更好的)方法来提取文件名的数字部分以用作矩阵的标量乘数?

我有一组 csv 文件,其中包含相同大小的矩阵,其中第一行和第一列是轴标签(如果有人熟悉的话,它们是荧光激发发射矩阵)

回答 1 投票 0

Opencv 矩阵乘法

我需要将矩阵及其转置相乘,但出现以下错误: OpenCV 错误:断言失败(类型 == B.type() &&(类型 == CV_32FC1 || 类型 == CV_64FC1 ||类型== CV_32FC2 ||

回答 1 投票 0

矩阵乘法 Java 将 3 个元素放入 1 行输入

如何在一行中输入矩阵数字,例如矩阵大小为3 x 3,然后我输入矩阵1 3次:123 123 123,然后输入矩阵2:124 124 124,结果矩阵6 12 24 6 12 24 ...

回答 1 投票 0

在 RISC-V RVV 0.7.1 中屏蔽 CSR SpMV 的各个行

编辑:我已将我的问题重新表述为更有成效的内容,并将在下面提供答案。这个问题的旧版本仍在下面。 我正在实现一个优化的 SpMV 内核...

回答 1 投票 0

在 C# 中定义无限类“MatrixMxN”

假设我正在用 C# 编写一个线性代数库,并且我想实现矩阵乘法。当然,两个矩阵 A 和 B 只能相乘形成 AB,前提是 A 的列数与 ...

回答 1 投票 0

使用没有内置函数的 Go 例程优化矩阵乘法

我有以下使用 Go 例程进行矩阵乘法的代码 函数主() { var wgsync.WaitGroup 变量列 = 100 变量行 = 150 var randMatrixA [][]int var randMatrixB [][]in...

回答 1 投票 0

这个矩阵运算符 $\odot$ 有名字吗?

框 II 显示了矩阵运算符的定义,表示为 $\odot$。它有名字吗? 更新:我找到了,“劈脸产品”。另请参阅 https://www.slyusar.kiev.ua/FACE.pdf

回答 1 投票 0

使用 Go 例程优化矩阵乘法

我有以下使用 Go 例程进行矩阵乘法的代码 函数主() { var wgsync.WaitGroup 变量列 = 100 变量行 = 150 var randMatrixA [][]int var randMatrixB [][]in...

回答 1 投票 0

查找 R 向量中重复的大量元素

我想知道是否有一种简单的方法可以找到多个向量(两个或更多)中的所有重复向量元素(两个或更多)。 例如,给定以下字符向量: 法国&l...

回答 1 投票 0

尽管存在数据依赖性,仍尝试并行化

我正在尝试并行化矩阵乘法。我遇到了 Fox 算法,它可以将整个过程分为 3 个步骤。你可以查一下算法。我已附上图像。输入图像

回答 1 投票 0

15, 11 汉明码生成器矩阵

我一直在尝试理解汉明码并编写了一个程序,可以正确编码和解码汉明 7,4 的给定输入。当尝试对 15,11 执行此操作时,我无法获得正确的输出

回答 1 投票 0

如何在 R 中比 %*% 更快地执行矩阵乘法?

这个问题出现在我的R脚本中。我想将 1000by1000 矩阵乘以 1000by1 矩阵(向量),以便输出是 1000by1 矩阵。 1000×1000 矩阵有一个独特的属性。以上...

回答 0 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.