From 03fe6cb298fb77f18975f4dfa1dfaff415b06307 Mon Sep 17 00:00:00 2001 From: Chichi Lalescu <clalesc1@jhu.edu> Date: Fri, 20 Feb 2015 11:59:23 -0500 Subject: [PATCH] use less memory i.e. use just one temporary arrya for interleave and Morton shuffling. --- src/Morton_shuffler.cpp | 5 +---- src/Morton_shuffler.hpp | 5 ++++- src/RMHD_converter.cpp | 2 +- src/field_descriptor.cpp | 1 + test.ipynb | 6 +++--- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/Morton_shuffler.cpp b/src/Morton_shuffler.cpp index 670ce2cf..b771b69b 100644 --- a/src/Morton_shuffler.cpp +++ b/src/Morton_shuffler.cpp @@ -55,11 +55,9 @@ Morton_shuffler::~Morton_shuffler() int Morton_shuffler::shuffle( float *a, + float *rtmp, const char *base_fname) { - // array where shuffled data will be placed - float *rtmp = fftwf_alloc_real(this->drcubbie->local_size); - // shuffle into z order ptrdiff_t z, zz; int rid, zid; @@ -125,7 +123,6 @@ int Morton_shuffler::shuffle( base_fname, this->out_group*this->doutput->sizes[0]); this->doutput->write(temp_char, rtmp); - fftwf_free(rtmp); return EXIT_SUCCESS; } diff --git a/src/Morton_shuffler.hpp b/src/Morton_shuffler.hpp index 3e98ac32..431b437d 100644 --- a/src/Morton_shuffler.hpp +++ b/src/Morton_shuffler.hpp @@ -70,7 +70,10 @@ class Morton_shuffler int nfiles); ~Morton_shuffler(); - int shuffle(float *a, const char *base_fname); + int shuffle( + float *regular_data, + float *shuffled_data, + const char *base_fname); }; #endif//MORTON_SHUFFLER diff --git a/src/RMHD_converter.cpp b/src/RMHD_converter.cpp index d368980d..3f8e1749 100644 --- a/src/RMHD_converter.cpp +++ b/src/RMHD_converter.cpp @@ -133,7 +133,7 @@ int RMHD_converter::convert( // mix components this->f3r->interleave(this->r3, rtmp, 2); - this->s->shuffle(rtmp, ofile); + this->s->shuffle(rtmp, this->r3, ofile); fftwf_free(rtmp); return EXIT_SUCCESS; diff --git a/src/field_descriptor.cpp b/src/field_descriptor.cpp index df101d1b..df6fe39d 100644 --- a/src/field_descriptor.cpp +++ b/src/field_descriptor.cpp @@ -232,6 +232,7 @@ int field_descriptor::interleave( float *output, int dim) { + // TODO: implement inplace interleaver for (int k = 0; k < this->local_size; k++) for (int j = 0; j < dim; j++) output[k*dim + j] = input[j*this->local_size + k]; diff --git a/test.ipynb b/test.ipynb index da3b33fc..8a3ffb29 100644 --- a/test.ipynb +++ b/test.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:3746adfc6567f394973ab357f8a68759f766ba127e0a9a388298c16ebbafbe4e" + "signature": "sha256:b66beda6c64119cb0725443436f940cc3d6a7269d12b4d537c8d44881b89be2c" }, "nbformat": 3, "nbformat_minor": 0, @@ -195,7 +195,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 5 + "prompt_number": 23 }, { "cell_type": "code", @@ -226,7 +226,7 @@ ] } ], - "prompt_number": 6 + "prompt_number": 24 }, { "cell_type": "code", -- GitLab