[arrayfire] 105/284: moved fft cpu fns implementations to kernel namespace
Ghislain Vaillant
ghisvail-guest at moszumanska.debian.org
Sun Feb 7 18:59:23 UTC 2016
This is an automated email from the git hooks/post-receive script.
ghisvail-guest pushed a commit to branch debian/experimental
in repository arrayfire.
commit c539f1d5ab0fbb5b609f30df858fbb8270e1df99
Author: pradeep <pradeep at arrayfire.com>
Date: Mon Dec 28 16:40:25 2015 -0500
moved fft cpu fns implementations to kernel namespace
---
src/backend/cpu/fft.cpp | 188 ++--------------------------
src/backend/cpu/{fft.cpp => kernel/fft.hpp} | 138 ++++++--------------
2 files changed, 47 insertions(+), 279 deletions(-)
diff --git a/src/backend/cpu/fft.cpp b/src/backend/cpu/fft.cpp
index e522954..2edced2 100644
--- a/src/backend/cpu/fft.cpp
+++ b/src/backend/cpu/fft.cpp
@@ -12,8 +12,7 @@
#include <ArrayInfo.hpp>
#include <Array.hpp>
#include <fft.hpp>
-#include <err_cpu.hpp>
-#include <fftw3.h>
+#include <kernel/fft.hpp>
#include <copy.hpp>
#include <math.hpp>
#include <platform.hpp>
@@ -24,143 +23,11 @@ using af::dim4;
namespace cpu
{
-template<int rank>
-void computeDims(int rdims[rank], const dim4 &idims)
-{
- for (int i = 0; i < rank; i++) {
- rdims[i] = idims[(rank -1) - i];
- }
-}
-
-template<typename T>
-struct fftw_transform;
-
-#define TRANSFORM(PRE, TY) \
- template<> \
- struct fftw_transform<TY> \
- { \
- typedef PRE##_plan plan_t; \
- typedef PRE##_complex ctype_t; \
- \
- template<typename... Args> \
- plan_t create(Args... args) \
- { return PRE##_plan_many_dft(args...); } \
- void execute(plan_t plan) { return PRE##_execute(plan); } \
- void destroy(plan_t plan) { return PRE##_destroy_plan(plan); } \
- }; \
-
-
-TRANSFORM(fftwf, cfloat)
-TRANSFORM(fftw, cdouble)
-
-template<typename T, int rank, bool direction>
-void fft_inplace_(Array<T> in)
-{
- int t_dims[rank];
- int in_embed[rank];
-
- const dim4 idims = in.dims();
-
- computeDims<rank>(t_dims , idims);
- computeDims<rank>(in_embed , in.getDataDims());
-
- const dim4 istrides = in.strides();
-
- typedef typename fftw_transform<T>::ctype_t ctype_t;
- typename fftw_transform<T>::plan_t plan;
-
- fftw_transform<T> transform;
-
- int batch = 1;
- for (int i = rank; i < 4; i++) {
- batch *= idims[i];
- }
-
- plan = transform.create(rank,
- t_dims,
- (int)batch,
- (ctype_t *)in.get(),
- in_embed, (int)istrides[0],
- (int)istrides[rank],
- (ctype_t *)in.get(),
- in_embed, (int)istrides[0],
- (int)istrides[rank],
- direction ? FFTW_FORWARD : FFTW_BACKWARD,
- FFTW_ESTIMATE);
-
- transform.execute(plan);
- transform.destroy(plan);
-}
-
template<typename T, int rank, bool direction>
void fft_inplace(Array<T> &in)
{
in.eval();
- getQueue().enqueue(fft_inplace_<T, rank, direction>, in);
-}
-
-template<typename To, typename Ti>
-struct fftw_real_transform;
-
-#define TRANSFORM_REAL(PRE, To, Ti, POST) \
- template<> \
- struct fftw_real_transform<To, Ti> \
- { \
- typedef PRE##_plan plan_t; \
- typedef PRE##_complex ctype_t; \
- \
- template<typename... Args> \
- plan_t create(Args... args) \
- { return PRE##_plan_many_dft_##POST(args...); } \
- void execute(plan_t plan) { return PRE##_execute(plan); } \
- void destroy(plan_t plan) { return PRE##_destroy_plan(plan); } \
- }; \
-
-
-TRANSFORM_REAL(fftwf, cfloat , float , r2c)
-TRANSFORM_REAL(fftw , cdouble, double, r2c)
-TRANSFORM_REAL(fftwf, float , cfloat , c2r)
-TRANSFORM_REAL(fftw , double, cdouble, c2r)
-
-template<typename Tc, typename Tr, int rank>
-void fft_r2c_(Array<Tc> out, const Array<Tr> in)
-{
- dim4 idims = in.dims();
-
- int t_dims[rank];
- int in_embed[rank];
- int out_embed[rank];
-
- computeDims<rank>(t_dims , idims);
- computeDims<rank>(in_embed , in.getDataDims());
- computeDims<rank>(out_embed , out.getDataDims());
-
- const dim4 istrides = in.strides();
- const dim4 ostrides = out.strides();
-
- typedef typename fftw_real_transform<Tc, Tr>::ctype_t ctype_t;
- typename fftw_real_transform<Tc, Tr>::plan_t plan;
-
- fftw_real_transform<Tc, Tr> transform;
-
- int batch = 1;
- for (int i = rank; i < 4; i++) {
- batch *= idims[i];
- }
-
- plan = transform.create(rank,
- t_dims,
- (int)batch,
- (Tr *)in.get(),
- in_embed, (int)istrides[0],
- (int)istrides[rank],
- (ctype_t *)out.get(),
- out_embed, (int)ostrides[0],
- (int)ostrides[rank],
- FFTW_ESTIMATE);
-
- transform.execute(plan);
- transform.destroy(plan);
+ getQueue().enqueue(kernel::fft_inplace<T, rank, direction>, in);
}
template<typename Tc, typename Tr, int rank>
@@ -172,57 +39,18 @@ Array<Tc> fft_r2c(const Array<Tr> &in)
odims[0] = odims[0] / 2 + 1;
Array<Tc> out = createEmptyArray<Tc>(odims);
- getQueue().enqueue(fft_r2c_<Tc, Tr, rank>, out, in);
+ getQueue().enqueue(kernel::fft_r2c<Tc, Tr, rank>, out, in);
return out;
}
template<typename Tr, typename Tc, int rank>
-void fft_c2r_(Array<Tr> out, const Array<Tc> in, const dim4 odims)
-{
- int t_dims[rank];
- int in_embed[rank];
- int out_embed[rank];
-
- computeDims<rank>(t_dims , odims);
- computeDims<rank>(in_embed , in.getDataDims());
- computeDims<rank>(out_embed , out.getDataDims());
-
- const dim4 istrides = in.strides();
- const dim4 ostrides = out.strides();
-
- typedef typename fftw_real_transform<Tr, Tc>::ctype_t ctype_t;
- typename fftw_real_transform<Tr, Tc>::plan_t plan;
-
- fftw_real_transform<Tr, Tc> transform;
-
- int batch = 1;
- for (int i = rank; i < 4; i++) {
- batch *= odims[i];
- }
-
- plan = transform.create(rank,
- t_dims,
- (int)batch,
- (ctype_t *)in.get(),
- in_embed, (int)istrides[0],
- (int)istrides[rank],
- (Tr *)out.get(),
- out_embed, (int)ostrides[0],
- (int)ostrides[rank],
- FFTW_ESTIMATE);
-
- transform.execute(plan);
- transform.destroy(plan);
-}
-
-template<typename Tr, typename Tc, int rank>
Array<Tr> fft_c2r(const Array<Tc> &in, const dim4 &odims)
{
in.eval();
Array<Tr> out = createEmptyArray<Tr>(odims);
- getQueue().enqueue(fft_c2r_<Tr, Tc, rank>, out, in, odims);
+ getQueue().enqueue(kernel::fft_c2r<Tr, Tc, rank>, out, in, odims);
return out;
}
@@ -235,8 +63,8 @@ Array<Tr> fft_c2r(const Array<Tc> &in, const dim4 &odims)
template void fft_inplace<T, 2, false>(Array<T> &in); \
template void fft_inplace<T, 3, false>(Array<T> &in);
- INSTANTIATE(cfloat )
- INSTANTIATE(cdouble)
+INSTANTIATE(cfloat )
+INSTANTIATE(cdouble)
#define INSTANTIATE_REAL(Tr, Tc) \
template Array<Tc> fft_r2c<Tc, Tr, 1>(const Array<Tr> &in); \
@@ -246,7 +74,7 @@ Array<Tr> fft_c2r(const Array<Tc> &in, const dim4 &odims)
template Array<Tr> fft_c2r<Tr, Tc, 2>(const Array<Tc> &in, const dim4 &odims); \
template Array<Tr> fft_c2r<Tr, Tc, 3>(const Array<Tc> &in, const dim4 &odims); \
- INSTANTIATE_REAL(float , cfloat )
- INSTANTIATE_REAL(double, cdouble)
+INSTANTIATE_REAL(float , cfloat )
+INSTANTIATE_REAL(double, cdouble)
}
diff --git a/src/backend/cpu/fft.cpp b/src/backend/cpu/kernel/fft.hpp
similarity index 69%
copy from src/backend/cpu/fft.cpp
copy to src/backend/cpu/kernel/fft.hpp
index e522954..906c8ef 100644
--- a/src/backend/cpu/fft.cpp
+++ b/src/backend/cpu/kernel/fft.hpp
@@ -1,5 +1,5 @@
/*******************************************************
- * Copyright (c) 2014, ArrayFire
+ * Copyright (c) 2015, ArrayFire
* All rights reserved.
*
* This file is distributed under 3-clause BSD license.
@@ -7,25 +7,17 @@
* http://arrayfire.com/licenses/BSD-3-Clause
********************************************************/
-#include <af/dim4.hpp>
-#include <af/defines.h>
-#include <ArrayInfo.hpp>
+#pragma once
#include <Array.hpp>
-#include <fft.hpp>
-#include <err_cpu.hpp>
#include <fftw3.h>
-#include <copy.hpp>
-#include <math.hpp>
-#include <platform.hpp>
-#include <async_queue.hpp>
-
-using af::dim4;
namespace cpu
{
+namespace kernel
+{
template<int rank>
-void computeDims(int rdims[rank], const dim4 &idims)
+void computeDims(int rdims[rank], const af::dim4 &idims)
{
for (int i = 0; i < rank; i++) {
rdims[i] = idims[(rank -1) - i];
@@ -53,18 +45,42 @@ struct fftw_transform;
TRANSFORM(fftwf, cfloat)
TRANSFORM(fftw, cdouble)
+template<typename To, typename Ti>
+struct fftw_real_transform;
+
+#define TRANSFORM_REAL(PRE, To, Ti, POST) \
+ template<> \
+ struct fftw_real_transform<To, Ti> \
+ { \
+ typedef PRE##_plan plan_t; \
+ typedef PRE##_complex ctype_t; \
+ \
+ template<typename... Args> \
+ plan_t create(Args... args) \
+ { return PRE##_plan_many_dft_##POST(args...); } \
+ void execute(plan_t plan) { return PRE##_execute(plan); } \
+ void destroy(plan_t plan) { return PRE##_destroy_plan(plan); } \
+ }; \
+
+
+TRANSFORM_REAL(fftwf, cfloat , float , r2c)
+TRANSFORM_REAL(fftw , cdouble, double, r2c)
+TRANSFORM_REAL(fftwf, float , cfloat , c2r)
+TRANSFORM_REAL(fftw , double, cdouble, c2r)
+
+
template<typename T, int rank, bool direction>
-void fft_inplace_(Array<T> in)
+void fft_inplace(Array<T> in)
{
int t_dims[rank];
int in_embed[rank];
- const dim4 idims = in.dims();
+ const af::dim4 idims = in.dims();
computeDims<rank>(t_dims , idims);
computeDims<rank>(in_embed , in.getDataDims());
- const dim4 istrides = in.strides();
+ const af::dim4 istrides = in.strides();
typedef typename fftw_transform<T>::ctype_t ctype_t;
typename fftw_transform<T>::plan_t plan;
@@ -92,40 +108,10 @@ void fft_inplace_(Array<T> in)
transform.destroy(plan);
}
-template<typename T, int rank, bool direction>
-void fft_inplace(Array<T> &in)
-{
- in.eval();
- getQueue().enqueue(fft_inplace_<T, rank, direction>, in);
-}
-
-template<typename To, typename Ti>
-struct fftw_real_transform;
-
-#define TRANSFORM_REAL(PRE, To, Ti, POST) \
- template<> \
- struct fftw_real_transform<To, Ti> \
- { \
- typedef PRE##_plan plan_t; \
- typedef PRE##_complex ctype_t; \
- \
- template<typename... Args> \
- plan_t create(Args... args) \
- { return PRE##_plan_many_dft_##POST(args...); } \
- void execute(plan_t plan) { return PRE##_execute(plan); } \
- void destroy(plan_t plan) { return PRE##_destroy_plan(plan); } \
- }; \
-
-
-TRANSFORM_REAL(fftwf, cfloat , float , r2c)
-TRANSFORM_REAL(fftw , cdouble, double, r2c)
-TRANSFORM_REAL(fftwf, float , cfloat , c2r)
-TRANSFORM_REAL(fftw , double, cdouble, c2r)
-
template<typename Tc, typename Tr, int rank>
-void fft_r2c_(Array<Tc> out, const Array<Tr> in)
+void fft_r2c(Array<Tc> out, const Array<Tr> in)
{
- dim4 idims = in.dims();
+ af::dim4 idims = in.dims();
int t_dims[rank];
int in_embed[rank];
@@ -135,8 +121,8 @@ void fft_r2c_(Array<Tc> out, const Array<Tr> in)
computeDims<rank>(in_embed , in.getDataDims());
computeDims<rank>(out_embed , out.getDataDims());
- const dim4 istrides = in.strides();
- const dim4 ostrides = out.strides();
+ const af::dim4 istrides = in.strides();
+ const af::dim4 ostrides = out.strides();
typedef typename fftw_real_transform<Tc, Tr>::ctype_t ctype_t;
typename fftw_real_transform<Tc, Tr>::plan_t plan;
@@ -163,22 +149,8 @@ void fft_r2c_(Array<Tc> out, const Array<Tr> in)
transform.destroy(plan);
}
-template<typename Tc, typename Tr, int rank>
-Array<Tc> fft_r2c(const Array<Tr> &in)
-{
- in.eval();
-
- dim4 odims = in.dims();
- odims[0] = odims[0] / 2 + 1;
- Array<Tc> out = createEmptyArray<Tc>(odims);
-
- getQueue().enqueue(fft_r2c_<Tc, Tr, rank>, out, in);
-
- return out;
-}
-
template<typename Tr, typename Tc, int rank>
-void fft_c2r_(Array<Tr> out, const Array<Tc> in, const dim4 odims)
+void fft_c2r(Array<Tr> out, const Array<Tc> in, const af::dim4 odims)
{
int t_dims[rank];
int in_embed[rank];
@@ -188,8 +160,8 @@ void fft_c2r_(Array<Tr> out, const Array<Tc> in, const dim4 odims)
computeDims<rank>(in_embed , in.getDataDims());
computeDims<rank>(out_embed , out.getDataDims());
- const dim4 istrides = in.strides();
- const dim4 ostrides = out.strides();
+ const af::dim4 istrides = in.strides();
+ const af::dim4 ostrides = out.strides();
typedef typename fftw_real_transform<Tr, Tc>::ctype_t ctype_t;
typename fftw_real_transform<Tr, Tc>::plan_t plan;
@@ -216,37 +188,5 @@ void fft_c2r_(Array<Tr> out, const Array<Tc> in, const dim4 odims)
transform.destroy(plan);
}
-template<typename Tr, typename Tc, int rank>
-Array<Tr> fft_c2r(const Array<Tc> &in, const dim4 &odims)
-{
- in.eval();
-
- Array<Tr> out = createEmptyArray<Tr>(odims);
- getQueue().enqueue(fft_c2r_<Tr, Tc, rank>, out, in, odims);
-
- return out;
}
-
-#define INSTANTIATE(T) \
- template void fft_inplace<T, 1, true >(Array<T> &in); \
- template void fft_inplace<T, 2, true >(Array<T> &in); \
- template void fft_inplace<T, 3, true >(Array<T> &in); \
- template void fft_inplace<T, 1, false>(Array<T> &in); \
- template void fft_inplace<T, 2, false>(Array<T> &in); \
- template void fft_inplace<T, 3, false>(Array<T> &in);
-
- INSTANTIATE(cfloat )
- INSTANTIATE(cdouble)
-
-#define INSTANTIATE_REAL(Tr, Tc) \
- template Array<Tc> fft_r2c<Tc, Tr, 1>(const Array<Tr> &in); \
- template Array<Tc> fft_r2c<Tc, Tr, 2>(const Array<Tr> &in); \
- template Array<Tc> fft_r2c<Tc, Tr, 3>(const Array<Tr> &in); \
- template Array<Tr> fft_c2r<Tr, Tc, 1>(const Array<Tc> &in, const dim4 &odims); \
- template Array<Tr> fft_c2r<Tr, Tc, 2>(const Array<Tc> &in, const dim4 &odims); \
- template Array<Tr> fft_c2r<Tr, Tc, 3>(const Array<Tc> &in, const dim4 &odims); \
-
- INSTANTIATE_REAL(float , cfloat )
- INSTANTIATE_REAL(double, cdouble)
-
}
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/arrayfire.git
More information about the debian-science-commits
mailing list