All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines
Classes | Public Member Functions | Static Public Member Functions
QGpCoreTools::MatrixMultiply Class Reference

Brief description of class still missing. More...

#include <MatrixMultiply.h>

Inheritance diagram for QGpCoreTools::MatrixMultiply:
QGpCoreTools::AbstractNumericalCache

List of all members.

Classes

class  IndexMap

Public Member Functions

int indexCount () const
const IndexMapindexMap (int i) const
virtual void init ()
 MatrixMultiply (MatrixMultiplyKey *key)
 ~MatrixMultiply ()

Static Public Member Functions

static const MatrixMultiplybegin (int nRows1, int commonDim, int nColumns2)
static bool isValid (uint nRows1, uint commonDim, uint nColumns2)

Detailed Description

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.


Constructor & Destructor Documentation

  : AbstractNumericalCache(key)
{
  _indexes=0;
}
{
  delete [] _indexes;
}

Member Function Documentation

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

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

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

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines