Skip to Content.
Sympa Menu

charm - Re: [charm] #include <intrinsics.h> in converse.h

charm AT lists.cs.illinois.edu

Subject: Charm++ parallel programming system

List archive

Re: [charm] #include <intrinsics.h> in converse.h


Chronological Thread 
  • From: Jozsef Bakosi <jbakosi AT gmail.com>
  • To: Phil Miller <mille121 AT illinois.edu>, "charm AT cs.uiuc.edu" <charm AT cs.uiuc.edu>, Jeff Hammond <jeff.science AT gmail.com>
  • Subject: Re: [charm] #include <intrinsics.h> in converse.h
  • Date: Thu, 1 Dec 2016 09:51:36 -0700

Ok, thanks guys. I will shelve a Cray-compiler port then. I have other issues with it anyway. For example, the following, which compiles fine with gcc, is not yet supported by the Cray C++ compiler either:

$ CC -V
Cray C++ : Version 8.5.4  Thu Dec 01, 2016  08:46:59

hello.C:
-------------
#include <map>
void fn( std::map< int, int >&& m ) {}
int main() { fn( { {1,2}, {2,1} } ); }
-------------
cori02:~$ CC -c hello.C 
CC-18 crayc++: ERROR File = hello.C, Line = 3
  A right parenthesis ")" is expected.
  void fn( std::map< int, int >&& m ) {}
                               ^

CC-289 crayc++: ERROR File = hello.C, Line = 5
  No instance of constructor "std::map<_Key, _Tp, _Compare, _Alloc>::map [with
          _Key=int, _Tp=int, _Compare=std::less<int>,
          _Alloc=std::allocator<std::pair<const int, int>>]" matches the
          argument list.
            The argument types are:  ({...}, {...}).
  int main() { fn( { {1,2}, {2,1} } ); }
                   ^

Total errors detected in hello.C: 2


On Thu, Dec 1, 2016 at 8:21 AM, Phil Miller <mille121 AT illinois.edu> wrote:
We have encountered numerous quirks in attempts to compile Charm++ with the Cray C++ compiler suite. Ultimately, we have a pending patch from Cray staff to clean up some incompatibilities in our code, and corresponding fixes in their compiler that will be released sometime soon.

When we can validate support for the Cray compiler, we'll be sure to make an announcement.

On Wed, Nov 30, 2016 at 11:43 AM, Jozsef Bakosi <jbakosi AT gmail.com> wrote:
Hi folks,

I have successfully built Charm++ using the Cray C++ compiler suite with the following build command:

$ build charm++ mpi-crayxc craycc --with-production

Now when I try to compile code that includes pup.h, which includes converse.h, which includes intrinsics.h, I get the error:

CC-311 crayc++: ERROR File = /opt/cray/pe/cce/8.5.4/CC/x86-4/compiler_include_base/basic/intrinsics.h, Line = 273
  An overload function cannot be distinguished by the return type alone.
  extern int64_t _popcnt32(uint32_t);

The section of converse.h in question is:

#if CMK_C_BUILTIN_IA32_XFENCE
#include <intrinsics.h>
#endif

If I comment out including intrinsics.h above, the particular error above goes away. This only happens on Crays and only with the Cray C++ compiler, but with all available cce modules, i.e., the intrinsics.h associated to all available cce versions. Interestingly, I cannot find an intrinsics.h system-wide on linux for example, so the non-existence of this header does not seem to be an issue, but on the two Cray machines I have tested this, the above system-wide header consistently gets picked up and fails to compile. I also wonder why this header is not picked up during building Charm++ itself.

What do you guys suggest fixing this problem?

Thanks,
Jozsef





Archive powered by MHonArc 2.6.19.

Top of Page