diff --git a/RTCP/CNProc/src/CN_Processing_main.cc b/RTCP/CNProc/src/CN_Processing_main.cc index e1ab943f9d02eb1b93c4a9e4efb5cf799312a70f..592234a78dfaf9287beaefda8c8c3759a1073e2e 100644 --- a/RTCP/CNProc/src/CN_Processing_main.cc +++ b/RTCP/CNProc/src/CN_Processing_main.cc @@ -102,13 +102,7 @@ int main(int argc, char **argv) #if defined HAVE_ZOID && defined HAVE_BGL ionStream = new ZoidClientStream; #elif 1 && defined HAVE_FCNP && defined HAVE_BGP - std::vector<unsigned> psetDimensions(3); - - psetDimensions[0] = 4; - psetDimensions[1] = 2; - psetDimensions[2] = 2; - - FCNP_CN::init(psetDimensions); + FCNP_CN::init(); ionStream = new FCNP_ClientStream; #elif 0 ionStream = new NullStream; diff --git a/RTCP/FCNP/src/fcnp_cn.cc b/RTCP/FCNP/src/fcnp_cn.cc index ef2040c5a3c47bbd55f53c3d97fd3cee212d162b..42cf92c5e8093ae67817a7c7b0c297ab8f98c07c 100644 --- a/RTCP/FCNP/src/fcnp_cn.cc +++ b/RTCP/FCNP/src/fcnp_cn.cc @@ -402,21 +402,37 @@ static void initHeaders() } -static void getConfiguration(const std::vector<unsigned> &psetDimensions) +static void getConfiguration() { unsigned xPos = personality.Network_Config.Xcoord; unsigned yPos = personality.Network_Config.Ycoord; unsigned zPos = personality.Network_Config.Zcoord; - assert(psetDimensions.size() == 3); - + unsigned xPsetSize, yPsetSize, zPsetSize; unsigned psetSize = personality.Network_Config.PSetSize; - unsigned xPsetSize = psetDimensions[0]; - unsigned yPsetSize = psetDimensions[1]; - unsigned zPsetSize = psetDimensions[2]; + switch (psetSize) { + case 16 : xPsetSize = 4, yPsetSize = 2, zPsetSize = 2; + break; + + case 32 : xPsetSize = 4, yPsetSize = 4, zPsetSize = 2; + break; + + case 64 : xPsetSize = 4, yPsetSize = 4, zPsetSize = 4; + break; + + case 128 : xPsetSize = 4, yPsetSize = 4, zPsetSize = 8; + break; - assert(xPsetSize * yPsetSize * zPsetSize == psetSize); + case 256 : xPsetSize = 8, yPsetSize = 4, zPsetSize = 8; + break; + + case 512 : xPsetSize = 8, yPsetSize = 8, zPsetSize = 8; + break; + + default : std::cerr << "FCNP: cannot determine PSet dimensions" << std::endl; + exit(1); + } unsigned xPsetPos = xPos % xPsetSize; unsigned yPsetPos = yPos % yPsetSize; @@ -487,11 +503,11 @@ static void drainFIFO() } -void init(const std::vector<unsigned> &psetDimensions) +void init() { getPersonality(); openShm(); - getConfiguration(psetDimensions); + getConfiguration(); initHeaders(); allocateMutexes(); drainFIFO(); diff --git a/RTCP/FCNP/src/fcnp_cn.h b/RTCP/FCNP/src/fcnp_cn.h index c564911e4ade89804a6d3586989e53cce25dd568..01cb2ae5dd0f4fd4f9166ab14c2b6b11ecec995f 100644 --- a/RTCP/FCNP/src/fcnp_cn.h +++ b/RTCP/FCNP/src/fcnp_cn.h @@ -7,8 +7,7 @@ namespace FCNP_CN { - // /proc/personality.sh gives wrong BG_PSETSIZE; provide dimensions manually - void init(const std::vector<unsigned> &psetDimensions); + void init(); // ptr and size must be a multiple of 16! void CNtoION_ZeroCopy(const void *ptr, size_t size);