- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi JJK,
Sorry, I am a beginner for this MIC using. And thanks for your reply.
Best Regards,
Lei
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page