GPUMLib  0.2.2
GPU Machine Learning Library
NMFmultiplicativeEuclidian.cu
1 /*
2  Noel Lopes is an Assistant Professor at the Polytechnic Institute of Guarda, Portugal
3  Copyright (C) 2009, 2010, 2011, 2012 Noel de Jesus Mendonša Lopes
4 
5  This file is part of GPUMLib.
6 
7  GPUMLib is free software: you can redistribute it and/or modify
8  it under the terms of the GNU General Public License as published by
9  the Free Software Foundation, either version 3 of the License, or
10  (at your option) any later version.
11 
12  This program is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  GNU General Public License for more details.
16 
17  You should have received a copy of the GNU General Public License
18  along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 
21 #include "NMFmultiplicativeEuclidian.h"
22 
23 namespace GPUMLib {
24 
27 
29  DetermineQualityImprovement(true);
30 
31  // Calculate Wt
33  DeviceMatrix<cudafloat> & Wt = W;
34 
35  // Calculate WtV
37 
38  // Calculate WtW
40 
41  // Calculate WtWH
43 
44  UpdateMatrix_ME<<<blocksH, SIZE_BLOCKS_NMF>>>(WtV.Pointer(), WtWH.Pointer(), H.Pointer(), H.Elements());
45 
46  Wt.ReplaceByTranspose();
47 
48  if (!updateW) return;
49 
50  // Calculate Ht
52  DeviceMatrix<cudafloat> & Ht = H;
53 
54  // Calculate VHt
56 
57  // Calculate HHt
58  DeviceMatrix<cudafloat> & HHt = WtW;
59  Ht.ReplaceByTranspose();
61 
62  // Calculate WHHt
64 
65  UpdateMatrix_ME<<<blocksW, SIZE_BLOCKS_NMF>>>(VHt.Pointer(), WHHt.Pointer(), W.Pointer(), W.Elements());
66 }
67 
69 
70 }
void ReplaceByTranspose()
Definition: BaseMatrix.h:107
void MultiplyBySelfTranspose(DeviceMatrix< Type > &C, cudafloat alpha=CUDA_VALUE(1.0), cudafloat beta=CUDA_VALUE(0.0))
Definition: DeviceMatrix.h:170
int Elements() const
Definition: BaseMatrix.h:94
Type * Pointer() const
Definition: BaseMatrix.h:88
static void Multiply(DeviceMatrix< Type > &A, DeviceMatrix< Type > &B, DeviceMatrix< Type > &C, cudafloat alpha=CUDA_VALUE(1.0), cudafloat beta=CUDA_VALUE(0.0))
Definition: DeviceMatrix.h:192