sebhtml / ray

Ray -- Parallel genome assemblies for parallel DNA sequencing
http://denovoassembler.sf.net
Other
65 stars 12 forks source link

linking error on Blue Gene/Q #155

Closed sebhtml closed 11 years ago

sebhtml commented 11 years ago
/bgsys/drivers/ppcfloor/gnu-linux/powerpc64-bgq-linux/bin/ld: /bgsys/drivers/V1R1M2/ppc64/comm/sys/lib/libpami.a(component-pami--CAPI.cnk.o)(.text._ZNSt8_Rb_treeIjSt4pairIKjjESt10_Select1stIS2_ESt4lessIjESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E[_ZNSt8_Rb_treeIjSt4pairIKjjESt10_Select1stIS2_ESt4lessIjESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E]+0xbc): sibling call optimization to `_ZNSt8_Rb_treeIjSt4pairIKjjESt10_Select1stIS2_ESt4lessIjESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E' does not allow automatic multiple TOCs; recompile with -mminimal-toc or -fno-optimize-sibling-calls, or make `_ZNSt8_Rb_treeIjSt4pairIKjjESt10_Select1stIS2_ESt4lessIjESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E' extern
sebhtml commented 11 years ago

git bisect:

db99730370dc503c805bbf4eacaeea54fca65957 is the first bad commit
commit db99730370dc503c805bbf4eacaeea54fca65957
Author: Charles Joly Beauparlant <Charles.Joly-Beauparlant@crchul.ulaval.ca>
Date:   Sat Feb 2 22:03:33 2013 -0500

    Added an example plugin.

    This plugin comes from RayPlatform-example.

    The example is activated with the -example option. Will work without input sequences.

    Signed-off-by: Charles Joly Beauparlant <Charles.Joly-Beauparlant@crchul.ulaval.ca>
    Signed-off-by: Sébastien Boisvert <sebastien.boisvert.3@ulaval.ca>

:040000 040000 44d7146fe2a08e54da4a6db5889b5faea97ce605 cc789fac2b8d5f2d844f21ed1e4c19c97b21072e M  code
sebhtml commented 11 years ago

RayPlatform-example compiles fine on BGQ:

bgqdev-fen1-$ pwd /home/c/clumeq/sebhtml/software/sources/ray-from-git/RayPlatform-example

mpicxx distributedApplication.o TestPlugin.o Application.o RayPlatform/libRayPlatform.a -o distributedApplication -g

sebhtml commented 11 years ago

Files changed:

code/application_core/Machine.cpp | 4 +- code/application_core/Machine.h | 5 +- code/plugin_Example/Example.cpp | 273 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ code/plugin_Example/Example.h | 117 +++++++++++++++++++++++++++++++++++++++++++ code/plugin_Example/Makefile | 3 ++ code/plugin_MachineHelper/MachineHelper.cpp | 64 +++++++++++++---------- code/plugin_MachineHelper/MachineHelper.h | 9 ++--

sebhtml commented 11 years ago

This patch is a workaround:

