2013-03-02 117 views
1

FLENS我想實現「自定義」存儲(也就是說,能夠提供指向實際數據的指針並負責存儲的內存管理)。FLENS的自定義存儲

管理其緩衝器A矩陣的定義如下,例如:

typedef flens::GeMatrix<flens::FullStorage<double, flens::ColMajor> > M; 

後來,人們可以使用像這樣的矩陣:

M m1; 
M m2; 
M m3; 
/* initialise the matrices */ 
m3 = m1 * m2; 

爲了做同樣的事情與基質類型,它允許訪問內部緩衝區,例如,GhostStorage只是實現了FullStorage的方式,並增加了一個init()方法,該方法允許設置內部指針(完整實現過長,無法粘貼這裏):

void 
init(IndexType numRows, IndexType numCols, 
     IndexType firstRow = I::defaultIndexBase, 
     IndexType firstCol = I::defaultIndexBase, 
     ElementType *p_data = NULL) 
{ 
    _data = p_data; 
    _numRows = numRows; 
    _numCols = numCols; 
    _firstRow = firstRow; 
    _firstCol = firstCol; 
    ASSERT(_numRows>=0); 
    ASSERT(_numCols>=0); 
} 

定義這樣的類型後:

typedef flens::GhostStorage<double, flens::ColMajor> GhostEng; 
class MGhost : public flens::GeMatrix<GhostEng> 
{ 
    public: 
    void 
    init(IndexType numRows, IndexType numCols, 
    IndexType firstRow, 
    IndexType firstCol, 
    ElementType *p_data = NULL) 
    { 
    engine().init(numRows,numCols,firstRow,firstCol,p_data); 
    } 

}; 

我期望與上述同樣的操作應該是可能的:

MGhost mg1; 
MGhost mg2; 
MGhost mg3; 
/* initialise the matrices using the init() method */ 
mg3 = mg1 * mg2; 

但是編譯器在這種情況下抱怨:

沒有已知的ar轉換gument 1從 '常量 flens :: MatrixClosure>, flens :: GeMatrix>>' 到 '常量MGhost &'

FLENS作者提供指導有關implementing your custom type of matrix,但我使用已定義的矩陣式在這裏 - flens::GeMatrix

底線,問題是:如何在FLENS中實現一個矩陣,允許操縱內部緩衝區和高層交互,如m3 = m1 * m2

回答

2

有沒有必要寫自己的類,FLENS已提供的功能:

typedef FullStorageView<double, ColMajor> FSView; 
typedef GeMatrix<FSView>     GeMatrixView; 
GeMatrixView A = FSView(numRows, numCols, data, ldA); 

這裏,數據是指向你分配的內存。這在教程中詳細解釋。此外,還有一個郵件列表,問題的答案很快。

+0

你好,傑克,謝謝你的回答。我發佈這個問題已經有一段時間了。我會研究它,並在那個時候將你的答案標記爲正確答案(或不答題)。信息+1。 – 2013-12-16 14:58:50