19#if defined(_WIN32) || defined(_WIN64)
22#include <sys/sysctl.h>
23#include <sys/utsname.h>
24#elif __linux__ || __unix__
26#if defined(__x86_64__) && (defined(__GNUC__) || defined(__clang__) || \
27 defined(__INTEL_COMPILER) || defined(__SUNCC_PRO))
53#define COMPILER_ID "Comeau"
55#define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100)
56#define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100)
58#elif defined(__INTEL_COMPILER) || defined(__ICC)
59#define COMPILER_ID "Intel"
61#define SIMULATE_ID "MSVC"
64#define SIMULATE_ID "GNU"
68#if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || \
69 __INTEL_COMPILER == 202111
70#define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER / 100)
71#define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER / 10 % 10)
72#if defined(__INTEL_COMPILER_UPDATE)
73#define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)
75#define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10)
78#define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER)
79#define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE)
82#define COMPILER_VERSION_PATCH DEC(0)
84#if defined(__INTEL_COMPILER_BUILD_DATE)
86#define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)
90#define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
91#define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
94#define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
95#elif defined(__GNUG__)
96#define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
98#if defined(__GNUC_MINOR__)
99#define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
101#if defined(__GNUC_PATCHLEVEL__)
102#define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
105#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || \
106 defined(__INTEL_LLVM_COMPILER)
107#define COMPILER_ID "IntelLLVM"
109#define SIMULATE_ID "MSVC"
112#define SIMULATE_ID "GNU"
118#if __INTEL_LLVM_COMPILER < 1000000L
119#define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER / 100)
120#define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER / 10 % 10)
121#define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10)
123#define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER / 10000)
124#define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER / 100 % 100)
125#define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100)
129#define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
130#define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
133#define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
134#elif defined(__GNUG__)
135#define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
137#if defined(__GNUC_MINOR__)
138#define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
140#if defined(__GNUC_PATCHLEVEL__)
141#define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
144#elif defined(__PATHCC__)
145#define COMPILER_ID "PathScale"
146#define COMPILER_VERSION_MAJOR DEC(__PATHCC__)
147#define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__)
148#if defined(__PATHCC_PATCHLEVEL__)
149#define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__)
152#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__)
153#define COMPILER_ID "Embarcadero"
154#define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__ >> 24 & 0x00FF)
155#define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__ >> 16 & 0x00FF)
156#define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF)
158#elif defined(__BORLANDC__)
159#define COMPILER_ID "Borland"
161#define COMPILER_VERSION_MAJOR HEX(__BORLANDC__ >> 8)
162#define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF)
164#elif defined(__WATCOMC__) && __WATCOMC__ < 1200
165#define COMPILER_ID "Watcom"
167#define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100)
168#define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
169#if (__WATCOMC__ % 10) > 0
170#define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
173#elif defined(__WATCOMC__)
174#define COMPILER_ID "OpenWatcom"
176#define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100)
177#define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
178#if (__WATCOMC__ % 10) > 0
179#define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
182#elif defined(__SUNPRO_CC)
183#define COMPILER_ID "SunPro"
184#if __SUNPRO_CC >= 0x5100
186#define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC >> 12)
187#define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC >> 4 & 0xFF)
188#define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF)
191#define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC >> 8)
192#define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC >> 4 & 0xF)
193#define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF)
196#elif defined(__HP_aCC)
197#define COMPILER_ID "HP"
199#define COMPILER_VERSION_MAJOR DEC(__HP_aCC / 10000)
200#define COMPILER_VERSION_MINOR DEC(__HP_aCC / 100 % 100)
201#define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100)
203#elif defined(__DECCXX)
204#define COMPILER_ID "Compaq"
206#define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER / 10000000)
207#define COMPILER_VERSION_MINOR DEC(__DECCXX_VER / 100000 % 100)
208#define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000)
210#elif defined(__IBMCPP__) && defined(__COMPILER_VER__)
211#define COMPILER_ID "zOS"
213#define COMPILER_VERSION_MAJOR DEC(__IBMCPP__ / 100)
214#define COMPILER_VERSION_MINOR DEC(__IBMCPP__ / 10 % 10)
215#define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)
217#elif defined(__ibmxl__) && defined(__clang__)
218#define COMPILER_ID "XLClang"
219#define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__)
220#define COMPILER_VERSION_MINOR DEC(__ibmxl_release__)
221#define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__)
222#define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__)
224#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800
225#define COMPILER_ID "XL"
227#define COMPILER_VERSION_MAJOR DEC(__IBMCPP__ / 100)
228#define COMPILER_VERSION_MINOR DEC(__IBMCPP__ / 10 % 10)
229#define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)
231#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800
232#define COMPILER_ID "VisualAge"
234#define COMPILER_VERSION_MAJOR DEC(__IBMCPP__ / 100)
235#define COMPILER_VERSION_MINOR DEC(__IBMCPP__ / 10 % 10)
236#define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)
238#elif defined(__NVCOMPILER)
239#define COMPILER_ID "NVHPC"
240#define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__)
241#define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__)
242#if defined(__NVCOMPILER_PATCHLEVEL__)
243#define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__)
247#define COMPILER_ID "PGI"
248#define COMPILER_VERSION_MAJOR DEC(__PGIC__)
249#define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)
250#if defined(__PGIC_PATCHLEVEL__)
251#define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)
255#define COMPILER_ID "Cray"
256#define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)
257#define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)
259#elif defined(__TI_COMPILER_VERSION__)
260#define COMPILER_ID "TI"
262#define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__ / 1000000)
263#define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__ / 1000 % 1000)
264#define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000)
266#elif defined(__CLANG_FUJITSU)
267#define COMPILER_ID "FujitsuClang"
268#define COMPILER_VERSION_MAJOR DEC(__FCC_major__)
269#define COMPILER_VERSION_MINOR DEC(__FCC_minor__)
270#define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__)
271#define COMPILER_VERSION_INTERNAL_STR __clang_version__
273#elif defined(__FUJITSU)
274#define COMPILER_ID "Fujitsu"
275#if defined(__FCC_version__)
276#define COMPILER_VERSION __FCC_version__
277#elif defined(__FCC_major__)
278#define COMPILER_VERSION_MAJOR DEC(__FCC_major__)
279#define COMPILER_VERSION_MINOR DEC(__FCC_minor__)
280#define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__)
282#if defined(__fcc_version)
283#define COMPILER_VERSION_INTERNAL DEC(__fcc_version)
284#elif defined(__FCC_VERSION)
285#define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION)
288#elif defined(__ghs__)
289#define COMPILER_ID "GHS"
291#ifdef __GHS_VERSION_NUMBER
292#define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100)
293#define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10)
294#define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10)
297#elif defined(__SCO_VERSION__)
298#define COMPILER_ID "SCO"
300#elif defined(__ARMCC_VERSION) && !defined(__clang__)
301#define COMPILER_ID "ARMCC"
302#if __ARMCC_VERSION >= 1000000
304#define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION / 1000000)
305#define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION / 10000 % 100)
306#define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
309#define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION / 100000)
310#define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION / 10000 % 10)
311#define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
314#elif defined(__clang__) && defined(__apple_build_version__)
315#define COMPILER_ID "AppleClang"
317#define SIMULATE_ID "MSVC"
319#define COMPILER_VERSION_MAJOR DEC(__clang_major__)
320#define COMPILER_VERSION_MINOR DEC(__clang_minor__)
321#define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
324#define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
325#define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
327#define COMPILER_VERSION_TWEAK DEC(__apple_build_version__)
329#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION)
330#define COMPILER_ID "ARMClang"
331#define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION / 1000000)
332#define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION / 10000 % 100)
333#define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION % 10000)
334#define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION)
336#elif defined(__clang__)
337#define COMPILER_ID "Clang"
339#define SIMULATE_ID "MSVC"
341#define COMPILER_VERSION_MAJOR DEC(__clang_major__)
342#define COMPILER_VERSION_MINOR DEC(__clang_minor__)
343#define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
346#define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
347#define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
350#elif defined(__GNUC__) || defined(__GNUG__)
351#define COMPILER_ID "GNU"
353#define COMPILER_VERSION_MAJOR DEC(__GNUC__)
355#define COMPILER_VERSION_MAJOR DEC(__GNUG__)
357#if defined(__GNUC_MINOR__)
358#define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)
360#if defined(__GNUC_PATCHLEVEL__)
361#define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
364#elif defined(_MSC_VER)
365#define COMPILER_ID "MSVC"
367#define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100)
368#define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100)
369#if defined(_MSC_FULL_VER)
372#define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000)
375#define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000)
378#if defined(_MSC_BUILD)
379#define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD)
382#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || \
383 defined(__ADSPTS__) || defined(__ADSP21000__)
384#define COMPILER_ID "ADSP"
385#if defined(__VISUALDSPVERSION__)
387#define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__ >> 24)
388#define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__ >> 16 & 0xFF)
389#define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__ >> 8 & 0xFF)
392#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
393#define COMPILER_ID "IAR"
394#if defined(__VER__) && defined(__ICCARM__)
395#define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000)
396#define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000)
397#define COMPILER_VERSION_PATCH DEC((__VER__) % 1000)
398#define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
399#elif defined(__VER__) && \
400 (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || \
401 defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || \
402 defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__))
403#define COMPILER_VERSION_MAJOR DEC((__VER__) / 100)
404#define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100) * 100))
405#define COMPILER_VERSION_PATCH DEC(__SUBVERSION__)
406#define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
412#elif defined(__hpux) || defined(__hpua)
413#define COMPILER_ID "HP"
416#define COMPILER_ID "Unknown-Compiler"
420#ifdef COMPILER_VERSION
422#elif defined(COMPILER_VERSION_MAJOR)
424#ifdef COMPILER_VERSION_MINOR
426#ifdef COMPILER_VERSION_PATCH
428#ifdef COMPILER_VERSION_TWEAK
439#undef COMPILER_VERSION
440#undef COMPILER_VERSION_MAJOR
441#undef COMPILER_VERSION_MINOR
442#undef COMPILER_VERSION_PATCH
443#undef COMPILER_VERSION_TWEAK
444#undef SIMULATE_VERSION_MAJOR
445#undef SIMULATE_VERSION_MINOR
446#undef SIMULATE_VERSION_PATCH
447#undef SIMULATE_VERSION_TWEAK
452#if defined(_MSC_VER) && _MSC_VER < 1600
453 return "C++ 199711L";
454#elif _MSC_VER >= 1900
456#elif _MSC_VER >= 1600
457 return "C++ 201103L";
465#ifdef _LIBCPP_VERSION
467#elif defined(__GLIBCXX__)
469#elif defined(__GLIBCPP__)
471#elif defined(__LIBCOMO__)
472 return "Comeau STL " + std::to_string(
__LIBCOMO__);
473#elif defined(__STL_CONFIG_H)
475#elif defined(__MSL_CPP__)
476 return "MSL standard lib";
477#elif defined(__IBMCPP__)
479#elif defined(MSIPL_COMPILE_H)
480 return "Modena C++ STL";
481#elif (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER)
482 return "Dinkumware STL " + std::to_string(
_CPPLIB_VER);
483#elif defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER)
484 return "Rogue Wave lib " + std::to_string(
_RWSTD_VER);
486 return "Unknown-STD";
495#if defined(CUDA_VERSION)
502#if defined(HIP_VERSION)
509#if defined(GISMO_VERSION)
516#if defined(TORCH_VERSION_MAJOR)
525#if defined(INTEL_MKL_VERSION)
536#if defined(_WIN32) || defined(_WIN64)
549 else if (
i == 0x80000003)
551 else if (
i == 0x80000004)
560 std::size_t size = 32;
573#elif __linux__ || __unix__
574#if defined(__x86_64__) && (defined(__GNUC__) || defined(__clang__) || \
575 defined(__INTEL_COMPILER) || defined(__SUNCC_PRO))
578 unsigned int CPUInfo[4] = {0, 0, 0, 0};
585 for (
unsigned int i = 0x80000000;
i <=
nExIds; ++
i) {
590 else if (
i == 0x80000003)
592 else if (
i == 0x80000004)
603 std::string
str =
"Unknown-CPU [";
613 return "Unknown-CPU";
618#if defined(_WIN32) || defined(_WIN64)
621 status.dwLength =
sizeof(status);
623 return (
uint64_t)status.ullTotalPhys;
628 std::size_t size =
sizeof(
memsize);
634#elif __linux__ || __unix__
650 return std::to_string(
memsize) +
" B";
651 else if (
memsize < 1024 * 1024)
652 return std::to_string(
memsize / 1024) +
" KB";
653 else if (
memsize < 1024 * 1024 * 1024)
654 return std::to_string(
memsize / (1024 * 1024)) +
" MB";
656 return std::to_string(
memsize / (1024 * 1024 * 1024)) +
" GB";
658 return "Unknown-Memory";
663 return std::string(
"IgANets - Isogeometric Analysis Networks") +
668 ", #intraop threads: " + std::to_string(at::get_num_threads()) +
669 ", #interop threads: " +
670 std::to_string(at::get_num_interop_threads()) +
", devices: CPU" +
671 (torch::cuda::is_available() ?
", CUDA" :
"") +
672 (torch::mps::is_available() ?
", MPS" :
"") +
673 (torch::xpu::is_available() ?
", XPU" :
"") +
")\n";
Definition boundary.hpp:22
std::string getCpuInfo()
Returns CPU information.
Definition sysinfo.hpp:535
std::string getExtraLibsVersion()
Returns the version of extra libraries.
Definition sysinfo.hpp:491
std::string getCompilerVersion()
Returns the version of the compiler.
Definition sysinfo.hpp:40
std::string getCppVersion()
Returns the version of the C++ standard.
Definition sysinfo.hpp:451
constexpr bool is_SplineType_v
Alias to the value of is_SplineType.
Definition bspline.hpp:3243
std::string getStdLibVersion()
Returns the version of the standard library.
Definition sysinfo.hpp:464
uint64_t getMemoryInBytes()
Returns total system memory in bytes.
Definition sysinfo.hpp:617
std::string getMemoryInfo()
Returns memory information.
Definition sysinfo.hpp:646
std::string getIgANetVersion()
Returns the IgANet version.
Definition sysinfo.hpp:37
std::string getVersion()
Returns version information.
Definition sysinfo.hpp:662