IgANet
IgANets - Isogeometric Analysis Networks
Loading...
Searching...
No Matches
sysinfo.hpp
Go to the documentation of this file.
1
15#pragma once
16
17#include <string>
18
19#if defined(_WIN32) || defined(_WIN64)
20#include <windows.h>
21#elif __APPLE__
22#include <sys/sysctl.h>
23#include <sys/utsname.h>
24#elif __linux__ || __unix__
25#include <unistd.h>
26#if defined(__x86_64__) && (defined(__GNUC__) || defined(__clang__) || \
27 defined(__INTEL_COMPILER) || defined(__SUNCC_PRO))
28#include <cpuid.h>
29#else
30#include <limits.h>
31#endif
32#endif
33
34namespace iganet {
35
37inline std::string getIgANetVersion() { return std::string(IGANET_VERSION); }
38
40inline std::string getCompilerVersion() {
41 // This code is copied from the CMakeCXXCompilerId.cpp file that was
42 // automatically generated with CMake 3.21.4
43
44 // The following two macros have been modified as we do not want to
45 // return the compiler version in the specific CMake format
46#define DEC(n) n
47#define HEX(n) n
48
49 /* Version number components: V=Version, R=Revision, P=Patch
50 Version date components: YYYY=Year, MM=Month, DD=Day */
51
52#if defined(__COMO__)
53#define COMPILER_ID "Comeau"
54 /* __COMO_VERSION__ = VRR */
55#define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100)
56#define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100)
57
58#elif defined(__INTEL_COMPILER) || defined(__ICC)
59#define COMPILER_ID "Intel"
60#if defined(_MSC_VER)
61#define SIMULATE_ID "MSVC"
62#endif
63#if defined(__GNUC__)
64#define SIMULATE_ID "GNU"
65#endif
66 /* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later,
67 except that a few beta releases use the old format with V=2021. */
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)
74#else
75#define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10)
76#endif
77#else
78#define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER)
79#define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE)
80 /* The third version component from --version is an update index,
81 but no macro is provided for it. */
82#define COMPILER_VERSION_PATCH DEC(0)
83#endif
84#if defined(__INTEL_COMPILER_BUILD_DATE)
85 /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */
86#define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)
87#endif
88#if defined(_MSC_VER)
89 /* _MSC_VER = VVRR */
90#define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
91#define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
92#endif
93#if defined(__GNUC__)
94#define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
95#elif defined(__GNUG__)
96#define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
97#endif
98#if defined(__GNUC_MINOR__)
99#define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
100#endif
101#if defined(__GNUC_PATCHLEVEL__)
102#define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
103#endif
104
105#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || \
106 defined(__INTEL_LLVM_COMPILER)
107#define COMPILER_ID "IntelLLVM"
108#if defined(_MSC_VER)
109#define SIMULATE_ID "MSVC"
110#endif
111#if defined(__GNUC__)
112#define SIMULATE_ID "GNU"
113#endif
114 /* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and
115 * later. Look for 6 digit vs. 8 digit version number to decide encoding.
116 * VVVV is no smaller than the current year when a version is released.
117 */
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)
122#else
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)
126#endif
127#if defined(_MSC_VER)
128 /* _MSC_VER = VVRR */
129#define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
130#define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
131#endif
132#if defined(__GNUC__)
133#define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
134#elif defined(__GNUG__)
135#define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
136#endif
137#if defined(__GNUC_MINOR__)
138#define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
139#endif
140#if defined(__GNUC_PATCHLEVEL__)
141#define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
142#endif
143
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__)
150#endif
151
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)
157
158#elif defined(__BORLANDC__)
159#define COMPILER_ID "Borland"
160 /* __BORLANDC__ = 0xVRR */
161#define COMPILER_VERSION_MAJOR HEX(__BORLANDC__ >> 8)
162#define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF)
163
164#elif defined(__WATCOMC__) && __WATCOMC__ < 1200
165#define COMPILER_ID "Watcom"
166 /* __WATCOMC__ = VVRR */
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)
171#endif
172
173#elif defined(__WATCOMC__)
174#define COMPILER_ID "OpenWatcom"
175 /* __WATCOMC__ = VVRP + 1100 */
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)
180#endif
181
182#elif defined(__SUNPRO_CC)
183#define COMPILER_ID "SunPro"
184#if __SUNPRO_CC >= 0x5100
185 /* __SUNPRO_CC = 0xVRRP */
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)
189#else
190 /* __SUNPRO_CC = 0xVRP */
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)
194#endif
195
196#elif defined(__HP_aCC)
197#define COMPILER_ID "HP"
198 /* __HP_aCC = VVRRPP */
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)
202
203#elif defined(__DECCXX)
204#define COMPILER_ID "Compaq"
205 /* __DECCXX_VER = VVRRTPPPP */
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)
209
210#elif defined(__IBMCPP__) && defined(__COMPILER_VER__)
211#define COMPILER_ID "zOS"
212 /* __IBMCPP__ = VRP */
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)
216
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__)
223
224#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800
225#define COMPILER_ID "XL"
226 /* __IBMCPP__ = VRP */
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)
230
231#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800
232#define COMPILER_ID "VisualAge"
233 /* __IBMCPP__ = VRP */
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)
237
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__)
244#endif
245
246#elif defined(__PGI)
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__)
252#endif
253
254#elif defined(_CRAYC)
255#define COMPILER_ID "Cray"
256#define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)
257#define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)
258
259#elif defined(__TI_COMPILER_VERSION__)
260#define COMPILER_ID "TI"
261 /* __TI_COMPILER_VERSION__ = VVVRRRPPP */
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)
265
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__
272
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__)
281#endif
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)
286#endif
287
288#elif defined(__ghs__)
289#define COMPILER_ID "GHS"
290 /* __GHS_VERSION_NUMBER = VVVVRP */
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)
295#endif
296
297#elif defined(__SCO_VERSION__)
298#define COMPILER_ID "SCO"
299
300#elif defined(__ARMCC_VERSION) && !defined(__clang__)
301#define COMPILER_ID "ARMCC"
302#if __ARMCC_VERSION >= 1000000
303 /* __ARMCC_VERSION = VRRPPPP */
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)
307#else
308 /* __ARMCC_VERSION = VRPPPP */
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)
312#endif
313
314#elif defined(__clang__) && defined(__apple_build_version__)
315#define COMPILER_ID "AppleClang"
316#if defined(_MSC_VER)
317#define SIMULATE_ID "MSVC"
318#endif
319#define COMPILER_VERSION_MAJOR DEC(__clang_major__)
320#define COMPILER_VERSION_MINOR DEC(__clang_minor__)
321#define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
322#if defined(_MSC_VER)
323 /* _MSC_VER = VVRR */
324#define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
325#define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
326#endif
327#define COMPILER_VERSION_TWEAK DEC(__apple_build_version__)
328
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)
335
336#elif defined(__clang__)
337#define COMPILER_ID "Clang"
338#if defined(_MSC_VER)
339#define SIMULATE_ID "MSVC"
340#endif
341#define COMPILER_VERSION_MAJOR DEC(__clang_major__)
342#define COMPILER_VERSION_MINOR DEC(__clang_minor__)
343#define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
344#if defined(_MSC_VER)
345 /* _MSC_VER = VVRR */
346#define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
347#define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
348#endif
349
350#elif defined(__GNUC__) || defined(__GNUG__)
351#define COMPILER_ID "GNU"
352#if defined(__GNUC__)
353#define COMPILER_VERSION_MAJOR DEC(__GNUC__)
354#else
355#define COMPILER_VERSION_MAJOR DEC(__GNUG__)
356#endif
357#if defined(__GNUC_MINOR__)
358#define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)
359#endif
360#if defined(__GNUC_PATCHLEVEL__)
361#define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
362#endif
363
364#elif defined(_MSC_VER)
365#define COMPILER_ID "MSVC"
366 /* _MSC_VER = VVRR */
367#define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100)
368#define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100)
369#if defined(_MSC_FULL_VER)
370#if _MSC_VER >= 1400
371 /* _MSC_FULL_VER = VVRRPPPPP */
372#define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000)
373#else
374 /* _MSC_FULL_VER = VVRRPPPP */
375#define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000)
376#endif
377#endif
378#if defined(_MSC_BUILD)
379#define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD)
380#endif
381
382#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || \
383 defined(__ADSPTS__) || defined(__ADSP21000__)
384#define COMPILER_ID "ADSP"
385#if defined(__VISUALDSPVERSION__)
386 /* __VISUALDSPVERSION__ = 0xVVRRPP00 */
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)
390#endif
391
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__)
407#endif
408
409 /* These compilers are either not known or too old to define an
410 identification macro. Try to identify the platform and guess that
411 it is the native compiler. */
412#elif defined(__hpux) || defined(__hpua)
413#define COMPILER_ID "HP"
414
415#else /* unknown compiler */
416#define COMPILER_ID "Unknown-Compiler"
417#endif
418
419 return std::string(COMPILER_ID)
420#ifdef COMPILER_VERSION
421 + " " + std::to_string(COMPILER_VERSION);
422#elif defined(COMPILER_VERSION_MAJOR)
423 + " " + std::to_string(COMPILER_VERSION_MAJOR)
424#ifdef COMPILER_VERSION_MINOR
425 + "." + std::to_string(COMPILER_VERSION_MINOR)
426#ifdef COMPILER_VERSION_PATCH
427 + "." + std::to_string(COMPILER_VERSION_PATCH)
428#ifdef COMPILER_VERSION_TWEAK
429 + "." + std::to_string(COMPILER_VERSION_TWEAK)
430#endif
431#endif
432#endif
433 ;
434#endif
435
436#undef DEC
437#undef HEX
438#undef COMPILER_ID
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
448}
449
451inline std::string getCppVersion() {
452#if defined(_MSC_VER) && _MSC_VER < 1600
453 return "C++ 199711L";
454#elif _MSC_VER >= 1900
455 return "C++ " + std::to_string(_MSVC_LANG);
456#elif _MSC_VER >= 1600
457 return "C++ 201103L";
458#else
459 return "C++ " + std::to_string(__cplusplus);
460#endif
461}
462
464inline std::string getStdLibVersion() {
465#ifdef _LIBCPP_VERSION
466 return "libc++ " + std::to_string(_LIBCPP_VERSION);
467#elif defined(__GLIBCXX__)
468 return "glibc++ " + std::to_string(__GLIBCXX__);
469#elif defined(__GLIBCPP__)
470 return "glibc++ " + std::to_string(__GLIBCPP__);
471#elif defined(__LIBCOMO__)
472 return "Comeau STL " + std::to_string(__LIBCOMO__);
473#elif defined(__STL_CONFIG_H)
474 return "SGI STL";
475#elif defined(__MSL_CPP__)
476 return "MSL standard lib";
477#elif defined(__IBMCPP__)
478 return "VACPP STL";
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);
485#else
486 return "Unknown-STD";
487#endif
488}
489
491inline std::string getExtraLibsVersion() {
492 std::string s("");
493
494 // CUDA
495#if defined(CUDA_VERSION)
496 if (!s.empty())
497 s += ", ";
498 s += "CUDA " + std::to_string(CUDA_VERSION);
499#endif
500
501 // HIP
502#if defined(HIP_VERSION)
503 if (!s.empty())
504 s += ", ";
505 s += "HIP " + std::to_string(HIP_VERSION);
506#endif
507
508 // G+Smo
509#if defined(GISMO_VERSION)
510 if (!s.empty())
511 s += ", ";
512 s += "G+Smo " + std::string(GISMO_VERSION);
513#endif
514
515 // LibTorch
516#if defined(TORCH_VERSION_MAJOR)
517 if (!s.empty())
518 s += ", ";
519 s += "LibTorch " + std::to_string(TORCH_VERSION_MAJOR) + "." +
520 std::to_string(TORCH_VERSION_MINOR) + "." +
521 std::to_string(TORCH_VERSION_PATCH);
522#endif
523
524 // Intel MKL library
525#if defined(INTEL_MKL_VERSION)
526 if (!s.empty())
527 s += ", ";
528 s += "MKL " + std::to_string(INTEL_MKL_VERSION);
529#endif
530
531 return s;
532}
533
535inline std::string getCpuInfo() {
536#if defined(_WIN32) || defined(_WIN64)
537
538 int CPUInfo[4] = {-1};
539 unsigned nExIds, i = 0;
540 char CPUBrandString[0x40];
541
542 __cpuid(CPUInfo, 0x80000000);
543 nExIds = CPUInfo[0];
544
545 for (i = 0x80000000; i <= nExIds; ++i) {
546 __cpuid(CPUInfo, i);
547 if (i == 0x80000002)
549 else if (i == 0x80000003)
550 memcpy(CPUBrandString + 16, CPUInfo, sizeof(CPUInfo));
551 else if (i == 0x80000004)
552 memcpy(CPUBrandString + 32, CPUInfo, sizeof(CPUInfo));
553 }
554
555 return CPUBrandString;
556
557#elif __APPLE__
558
559 std::string CPUBrandString;
560 std::size_t size = 32;
561
562 // Supply an oversized buffer, and avoid an extra call to sysctlbyname.
563 CPUBrandString.resize(size);
564 if (sysctlbyname("machdep.cpu.brand_string", &CPUBrandString[0], &size, NULL,
565 0) == 0 &&
566 size > 0) {
567 if (CPUBrandString[size - 1] == '\0')
568 size--;
569 CPUBrandString.resize(size);
570 return CPUBrandString;
571 }
572
573#elif __linux__ || __unix__
574#if defined(__x86_64__) && (defined(__GNUC__) || defined(__clang__) || \
575 defined(__INTEL_COMPILER) || defined(__SUNCC_PRO))
576
577 char CPUBrandString[0x40];
578 unsigned int CPUInfo[4] = {0, 0, 0, 0};
579
580 __cpuid(0x80000000, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]);
581 unsigned int nExIds = CPUInfo[0];
582
584
585 for (unsigned int i = 0x80000000; i <= nExIds; ++i) {
586 __cpuid(i, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]);
587
588 if (i == 0x80000002)
590 else if (i == 0x80000003)
591 memcpy(CPUBrandString + 16, CPUInfo, sizeof(CPUInfo));
592 else if (i == 0x80000004)
593 memcpy(CPUBrandString + 32, CPUInfo, sizeof(CPUInfo));
594 }
595
596 return CPUBrandString;
597
598#else
599
600 char hostname[HOST_NAME_MAX + 1];
602
603 std::string str = "Unknown-CPU [";
604 str += hostname;
605 str += "]";
606
607 return str;
608
609#endif
610
611#endif
612
613 return "Unknown-CPU";
614}
615
618#if defined(_WIN32) || defined(_WIN64)
619
620 MEMORYSTATUSEX status;
621 status.dwLength = sizeof(status);
622 GlobalMemoryStatusEx(&status);
623 return (uint64_t)status.ullTotalPhys;
624
625#elif __APPLE__
626
628 std::size_t size = sizeof(memsize);
629
630 if (sysctlbyname("hw.memsize", &memsize, &size, NULL, 0) == 0) {
631 return (uint64_t)memsize;
632 }
633
634#elif __linux__ || __unix__
635
638 return (uint64_t)(pages * page_size);
639
640#endif
641
642 return 0;
643}
644
646inline std::string getMemoryInfo() {
648 if (memsize > 0) {
649 if (memsize < 1024)
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";
655 else
656 return std::to_string(memsize / (1024 * 1024 * 1024)) + " GB";
657 } else
658 return "Unknown-Memory";
659}
660
662inline std::string getVersion() {
663 return std::string("IgANets - Isogeometric Analysis Networks") +
664 " (version " + getIgANetVersion() + ")\n" + "Compiled by " +
665 getCompilerVersion() + " (" + getCppVersion() + ", " +
666 getStdLibVersion() + ", " + getExtraLibsVersion() + ")\n" +
667 "Running on " + getCpuInfo() + " (memory " + getMemoryInfo() +
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";
674}
675
676} // namespace iganet
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
#define COMPILER_ID