Software Archive
Read-only legacy content

How to compile SSE intrinsic code in KNL

Lei_F_Intel1
Employee
1,507 Views

Hello Sir or Madam,

As we know KNC not support SSE..., and AVX.., It's only support IMCI instruction. So SSE intrinsic code can't compile in KNC. How about KNL, KNL is support SSE...SSE4.2 and AVX ...AVX-512. So there is my question, how to compile SSE intrinsic code in KNL.

Here is my part of code like:

void foo (U8 * pInput, U8 * pOutput)

{

      __m128i vByte15_00, vByte31_16, vByte47_32, vByte63_48;
      __m128i * pIn;
      pIn = (__m128i *) pInput;

      vByte15_00 = _mm_lddqu_si128 (pIn++);
      vByte31_16 = _mm_lddqu_si128 (pIn++);
      vByte47_32 = _mm_lddqu_si128 (pIn++);
      vByte63_48 = _mm_lddqu_si128 (pIn++);

}

My Parallel Studio linux-zoon:~ # icc --version
icc (ICC) 16.0.0 20150501
Copyright (C) 1985-2015 Intel Corporation.  All rights reserved.

Once I compile the code with -mmic, it will show error log like "undefined reference to `__must_be_linked_with_icc_or_xild'"

Could you please help me figure it out? Thanks a lot!

Best Regards,

Lei

 

 

 

0 Kudos
5 Replies
JJK
New Contributor III
1,507 Views

First of all, your name "Lei F. (Intel)" suggests you're from Intel. Your question makes me wonder if you really are, however.

Second, I've not compiled anything for KNL yet but as that CPU is (almost) binary compatible with a regular x86_64 I would not use the -mmic flag - that flag is used to generate code for KNC, which (AFAIU) not binary compatible with KNL.

 

0 Kudos
Lei_F_Intel1
Employee
1,507 Views

Hi JJK,

Sorry, I am a beginner for this MIC using. And thanks for your reply.

Best Regards,

Lei

0 Kudos
TimP
Honored Contributor III
1,507 Views

If you are a beginner, it's probably premature to generate code targeting KNL, which won't run on currently available targets.   You are correct to use -mmic to generate code to run on current coprocessors. 

Only AVX512 code is likely to show competitive performance when KNL becomes available.

The flag -mMIC-AVX512 appears to be the replacement for -mmic which would target KNL.  I don't know if the linker and library support for KNL is included; if it were, you would expect it to accept the older host intrinsics.  The ppt presentation from July says that RHEL 7.1 and SLES 12.1 would include KNL stand-alone support.  I don't find any reference in the compiler release notes about this being enabled by using a recent enough linux, although they do document -xCOMMON-AVX512 as supporting both future host and MIC platforms.

0 Kudos
Lei_F_Intel1
Employee
1,507 Views

Hi Tim,

Thanks for the priceless details. As our final target is KNL, so according to your suggest, I using flag -axMIC-AVX512, compile a KNL execute file with SSE intrinsic code. As it may can't run with KNL board, but it's a good start for me. Thanks a lot!

Best Regards

Lei

0 Kudos
CFR
New Contributor II
1,507 Views

KNL compiler and SDE....

At least in the 2016 version of the Intel compiler set the -xMIC-AVX512 (not -m but that's a minor nit) works to generate KNL code.  You might also want to take a look at the Intel SDE : https://software.intel.com/en-us/articles/intel-software-development-emulator. ; The SDE has a -knl switch that allows you to execute KNL instructions.  (There's also info for fixing up gcc for AVX-512, etc... but I've not used it).  The SDE is getting a little dated, and until we see real KNL hardware I guess we don't know how accurate it is, but for the time being it's great for verifying/testing the correctness of code, especially when dealing with new and up-coming AVX-512 instructions.

0 Kudos
Reply