diff --git a/code/application_core/Machine.cpp b/code/application_core/Machine.cpp
index dc5c184..2647425 100644
--- a/code/application_core/Machine.cpp
+++ b/code/application_core/Machine.cpp
@@ -814,7 +814,7 @@ void Machine::registerPlugins(){
        m_computeCore.registerPlugin(&m_genomeNeighbourhood);
        m_computeCore.registerPlugin(&m_ontologyPlugin);
        m_computeCore.registerPlugin(&m_mock);
-       m_computeCore.registerPlugin(&m_example);
+       //m_computeCore.registerPlugin(&m_example);

        // resolve the symbols
        // this is done here because we want to write a summary for
diff --git a/code/application_core/Machine.h b/code/application_core/Machine.h
index 65ea98c..8a4bd8d 100644
--- a/code/application_core/Machine.h
+++ b/code/application_core/Machine.h
@@ -64,7 +64,7 @@
 #include <code/plugin_GenomeNeighbourhood/GenomeNeighbourhood.h>
 #include <code/plugin_GeneOntology/GeneOntology.h>
 #include <code/plugin_Mock/Mock.h>
-#include <code/plugin_Example/Example.h>
+//#include <code/plugin_Example/Example.h>

@@ -161,7 +161,7 @@ class Machine : public MiniRank{
        EdgePurger m_edgePurger;
        PhylogenyViewer m_phylogeny;
        GeneOntology m_ontologyPlugin;
-       Example m_example;
+       //Example m_example;

        KmerAcademyBuilder m_kmerAcademyBuilder;
        bool m_initialisedAcademy;
diff --git a/code/plugin_Example/Makefile b/code/plugin_Example/Makefile
index 50b1ba4..ccdaaa5 100644
--- a/code/plugin_Example/Makefile
+++ b/code/plugin_Example/Makefile
@@ -1,3 +1,3 @@
 Example-y += code/plugin_Example/Example.o

-obj-y += $(Example-y)
+#obj-y += $(Example-y)
diff --git a/code/plugin_MachineHelper/MachineHelper.h b/code/plugin_MachineHelper/MachineHelper.h
index c2b94d6..a435154 100644
--- a/code/plugin_MachineHelper/MachineHelper.h
+++ b/code/plugin_MachineHelper/MachineHelper.h
@@ -25,7 +25,7 @@
 #include <code/plugin_Mock/Parameters.h>
 #include <code/plugin_FusionData/FusionData.h>
 #include <code/plugin_NetworkTest/NetworkTest.h>
-#include <code/plugin_Example/Example.h>
+//#include <code/plugin_Example/Example.h>
 #include <code/plugin_Partitioner/Partitioner.h>
 #include <code/plugin_SequencesLoader/SequencesLoader.h>
 #include <code/plugin_SeedingData/SeedingData.h>
sebhtml commented 11 years ago

Simplier patch:

diff --git a/code/plugin_Example/Example.cpp b/code/plugin_Example/Example.cpp
index d3ee9a4..8bedb28 100644
--- a/code/plugin_Example/Example.cpp
+++ b/code/plugin_Example/Example.cpp
@@ -25,6 +25,7 @@

 __CreatePlugin(Example);

+#if 0
 __CreateMasterModeAdapter(Example,RAY_MASTER_MODE_STEP_A);
 __CreateMasterModeAdapter(Example,RAY_MASTER_MODE_STEP_B);
 __CreateMasterModeAdapter(Example,RAY_MASTER_MODE_STEP_C);
@@ -36,6 +37,7 @@ __CreateSlaveModeAdapter(Example,RAY_SLAVE_MODE_STEP_C);
 __CreateMessageTagAdapter(Example,RAY_MPI_TAG_STOP_AND_DIE);
 __CreateMessageTagAdapter(Example,RAY_MPI_TAG_TIME_BOMB);

+#endif
 Example::Example(){
        m_doneA=false;
        m_doneB=false;
@@ -145,6 +147,7 @@ void Example::call_RAY_MPI_TAG_STOP_AND_DIE(Message*message){

 void Example::registerPlugin(ComputeCore*core){

+#if 0
        /** register the m_plugin with the core **/

        m_plugin=core->allocatePluginHandle();
@@ -239,10 +242,12 @@ void Example::registerPlugin(ComputeCore*core){
        /** other plugins have to resolve the symbol. **/
        void*object=&m_doneA;
        core->setObjectSymbol(m_plugin,object,"BooleanState");
+#endif
 }

 void Example::resolveSymbols(ComputeCore*core){

+#if 0
        // here, we resolve symbols owned by other m_plugins
        // but needed by the current m_plugin
        // obviously, this is not needed here because
@@ -270,4 +275,5 @@ void Example::resolveSymbols(ComputeCore*core){

        __BindAdapter(Example,RAY_MPI_TAG_STOP_AND_DIE);
        __BindAdapter(Example,RAY_MPI_TAG_TIME_BOMB);
+#endif
 }
diff --git a/code/plugin_Example/Example.h b/code/plugin_Example/Example.h
index 01fb444..cf716c2 100644
--- a/code/plugin_Example/Example.h
+++ b/code/plugin_Example/Example.h
@@ -28,6 +28,7 @@

 __DeclarePlugin(Example);

+#if 0
 __DeclareMasterModeAdapter(Example,RAY_MASTER_MODE_STEP_A);
 __DeclareMasterModeAdapter(Example,RAY_MASTER_MODE_STEP_B);
 __DeclareMasterModeAdapter(Example,RAY_MASTER_MODE_STEP_C);
@@ -38,6 +39,7 @@ __DeclareSlaveModeAdapter(Example,RAY_SLAVE_MODE_STEP_C);

 __DeclareMessageTagAdapter(Example,RAY_MPI_TAG_STOP_AND_DIE);
 __DeclareMessageTagAdapter(Example,RAY_MPI_TAG_TIME_BOMB);
+#endif

 /**
  * The plugin Example
@@ -46,6 +48,7 @@ __DeclareMessageTagAdapter(Example,RAY_MPI_TAG_TIME_BOMB);
  **/
 class Example:  public CorePlugin{

+#if 0
        __AddAdapter(Example,RAY_MASTER_MODE_STEP_A);
        __AddAdapter(Example,RAY_MASTER_MODE_STEP_B);
        __AddAdapter(Example,RAY_MASTER_MODE_STEP_C);
@@ -56,6 +59,7 @@ class Example:  public CorePlugin{

        __AddAdapter(Example,RAY_MPI_TAG_STOP_AND_DIE);
        __AddAdapter(Example,RAY_MPI_TAG_TIME_BOMB);
+#endif

 /**
  * A list of master modes
sebhtml commented 11 years ago
 code/plugin_Example/Example.cpp |    6 ++++++
 code/plugin_Example/Example.h   |    2 ++
 2 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/code/plugin_Example/Example.cpp b/code/plugin_Example/Example.cpp
index d3ee9a4..8bedb28 100644
--- a/code/plugin_Example/Example.cpp
+++ b/code/plugin_Example/Example.cpp
@@ -25,6 +25,7 @@

 __CreatePlugin(Example);

+#if 0
 __CreateMasterModeAdapter(Example,RAY_MASTER_MODE_STEP_A);
 __CreateMasterModeAdapter(Example,RAY_MASTER_MODE_STEP_B);
 __CreateMasterModeAdapter(Example,RAY_MASTER_MODE_STEP_C);
@@ -36,6 +37,7 @@ __CreateSlaveModeAdapter(Example,RAY_SLAVE_MODE_STEP_C);
 __CreateMessageTagAdapter(Example,RAY_MPI_TAG_STOP_AND_DIE);
 __CreateMessageTagAdapter(Example,RAY_MPI_TAG_TIME_BOMB);

+#endif
 Example::Example(){
        m_doneA=false;
        m_doneB=false;
@@ -145,6 +147,7 @@ void Example::call_RAY_MPI_TAG_STOP_AND_DIE(Message*message){

 void Example::registerPlugin(ComputeCore*core){

+#if 0
        /** register the m_plugin with the core **/

        m_plugin=core->allocatePluginHandle();
@@ -239,10 +242,12 @@ void Example::registerPlugin(ComputeCore*core){
        /** other plugins have to resolve the symbol. **/
        void*object=&m_doneA;
        core->setObjectSymbol(m_plugin,object,"BooleanState");
+#endif
 }

 void Example::resolveSymbols(ComputeCore*core){

+#if 0
        // here, we resolve symbols owned by other m_plugins
        // but needed by the current m_plugin
        // obviously, this is not needed here because
@@ -270,4 +275,5 @@ void Example::resolveSymbols(ComputeCore*core){

        __BindAdapter(Example,RAY_MPI_TAG_STOP_AND_DIE);
        __BindAdapter(Example,RAY_MPI_TAG_TIME_BOMB);
+#endif
 }
diff --git a/code/plugin_Example/Example.h b/code/plugin_Example/Example.h
index 01fb444..99a176d 100644
--- a/code/plugin_Example/Example.h
+++ b/code/plugin_Example/Example.h
@@ -46,6 +46,7 @@ __DeclareMessageTagAdapter(Example,RAY_MPI_TAG_TIME_BOMB);
  **/
 class Example:  public CorePlugin{

+#if 0
        __AddAdapter(Example,RAY_MASTER_MODE_STEP_A);
        __AddAdapter(Example,RAY_MASTER_MODE_STEP_B);
        __AddAdapter(Example,RAY_MASTER_MODE_STEP_C);
@@ -56,6 +57,7 @@ class Example:  public CorePlugin{

        __AddAdapter(Example,RAY_MPI_TAG_STOP_AND_DIE);
        __AddAdapter(Example,RAY_MPI_TAG_TIME_BOMB);
+#endif

 /**
  * A list of master modes
sebhtml commented 11 years ago

It was the compiler !

643e3b46f50e65eb719b925d73c1a3f691ba76c1

On the IBM Blue Gene/Q:

module load mpich2 make CXXFLAGS="-qminimaltoc -g -O3 -qarch=qp -qtune=qp "