Skip to content
Snippets Groups Projects
Commit 72526e8f authored by Jan David Mol's avatar Jan David Mol
Browse files

Task #4315: MPI classes from tcc to cc file

parent e7fc95b5
No related branches found
No related tags found
No related merge requests found
......@@ -3949,8 +3949,9 @@ RTCP/Cobalt/InputProc/src/Station/PacketsToBuffer.h -text
RTCP/Cobalt/InputProc/src/Station/RSP.h -text
RTCP/Cobalt/InputProc/src/Station/filterRSP.cc -text
RTCP/Cobalt/InputProc/src/Station/printRSP.cc -text
RTCP/Cobalt/InputProc/src/Transpose/MPITransferStations.cc -text
RTCP/Cobalt/InputProc/src/Transpose/MPITransferStations.h -text
RTCP/Cobalt/InputProc/src/Transpose/MPITransferStations.tcc -text
RTCP/Cobalt/InputProc/src/Transpose/MapUtil.h -text
RTCP/Cobalt/InputProc/src/Transpose/ThreadSafeMPI.cc -text
RTCP/Cobalt/InputProc/src/Transpose/ThreadSafeMPI.h -text
RTCP/Cobalt/InputProc/src/WallClockTime.h -text
......
......@@ -16,6 +16,7 @@ lofar_add_library(inputproc
Station/PacketReader.cc
Station/PacketsToBuffer.cc
Transpose/ThreadSafeMPI.cc
Transpose/MPITransferStations.cc
)
lofar_add_bin_program(filterRSP Station/filterRSP.cc)
......
/* MPITransferStations.tcc
/* MPITransferStations.cc
* Copyright (C) 2013 ASTRON (Netherlands Institute for Radio Astronomy)
* P.O. Box 2, 7990 AA Dwingeloo, The Netherlands
*
......@@ -19,7 +19,11 @@
* $Id: $
*/
#include <pthread.h>
#include <lofar_config.h>
#include "MPITransferStations.h"
#include "MapUtil.h"
#include <SampleType.h>
#include <Common/LofarLogger.h>
......@@ -31,46 +35,6 @@ namespace LOFAR {
namespace Cobalt {
// Returns the keys of an std::map.
template<typename K, typename V> std::vector<K> keys( const std::map<K, V> &m )
{
std::vector<K> keys;
keys.reserve(m.size());
for (typename std::map<K,V>::const_iterator i = m.begin(); i != m.end(); ++i) {
keys.push_back(i->first);
}
return keys;
}
// Returns the set of unique values of an std::map.
template<typename K, typename V> std::set<V> values( const std::map<K, V> &m )
{
std::set<V> values;
for (typename std::map<K,V>::const_iterator i = m.begin(); i != m.end(); ++i) {
values.insert(i->second);
}
return values;
}
// Returns the inverse of an std::map.
template<typename K, typename V> std::map<V, std::vector<K> > inverse( const std::map<K, V> &m )
{
std::map<V, std::vector<K> > inverse;
for (typename std::map<K,V>::const_iterator i = m.begin(); i != m.end(); ++i) {
inverse[i->second].push_back(i->first);
}
return inverse;
}
// Wait for any request to finish. Returns the index of the request that
// finished. Finished requests are set to MPI_REQUEST_NULL and ignored in
// subsequent calls.
......@@ -440,6 +404,17 @@ template<typename T> void MPIReceiveStations::receiveBlock( MultiDimArray<struct
block[stat][beamletIdx].flags.unmarshall(&metaData[stat][beamletIdx][0]);
}
#define INSTANTIATE(T) \
template MPI_Request MPISendStation::sendHeader<T>( int rank, Header &header, const struct SampleBufferReader<T>::Block &block ); \
template unsigned MPISendStation::sendData<T>( int rank, unsigned beamlet, const struct SampleBufferReader<T>::Block::Beamlet &ib, MPI_Request requests[2] ); \
template void MPISendStation::sendBlock<T>( const struct SampleBufferReader<T>::Block &block ); \
template MPI_Request MPIReceiveStations::receiveBeamlet<T>( size_t station, size_t beamlet, int transfer, T *from, size_t nrSamples ); \
template void MPIReceiveStations::receiveBlock<T>( MultiDimArray<struct MPIReceiveStations::Beamlet<T>, 2> &block );
INSTANTIATE(SampleType<i4complex>);
INSTANTIATE(SampleType<i8complex>);
INSTANTIATE(SampleType<i16complex>);
}
}
......@@ -183,7 +183,5 @@ namespace LOFAR
}
}
#include "MPITransferStations.tcc"
#endif
#ifndef LOFAR_INPUTPROC_MAPUTIL_H
#define LOFAR_INPUTPROC_MAPUTIL_H
#include <vector>
#include <map>
namespace LOFAR {
namespace Cobalt {
// Returns the keys of an std::map.
template<typename K, typename V>
std::vector<K> keys( const std::map<K, V> &m )
{
std::vector<K> keys;
keys.reserve(m.size());
for (typename std::map<K,V>::const_iterator i = m.begin(); i != m.end(); ++i) {
keys.push_back(i->first);
}
return keys;
}
// Returns the set of unique values of an std::map.
template<typename K, typename V>
std::set<V> values( const std::map<K, V> &m )
{
std::set<V> values;
for (typename std::map<K,V>::const_iterator i = m.begin(); i != m.end(); ++i) {
values.insert(i->second);
}
return values;
}
// Returns the inverse of an std::map.
template<typename K, typename V>
std::map<V, std::vector<K> > inverse( const std::map<K, V> &m )
{
std::map<V, std::vector<K> > inverse;
for (typename std::map<K,V>::const_iterator i = m.begin(); i != m.end(); ++i) {
inverse[i->second].push_back(i->first);
}
return inverse;
}
}
}
#endif
......@@ -46,6 +46,7 @@
#include "Station/Generator.h"
#include "Station/PacketsToBuffer.h"
#include "Transpose/MPITransferStations.h"
#include "Transpose/MapUtil.h"
#include <map>
#include <vector>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment