c - 使用openmp加速矩阵求幂
问题描述
我有一个函数可以使用幂计算矩阵的 n 次幂。代码是用 C 编写的:
void matrix_power(matrix *result, matrix *mat, int pow) {
if (pow == 0) {
for (int r = 0; r < mat->rows; r++) {
for (int c = 0; c < mat->cols; c++) {
result->content[r][c] = r == c;
}
}
} else if (pow == 1) {
for (int r = 0; r < mat->rows; r++) {
for (int c = 0; c < mat->cols; c++) {
result->content[r][c] = mat->content[r][c];
}
}
} else {
matrix *temp;
copy_matrix(temp, mat); //now temp becomes mat
matrix_power(temp, mat, pow /= 2);
matrix_multiply(result, temp, temp);
if (pow % 2 == 1) {
copy_matrix(temp, result);
matrix_multiply(result, temp, mat);
}
deallocate_matrix(temp);
}
}
我想优化我的代码,使其比简单的矩阵供电实现快 1000 倍。目前我的实现速度只有 300 倍。我的 matrix_multiply 函数已经使用 SIMD 和 openMP 进行了适当的优化。我想使用 openMP 来实现更好的并行性能。我怎样才能做到这一点?还是我应该考虑其他任何方法来获得显着的速度提升?
解决方案
推荐阅读
- html - bootstrap 类 link-dark 不影响
- prometheus - Grafana 中的重复面板
- javascript - 在 Httpresponse 之前或之后调用 ClientScript.RegisterStartupScript 不起作用
- java - 有没有办法改变 jDatePicker 上的按钮颜色
- angular - Angular - 反应式表单:如何正确获取动态和可重用子表单的值
- java - 在 Flux 中生成分页的 WebClient 请求并使用响应
- python - data_arr = pickle.loads(data) EOFError: 用完输入
- matlab - 有没有办法在 MATLAB 的匿名函数中实现嵌套的 for 循环?
- twitter-bootstrap - Bootstrap 4.3.1 - 导航栏不会折叠
- javascript - 将 ckeditor 值存储在 javascript 变量中