[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