我是C ++的新手,所以我想知道是否可以在C ++中引导for循环。在Python,Matlab中,矢量化增加了性能,SIMD操作,我想知道这是否可以在C ++中实现?如果是这样的话?如果它很长,你能指点我一个教程吗?
template <class T>
matrix<T> matrix<T>::operator*( matrix<T> &rhs)
/*
it takes the current matrix , multiplies it by the matrix on the right , and returns
a new matrix
*/
{
matrix<T> result(_rows,rhs._cols);
if(_cols == rhs._rows ){
for(long long i = 1; i <= _rows ;i++){
for(long long j = 1 ; j <= rhs._cols ; j++){
for(long long k = 1; k <= _cols ; k++)
result(i,j) += get(i,k) * rhs(k,j);// get(i,k) gives the elements in the current matrix.
}
}
//}else error("Cols Does Not Match");
}else error("Rows Does Not Match");
return result ;
}
我在我的类矩阵中做了更复杂的循环,如果你能给我一个关于如何进行矢量化的启发式算法,它会有很大的帮助。
旁注 - (我应该把它作为一个单独的问题吗?) 我将矩阵实现为1D std :: vector。对于30000 X 30000(10 ^ 8)的大小,我在VS中收到调试错误。我在网上搜索,发现std :: vector的限制为〜5000万。我如何支持更大尺寸的矩阵。 Matlab支持大约20亿(10 ^ 9)向量元素或更多。我可以在C ++中做些什么来获得相同的大小?我应该回到使用数组并自己进行内存分配吗?
谢谢。
答案 0 :(得分:1)
对于&#39;矢量化&#39;对于for循环,您可以使用OpenMP http://openmp.org/wp/或Intel TBB。
如果您不想自己实现基本数学函数,可以使用像Armadillo http://arma.sourceforge.net/这样的Math-Libs。他们正在为您做优化。