Brief description of class still missing. More...
#include <MatrixMultiply.h>
Classes | |
class | IndexMap |
Public Member Functions | |
int | indexCount () const |
const IndexMap & | indexMap (int i) const |
virtual void | init () |
MatrixMultiply (MatrixMultiplyKey *key) | |
~MatrixMultiply () | |
Static Public Member Functions | |
static const MatrixMultiply * | begin (int nRows1, int commonDim, int nColumns2) |
static bool | isValid (uint nRows1, uint commonDim, uint nColumns2) |
Brief description of class still missing.
A cache for fast matrix multiplication. The maximum dimension is 256. The size occupied for one set of index is 12*n^3 (for squared matrices), 192 Mb for dimension equal to 256.
: AbstractNumericalCache(key) { _indexes=0; }
{
delete [] _indexes;
}
const MatrixMultiply * QGpCoreTools::MatrixMultiply::begin | ( | int | nRows1, |
int | commonDim, | ||
int | nColumns2 | ||
) | [inline, static] |
Referenced by QGpCoreTools::MatrixData< T >::operator*().
{ return static_cast<const MatrixMultiply *>( AbstractNumericalCache::begin(new MatrixMultiplyKey(nRows1, commonDim, nColumns2))); }
int QGpCoreTools::MatrixMultiply::indexCount | ( | ) | const [inline] |
References QGpCoreTools::MatrixMultiplyKey::indexCount(), and QGpCoreTools::AbstractNumericalCache::key().
Referenced by init(), and QGpCoreTools::MatrixData< T >::operator*().
{ const MatrixMultiplyKey& k=static_cast<const MatrixMultiplyKey&>(key()); return k.indexCount(); }
const IndexMap& QGpCoreTools::MatrixMultiply::indexMap | ( | int | i | ) | const [inline] |
Referenced by QGpCoreTools::MatrixData< T >::operator*().
{return _indexes[i];}
void QGpCoreTools::MatrixMultiply::init | ( | ) | [virtual] |
Implements QGpCoreTools::AbstractNumericalCache.
References QGpCoreTools::MatrixMultiplyKey::commonDim(), indexCount(), QGpCoreTools::AbstractNumericalCache::key(), QGpCoreTools::MatrixMultiplyKey::nColumns2(), and QGpCoreTools::MatrixMultiplyKey::nRows1().
{ const MatrixMultiplyKey& mKey=static_cast<const MatrixMultiplyKey&>(key()); ASSERT(mKey.nRows1()<256); ASSERT(mKey.commonDim()<256); ASSERT(mKey.nColumns2()<256); _indexes=new IndexMap[indexCount()]; IndexMap * pIndex=_indexes; for(int i=0; i<mKey.nRows1(); i++) { for(int j=0; j<mKey.nColumns2(); j++) { int resultIndex=i+j*mKey.nRows1(); int mIndex=j*mKey.commonDim(); for(int k=0; k<mKey.commonDim(); k++) { (pIndex++)->set(resultIndex, i+k*mKey.nRows1(), k+mIndex); } } } }
bool QGpCoreTools::MatrixMultiply::isValid | ( | uint | nRows1, |
uint | commonDim, | ||
uint | nColumns2 | ||
) | [inline, static] |
Referenced by QGpCoreTools::MatrixData< T >::operator*().
{
return nRows1<256 && commonDim<256 && nColumns2<256;
}