warning #3335: *MIC* offload features on this platform currently require that RTTI be disable

warning #3335: *MIC* offload features on this platform currently require that RTTI be disable

Hi

I am trying to compile a parallel linear solver library that offloads to Xeon Phi, but in the process of doing so I may have run into a showstopper . I compile it using the latest version of parallel studio on Windows and during compilation I receive quite a few instances of "warning #3335: *MIC* offload features on this platform currently require that RTTI be disable". The code is known to work on linux for a number of users, but I am the first trying to run it with Xeon Phi offload on Windows ...

I tried disabling RTTI and then the code does not compile at all, so I am trying to figure out how deep the consequences of this warning are ...

Does "this platform" imply that offload features works with RTTI on other platforms such as Linux?

Why is the message only a warning and not an error? Which offload features require that RTTI be disabled? What should i expect to happen if I ignore the warning?

Is there a timeline for implementation of full RTTI support with offload? (Hint: I am hoping you will say it is coming with 15.0 ;-))

Best regards,

C

 

2 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.

Here is a collection of notes that I have gathered about the RTTI restriction on Windows and its impact when using the Language Extensions for Offload (LEO):

  • There are no plans to support RTTI within offload code on Windows. This is a permanent restriction.
  • The program cannot have _Cilk_shared or target(mic) types with RTTI enabled.
  • The appearance of the warning does not imply the code may not use the language extensions for offload. The warning is issued (using a broad brush) when any language extensions for offload are detected in the source file (.cpp) and this in part is why this is only a warning and not an error under the data marshalling (#pragma/!dir$ offload) model.
  • Attempts to use RTTI with the virtual shared model language extensions for offload (_Cilk_shared) trigger compilation errors.
  • Applications where the RTTI is not used in any offload code (under data marshalling model); one’s that can section off code such that RTTI is enabled only in non-offloaded code, could (in theory) ignore the warning.
  • Under the non-shared data marshalling (#pragma/!dir$ offload) model it is permissions to use RTTI locally on the host or MIC but without any sharing.
  • There is no support for sharing (i.e. sending/receiving) because the structure of the objects has pointers that fall into non-bitwise copyable restriction.
  • On Windows users must explicitly disable RTTI when using Language Extensions for Offload if the class object is used in an offload region. This is because on Windows the RTTI pointer is stored as a 32bit pointer.  Windows image is 32bit and so you can use image offset to store any pointer. On Linux it is stored as 64bit pointer.

Hopefully this helps determine the impact on your application. If not or if you have additional questions related to some specific code then let me know and I’m happy to inquire with our Developers.

 

Leave a Comment

Please sign in to add a comment. Not a member? Join today