[petsc-users] Problem in some macro when using VS+intel cl

Barry Smith bsmith at petsc.dev
Tue Jun 27 21:24:38 CDT 2023


   The macros expand differently depending on the compiler being used. In this case

#if defined(PETSC_HAVE_BUILTIN_EXPECT)
  #define PetscUnlikely(cond) __builtin_expect(!!(cond), 0)
  #define PetscLikely(cond)   __builtin_expect(!!(cond), 1)
#else
  #define PetscUnlikely(cond) (cond)
  #define PetscLikely(cond)   (cond)
#endif

So with Microsoft Windows compilers, if they do not support built_inexpect the compiler will only see the #else for the macro thus the compiler would never see the __builtin_expect

You can check in $PETSC_DIR/$PETSC_ARCH/include/petscconf.h and see if PETSC_HAVE_BUILTIN_EXPECT is defined. ./configure determines if this (and many other) features are supported by the compiler. It is conceivable that somehow configure determined incorrectly that this is supported.




> On Jun 27, 2023, at 10:09 PM, 冯上玮 <fengshw3 at mail2.sysu.edu.cn> wrote:
> 
> I've followed your advice and include the header's file and libraries in Visual Studio. Such "error" still shows but I can build the project! It's strange!
> I expand the CHKERRQ macro and find the error actually locates at
> 
> <2F07716E at 673DAE5F.6C969B6400000000.bmp>
>  
> What I know from google is that the "__builtin_expect__" is defined in GCC, so is it unsolvable in Windows with visual studio C compiler or Inter C compiler?
> ------------------ Original ------------------
> From:  "Matthew Knepley"<knepley at gmail.com>;
> Date:  Wed, Jun 28, 2023 01:59 AM
> To:  "冯上玮"<fengshw3 at mail2.sysu.edu.cn>;
> Cc:  "petsc-users"<petsc-users at mcs.anl.gov>;
> Subject:  Re: [petsc-users] Problem in some macro when using VS+intel cl
>  
> On Tue, Jun 27, 2023 at 11:32 AM 冯上玮 <fengshw3 at mail2.sysu.edu.cn <mailto:fengshw3 at mail2.sysu.edu.cn>> wrote:
>> Hi, 
>> 
>> After failure with MS-MPI once and once again, I tried icl+oneAPI and succeeded in installing and testing PESTc in Cygwin!
>> 
>> However, (always however) when I copied the example code on Getting Started page on visual studio, there are tons of error like:
>> <CCB1C477 at 3FC4424F.6C969B6400000000.jpg>
>> I just wonder where the problem locates, I've googled this error message and it seems that it's induced by the difference of compilers, c.f. https://stackoverflow.com/questions/42136395/identifier-builtin-expect-is-undefined-during-ros-on-win-tutorial-talker-ex. But Intel says that they also provide such thing on icl, and I actually use this compiler instead of visual studio cl... 
> 
> The IDE is not showing the actual error message. Are you sure that your IDE build has the right includes and libraries? You can
> get these using
> 
>   cd $PETSC_DIR
>   make getincludedirs
>   make getlinklibs
> 
>   Thanks,
> 
>      Matt
>  
>> Anyway, the project could be built if I delete these error-checking macro.
>> 
>> Installing feedback (or as a test result):
>> When configure on windows, only icl + impi works, and in this case, both --with-cc and --with-cxx options need to point out the version like: --with-cc-std-c99 and --with-cxx-std-c++'ver'. Other combinations such as cl + impi, icl + msmpi, cl + msmpi never work. My tutor told me that older version of msmpi may work but I never try this.
>> 
>> FENG.
> 
> 
> -- 
> What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.
> -- Norbert Wiener
> 
> https://www.cse.buffalo.edu/~knepley/ <http://www.cse.buffalo.edu/~knepley/>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20230627/0f73b8fe/attachment.html>


More information about the petsc-users mailing list