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;
}