Dear All, I already posted on the boost.test user mailing list, but as my question was to technical they forward me their ( http://lists.boost.org/boost-testing/2014/07/7692.php ) I installed/compiled boost on the BG/Q (with gcc provided by IBM) but I am confronted to a issue, the framework crashed (compute node) due to a call to the system function sigaltstack.
From my previous post, a boost user suggests me to disable a macro into execution_monitor.ipp line 176
https://github.com/boostorg/test/blob/boost-1.55.0/include/boost/test/impl/e... If I disable this macro the framework works well. Into Boost, this macro is defined between a !defined # if !defined(__CYGWIN__) && !defined(__QNXNTO__) # define BOOST_TEST_USE_ALT_STACK # endif Should we add a C++ macro provided by the compiled to disable this define ? I give a list of the macro of GCC for the BG/Q #define __DBL_MIN_EXP__ (-1021) #define __FLT_MIN__ 1.17549435e-38F #define __CHAR_BIT__ 8 #define _ARCH_PPCGR 1 #define __PPC64__ 1 #define __WCHAR_MAX__ 2147483647 #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 #define __DBL_DENORM_MIN__ 4.9406564584124654e-324 #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 #define __FLT_EVAL_METHOD__ 0 #define __unix__ 1 #define __DBL_MIN_10_EXP__ (-307) #define __FINITE_MATH_ONLY__ 0 #define __GNUC_PATCHLEVEL__ 6 #define __DEC64_MAX_EXP__ 385 #define __SHRT_MAX__ 32767 #define __LDBL_MAX__ 1.79769313486231580793728971405301e+308L #define _ARCH_PPC 1 #define __UINTMAX_TYPE__ long unsigned int #define __linux 1 #define __DEC32_EPSILON__ 1E-6DF #define __CHAR_UNSIGNED__ 1 #define __LDBL_MAX_EXP__ 1024 #define __linux__ 1 #define __SCHAR_MAX__ 127 #define __DBL_DIG__ 15 #define __SIZEOF_INT__ 4 #define __SIZEOF_POINTER__ 8 #define __USER_LABEL_PREFIX__ #define __STDC_HOSTED__ 1 #define __LDBL_HAS_INFINITY__ 1 #define __FLT_EPSILON__ 1.19209290e-7F #define __LDBL_MIN__ 2.00416836000897277799610805135016e-292L #define __DEC32_MAX__ 9.999999E96DF #define __SIZEOF_LONG__ 8 #define __DECIMAL_DIG__ 33 #define __gnu_linux__ 1 #define __LDBL_HAS_QUIET_NAN__ 1 #define __GNUC__ 4 #define __FLT_HAS_DENORM__ 1 #define __SIZEOF_LONG_DOUBLE__ 16 #define __BIGGEST_ALIGNMENT__ 16 #define __DBL_MAX__ 1.7976931348623157e+308 #define __DBL_HAS_INFINITY__ 1 #define __DEC32_MIN_EXP__ (-94) #define __LDBL_HAS_DENORM__ 1 #define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL #define __DEC32_MIN__ 1E-95DF #define __DBL_MAX_EXP__ 1024 #define __DEC128_EPSILON__ 1E-33DL #define __LONG_LONG_MAX__ 9223372036854775807LL #define __SIZEOF_SIZE_T__ 8 #define __PPC__ 1 #define __SIZEOF_WINT_T__ 4 #define __bg__ 1 #define __GXX_ABI_VERSION 1002 #define __FLT_MIN_EXP__ (-125) #define __DBL_MIN__ 2.2250738585072014e-308 #define __LONGDOUBLE128 1 #define __LP64__ 1 #define __DEC128_MIN__ 1E-6143DL #define __REGISTER_PREFIX__ #define __DBL_HAS_DENORM__ 1 #define __NO_INLINE__ 1 #define __FLT_MANT_DIG__ 24 #define __VERSION__ "4.4.6" #define __BIG_ENDIAN__ 1 #define __powerpc64__ 1 #define __DEC64_EPSILON__ 1E-15DD #define __DEC128_MIN_EXP__ (-6142) #define __powerpc__ 1 #define unix 1 #define __SIZE_TYPE__ long unsigned int #define __ELF__ 1 #define __FLT_RADIX__ 2 #define __LDBL_EPSILON__ 4.94065645841246544176568792868221e-324L #define __SIZEOF_PTRDIFF_T__ 8 #define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF #define __FLT_HAS_QUIET_NAN__ 1 #define __FLT_MAX_10_EXP__ 38 #define __LONG_MAX__ 9223372036854775807L #define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL #define __FLT_HAS_INFINITY__ 1 #define __unix 1 #define __DEC64_MAX__ 9.999999999999999E384DD #define __CHAR16_TYPE__ short unsigned int #define __DEC64_MANT_DIG__ 16 #define __DEC32_MAX_EXP__ 97 #define _BIG_ENDIAN 1 #define linux 1 #define __LDBL_MANT_DIG__ 106 #define __DBL_HAS_QUIET_NAN__ 1 #define __WCHAR_TYPE__ int #define __SIZEOF_FLOAT__ 4 #define __DEC64_MIN_EXP__ (-382) #define __FLT_DIG__ 6 #define __INT_MAX__ 2147483647 #define __LONG_DOUBLE_128__ 1 #define __FLT_MAX_EXP__ 128 #define __DBL_MANT_DIG__ 53 #define __DEC64_MIN__ 1E-383DD #define __WINT_TYPE__ unsigned int #define __SIZEOF_SHORT__ 2 #define __LDBL_MIN_EXP__ (-968) #define __LDBL_MAX_10_EXP__ 308 #define __DBL_EPSILON__ 2.2204460492503131e-16 #define _LP64 1 #define __SIZEOF_WCHAR_T__ 4 #define __DEC_EVAL_METHOD__ 2 #define __INTMAX_MAX__ 9223372036854775807L #define __FLT_DENORM_MIN__ 1.40129846e-45F #define _CALL_AIX 1 #define __bgq__ 1 #define __CHAR32_TYPE__ unsigned int #define __FLT_MAX__ 3.40282347e+38F #define __SIZEOF_DOUBLE__ 8 #define __FLT_MIN_10_EXP__ (-37) #define _CALL_AIXDESC 1 #define __INTMAX_TYPE__ long int #define __DEC128_MAX_EXP__ 6145 #define __GNUC_MINOR__ 4 #define __DEC32_MANT_DIG__ 7 #define __DBL_MAX_10_EXP__ 308 #define __LDBL_DENORM_MIN__ 4.94065645841246544176568792868221e-324L #define __STDC__ 1 #define __PTRDIFF_TYPE__ long int #define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD #define _ARCH_PPC64 1 #define __DEC128_MANT_DIG__ 34 #define __LDBL_MIN_10_EXP__ (-291) #define __SIZEOF_LONG_LONG__ 8 #define __LDBL_DIG__ 31 #define __GNUC_GNU_INLINE__ 1 We may add one of this to the framework to have a correct execution Cheers, ++t Timothée Ewart, Ph. D. http://www.linkedin.com/in/tewart timothee.ewart@epfl.chmailto:timothee.ewart@epfl.ch
[Please do not mail me a copy of your followup]
=?iso-8859-1?Q?Ewart_Timoth=E9e?=
Into Boost, this macro is defined between a !defined
# if !defined(__CYGWIN__) && !defined(__QNXNTO__) # define BOOST_TEST_USE_ALT_STACK # endif
Should we add a C++ macro provided by the compiled to disable this define ?
That seems to be the right thing to do since sigaltstack doesn't appear to be valid on your platform. Can you verify that this function is not supported on Bluegene/Q? If it is not supported, then it seems that the right change is to add a check for __bgq__ or __bg__ and not define BOOST_TEST_USE_ALT_STACK if the appropriate symbol is defined. If it is supported, we need to dig into why you are getting a crash. I would have expected you to get a link error, not a runtime error, if the function was unsupported, but perhaps it isn't supported and the implementation is just provided somewhere from gcc and you get a crash anyway. -- "The Direct3D Graphics Pipeline" free book http://tinyurl.com/d3d-pipeline The Computer Graphics Museum http://computergraphicsmuseum.org The Terminals Wiki http://terminals.classiccmp.org Legalize Adulthood! (my blog) http://legalizeadulthood.wordpress.com
Hello all,
Into Boost, this macro is defined between a !defined
# if !defined(__CYGWIN__) && !defined(__QNXNTO__)
# define BOOST_TEST_USE_ALT_STACK
# endif
Should we add a C++ macro provided by the compiled to disable this define ?
That seems to be the right thing to do since sigaltstack doesn't
appear to be valid on your platform.
I recompiled boost.test using gcc of the compute node (not xlc). I use gcc because the performances
of xlc with meta-programming are bad (the inlining does not work). For my work, I utilise an experimental clang + boost compiled with gcc.
So into 1.54/include/boost/test/impl/execution_monitor.ipp, I did
176 # if !defined(__CYGWIN__) && !defined(__QNXNTO__) &&! defined(__bgq__)
177 # define BOOST_TEST_USE_ALT_STACK
178 # endif
I recompiled the library, and my tests using static link or the include version of the lib (I use a large sets of feature of the framework)
I have a correct execution of my tests with the patch.
Can you verify that this function is not supported on Bluegene/Q?
If it is not supported, then it seems that the right change is to add
a check for __bgq__ or __bg__ and not define BOOST_TEST_USE_ALT_STACK
if the appropriate symbol is defined.
We test a small test case (thank Sam): "BG/Q compute nodes do not support the establishment of an alternate signal stack using sigaltstack() and sigaction().
The example code when compiled with bgxlc & gcc (compute node) and run on a compute node produces an error output."
#include
On 07/14/2014 12:13 PM, Ewart Timothée wrote:
sigaltstack: Function not implemented [...] This behaviour about sigaction is considered as a bug ? Should open a ticket somewhere ?
I suggest that you open a feature request via: http://www.gnu.org/software/libc/bugs.html
Well I do not know we have to consider this as a bug. The linux
running on BG/Q compute node is « special ». On the front end of BG/Q there
is not pb.
I may open a bug for IBM (with have good contact)
Cheers,
Le 14 Jul 2014 à 12:51, Bjorn Reese
Hi Tim, Am Freitag, 11. Juli 2014, 08:44:23 schrieb Ewart Timothée:
Into Boost, this macro is defined between a !defined
# if !defined(__CYGWIN__) && !defined(__QNXNTO__) # define BOOST_TEST_USE_ALT_STACK # endif
Should we add a C++ macro provided by the compiled to disable this define ?
Yes, of course.
I give a list of the macro of GCC for the BG/Q
Please "sort" them next times, it make things easier ;-) The #defines to look at seem to be either of #define __bg__ 1 #define __bgq__ 1 Can you test both and report back? And maybe take a look at your documentation to find out which one your vendor recommends? And please file a bug report I can refer to. Yours, Jürgen -- * Dipl.-Math. Jürgen Hunold ! * voice: ++49 4257 300 ! Fährstraße 1 * fax : ++49 4257 300 ! 31609 Balge/Sebbenhausen * jhunold@gmx.eu ! Germany
On 07/12/2014 11:52 AM, Jürgen Hunold wrote:
The #defines to look at seem to be either of
#define __bg__ 1 #define __bgq__ 1
Can you test both and report back? And maybe take a look at your documentation to find out which one your vendor recommends?
According to the XL C/C++ manual, __bg__ is defined for any Blue Gene system, and __bgq__ only for Blue Gene/Q.
participants (4)
-
Bjorn Reese
-
Ewart Timothée
-
Jürgen Hunold
-
legalize+jeeves@mail.xmission.com