GPUMLib  0.2.2
GPU Machine Learning Library
NMFmultiplicativeDivergence.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 "NMFmultiplicativeDivergence.h"
22 
23 namespace GPUMLib {
24 
27 
29  int n = V.Rows();
30  int m = V.Columns();
31  int r = W.Columns();
32 
33  // Update H
35 
36  DetermineQualityImprovement(false);
37 
39 
40  UpdateH_MD<<<gh, bh>>>(H.Pointer(), W.Pointer(), V.Pointer(), WH.Pointer(), sum.Pointer(), n, m, r);
41 
42  if (!updateW) return;
43 
44  // Update W
47 
48  UpdateW_MD<<<gw, bw>>>(W.Pointer(), H.Pointer(), V.Pointer(), WH.Pointer(), sum.Pointer(), n, m, r);
49 }
50 
52 
53 }
int NumberThreadsPerBlockThatBestFit(int threads, int maxThreadsPerBlock=MAX_THREADS_PER_BLOCK)
Definition: Utilities.h:37
void KernelSumW(int blockSize, cudafloat *W, int n, int r, cudafloat *sumW)
Definition: NMFkernels.cu:110
Type * Pointer() const
Definition: BaseArray.h:70
void KernelSumH(int blockSize, cudafloat *H, int r, int m, cudafloat *sumH)
Definition: NMFkernels.cu:198
Type * Pointer() const
Definition: BaseMatrix.h:88
int Columns() const
Definition: BaseMatrix.h:80
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
int Rows() const
Definition: BaseMatrix.h:74