Mentions légales du service

Skip to content
Snippets Groups Projects
Commit 7f566a14 authored by hhakim's avatar hhakim
Browse files

Remove TransformHelperButterfly_gpu.h/hpp and all references to it as it not used anymore.

parent e23033db
Branches
Tags
No related merge requests found
...@@ -132,7 +132,6 @@ namespace Faust ...@@ -132,7 +132,6 @@ namespace Faust
template<typename FPP,FDevice DEVICE> template<typename FPP,FDevice DEVICE>
class MatBSR; class MatBSR;
template<typename FPP, FDevice DEV> class TransformHelperButterfly;
template<typename FPP, FDevice DEV> class MatButterfly; template<typename FPP, FDevice DEV> class MatButterfly;
template<typename FPP> template<typename FPP>
...@@ -145,7 +144,6 @@ namespace Faust ...@@ -145,7 +144,6 @@ namespace Faust
friend TransformHelper<FPP,Cpu>; // TODO: limit to needed member functions only friend TransformHelper<FPP,Cpu>; // TODO: limit to needed member functions only
friend Transform<FPP,Cpu>; //TODO: limit to needed member functions only (multiply) friend Transform<FPP,Cpu>; //TODO: limit to needed member functions only (multiply)
friend void MatDiag<FPP>::multiply(MatDense<FPP,Cpu> & M, char opThis) const; friend void MatDiag<FPP>::multiply(MatDense<FPP,Cpu> & M, char opThis) const;
friend TransformHelperButterfly<FPP, Cpu>;
friend MatButterfly<FPP, Cpu>; friend MatButterfly<FPP, Cpu>;
/// All derived class template of MatDense are considered as friends /// All derived class template of MatDense are considered as friends
......
...@@ -97,7 +97,6 @@ namespace Faust ...@@ -97,7 +97,6 @@ namespace Faust
template<typename FPP, FDevice DEVICE, typename FPP2> class GivensFGFTParallel; template<typename FPP, FDevice DEVICE, typename FPP2> class GivensFGFTParallel;
template<typename FPP, FDevice DEVICE, typename FPP2> class GivensFGFTComplex; template<typename FPP, FDevice DEVICE, typename FPP2> class GivensFGFTComplex;
template<typename FPP> class TransformHelperPoly; template<typename FPP> class TransformHelperPoly;
template<typename FPP, FDevice DEV> class TransformHelperButterfly;
template<typename FPP, FDevice DEV> class MatButterfly; template<typename FPP, FDevice DEV> class MatButterfly;
//TODO: simplify/remove the friendship by adding/using a public setter to is_ortho //TODO: simplify/remove the friendship by adding/using a public setter to is_ortho
//template<typename FPP> void wht_factors(unsigned int n, std::vector<MatGeneric<FPP,Cpu>*>& factors, const bool, const bool); //template<typename FPP> void wht_factors(unsigned int n, std::vector<MatGeneric<FPP,Cpu>*>& factors, const bool, const bool);
...@@ -119,7 +118,6 @@ namespace Faust ...@@ -119,7 +118,6 @@ namespace Faust
friend Transform<FPP,Cpu>; //TODO: limit to needed member functions only (multiply) friend Transform<FPP,Cpu>; //TODO: limit to needed member functions only (multiply)
friend TransformHelper<FPP,Cpu>; // TODO: limit to needed member functions only friend TransformHelper<FPP,Cpu>; // TODO: limit to needed member functions only
friend TransformHelperPoly<FPP>; // TODO: limit to needed member functions only friend TransformHelperPoly<FPP>; // TODO: limit to needed member functions only
friend TransformHelperButterfly<FPP, Cpu>; // TODO: limit to needed member functions only
friend MatButterfly<FPP, Cpu>; // TODO: limit to needed member functions only friend MatButterfly<FPP, Cpu>; // TODO: limit to needed member functions only
friend void wht_factors<>(unsigned int n, std::vector<MatGeneric<FPP,Cpu>*>& factors, const bool, const bool); friend void wht_factors<>(unsigned int n, std::vector<MatGeneric<FPP,Cpu>*>& factors, const bool, const bool);
friend class MatDense<FPP,Cpu>; friend class MatDense<FPP,Cpu>;
......
#ifndef __FAUST_TRANSFORM_HELPER_DFT_GPU2__
#define __FAUST_TRANSFORM_HELPER_DFT_GPU2__
#ifdef USE_GPU_MOD
#include "faust_TransformHelper_gpu.h"
#include "faust_MatButterfly_gpu.h"
#include "faust_MatPerm_gpu.h"
namespace Faust
{
template<typename FPP, FDevice DEV>
class TransformHelperButterfly;
template<typename FPP>
class TransformHelperButterfly<FPP, GPU2> : public TransformHelper<FPP, GPU2>
{
bool has_permutation;
std::vector<MatButterfly<FPP, GPU2>> opt_factors;
MatPerm<FPP, GPU2> P;
// private ctor
TransformHelperButterfly(const std::vector<MatGeneric<FPP, Cpu> *>& facts, const FPP lambda_ = (FPP)1.0, const bool optimizedCopy=false, const bool cloning_fact = true, const bool internal_call=false);
public:
TransformHelperButterfly(const TransformHelper<FPP, Cpu> & cputh);
~TransformHelperButterfly() {}
static TransformHelper<FPP,GPU2>* fourierFaust(unsigned int n, const bool norma=true);
static TransformHelper<FPP,GPU2>* optFaust(const TransformHelper<FPP, GPU2>* F) { throw std::runtime_error("Not yet implemented on GPU");};
Vect<FPP, Cpu> multiply(const Vect<FPP, Cpu>& x);
void multiply(const FPP* x, FPP* y);
Vect<FPP,Cpu> multiply(const FPP* x);
void multiply(const FPP* A, int A_ncols, FPP* C);
MatDense<FPP, Cpu> multiply(const MatDense<FPP,Cpu> &A);
MatDense<FPP, Cpu> multiply(const MatSparse<FPP,Cpu> &A);
};
}
#include "faust_TransformHelperButterfly_gpu.hpp"
#endif
#endif
namespace Faust
{
template<typename FPP>
TransformHelperButterfly<FPP, GPU2>::TransformHelperButterfly(const std::vector<MatGeneric<FPP,Cpu> *>& facts, const FPP lambda_ /*= (FPP)1.0*/, const bool optimizedCopy/*=false*/, const bool cloning_fact /*= true*/, const bool internal_call/*=false*/)
{
int i = 0;
auto size = facts[0]->getNbRow();
// for(auto csr_fac: facts)
// use rather recorded factors in the Faust::Transform because one might have been multiplied with lambda_
auto log2nf = 1 << (facts.size() - 1);
has_permutation = (log2nf - size) == 0;
auto end_it = has_permutation?this->end()-1:this->end();
for(auto gen_fac: facts)
{
auto csr_fac = dynamic_cast<const MatSparse<FPP, Cpu>*>(gen_fac);
if(csr_fac == nullptr)
throw std::runtime_error("TransformHelperButterfly can receive only MatSparse CSR matrices");
if(i < facts.size()-1 || ! has_permutation)
{
if( i == 0)
{
auto mul_csr = new MatSparse<FPP, Cpu>(*csr_fac);
*mul_csr *= lambda_;
opt_factors.insert(opt_factors.begin(),
MatButterfly<FPP, GPU2>(*mul_csr, i++));
this->push_back(mul_csr);
}
else
{
opt_factors.insert(opt_factors.begin(),
MatButterfly<FPP, GPU2>(*csr_fac, i++));
this->push_back(csr_fac);
}
}
}
if(has_permutation)
{
// set the permutation factor
auto csr_fac = dynamic_cast<const MatSparse<FPP, Cpu>*>(*(facts.end()-1));
P = MatPerm<FPP, GPU2>(*csr_fac);
}
}
template<typename FPP>
TransformHelperButterfly<FPP, GPU2>::TransformHelperButterfly(const TransformHelper<FPP, Cpu> & cputh)
{
MatButterfly<FPP, Cpu>* mbf;
MatPerm<FPP, Cpu>* mp;
MatSparse<FPP, Cpu>* ms;
MatSparse<FPP, Cpu> sp;
has_permutation = false;
for(auto gen_fac: cputh)
{
if(mbf = dynamic_cast<MatButterfly<FPP, Cpu>*>(gen_fac))
{
opt_factors.insert(opt_factors.begin(), MatButterfly<FPP, GPU2>(*mbf));
sp = mbf->toMatSparse();
}
else if(mp = dynamic_cast<MatPerm<FPP, Cpu>*>(gen_fac))
{
P = MatPerm<FPP, GPU2>(*mp);
sp = mp->toMatSparse();
has_permutation = true;
}
else if((ms = dynamic_cast<MatSparse<FPP, Cpu>*>(gen_fac)) && MatPerm<FPP, Cpu>::isPerm(*ms, false))
{
sp = *ms;
P = MatPerm<FPP, GPU2>(sp);
has_permutation = true;
}
else
throw std::runtime_error("Cannot convert CPU TransformHelper to GPU TransformHelperButterfly if it contains other matrix type than MatButterfly and MatPerm or MatSparse permutation");
this->push_back(new MatSparse<FPP, GPU2>(sp));
}
}
template<typename FPP>
void TransformHelperButterfly<FPP, GPU2>::multiply(const FPP* A, int A_ncols, FPP* C)
{
MatDense<FPP, GPU2> gpu_X(this->getNbRow(), A_ncols, A);
int i = 0;
if(has_permutation)
P.multiply(gpu_X, 'N');
for(auto gpu_bmat: opt_factors)
gpu_bmat.multiply(gpu_X);
gpu_X.tocpu(C, nullptr);
}
template<typename FPP>
Vect<FPP, Cpu> TransformHelperButterfly<FPP, GPU2>::multiply(const Vect<FPP, Cpu>& x)
{
Vect<FPP, Cpu> y;
y.resize(this->getNbRow());
multiply(x.getData(), y.getData());
return y;
}
template<typename FPP>
void TransformHelperButterfly<FPP, GPU2>::multiply(const FPP* x, FPP* y)
{
multiply(x, 1, y);
}
template<typename FPP>
Vect<FPP, Cpu> TransformHelperButterfly<FPP, GPU2>::multiply(const FPP* x)
{
Vect<FPP, Cpu> y;
y.resize(this->getNbRow());
multiply(x, 1, y.getData());
return y;
}
template<typename FPP>
MatDense<FPP, Cpu> TransformHelperButterfly<FPP, GPU2>::multiply(const MatDense<FPP,Cpu> &A)
{
MatDense<FPP, Cpu> out;
out.resize(this->getNbRow(), A.getNbCol());
multiply(A.getData(), A.getNbCol(), out.getData());
return out;
}
template<typename FPP>
MatDense<FPP, Cpu> TransformHelperButterfly<FPP,GPU2>::multiply(const MatSparse<FPP,Cpu> &X)
{
return multiply(MatDense<FPP, Cpu>(X));
}
template<typename FPP>
TransformHelper<FPP,GPU2>* TransformHelperButterfly<FPP,GPU2>::fourierFaust(unsigned int n, const bool norma/*=true*/)
{
std::vector<MatGeneric<FPP,Cpu>*> factors(n+1);
TransformHelper<FPP, GPU2>* fourierFaust = nullptr;
try
{
fft_factors(n, factors);
FPP alpha = norma?FPP(1/sqrt((double)(1 << n))):FPP(1.0);
fourierFaust = new TransformHelperButterfly<FPP, GPU2>(factors, alpha, false, false, /* internal call */ true);
}
catch(std::bad_alloc e)
{
//nothing to do, out of memory, return nullptr
}
return fourierFaust;
}
}
...@@ -67,7 +67,7 @@ ...@@ -67,7 +67,7 @@
#ifdef USE_GPU_MOD #ifdef USE_GPU_MOD
#include "faust_gpu_mod_utils.h" #include "faust_gpu_mod_utils.h"
#include "faust_TransformHelper_gpu.h" #include "faust_TransformHelper_gpu.h"
#include "faust_TransformHelperButterfly_gpu.h"
#endif #endif
#include "new_faust.h" #include "new_faust.h"
#include "faust_disp.h" #include "faust_disp.h"
......
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
#include "faust_Transform.h" #include "faust_Transform.h"
#if USE_GPU_MOD #if USE_GPU_MOD
#include "faust_TransformHelperButterfly_gpu.h"
#endif #endif
#include <iostream> #include <iostream>
#include <exception> #include <exception>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment