From b81d07845b7c5366fdcbb64fec9d28ca1ef4bc82 Mon Sep 17 00:00:00 2001 From: Cristian C Lalescu <Cristian.Lalescu@ds.mpg.de> Date: Thu, 22 Oct 2015 09:08:31 +0200 Subject: [PATCH] remove unused code --- bfps/cpp/Morton_shuffler.cpp | 176 ----------------------------------- bfps/cpp/Morton_shuffler.hpp | 103 -------------------- 2 files changed, 279 deletions(-) delete mode 100644 bfps/cpp/Morton_shuffler.cpp delete mode 100644 bfps/cpp/Morton_shuffler.hpp diff --git a/bfps/cpp/Morton_shuffler.cpp b/bfps/cpp/Morton_shuffler.cpp deleted file mode 100644 index 1ef00d77..00000000 --- a/bfps/cpp/Morton_shuffler.cpp +++ /dev/null @@ -1,176 +0,0 @@ -/********************************************************************** -* * -* Copyright 2015 Max Planck Institute * -* for Dynamics and Self-Organization * -* * -* This file is part of bfps. * -* * -* bfps is free software: you can redistribute it and/or modify * -* it under the terms of the GNU General Public License as published * -* by the Free Software Foundation, either version 3 of the License, * -* or (at your option) any later version. * -* * -* bfps is distributed in the hope that it will be useful, * -* but WITHOUT ANY WARRANTY; without even the implied warranty of * -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -* GNU General Public License for more details. * -* * -* You should have received a copy of the GNU General Public License * -* along with bfps. If not, see <http://www.gnu.org/licenses/> * -* * -* Contact: Cristian.Lalescu@ds.mpg.de * -* * -**********************************************************************/ - -#include "Morton_shuffler.hpp" -#include <iostream> - - -Morton_shuffler::Morton_shuffler( - int N0, int N1, int N2, - int d, - int nfiles) -{ - this->d = d; - if ((nprocs % nfiles != 0) && - (nfiles % nprocs != 0)) - { - std::cerr << - "Number of output files incompatible with number of processes.\n" - "Aborting.\n" << std::endl; - exit(EXIT_FAILURE); - } - if ((N0/8 % nprocs != 0) && - (N1/8 % nprocs != 0) && - (N2/8 % nprocs != 0)) - { - std::cerr << - "Number of cpus incompatible with z-index representation.\n" - "Aborting.\n" << std::endl; - exit(EXIT_FAILURE); - } - int n[4]; - - // various descriptions for the real data - n[0] = N0; - n[1] = N1; - n[2] = N2; - n[3] = this->d; - this->dinput = new field_descriptor<float>(4, n, MPI_FLOAT, MPI_COMM_WORLD); - n[0] = N0/8; - n[1] = N1/8; - n[2] = N2/8; - n[3] = 8*8*8*this->d; - this->drcubbie = new field_descriptor<float>(4, n, MPI_FLOAT, MPI_COMM_WORLD); - n[0] = (N0/8) * (N1/8) * (N2/8); - n[1] = 8*8*8*this->d; - this->dzcubbie = new field_descriptor<float>(2, n, MPI_FLOAT, MPI_COMM_WORLD); - - //set up output file descriptor - int out_rank, out_nprocs; - out_nprocs = nprocs/nfiles; - if (out_nprocs == 0) - { - out_nprocs = 1; - this->files_per_proc = nfiles / nprocs; - } - else - this->files_per_proc = 1; - this->out_group = myrank / out_nprocs; - out_rank = myrank % out_nprocs; - n[0] = ((N0/8) * (N1/8) * (N2/8)) / nfiles; - n[1] = 8*8*8*this->d; - MPI_Comm_split(MPI_COMM_WORLD, this->out_group, out_rank, &this->out_communicator); - this->doutput = new field_descriptor<float>(2, n, MPI_FLOAT, this->out_communicator); -} - -Morton_shuffler::~Morton_shuffler() -{ - delete this->dinput; - delete this->drcubbie; - delete this->dzcubbie; - delete this->doutput; - - MPI_Comm_free(&this->out_communicator); -} - -int Morton_shuffler::shuffle( - float *a, - const char *base_fname) -{ - // TODO: can this be done in-place? - // shuffle into z order - ptrdiff_t z, zz; - int rid, zid; - int kk; - ptrdiff_t cubbie_size = 8*8*8*this->d; - ptrdiff_t cc; - float *rz = fftwf_alloc_real(cubbie_size); - float *rtmp = fftwf_alloc_real(this->dzcubbie->local_size); - for (int k = 0; k < this->drcubbie->sizes[0]; k++) - { - rid = this->drcubbie->rank[k]; - kk = k - this->drcubbie->starts[0]; - for (int j = 0; j < this->drcubbie->sizes[1]; j++) - for (int i = 0; i < this->drcubbie->sizes[2]; i++) - { - z = regular_to_zindex(k, j, i); - zid = this->dzcubbie->rank[z]; - zz = z - this->dzcubbie->starts[0]; - if (myrank == rid || myrank == zid) - { - // first, copy data into cubbie - if (myrank == rid) - for (int tk = 0; tk < 8; tk++) - for (int tj = 0; tj < 8; tj++) - { - cc = (((kk*8+tk)*this->dinput->sizes[1] + (j*8+tj)) * - this->dinput->sizes[2] + i*8)*this->d; - std::copy( - a + cc, - a + cc + 8*this->d, - rz + (tk*8 + tj)*8*this->d); - } - // now copy or send/receive to zindexed array - if (rid == zid) std::copy( - rz, - rz + cubbie_size, - rtmp + zz*cubbie_size); - else - { - if (myrank == rid) MPI_Send( - rz, - cubbie_size, - MPI_FLOAT, - zid, - z, - MPI_COMM_WORLD); - else MPI_Recv( - rtmp + zz*cubbie_size, - cubbie_size, - MPI_FLOAT, - rid, - z, - MPI_COMM_WORLD, - MPI_STATUS_IGNORE); - } - } - } - } - fftwf_free(rz); - - char temp_char[200]; - for (int fcounter = 0; fcounter < this->files_per_proc; fcounter++) - { - sprintf(temp_char, - "%s_z%.7x", - base_fname, - (this->files_per_proc*this->out_group + fcounter)*this->doutput->sizes[0]); - this->doutput->write( - temp_char, - rtmp + fcounter*this->doutput->local_size); - } - fftwf_free(rtmp); - return EXIT_SUCCESS; -} - diff --git a/bfps/cpp/Morton_shuffler.hpp b/bfps/cpp/Morton_shuffler.hpp deleted file mode 100644 index 15a18ca3..00000000 --- a/bfps/cpp/Morton_shuffler.hpp +++ /dev/null @@ -1,103 +0,0 @@ -/********************************************************************** -* * -* Copyright 2015 Max Planck Institute * -* for Dynamics and Self-Organization * -* * -* This file is part of bfps. * -* * -* bfps is free software: you can redistribute it and/or modify * -* it under the terms of the GNU General Public License as published * -* by the Free Software Foundation, either version 3 of the License, * -* or (at your option) any later version. * -* * -* bfps is distributed in the hope that it will be useful, * -* but WITHOUT ANY WARRANTY; without even the implied warranty of * -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -* GNU General Public License for more details. * -* * -* You should have received a copy of the GNU General Public License * -* along with bfps. If not, see <http://www.gnu.org/licenses/> * -* * -* Contact: Cristian.Lalescu@ds.mpg.de * -* * -**********************************************************************/ - -#include <stdio.h> -#include <stdlib.h> -#include <iostream> -#include "field_descriptor.hpp" -#include "fftw_tools.hpp" - -#ifndef MORTON_SHUFFLER - -#define MORTON_SHUFFLER - -extern int myrank, nprocs; - -inline ptrdiff_t part1by2(ptrdiff_t x) -{ - ptrdiff_t n = x & 0x000003ff; - n = (n ^ (n << 16)) & 0xff0000ff; - n = (n ^ (n << 8)) & 0x0300f00f; - n = (n ^ (n << 4)) & 0x030c30c3; - n = (n ^ (n << 2)) & 0x09249249; - return n; -} - -inline ptrdiff_t unpart1by2(ptrdiff_t z) -{ - ptrdiff_t n = z & 0x09249249; - n = (n ^ (n >> 2)) & 0x030c30c3; - n = (n ^ (n >> 4)) & 0x0300f00f; - n = (n ^ (n >> 8)) & 0xff0000ff; - n = (n ^ (n >> 16)) & 0x000003ff; - return n; -} - -inline ptrdiff_t regular_to_zindex( - ptrdiff_t x0, ptrdiff_t x1, ptrdiff_t x2) -{ - return part1by2(x0) | (part1by2(x1) << 1) | (part1by2(x2) << 2); -} - -inline void zindex_to_grid3D( - ptrdiff_t z, - ptrdiff_t &x0, ptrdiff_t &x1, ptrdiff_t &x2) -{ - x0 = unpart1by2(z ); - x1 = unpart1by2(z >> 1); - x2 = unpart1by2(z >> 2); -} - -class Morton_shuffler -{ - public: - /* members */ - int d; // number of components of the field - // descriptor for N0 x N1 x N2 x d - field_descriptor<float> *dinput; - // descriptor for (N0/8) x (N1/8) x (N2/8) x 8 x 8 x 8 x d - field_descriptor<float> *drcubbie; - // descriptor for NZ x 8 x 8 x 8 x d - field_descriptor<float> *dzcubbie; - // descriptor for (NZ/nfiles) x 8 x 8 x 8 x d - field_descriptor<float> *doutput; - - // communicator to use for output - MPI_Comm out_communicator; - int out_group, files_per_proc; - - /* methods */ - Morton_shuffler( - int N0, int N1, int N2, - int d, - int nfiles); - ~Morton_shuffler(); - - int shuffle( - float *regular_data, - const char *base_fname); -}; - -#endif//MORTON_SHUFFLER - -- GitLab