Quantcast
Channel: Intel® Software - Intel® C++ Compiler
Viewing all articles
Browse latest Browse all 1175

ABI compatibility between 19.0 (2019) and 19.1 (2020)

$
0
0

hello,

disclaimer: I am working on Intel C++ Compiler support for Conan package manager. for us and our users, it's important to know when packages are fully ABI compatible, and when is it safe to mix objects/libraries produced by different versions of the compiler, in order to avoid run-time and compile-time compatibility issues.

the first question: did Intel C++ Compiler just change the versioning scheme? it seems like the new "major" release 2020 has version number 19.1, but not 20.0, which might be a bit confusing, as before we had major version number bump for each year (e.g. 2018 - 18.0, 2019 - 19.0, etc).

the second question: can we assume ABI compatibility between 19.0 (2019) and 19.1 (2020)? in other words, if we compile some C++ library by 19.1, can we safely link this library into application compiled by 19.0? (assuming the library may use C++ interfaces and C++ API, e.g. pass vectors, strings, etc. on library boundaries. also assuming compiler flags are the same - C++ standard, etc).

so far, I have found few things in the official release notes:

Features/APi changes

More algorithms support parallel and vector execution policies: find_first_of, is_heap, is_heap_until, replace, replace_if.

More algorithms support vector execution policies: remove, remove_if.

More algorithms support parallel execution policies: partial_sort.

and:

The Intel® C++ Compiler 19.1 supports the following features under the /Qstd=c++20 (Windows*) or -std=c++20 (Linux*/OS X*) options:

std::is_constant_evaluated and __builtin_is_constant_evaluated

thus, I'd assume if library is using Parallel STL it might be unsafe to mix 19.0 and 19.1.

I've also have compared some Intel compiler libraries and found several differences in public symbols provided:

110a111
> __intel_avx_memmove
129a131
> __intel_new_feature_proc_init_n
296a299
> _intel_fast_memmove.V
358d360
< get_feature_name
361d362
< isa_init_once

110a111,113
> _ZN3tbb8internal13numa_topology11nodes_countEv
> _ZN3tbb8internal13numa_topology19default_concurrencyEi
> _ZN3tbb8internal13numa_topology4fillEPi
164a168
> _ZN3tbb8internal24itt_metadata_ptr_add_v11ENS0_15itt_domain_enumEPvyNS0_12string_indexES2_

which also might cause some incompatibilities if the library is using such symbols.

 


Viewing all articles
Browse latest Browse all 1175

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>