From: Raimar S. <rai...@ui...> - 2012-04-18 13:28:47
|
Dear András, I have made some progress trying to compile the framework with Intel's compiler. The reason why I try is that I have an account at the university's leo3 HPC with Intel processors, and I hope for increased performance. In debug mode, the testsuitePhysics is passed. In release mode, testsuitePhysics is passed except tests 4 and 64, where I get SIGBUS or SIGSEGV depending on the intel compiler version. This happens in cpputils::details::concatenateHelper upon return std::copy(t.begin(),t.end(),iter); Unfortunately my own script also crashes with SIGBUS. Preliminary tests show that the scripts which succeed are indeed faster, though I have to investigate this more systematically. I will also try to find the exact compiler flags which cause the crashes. Best regards Raimar P.S. let me know if you want to experiment with this on teazer, I have a version of gsl compiled with the intel compiler and I can send you the user-config.jam which points to this library. The changes that were necessary to compile the code are in the branch cppqed/raimar/intel. Here is a summary: 1. namespace problems which icpc has for some reasons ======================================================================== 2. Undefined references to some static const members, fixed by e.g. === modified file 'utils/include/impl/BlitzArraySliceIterator.tcc' --- utils/include/impl/BlitzArraySliceIterator.tcc 2011-09-19 11:29:15 +0000 +++ utils/include/impl/BlitzArraySliceIterator.tcc 2012-04-18 11:49:57 +0000 @@ -205,6 +205,9 @@ template<int RANK, typename V> typename IndexerBase<RANK,V>::Idx IndexerBase<RANK,V>::cache_; +template<int RANK, typename V> +const typename IndexerBase<RANK,V>::Helper IndexerBase<RANK,V>::helper_ = IndexerBase<RANK,V>::Helper(); + ======================================================================== 3. Here I am not sure why gcc compiles the code, as the constructor which is called is missing: === modified file 'elements/frees/MultiLevel.h' --- elements/frees/MultiLevel.h 2011-08-11 13:21:25 +0000 +++ elements/frees/MultiLevel.h 2012-04-18 11:49:57 +0000 @@ -316,7 +316,7 @@ // here, the compiler cannot deduce NL // anymore const VP& etas, const VL& gammas, - const Averaged& averaged=multilevel::DiagonalDO(NL)) + const Averaged& averaged=multilevel::DiagonalDO("",NL)) { return RETURN_type(new PumpedLossyMultiLevelSch<NL,VP,VL,Averaged>(deltas,etas,gammas,averaged)); } @@ -325,7 +325,7 @@ template<int NL, typename VP, typename VL, typename Averaged> inline RETURN_type -makePumpedLossyMultiLevelSch(const multilevel::ParsPumpedLossy<NL,VP,VL>& p, const Averaged& averaged=multilevel::DiagonalDO(NL)) +makePumpedLossyMultiLevelSch(const multilevel::ParsPumpedLossy<NL,VP,VL>& p, const Averaged& averaged=multilevel::DiagonalDO("",NL)) { return RETURN_type(new PumpedLossyMultiLevelSch<NL,VP,VL,Averaged>(p.deltas,p.etas,p.gammas,averaged)); } ========================================================================= 4. Here I have no clue what is going on, adding the public keyword to a struct should not make any difference. But icpc complains with "... is inaccessible" without it. === modified file 'elements/interactions/impl/MLJC.tcc' --- elements/interactions/impl/MLJC.tcc 2011-10-07 23:10:35 +0000 +++ elements/interactions/impl/MLJC.tcc 2012-04-18 11:49:57 +0000 @@ -23,6 +23,7 @@ template<int NL, typename VC> template<int N1, int N2> struct Base<NL,VC>::ModeDynamics : public tmptools::pair_c<N1,N2> { +public: ModeDynamics(const MultiLevelBase<NL>& ml, const ModeBase& mode, const dcomp& g) : a (-g*mode::aop(&mode)), adagger((g*mode::aop(&mode)).dagger()) |