将矩阵与向量相乘的最快方法
The fastest way to multiply a matrix with a vector?
任何人都可以提出任何更快的方法以将矩阵乘以此功能内的向量?
inline void multiply(
std::vector< std::vector<double> > &matrix,
std::vector<double> &vector,
std::vector<double> &result
){
int size = (int) vector.size();
result.resize(size);
#pragma omp parallel for
for(int i = 0; i < size; ++i){
int j = 0;
for(; j <= size - 16; j += 16){
result[i] += matrix[i][j] * vector[j]
+ matrix[i][j + 1] * vector[j + 1]
+ matrix[i][j + 2] * vector[j + 2]
+ matrix[i][j + 3] * vector[j + 3]
+ matrix[i][j + 4] * vector[j + 4]
+ matrix[i][j + 5] * vector[j + 5]
+ matrix[i][j + 6] * vector[j + 6]
+ matrix[i][j + 7] * vector[j + 7]
+ matrix[i][j + 8] * vector[j + 8]
+ matrix[i][j + 9] * vector[j + 9]
+ matrix[i][j + 10] * vector[j + 10]
+ matrix[i][j + 11] * vector[j + 11]
+ matrix[i][j + 12] * vector[j + 12]
+ matrix[i][j + 13] * vector[j + 13]
+ matrix[i][j + 14] * vector[j + 14]
+ matrix[i][j + 15] * vector[j + 15];
}
for(; j < size; ++j){
result[i] += matrix[i][j] * vector[j];
}
}
}
此功能在运行时称为很多次,因此对于总计算时间具有非常关键的影响。
根据硬件的不同,使用GPU并行化(ex:cuda)可能会有所帮助。
相关文章:
- C++从另一个类访问公共静态向量的正确方法是什么
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 声明高维向量的更简洁的方法
- 在C++中初始化向量映射的最有效方法
- C++11 迭代向量的新方法?
- std::find,返回所有找到的值的替代方法,而不仅仅是存在重复的向量的第一个值
- C++ STD 函数运算符:有没有一种方法可以通过函数将一个向量映射到另一个向量上?
- C++:将向量传递到构造函数以创建成员变量的最佳方法?
- 有什么方法可以将具有不同模板参数的模板类实例放入向量中?
- 当映射包含字符串向量作为值时,从值中获取键的有效方法
- 在向量中查找大于 0(或通常为 k)的最小元素的最佳方法是什么?
- 从数组中删除非唯一值、保持顺序和不使用向量的最佳方法?
- 使用192/256位整数求和无符号64位整数向量的点积的最快方法
- 访问类成员向量最后一项的正确方法
- 使用 std::vector::swap 方法在C++中交换两个不同的向量是否安全?
- 从列表/向量制作嵌套 for 循环的最佳方法是什么?
- 方法向量的新/分配的复杂性::p ush_back
- C++调用另一个类中的类方法向量
- 自己的"Insert"方法(向量)函数模板
- 最有效的计算集合A对集合B的补的方法(向量)