mirror of
https://github.com/xmrig/xmrig.git
synced 2025-12-06 23:52:38 -05:00
Compare commits
129 Commits
v2.99.4-be
...
v3.1.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
171762d1aa | ||
|
|
78fd2fd0ac | ||
|
|
ff981ecb5c | ||
|
|
62d184a377 | ||
|
|
c6accf5151 | ||
|
|
a8f5b8ac8b | ||
|
|
179ef31b80 | ||
|
|
f4ba1e35e1 | ||
|
|
f3b55d6b08 | ||
|
|
2322e3bcf7 | ||
|
|
01b2c952ea | ||
|
|
edb2c98ad7 | ||
|
|
03946b42fa | ||
|
|
dc5843651b | ||
|
|
d3f98ef7bc | ||
|
|
a8c2e908a2 | ||
|
|
f1a9302c3e | ||
|
|
3a10c0546f | ||
|
|
5439f2d7b8 | ||
|
|
1a8abf054e | ||
|
|
13e38df391 | ||
|
|
53a71f7226 | ||
|
|
df90b299f2 | ||
|
|
fa983eee0e | ||
|
|
372183555b | ||
|
|
9cfbce5e09 | ||
|
|
f3c9b0e888 | ||
|
|
5678d15841 | ||
|
|
df91a85128 | ||
|
|
df973763bb | ||
|
|
76fdc4fc4b | ||
|
|
af52e454e7 | ||
|
|
d5e7ab4985 | ||
|
|
b89a6cc077 | ||
|
|
0a58781b0c | ||
|
|
87fe8a4f7e | ||
|
|
b953d8db05 | ||
|
|
8b84d7650b | ||
|
|
21a56c9cbf | ||
|
|
39e69c2723 | ||
|
|
83c7fad882 | ||
|
|
a15f050e1b | ||
|
|
ce35260b5d | ||
|
|
972d07ccd0 | ||
|
|
a8ab7e3bef | ||
|
|
52caa8a06f | ||
|
|
0fde6ef57a | ||
|
|
4c5af7c03c | ||
|
|
1d4bbbf6aa | ||
|
|
611c37b6bf | ||
|
|
316a44b812 | ||
|
|
030a9622cf | ||
|
|
b1db0803cf | ||
|
|
77eb474b29 | ||
|
|
4efe6040e9 | ||
|
|
bd9255136c | ||
|
|
d254aafb93 | ||
|
|
ed3a39dc74 | ||
|
|
fe832f510e | ||
|
|
3022f19eda | ||
|
|
1c00721de3 | ||
|
|
043989e8ee | ||
|
|
0c25424a3e | ||
|
|
df58821655 | ||
|
|
69969f782d | ||
|
|
da22b3e6c4 | ||
|
|
ca6e3d11b5 | ||
|
|
f4db6b16dd | ||
|
|
ca6376bbaa | ||
|
|
9f4428a484 | ||
|
|
df933964e1 | ||
|
|
ed04ecd735 | ||
|
|
e6db34d86e | ||
|
|
6955f4a484 | ||
|
|
2ec257284f | ||
|
|
a9c1c1ac64 | ||
|
|
5f3e4e8158 | ||
|
|
28b7ac36fc | ||
|
|
d6241269cb | ||
|
|
00ae8d063c | ||
|
|
bc5e13de5a | ||
|
|
09e8941f38 | ||
|
|
52ddd059ac | ||
|
|
1aa2d44d0d | ||
|
|
732a2f7bb9 | ||
|
|
10072d545e | ||
|
|
f346a772b3 | ||
|
|
01e1c9f54d | ||
|
|
b41fd120d2 | ||
|
|
3bd28ea7ac | ||
|
|
a75046ae35 | ||
|
|
843951266f | ||
|
|
fdbae116af | ||
|
|
4f00dab0a3 | ||
|
|
c0d2eeea2a | ||
|
|
adbf66669e | ||
|
|
761f12e01a | ||
|
|
b43d8ca845 | ||
|
|
4b34099586 | ||
|
|
d870ce1019 | ||
|
|
24c293e58e | ||
|
|
90e4406659 | ||
|
|
feda02bf50 | ||
|
|
5cb3ef9068 | ||
|
|
4583d979db | ||
|
|
be251a2ec1 | ||
|
|
7a6790d0f6 | ||
|
|
647cbef43c | ||
|
|
ce370bf721 | ||
|
|
b82181b9c5 | ||
|
|
5896b27bf3 | ||
|
|
9a842a593b | ||
|
|
97192f224d | ||
|
|
fd9039928b | ||
|
|
42dc914eec | ||
|
|
96fd7545d1 | ||
|
|
0adab95ce4 | ||
|
|
cc4351d49f | ||
|
|
3c5cb142cb | ||
|
|
46f1661fd9 | ||
|
|
d4c5e414c2 | ||
|
|
66d8598f9f | ||
|
|
4afc987111 | ||
|
|
3543abcc3c | ||
|
|
044fbd7e82 | ||
|
|
a8e86c3530 | ||
|
|
7eaf7764f7 | ||
|
|
df559b44d8 | ||
|
|
6629947772 |
361
CHANGELOG.md
361
CHANGELOG.md
@@ -1,333 +1,46 @@
|
|||||||
# v2.99.4-beta
|
# v3.1.2
|
||||||
- [#1062](https://github.com/xmrig/xmrig/issues/1062) Fixed 32 bit support. **32 bit is slow and deprecated**.
|
- Many RandomX optimizations and fixes.
|
||||||
- [#1088](https://github.com/xmrig/xmrig/pull/1088) Fixed macOS compilation.
|
- [#1132](https://github.com/xmrig/xmrig/issues/1132) Fixed build on CentOS 7.
|
||||||
- [#1095](https://github.com/xmrig/xmrig/pull/1095) Fixed compatibility with hwloc 1.10.x.
|
- [#1163](https://github.com/xmrig/xmrig/pull/1163) Optimized soft AES code, up to +30% hashrate on CPU without AES support and other optimizations.
|
||||||
- Optimized RandomX initialization and switching, fixed rare crash when re-initialize dataset.
|
- [#1166](https://github.com/xmrig/xmrig/pull/1166) Fixed crash when initialize dataset with big threads count (eg 272).
|
||||||
- Fixed ARM build with hwloc.
|
- [#1168](https://github.com/xmrig/xmrig/pull/1168) Optimized loading from scratchpad.
|
||||||
|
- [#1128](https://github.com/xmrig/xmrig/issues/1128) Fixed CMake 2.8 compatibility.
|
||||||
|
|
||||||
# v2.99.3-beta
|
# v3.1.1
|
||||||
- [#1082](https://github.com/xmrig/xmrig/issues/1082) Fixed hwloc auto configuration on AMD FX CPUs.
|
- [#1133](https://github.com/xmrig/xmrig/issues/1133) Fixed syslog regression.
|
||||||
|
- [#1138](https://github.com/xmrig/xmrig/issues/1138) Fixed multiple network bugs.
|
||||||
|
- [#1141](https://github.com/xmrig/xmrig/issues/1141) Fixed log in background mode.
|
||||||
|
- [#1142](https://github.com/xmrig/xmrig/pull/1142) RandomX hashrate improved by 0.5-1.5% depending on variant and CPU.
|
||||||
|
- [#1146](https://github.com/xmrig/xmrig/pull/1146) Fixed race condition in RandomX thread init.
|
||||||
|
- [#1148](https://github.com/xmrig/xmrig/pull/1148) Fixed, on Linux linker marking entire executable as having an executable stack.
|
||||||
|
- Fixed, for Argon2 algorithms command line options like `--threads` was ignored.
|
||||||
|
- Fixed command line options for single pool, free order allowed again.
|
||||||
|
|
||||||
|
# v3.1.0
|
||||||
|
- [#1107](https://github.com/xmrig/xmrig/issues/1107#issuecomment-522235892) Added Argon2 algorithm family: `argon2/chukwa` and `argon2/wrkz`.
|
||||||
|
|
||||||
|
# v3.0.0
|
||||||
|
- **[#1111](https://github.com/xmrig/xmrig/pull/1111) Added RandomX (`rx/test`) algorithm for testing and benchmarking.**
|
||||||
|
- **[#1036](https://github.com/xmrig/xmrig/pull/1036) Added RandomWOW (`rx/wow`) algorithm for [Wownero](http://wownero.org/).**
|
||||||
|
- **[#1050](https://github.com/xmrig/xmrig/pull/1050) Added RandomXL (`rx/loki`) algorithm for [Loki](https://loki.network/).**
|
||||||
|
- **[#1077](https://github.com/xmrig/xmrig/issues/1077) Added NUMA support via hwloc**.
|
||||||
|
- **Added flexible [multi algorithm](doc/CPU.md) configuration.**
|
||||||
|
- **Added unlimited switching between incompatible algorithms, all mining options can be changed in runtime.**
|
||||||
|
- [#257](https://github.com/xmrig/xmrig-nvidia/pull/257) New logging subsystem, file and syslog now always without colors.
|
||||||
|
- [#314](https://github.com/xmrig/xmrig-proxy/issues/314) Added donate over proxy feature.
|
||||||
|
- [#1007](https://github.com/xmrig/xmrig/issues/1007) Old HTTP API backend based on libmicrohttpd, replaced to custom HTTP server (libuv + http_parser).
|
||||||
|
- [#1010](https://github.com/xmrig/xmrig/pull/1010#issuecomment-482632107) Added daemon support (solo mining).
|
||||||
|
- [#1066](https://github.com/xmrig/xmrig/issues/1066#issuecomment-518080529) Added error message if pool not ready for RandomX.
|
||||||
|
- [#1105](https://github.com/xmrig/xmrig/issues/1105) Improved auto configuration for `cn-pico` algorithm.
|
||||||
|
- Added commands `pause` and `resume` via JSON RPC 2.0 API (`POST /json_rpc`).
|
||||||
- Added command line option `--export-topology` for export hwloc topology to a XML file.
|
- Added command line option `--export-topology` for export hwloc topology to a XML file.
|
||||||
|
|
||||||
# v2.99.2-beta
|
|
||||||
- [#1077](https://github.com/xmrig/xmrig/issues/1077) Added NUMA support via **hwloc**.
|
|
||||||
- Fixed miner freeze when switch between RandomX variants.
|
|
||||||
- Fixed dataset initialization speed on Linux if thread affinity was used.
|
|
||||||
|
|
||||||
# v2.99.1-beta
|
|
||||||
- [#1072](https://github.com/xmrig/xmrig/issues/1072) Fixed RandomX `seed_hash` re-initialization.
|
|
||||||
|
|
||||||
# v2.99.0-beta
|
|
||||||
- [#1050](https://github.com/xmrig/xmrig/pull/1050) Added RandomXL algorithm for [Loki](https://loki.network/), algorithm name used by miner is `randomx/loki` or `rx/loki`.
|
|
||||||
- Added [flexible](https://github.com/xmrig/xmrig/blob/evo/doc/CPU.md) multi algorithm configuration.
|
|
||||||
- Added unlimited switching between incompatible algorithms, all mining options can be changed in runtime.
|
|
||||||
- Breaked backward compatibility with previous configs and command line, `variant` option replaced to `algo`, global option `algo` removed, all CPU related settings moved to `cpu` object.
|
- Breaked backward compatibility with previous configs and command line, `variant` option replaced to `algo`, global option `algo` removed, all CPU related settings moved to `cpu` object.
|
||||||
- Options `av`, `safe` and `max-cpu-usage` removed.
|
- Options `av`, `safe` and `max-cpu-usage` removed.
|
||||||
- Algorithm `cn/msr` renamed to `cn/fast`.
|
- Algorithm `cn/msr` renamed to `cn/fast`.
|
||||||
- Algorithm `cn/xtl` removed.
|
- Algorithm `cn/xtl` removed.
|
||||||
- API endpoint `GET /1/threads` replaced to `GET /2/backends`.
|
- API endpoint `GET /1/threads` replaced to `GET /2/backends`.
|
||||||
|
|
||||||
# v2.16.0-beta
|
|
||||||
- [#1036](https://github.com/xmrig/xmrig/pull/1036) Added RandomWOW (RandomX with different preferences) algorithm support for [Wownero](http://wownero.org/).
|
|
||||||
- Algorithm name used by miner is `randomx/wow` or `rx/wow`.
|
|
||||||
- Currently runtime algorithm switching NOT supported with other algorithms.
|
|
||||||
|
|
||||||
# v2.15.4-beta
|
|
||||||
- Added global uptime and extended connection information in API.
|
- Added global uptime and extended connection information in API.
|
||||||
- API now return current algorithm instead of global algorithm specified in config.
|
- API now return current algorithm.
|
||||||
- This version also include all changes from stable version v2.14.4.
|
|
||||||
|
|
||||||
# v2.15.3-beta
|
# Previous versions
|
||||||
- [#1014](https://github.com/xmrig/xmrig/issues/1014) Fixed regression, default value for `algo` option was not applied.
|
[doc/CHANGELOG_OLD.md](doc/CHANGELOG_OLD.md)
|
||||||
|
|
||||||
# v2.15.2-beta
|
|
||||||
- [#1010](https://github.com/xmrig/xmrig/pull/1010#issuecomment-482632107) Added daemon support (solo mining).
|
|
||||||
- [#1012](https://github.com/xmrig/xmrig/pull/1012) Fixed compatibility with clang 9.
|
|
||||||
- Config subsystem was rewritten, internally JSON is primary format now.
|
|
||||||
- Fixed regression, big HTTP responses was truncated.
|
|
||||||
|
|
||||||
# v2.15.1-beta
|
|
||||||
- [#1007](https://github.com/xmrig/xmrig/issues/1007) Old HTTP API backend based on libmicrohttpd, replaced to custom HTTP server (libuv + http_parser).
|
|
||||||
- [#257](https://github.com/xmrig/xmrig-nvidia/pull/257) New logging subsystem, file and syslog now always without colors.
|
|
||||||
|
|
||||||
# v2.15.0-beta
|
|
||||||
- [#314](https://github.com/xmrig/xmrig-proxy/issues/314) Added donate over proxy feature.
|
|
||||||
- Added new option `donate-over-proxy`.
|
|
||||||
- Added real graceful exit.
|
|
||||||
|
|
||||||
# v2.14.4
|
|
||||||
- [#992](https://github.com/xmrig/xmrig/pull/992) Fixed compilation with Clang 3.5.
|
|
||||||
- [#1012](https://github.com/xmrig/xmrig/pull/1012) Fixed compilation with Clang 9.0.
|
|
||||||
- In HTTP API for unknown hashrate now used `null` instead of `0.0`.
|
|
||||||
- Fixed MSVC 2019 version detection.
|
|
||||||
- Removed obsolete automatic variants.
|
|
||||||
|
|
||||||
# v2.14.1
|
|
||||||
* [#975](https://github.com/xmrig/xmrig/issues/975) Fixed crash on Linux if double thread mode used.
|
|
||||||
|
|
||||||
# v2.14.0
|
|
||||||
- **[#969](https://github.com/xmrig/xmrig/pull/969) Added new algorithm `cryptonight/rwz`, short alias `cn/rwz` (also known as CryptoNight ReverseWaltz), for upcoming [Graft](https://www.graft.network/) fork.**
|
|
||||||
- **[#931](https://github.com/xmrig/xmrig/issues/931) Added new algorithm `cryptonight/zls`, short alias `cn/zls` for [Zelerius Network](https://zelerius.org) fork.**
|
|
||||||
- **[#940](https://github.com/xmrig/xmrig/issues/940) Added new algorithm `cryptonight/double`, short alias `cn/double` (also known as CryptoNight HeavyX), for [X-CASH](https://x-cash.org/).**
|
|
||||||
- [#951](https://github.com/xmrig/xmrig/issues/951#issuecomment-469581529) Fixed crash if AVX was disabled on OS level.
|
|
||||||
- [#952](https://github.com/xmrig/xmrig/issues/952) Fixed compile error on some Linux.
|
|
||||||
- [#957](https://github.com/xmrig/xmrig/issues/957#issuecomment-468890667) Added support for embedded config.
|
|
||||||
- [#958](https://github.com/xmrig/xmrig/pull/958) Fixed incorrect user agent on ARM platforms.
|
|
||||||
- [#968](https://github.com/xmrig/xmrig/pull/968) Optimized `cn/r` algorithm performance.
|
|
||||||
|
|
||||||
# v2.13.1
|
|
||||||
- [#946](https://github.com/xmrig/xmrig/pull/946) Optimized software AES implementations for CPUs without hardware AES support. `cn/r`, `cn/wow` up to 2.6 times faster, 4-9% improvements for other algorithms.
|
|
||||||
|
|
||||||
# v2.13.0
|
|
||||||
- **[#938](https://github.com/xmrig/xmrig/issues/938) Added support for new algorithm `cryptonight/r`, short alias `cn/r` (also known as CryptoNightR or CryptoNight variant 4), for upcoming [Monero](https://www.getmonero.org/) fork on March 9, thanks [@SChernykh](https://github.com/SChernykh).**
|
|
||||||
- [#939](https://github.com/xmrig/xmrig/issues/939) Added support for dynamic (runtime) pools reload.
|
|
||||||
- [#932](https://github.com/xmrig/xmrig/issues/932) Fixed `cn-pico` hashrate drop, regression since v2.11.0.
|
|
||||||
|
|
||||||
# v2.12.0
|
|
||||||
- [#929](https://github.com/xmrig/xmrig/pull/929) Added support for new algorithm `cryptonight/wow`, short alias `cn/wow` (also known as CryptonightR), for upcoming [Wownero](http://wownero.org) fork on February 14.
|
|
||||||
|
|
||||||
# v2.11.0
|
|
||||||
- [#928](https://github.com/xmrig/xmrig/issues/928) Added support for new algorithm `cryptonight/gpu`, short alias `cn/gpu` (original name `cryptonight-gpu`), for upcoming [Ryo currency](https://ryo-currency.com) fork on February 14.
|
|
||||||
- [#749](https://github.com/xmrig/xmrig/issues/749) Added support for detect hardware AES in runtime on ARMv8 platforms.
|
|
||||||
- [#292](https://github.com/xmrig/xmrig/issues/292) Fixed build on ARMv8 platforms if compiler not support hardware AES.
|
|
||||||
|
|
||||||
# v2.10.0
|
|
||||||
- [#904](https://github.com/xmrig/xmrig/issues/904) Added new algorithm `cn-pico/trtl` (aliases `cryptonight-turtle`, `cn-trtl`) for upcoming TurtleCoin (TRTL) fork.
|
|
||||||
- Default value for option `max-cpu-usage` changed to `100` also this option now deprecated.
|
|
||||||
|
|
||||||
# v2.9.4
|
|
||||||
- [#913](https://github.com/xmrig/xmrig/issues/913) Fixed Masari (MSR) support (this update required for upcoming fork).
|
|
||||||
- [#915](https://github.com/xmrig/xmrig/pull/915) Improved security, JIT memory now read-only after patching.
|
|
||||||
|
|
||||||
# v2.9.3
|
|
||||||
- [#909](https://github.com/xmrig/xmrig/issues/909) Fixed compile errors on FreeBSD.
|
|
||||||
- [#912](https://github.com/xmrig/xmrig/pull/912) Fixed, C++ implementation of `cn/half` was produce up to 13% of invalid hashes.
|
|
||||||
|
|
||||||
# v2.9.2
|
|
||||||
- [#907](https://github.com/xmrig/xmrig/pull/907) Fixed crash on Linux.
|
|
||||||
|
|
||||||
# v2.9.1
|
|
||||||
- Restored compatibility with https://stellite.hashvault.pro.
|
|
||||||
|
|
||||||
# v2.9.0
|
|
||||||
- [#899](https://github.com/xmrig/xmrig/issues/899) Added support for new algorithm `cn/half` for Masari and Stellite forks.
|
|
||||||
- [#834](https://github.com/xmrig/xmrig/pull/834) Added ASM optimized code for AMD Bulldozer.
|
|
||||||
- [#839](https://github.com/xmrig/xmrig/issues/839) Fixed FreeBSD compile.
|
|
||||||
- [#857](https://github.com/xmrig/xmrig/pull/857) Fixed impossible to build for macOS without clang.
|
|
||||||
|
|
||||||
# v2.8.3
|
|
||||||
- [#813](https://github.com/xmrig/xmrig/issues/813) Fixed critical bug with Minergate pool and variant 2.
|
|
||||||
|
|
||||||
# v2.8.1
|
|
||||||
- [#768](https://github.com/xmrig/xmrig/issues/768) Fixed build with Visual Studio 2015.
|
|
||||||
- [#769](https://github.com/xmrig/xmrig/issues/769) Fixed regression, some ANSI escape sequences was in log with disabled colors.
|
|
||||||
- [#777](https://github.com/xmrig/xmrig/issues/777) Better report about pool connection issues.
|
|
||||||
- Simplified checks for ASM auto detection, only AES support necessary.
|
|
||||||
- Added missing options to `--help` output.
|
|
||||||
|
|
||||||
# v2.8.0
|
|
||||||
- **[#753](https://github.com/xmrig/xmrig/issues/753) Added new algorithm [CryptoNight variant 2](https://github.com/xmrig/xmrig/issues/753) for Monero fork, thanks [@SChernykh](https://github.com/SChernykh).**
|
|
||||||
- Added global and per thread option `"asm"` and and command line equivalent.
|
|
||||||
- **[#758](https://github.com/xmrig/xmrig/issues/758) Added SSL/TLS support for secure connections to pools.**
|
|
||||||
- Added per pool options `"tls"` and `"tls-fingerprint"` and command line equivalents.
|
|
||||||
- [#767](https://github.com/xmrig/xmrig/issues/767) Added config autosave feature, same with GPU miners.
|
|
||||||
- [#245](https://github.com/xmrig/xmrig-proxy/issues/245) Fixed API ID collision when run multiple miners on same machine.
|
|
||||||
- [#757](https://github.com/xmrig/xmrig/issues/757) Fixed send buffer overflow.
|
|
||||||
|
|
||||||
# v2.6.4
|
|
||||||
- [#700](https://github.com/xmrig/xmrig/issues/700) `cryptonight-lite/ipbc` replaced to `cryptonight-heavy/tube` for **Bittube (TUBE)**.
|
|
||||||
- Added `cryptonight/rto` (cryptonight variant 1 with IPBC/TUBE mod) variant for **Arto (RTO)** coin.
|
|
||||||
- Added `cryptonight/xao` (original cryptonight with bigger iteration count) variant for **Alloy (XAO)** coin.
|
|
||||||
- Better variant detection for **nicehash.com** and **minergate.com**.
|
|
||||||
- [#692](https://github.com/xmrig/xmrig/issues/692) Added support for specify both algorithm and variant via single `algo` option.
|
|
||||||
|
|
||||||
# v2.6.3
|
|
||||||
- **Added support for new cryptonight-heavy variant xhv** (`cn-heavy/xhv`) for upcoming Haven Protocol fork.
|
|
||||||
- **Added support for new cryptonight variant msr** (`cn/msr`) also known as `cryptonight-fast` for upcoming Masari fork.
|
|
||||||
- Added new detailed hashrate report.
|
|
||||||
- [#446](https://github.com/xmrig/xmrig/issues/446) Likely fixed SIGBUS error on 32 bit ARM CPUs.
|
|
||||||
- [#551](https://github.com/xmrig/xmrig/issues/551) Fixed `cn-heavy` algorithm on ARMv8.
|
|
||||||
- [#614](https://github.com/xmrig/xmrig/issues/614) Fixed display issue with huge pages percentage when colors disabled.
|
|
||||||
- [#615](https://github.com/xmrig/xmrig/issues/615) Fixed build without libcpuid.
|
|
||||||
- [#629](https://github.com/xmrig/xmrig/pull/629) Fixed file logging with non-seekable files.
|
|
||||||
- [#672](https://github.com/xmrig/xmrig/pull/672) Reverted back `cryptonight-light` and exit if no valid algorithm specified.
|
|
||||||
|
|
||||||
# v2.6.2
|
|
||||||
- [#607](https://github.com/xmrig/xmrig/issues/607) Fixed donation bug.
|
|
||||||
- [#610](https://github.com/xmrig/xmrig/issues/610) Fixed ARM build.
|
|
||||||
|
|
||||||
# v2.6.1
|
|
||||||
- [#168](https://github.com/xmrig/xmrig-proxy/issues/168) Added support for [mining algorithm negotiation](https://github.com/xmrig/xmrig-proxy/blob/dev/doc/STRATUM_EXT.md#1-mining-algorithm-negotiation).
|
|
||||||
- Added IPBC coin support, base algorithm `cn-lite` variant `ipbc`.
|
|
||||||
- [#581](https://github.com/xmrig/xmrig/issues/581) Added support for upcoming Stellite (XTL) fork, base algorithm `cn` variant `xtl`, variant can set now, no need do it after fork.
|
|
||||||
- Added support for **rig-id** stratum protocol extensions, compatible with xmr-stak.
|
|
||||||
- Changed behavior for option `variant=-1` for `cryptonight`, now variant is `1` by default, if you mine old coins need change `variant` to `0`.
|
|
||||||
- A lot of small fixes and better unification with proxy code.
|
|
||||||
|
|
||||||
# v2.6.0-beta3
|
|
||||||
- [#563](https://github.com/xmrig/xmrig/issues/563) **Added [advanced threads mode](https://github.com/xmrig/xmrig/issues/563), now possible configure each thread individually.**
|
|
||||||
- [#255](https://github.com/xmrig/xmrig/issues/563) Low power mode extended to **triple**, **quard** and **penta** modes.
|
|
||||||
- [#519](https://github.com/xmrig/xmrig/issues/519) Fixed high donation levels, improved donation start time randomization.
|
|
||||||
- [#554](https://github.com/xmrig/xmrig/issues/554) Fixed regression with `print-time` option.
|
|
||||||
|
|
||||||
# v2.6.0-beta2
|
|
||||||
- Improved performance for `cryptonight v7` especially in double hash mode.
|
|
||||||
- [#499](https://github.com/xmrig/xmrig/issues/499) IPv6 disabled for internal HTTP API by default, was causing issues on some systems.
|
|
||||||
- Added short aliases for algorithm names: `cn`, `cn-lite` and `cn-heavy`.
|
|
||||||
- Fixed regressions (v2.6.0-beta1 affected)
|
|
||||||
- [#494](https://github.com/xmrig/xmrig/issues/494) Command line option `--donate-level` was broken.
|
|
||||||
- [#502](https://github.com/xmrig/xmrig/issues/502) Build without libmicrohttpd was broken.
|
|
||||||
- Fixed nonce calculation for `--av 4` (software AES, double hash) was causing reduction of effective hashrate and rejected shares on nicehash.
|
|
||||||
|
|
||||||
# v2.6.0-beta1
|
|
||||||
- [#476](https://github.com/xmrig/xmrig/issues/476) **Added Cryptonight-Heavy support for Sumokoin ASIC resistance fork.**
|
|
||||||
- HTTP server now runs in main loop, it make possible easy extend API without worry about thread synchronization.
|
|
||||||
- Added initial graceful reload support, miner will reload configuration if config file changed, disabled by default until it will be fully implemented and tested.
|
|
||||||
- Added API endpoint `PUT /1/config` to update current config.
|
|
||||||
- Added API endpoint `GET /1/config` to get current active config.
|
|
||||||
- Added API endpoint `GET /1/threads` to get current active threads configuration.
|
|
||||||
- API endpoint `GET /` now deprecated, use `GET /1/summary` instead.
|
|
||||||
- Added `--api-no-ipv6` and similar config option to disable IPv6 support for HTTP API.
|
|
||||||
- Added `--api-no-restricted` to enable full access to api, this option has no effect if `--api-access-token` not specified.
|
|
||||||
|
|
||||||
# v2.5.3
|
|
||||||
- Fixed critical bug, in some cases miner was can't recovery connection and switch to failover pool, version 2.5.2 affected. If you use v2.6.0-beta3 this issue doesn't concern you.
|
|
||||||
- [#499](https://github.com/xmrig/xmrig/issues/499) IPv6 support disabled for internal HTTP API.
|
|
||||||
- Added workaround for nicehash.com if you use `cryptonightv7.<region>.nicehash.com` option `variant=1` will be set automatically.
|
|
||||||
|
|
||||||
# v2.5.2
|
|
||||||
- [#448](https://github.com/xmrig/xmrig/issues/478) Fixed broken reconnect.
|
|
||||||
|
|
||||||
# v2.5.1
|
|
||||||
- [#454](https://github.com/xmrig/xmrig/issues/454) Fixed build with libmicrohttpd version below v0.9.35.
|
|
||||||
- [#456](https://github.com/xmrig/xmrig/issues/459) Verbose errors related to donation pool was not fully silenced.
|
|
||||||
- [#459](https://github.com/xmrig/xmrig/issues/459) Fixed regression (version 2.5.0 affected) with connection to **xmr.f2pool.com**.
|
|
||||||
|
|
||||||
# v2.5.0
|
|
||||||
- [#434](https://github.com/xmrig/xmrig/issues/434) **Added support for Monero v7 PoW, scheduled on April 6.**
|
|
||||||
- Added full IPv6 support.
|
|
||||||
- Added protocol extension, when use the miner with xmrig-proxy 2.5+ no more need manually specify `nicehash` option.
|
|
||||||
- [#123](https://github.com/xmrig/xmrig-proxy/issues/123) Fixed regression (all versions since 2.4 affected) fragmented responses from pool/proxy was parsed incorrectly.
|
|
||||||
- [#428](https://github.com/xmrig/xmrig/issues/428) Fixed regression (version 2.4.5 affected) with CPU cache size detection.
|
|
||||||
|
|
||||||
# v2.4.5
|
|
||||||
- [#324](https://github.com/xmrig/xmrig/pull/324) Fixed build without libmicrohttpd (CMake cache issue).
|
|
||||||
- [#341](https://github.com/xmrig/xmrig/issues/341) Fixed wrong exit code and added command line option `--dry-run`.
|
|
||||||
- [#385](https://github.com/xmrig/xmrig/pull/385) Up to 20% performance increase for non-AES CPU and fixed Intel Core 2 cache detection.
|
|
||||||
|
|
||||||
# v2.4.4
|
|
||||||
- Added libmicrohttpd version to --version output.
|
|
||||||
- Fixed bug in singal handler, in some cases miner wasn't shutdown properly.
|
|
||||||
- Fixed recent MSVC 2017 version detection.
|
|
||||||
- [#279](https://github.com/xmrig/xmrig/pull/279) Fixed build on some macOS versions.
|
|
||||||
|
|
||||||
# v2.4.3
|
|
||||||
- [#94](https://github.com/xmrig/xmrig/issues/94#issuecomment-342019257) [#216](https://github.com/xmrig/xmrig/issues/216) Added **ARMv8** and **ARMv7** support. Hardware AES supported, thanks [Imran Yusuff](https://github.com/imranyusuff).
|
|
||||||
- [#157](https://github.com/xmrig/xmrig/issues/157) [#196](https://github.com/xmrig/xmrig/issues/196) Fixed Linux compile issues.
|
|
||||||
- [#184](https://github.com/xmrig/xmrig/issues/184) Fixed cache size detection for CPUs with disabled Hyper-Threading.
|
|
||||||
- [#200](https://github.com/xmrig/xmrig/issues/200) In some cases miner was doesn't write log to stdout.
|
|
||||||
|
|
||||||
# v2.4.2
|
|
||||||
- [#60](https://github.com/xmrig/xmrig/issues/60) Added FreeBSD support, thanks [vcambur](https://github.com/vcambur).
|
|
||||||
- [#153](https://github.com/xmrig/xmrig/issues/153) Fixed issues with dwarfpool.com.
|
|
||||||
|
|
||||||
# v2.4.1
|
|
||||||
- [#147](https://github.com/xmrig/xmrig/issues/147) Fixed comparability with monero-stratum.
|
|
||||||
|
|
||||||
# v2.4.0
|
|
||||||
- Added [HTTP API](https://github.com/xmrig/xmrig/wiki/API).
|
|
||||||
- Added comments support in config file.
|
|
||||||
- libjansson replaced to rapidjson.
|
|
||||||
- [#98](https://github.com/xmrig/xmrig/issues/98) Ignore `keepalive` option with minergate.com and nicehash.com.
|
|
||||||
- [#101](https://github.com/xmrig/xmrig/issues/101) Fixed MSVC 2017 (15.3) compile time version detection.
|
|
||||||
- [#108](https://github.com/xmrig/xmrig/issues/108) Silently ignore invalid values for `donate-level` option.
|
|
||||||
- [#111](https://github.com/xmrig/xmrig/issues/111) Fixed build without AEON support.
|
|
||||||
|
|
||||||
# v2.3.1
|
|
||||||
- [#68](https://github.com/xmrig/xmrig/issues/68) Fixed compatibility with Docker containers, was nothing print on console.
|
|
||||||
|
|
||||||
# v2.3.0
|
|
||||||
- Added `--cpu-priority` option (0 idle, 2 normal to 5 highest).
|
|
||||||
- Added `--user-agent` option, to set custom user-agent string for pool. For example `cpuminer-multi/0.1`.
|
|
||||||
- Added `--no-huge-pages` option, to disable huge pages support.
|
|
||||||
- [#62](https://github.com/xmrig/xmrig/issues/62) Don't send the login to the dev pool.
|
|
||||||
- Force reconnect if pool block miner IP address. helps switch to backup pool.
|
|
||||||
- Fixed: failed open default config file if path contains non English characters.
|
|
||||||
- Fixed: error occurred if try use unavailable stdin or stdout, regression since version 2.2.0.
|
|
||||||
- Fixed: message about huge pages support successfully enabled on Windows was not shown in release builds.
|
|
||||||
|
|
||||||
# v2.2.1
|
|
||||||
- Fixed [terminal issues](https://github.com/xmrig/xmrig-proxy/issues/2#issuecomment-319914085) after exit on Linux and OS X.
|
|
||||||
|
|
||||||
# v2.2.0
|
|
||||||
- [#46](https://github.com/xmrig/xmrig/issues/46) Restored config file support. Now possible use multiple config files and combine with command line options also added support for default config.
|
|
||||||
- Improved colors support on Windows, now used uv_tty, legacy code removed.
|
|
||||||
- QuickEdit Mode now disabled on Windows.
|
|
||||||
- Added interactive commands in console window:: **h**ashrate, **p**ause, **r**esume.
|
|
||||||
- Fixed autoconf mode for AMD FX CPUs.
|
|
||||||
|
|
||||||
# v2.1.0
|
|
||||||
- [#40](https://github.com/xmrig/xmrig/issues/40)
|
|
||||||
Improved miner shutdown, fixed crash on exit for Linux and OS X.
|
|
||||||
- Fixed, login request was contain malformed JSON if username or password has some special characters for example `\`.
|
|
||||||
- [#220](https://github.com/fireice-uk/xmr-stak-cpu/pull/220) Better support for Round Robin DNS, IP address now always chosen randomly instead of stuck on first one.
|
|
||||||
- Changed donation address, new [xmrig-proxy](https://github.com/xmrig/xmrig-proxy) is coming soon.
|
|
||||||
|
|
||||||
# v2.0.2
|
|
||||||
- Better deal with possible duplicate jobs from pool, show warning and ignore duplicates.
|
|
||||||
- For Windows builds libuv updated to version 1.13.1 and gcc to 7.1.0.
|
|
||||||
|
|
||||||
# v2.0.1
|
|
||||||
- [#27](https://github.com/xmrig/xmrig/issues/27) Fixed possibility crash on 32bit systems.
|
|
||||||
|
|
||||||
# v2.0.0
|
|
||||||
- Option `--backup-url` removed, instead now possibility specify multiple pools for example: `-o example1.com:3333 -u user1 -p password1 -k -o example2.com:5555 -u user2 -o example3.com:4444 -u user3`
|
|
||||||
- [#15](https://github.com/xmrig/xmrig/issues/15) Added option `-l, --log-file=FILE` to write log to file.
|
|
||||||
- [#15](https://github.com/xmrig/xmrig/issues/15) Added option `-S, --syslog` to use syslog for logging, Linux only.
|
|
||||||
- [#18](https://github.com/xmrig/xmrig/issues/18) Added nice messages for accepted/rejected shares with diff and network latency.
|
|
||||||
- [#20](https://github.com/xmrig/xmrig/issues/20) Fixed `--cpu-affinity` for more than 32 threads.
|
|
||||||
- Fixed Windows XP support.
|
|
||||||
- Fixed regression, option `--no-color` was not fully disable colored output.
|
|
||||||
- Show resolved pool IP address in miner output.
|
|
||||||
|
|
||||||
# v1.0.1
|
|
||||||
- Fix broken software AES implementation, app has crashed if CPU not support AES-NI, only version 1.0.0 affected.
|
|
||||||
|
|
||||||
# v1.0.0
|
|
||||||
- Miner complete rewritten in C++ with libuv.
|
|
||||||
- This version should be fully compatible (except config file) with previos versions, many new nice features will come in next versions.
|
|
||||||
- This is still beta. If you found regression, stability or perfomance issues or have an idea for new feature please fell free to open new [issue](https://github.com/xmrig/xmrig/issues/new).
|
|
||||||
- Added new option `--print-time=N`, print hashrate report every N seconds.
|
|
||||||
- New hashrate reports, by default every 60 secons.
|
|
||||||
- Added Microsoft Visual C++ 2015 and 2017 support.
|
|
||||||
- Removed dependency on libcurl.
|
|
||||||
- To compile this version from source please switch to [dev](https://github.com/xmrig/xmrig/tree/dev) branch.
|
|
||||||
|
|
||||||
# v0.8.2
|
|
||||||
- Fixed L2 cache size detection for AMD CPUs (Bulldozer/Piledriver/Steamroller/Excavator architecture).
|
|
||||||
|
|
||||||
# v0.8.2
|
|
||||||
- Fixed L2 cache size detection for AMD CPUs (Bulldozer/Piledriver/Steamroller/Excavator architecture).
|
|
||||||
- Fixed gcc 7.1 support.
|
|
||||||
|
|
||||||
# v0.8.1
|
|
||||||
- Added nicehash support, detects automaticaly by pool URL, for example `cryptonight.eu.nicehash.com:3355` or manually via option `--nicehash`.
|
|
||||||
|
|
||||||
# v0.8.0
|
|
||||||
- Added double hash mode, also known as lower power mode. `--av=2` and `--av=4`.
|
|
||||||
- Added smart automatic CPU configuration. Default threads count now depends on size of the L3 cache of CPU.
|
|
||||||
- Added CryptoNight-Lite support for AEON `-a cryptonight-lite`.
|
|
||||||
- Added `--max-cpu-usage` option for auto CPU configuration mode.
|
|
||||||
- Added `--safe` option for adjust threads and algorithm variations to current CPU.
|
|
||||||
- No more manual steps to enable huge pages on Windows. XMRig will do it automatically.
|
|
||||||
- Removed BMI2 algorithm variation.
|
|
||||||
- Removed default pool URL.
|
|
||||||
|
|
||||||
# v0.6.0
|
|
||||||
- Added automatic cryptonight self test.
|
|
||||||
- New software AES algorithm variation. Will be automatically selected if cpu not support AES-NI.
|
|
||||||
- Added 32 bit builds.
|
|
||||||
- Documented [algorithm variations](https://github.com/xmrig/xmrig#algorithm-variations).
|
|
||||||
|
|
||||||
# v0.5.0
|
|
||||||
- Initial public release.
|
|
||||||
|
|||||||
@@ -1,14 +1,15 @@
|
|||||||
cmake_minimum_required(VERSION 2.8)
|
cmake_minimum_required(VERSION 2.8)
|
||||||
project(xmrig)
|
project(xmrig)
|
||||||
|
|
||||||
option(WITH_LIBCPUID "Use Libcpuid" ON)
|
option(WITH_LIBCPUID "Enable libcpuid support" ON)
|
||||||
option(WITH_HWLOC "Use hwloc" ON)
|
option(WITH_HWLOC "Enable hwloc support" ON)
|
||||||
option(WITH_CN_LITE "CryptoNight-Lite support" ON)
|
option(WITH_CN_LITE "Enable CryptoNight-Lite algorithms family" ON)
|
||||||
option(WITH_CN_HEAVY "CryptoNight-Heavy support" ON)
|
option(WITH_CN_HEAVY "Enable CryptoNight-Heavy algorithms family" ON)
|
||||||
option(WITH_CN_PICO "CryptoNight-Pico support" ON)
|
option(WITH_CN_PICO "Enable CryptoNight-Pico algorithm" ON)
|
||||||
option(WITH_CN_GPU "CryptoNight-GPU support" ON)
|
option(WITH_CN_GPU "Enable CryptoNight-GPU algorithm" ON)
|
||||||
option(WITH_RANDOMX "RandomX support" ON)
|
option(WITH_RANDOMX "Enable RandomX algorithms family" ON)
|
||||||
option(WITH_HTTP "HTTP protocol support (client/server)" ON)
|
option(WITH_ARGON2 "Enable Argon2 algorithms family" ON)
|
||||||
|
option(WITH_HTTP "Enable HTTP protocol support (client/server)" ON)
|
||||||
option(WITH_DEBUG_LOG "Enable debug log output" OFF)
|
option(WITH_DEBUG_LOG "Enable debug log output" OFF)
|
||||||
option(WITH_TLS "Enable OpenSSL support" ON)
|
option(WITH_TLS "Enable OpenSSL support" ON)
|
||||||
option(WITH_ASM "Enable ASM PoW implementations" ON)
|
option(WITH_ASM "Enable ASM PoW implementations" ON)
|
||||||
@@ -32,7 +33,6 @@ set(HEADERS
|
|||||||
"${HEADERS_BASE}"
|
"${HEADERS_BASE}"
|
||||||
"${HEADERS_BASE_HTTP}"
|
"${HEADERS_BASE_HTTP}"
|
||||||
"${HEADERS_BACKEND}"
|
"${HEADERS_BACKEND}"
|
||||||
src/api/interfaces/IApiListener.h
|
|
||||||
src/App.h
|
src/App.h
|
||||||
src/core/config/Config_default.h
|
src/core/config/Config_default.h
|
||||||
src/core/config/Config_platform.h
|
src/core/config/Config_platform.h
|
||||||
@@ -152,66 +152,9 @@ add_definitions(/DUNICODE)
|
|||||||
|
|
||||||
find_package(UV REQUIRED)
|
find_package(UV REQUIRED)
|
||||||
|
|
||||||
if (WITH_RANDOMX)
|
|
||||||
include_directories(src/crypto/randomx)
|
|
||||||
add_definitions(/DXMRIG_ALGO_RANDOMX)
|
|
||||||
set(SOURCES_CRYPTO
|
|
||||||
"${SOURCES_CRYPTO}"
|
|
||||||
src/crypto/randomx/aes_hash.cpp
|
|
||||||
src/crypto/randomx/allocator.cpp
|
|
||||||
src/crypto/randomx/argon2_core.c
|
|
||||||
src/crypto/randomx/argon2_ref.c
|
|
||||||
src/crypto/randomx/blake2_generator.cpp
|
|
||||||
src/crypto/randomx/blake2/blake2b.c
|
|
||||||
src/crypto/randomx/bytecode_machine.cpp
|
|
||||||
src/crypto/randomx/dataset.cpp
|
|
||||||
src/crypto/randomx/instructions_portable.cpp
|
|
||||||
src/crypto/randomx/randomx.cpp
|
|
||||||
src/crypto/randomx/reciprocal.c
|
|
||||||
src/crypto/randomx/soft_aes.cpp
|
|
||||||
src/crypto/randomx/superscalar.cpp
|
|
||||||
src/crypto/randomx/virtual_machine.cpp
|
|
||||||
src/crypto/randomx/virtual_memory.cpp
|
|
||||||
src/crypto/randomx/vm_compiled_light.cpp
|
|
||||||
src/crypto/randomx/vm_compiled.cpp
|
|
||||||
src/crypto/randomx/vm_interpreted_light.cpp
|
|
||||||
src/crypto/randomx/vm_interpreted.cpp
|
|
||||||
src/crypto/rx/Rx.cpp
|
|
||||||
src/crypto/rx/Rx.h
|
|
||||||
src/crypto/rx/RxAlgo.cpp
|
|
||||||
src/crypto/rx/RxAlgo.h
|
|
||||||
src/crypto/rx/RxCache.cpp
|
|
||||||
src/crypto/rx/RxCache.h
|
|
||||||
src/crypto/rx/RxConfig.cpp
|
|
||||||
src/crypto/rx/RxConfig.h
|
|
||||||
src/crypto/rx/RxDataset.cpp
|
|
||||||
src/crypto/rx/RxDataset.h
|
|
||||||
src/crypto/rx/RxVm.cpp
|
|
||||||
src/crypto/rx/RxVm.h
|
|
||||||
)
|
|
||||||
if (NOT ARCH_ID)
|
|
||||||
set(ARCH_ID ${CMAKE_HOST_SYSTEM_PROCESSOR})
|
|
||||||
endif()
|
|
||||||
if (CMAKE_C_COMPILER_ID MATCHES MSVC)
|
|
||||||
enable_language(ASM_MASM)
|
|
||||||
list(APPEND SOURCES_CRYPTO
|
|
||||||
src/crypto/randomx/jit_compiler_x86_static.asm
|
|
||||||
src/crypto/randomx/jit_compiler_x86.cpp
|
|
||||||
)
|
|
||||||
elseif (NOT XMRIG_ARM AND CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
||||||
list(APPEND SOURCES_CRYPTO
|
|
||||||
src/crypto/randomx/jit_compiler_x86_static.S
|
|
||||||
src/crypto/randomx/jit_compiler_x86.cpp
|
|
||||||
)
|
|
||||||
# cheat because cmake and ccache hate each other
|
|
||||||
set_property(SOURCE src/crypto/randomx/jit_compiler_x86_static.S PROPERTY LANGUAGE C)
|
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
remove_definitions(/DXMRIG_ALGO_RANDOMX)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
include(cmake/flags.cmake)
|
include(cmake/flags.cmake)
|
||||||
|
include(cmake/randomx.cmake)
|
||||||
|
include(cmake/argon2.cmake)
|
||||||
include(cmake/OpenSSL.cmake)
|
include(cmake/OpenSSL.cmake)
|
||||||
include(cmake/asm.cmake)
|
include(cmake/asm.cmake)
|
||||||
include(cmake/cn-gpu.cmake)
|
include(cmake/cn-gpu.cmake)
|
||||||
@@ -232,22 +175,6 @@ if (WITH_EMBEDDED_CONFIG)
|
|||||||
add_definitions(/DXMRIG_FEATURE_EMBEDDED_CONFIG)
|
add_definitions(/DXMRIG_FEATURE_EMBEDDED_CONFIG)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (WITH_HTTP)
|
|
||||||
set(HTTP_SOURCES
|
|
||||||
src/api/Api.cpp
|
|
||||||
src/api/Api.h
|
|
||||||
src/api/Httpd.cpp
|
|
||||||
src/api/Httpd.h
|
|
||||||
src/api/interfaces/IApiRequest.h
|
|
||||||
src/api/requests/ApiRequest.cpp
|
|
||||||
src/api/requests/ApiRequest.h
|
|
||||||
src/api/requests/HttpApiRequest.cpp
|
|
||||||
src/api/requests/HttpApiRequest.h
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
set(HTTP_SOURCES "")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
include_directories(src)
|
include_directories(src)
|
||||||
include_directories(src/3rdparty)
|
include_directories(src/3rdparty)
|
||||||
include_directories(${UV_INCLUDE_DIR})
|
include_directories(${UV_INCLUDE_DIR})
|
||||||
@@ -260,5 +187,5 @@ if (WITH_DEBUG_LOG)
|
|||||||
add_definitions(/DAPP_DEBUG)
|
add_definitions(/DAPP_DEBUG)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_executable(${CMAKE_PROJECT_NAME} ${HEADERS} ${SOURCES} ${SOURCES_OS} ${SOURCES_CPUID} ${HEADERS_CRYPTO} ${SOURCES_CRYPTO} ${SOURCES_SYSLOG} ${HTTP_SOURCES} ${TLS_SOURCES} ${XMRIG_ASM_SOURCES} ${CN_GPU_SOURCES})
|
add_executable(${CMAKE_PROJECT_NAME} ${HEADERS} ${SOURCES} ${SOURCES_OS} ${SOURCES_CPUID} ${HEADERS_CRYPTO} ${SOURCES_CRYPTO} ${SOURCES_SYSLOG} ${TLS_SOURCES} ${XMRIG_ASM_SOURCES} ${CN_GPU_SOURCES})
|
||||||
target_link_libraries(${CMAKE_PROJECT_NAME} ${XMRIG_ASM_LIBRARY} ${OPENSSL_LIBRARIES} ${UV_LIBRARIES} ${EXTRA_LIBS} ${CPUID_LIB})
|
target_link_libraries(${CMAKE_PROJECT_NAME} ${XMRIG_ASM_LIBRARY} ${OPENSSL_LIBRARIES} ${UV_LIBRARIES} ${EXTRA_LIBS} ${CPUID_LIB} ${ARGON2_LIBRARY})
|
||||||
|
|||||||
157
README.md
157
README.md
@@ -7,136 +7,79 @@
|
|||||||
[](https://github.com/xmrig/xmrig/stargazers)
|
[](https://github.com/xmrig/xmrig/stargazers)
|
||||||
[](https://github.com/xmrig/xmrig/network)
|
[](https://github.com/xmrig/xmrig/network)
|
||||||
|
|
||||||
XMRig is a high performance Monero (XMR) CPU miner, with official support for Windows.
|
XMRig is a high performance RandomX and CryptoNight CPU miner, with official support for Windows.
|
||||||
Originally based on cpuminer-multi with heavy optimizations/rewrites and removing a lot of legacy code, since version 1.0.0 completely rewritten from scratch on C++.
|
|
||||||
|
|
||||||
* This is the **CPU-mining** version, there is also a [NVIDIA GPU version](https://github.com/xmrig/xmrig-nvidia) and [AMD GPU version]( https://github.com/xmrig/xmrig-amd).
|
* This is the **CPU-mining** version, there is also a [NVIDIA GPU version](https://github.com/xmrig/xmrig-nvidia) and [AMD GPU version]( https://github.com/xmrig/xmrig-amd).
|
||||||
* [Roadmap](https://github.com/xmrig/xmrig/issues/106) for next releases.
|
|
||||||
|
|
||||||
<img src="http://i.imgur.com/Ymumes5.png" width="670" >
|
<img src="doc/screenshot.png" width="808" >
|
||||||
|
|
||||||
#### Table of contents
|
#### Table of contents
|
||||||
* [Features](#features)
|
|
||||||
* [Download](#download)
|
* [Download](#download)
|
||||||
* [Usage](#usage)
|
* [Usage](#usage)
|
||||||
* [Algorithm variations](#algorithm-variations)
|
|
||||||
* [Build](https://github.com/xmrig/xmrig/wiki/Build)
|
* [Build](https://github.com/xmrig/xmrig/wiki/Build)
|
||||||
* [Common Issues](#common-issues)
|
|
||||||
* [Other information](#other-information)
|
|
||||||
* [Donations](#donations)
|
* [Donations](#donations)
|
||||||
* [Release checksums](#release-checksums)
|
|
||||||
* [Contacts](#contacts)
|
* [Contacts](#contacts)
|
||||||
|
|
||||||
## Features
|
|
||||||
* High performance.
|
|
||||||
* Official Windows support.
|
|
||||||
* Small Windows executable, without dependencies.
|
|
||||||
* x86/x64 support.
|
|
||||||
* Support for backup (failover) mining server.
|
|
||||||
* keepalived support.
|
|
||||||
* Command line options compatible with cpuminer.
|
|
||||||
* CryptoNight-Lite support for AEON.
|
|
||||||
* Smart automatic [CPU configuration](https://github.com/xmrig/xmrig/wiki/Threads).
|
|
||||||
* Nicehash support
|
|
||||||
* It's open source software.
|
|
||||||
|
|
||||||
## Download
|
## Download
|
||||||
* Binary releases: https://github.com/xmrig/xmrig/releases
|
* Binary releases: https://github.com/xmrig/xmrig/releases
|
||||||
* Git tree: https://github.com/xmrig/xmrig.git
|
* Git tree: https://github.com/xmrig/xmrig.git
|
||||||
* Clone with `git clone https://github.com/xmrig/xmrig.git` :hammer: [Build instructions](https://github.com/xmrig/xmrig/wiki/Build).
|
* Clone with `git clone https://github.com/xmrig/xmrig.git` :hammer: [Build instructions](https://github.com/xmrig/xmrig/wiki/Build).
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
Use [config.xmrig.com](https://config.xmrig.com/xmrig) to generate, edit or share configurations.
|
Preferend way to configure miner is [JSON config file](src/config.json) as more flexible and human frendly, command line interface not cover all features, for example mining profiles for different algorithms. Most impotant options can be changed in runtime without miner restart by editing config or via API.
|
||||||
|
|
||||||
### Options
|
### Options
|
||||||
```
|
```
|
||||||
-a, --algo=ALGO specify the algorithm to use
|
-a, --algo=ALGO specify the algorithm to use
|
||||||
cryptonight
|
cn/r, cn/2, cn/1, cn/0, cn/double, cn/half, cn/fast,
|
||||||
cryptonight-lite
|
cn/rwz, cn/zls, cn/xao, cn/rto, cn/gpu,
|
||||||
cryptonight-heavy
|
cn-lite/1,
|
||||||
-o, --url=URL URL of mining server
|
cn-heavy/xhv, cn-heavy/tube, cn-heavy/0,
|
||||||
-O, --userpass=U:P username:password pair for mining server
|
cn-pico,
|
||||||
-u, --user=USERNAME username for mining server
|
rx/wow, rx/loki
|
||||||
-p, --pass=PASSWORD password for mining server
|
-o, --url=URL URL of mining server
|
||||||
--rig-id=ID rig identifier for pool-side statistics (needs pool support)
|
-O, --userpass=U:P username:password pair for mining server
|
||||||
-t, --threads=N number of miner threads
|
-u, --user=USERNAME username for mining server
|
||||||
-v, --av=N algorithm variation, 0 auto select
|
-p, --pass=PASSWORD password for mining server
|
||||||
-k, --keepalive send keepalived packet for prevent timeout (needs pool support)
|
--rig-id=ID rig identifier for pool-side statistics (needs pool support)
|
||||||
--nicehash enable nicehash.com support
|
-t, --threads=N number of miner threads
|
||||||
--tls enable SSL/TLS support (needs pool support)
|
-v, --av=N algorithm variation, 0 auto select
|
||||||
--tls-fingerprint=F pool TLS certificate fingerprint, if set enable strict certificate pinning
|
-k, --keepalive send keepalived packet for prevent timeout (needs pool support)
|
||||||
-r, --retries=N number of times to retry before switch to backup server (default: 5)
|
--nicehash enable nicehash.com support
|
||||||
-R, --retry-pause=N time to pause between retries (default: 5)
|
--tls enable SSL/TLS support (needs pool support)
|
||||||
--cpu-affinity set process affinity to CPU core(s), mask 0x3 for cores 0 and 1
|
--tls-fingerprint=F pool TLS certificate fingerprint, if set enable strict certificate pinning
|
||||||
--cpu-priority set process priority (0 idle, 2 normal to 5 highest)
|
--daemon use daemon RPC instead of pool for solo mining
|
||||||
--no-huge-pages disable huge pages support
|
--daemon-poll-interval=N daemon poll interval in milliseconds (default: 1000)
|
||||||
--no-color disable colored output
|
-r, --retries=N number of times to retry before switch to backup server (default: 5)
|
||||||
--variant algorithm PoW variant
|
-R, --retry-pause=N time to pause between retries (default: 5)
|
||||||
--donate-level=N donate level, default 5% (5 minutes in 100 minutes)
|
--cpu-affinity set process affinity to CPU core(s), mask 0x3 for cores 0 and 1
|
||||||
--user-agent set custom user-agent string for pool
|
--cpu-priority set process priority (0 idle, 2 normal to 5 highest)
|
||||||
-B, --background run the miner in the background
|
--no-huge-pages disable huge pages support
|
||||||
-c, --config=FILE load a JSON-format configuration file
|
--no-color disable colored output
|
||||||
-l, --log-file=FILE log all output to a file
|
--donate-level=N donate level, default 5% (5 minutes in 100 minutes)
|
||||||
-S, --syslog use system log for output messages
|
--user-agent set custom user-agent string for pool
|
||||||
--max-cpu-usage=N maximum CPU usage for automatic threads mode (default 75)
|
-B, --background run the miner in the background
|
||||||
--safe safe adjust threads and av settings for current CPU
|
-c, --config=FILE load a JSON-format configuration file
|
||||||
--asm=ASM ASM code for cn/2, possible values: auto, none, intel, ryzen.
|
-l, --log-file=FILE log all output to a file
|
||||||
--print-time=N print hashrate report every N seconds
|
--asm=ASM ASM optimizations, possible values: auto, none, intel, ryzen, bulldozer.
|
||||||
--api-port=N port for the miner API
|
--print-time=N print hashrate report every N seconds
|
||||||
--api-access-token=T access token for API
|
--api-worker-id=ID custom worker-id for API
|
||||||
--api-worker-id=ID custom worker-id for API
|
--api-id=ID custom instance ID for API
|
||||||
--api-id=ID custom instance ID for API
|
--http-enabled enable HTTP API
|
||||||
--api-ipv6 enable IPv6 support for API
|
--http-host=HOST bind host for HTTP API (default: 127.0.0.1)
|
||||||
--api-no-restricted enable full remote access (only if API token set)
|
--http-port=N bind port for HTTP API
|
||||||
--dry-run test configuration and exit
|
--http-access-token=T access token for HTTP API
|
||||||
-h, --help display this help and exit
|
--http-no-restricted enable full remote access to HTTP API (only if access token set)
|
||||||
-V, --version output version information and exit
|
--randomx-init=N threads count to initialize RandomX dataset
|
||||||
|
--randomx-no-numa disable NUMA support for RandomX
|
||||||
|
--export-topology export hwloc topology to a XML file and exit
|
||||||
|
--dry-run test configuration and exit
|
||||||
|
-h, --help display this help and exit
|
||||||
|
-V, --version output version information and exit
|
||||||
```
|
```
|
||||||
|
|
||||||
Also you can use configuration via config file, default name **config.json**. Some options available only via config file: [`autosave`](https://github.com/xmrig/xmrig/issues/767), [`hw-aes`](https://github.com/xmrig/xmrig/issues/563). `watch` option currently not implemented in miners only in proxy.
|
|
||||||
|
|
||||||
## Algorithm variations
|
|
||||||
|
|
||||||
- `av` option used for automatic and simple threads mode (when you specify only threads count).
|
|
||||||
- For [advanced threads mode](https://github.com/xmrig/xmrig/issues/563) each thread configured individually and `av` option not used.
|
|
||||||
|
|
||||||
| av | Hashes per round | Hardware AES |
|
|
||||||
|----|------------------|--------------|
|
|
||||||
| 1 | 1 (Single) | yes |
|
|
||||||
| 2 | 2 (Double) | yes |
|
|
||||||
| 3 | 1 (Single) | no |
|
|
||||||
| 4 | 2 (Double) | no |
|
|
||||||
| 5 | 3 (Triple) | yes |
|
|
||||||
| 6 | 4 (Quard) | yes |
|
|
||||||
| 7 | 5 (Penta) | yes |
|
|
||||||
| 8 | 3 (Triple) | no |
|
|
||||||
| 9 | 4 (Quard) | no |
|
|
||||||
| 10 | 5 (Penta) | no |
|
|
||||||
|
|
||||||
## Common Issues
|
|
||||||
### HUGE PAGES unavailable
|
|
||||||
* Run XMRig as Administrator.
|
|
||||||
* Since version 0.8.0 XMRig automatically enables SeLockMemoryPrivilege for current user, but reboot or sign out still required. [Manual instruction](https://msdn.microsoft.com/en-gb/library/ms190730.aspx).
|
|
||||||
|
|
||||||
## Other information
|
|
||||||
* No HTTP support, only stratum protocol support.
|
|
||||||
* Default donation 5% (5 minutes in 100 minutes) can be reduced to 1% via option `donate-level`.
|
|
||||||
|
|
||||||
|
|
||||||
### CPU mining performance
|
|
||||||
* **Intel i7-7700** - 307 H/s (4 threads)
|
|
||||||
* **AMD Ryzen 7 1700X** - 560 H/s (8 threads)
|
|
||||||
|
|
||||||
Please note performance is highly dependent on system load. The numbers above are obtained on an idle system. Tasks heavily using a processor cache, such as video playback, can greatly degrade hashrate. Optimal number of threads depends on the size of the L3 cache of a processor, 1 thread requires 2 MB of cache.
|
|
||||||
|
|
||||||
### Maximum performance checklist
|
|
||||||
* Idle operating system.
|
|
||||||
* Do not exceed optimal thread count.
|
|
||||||
* Use modern CPUs with AES-NI instruction set.
|
|
||||||
* Try setup optimal cpu affinity.
|
|
||||||
* Enable fast memory (Large/Huge pages).
|
|
||||||
|
|
||||||
## Donations
|
## Donations
|
||||||
|
* Default donation 5% (5 minutes in 100 minutes) can be reduced to 1% via option `donate-level` or disabled in source code.
|
||||||
* XMR: `48edfHu7V9Z84YzzMa6fUueoELZ9ZRXq9VetWzYGzKt52XU5xvqgzYnDK9URnRoJMk1j8nLwEVsaSWJ4fhdUyZijBGUicoD`
|
* XMR: `48edfHu7V9Z84YzzMa6fUueoELZ9ZRXq9VetWzYGzKt52XU5xvqgzYnDK9URnRoJMk1j8nLwEVsaSWJ4fhdUyZijBGUicoD`
|
||||||
* BTC: `1P7ujsXeX7GxQwHNnJsRMgAdNkFZmNVqJT`
|
* BTC: `1P7ujsXeX7GxQwHNnJsRMgAdNkFZmNVqJT`
|
||||||
|
|
||||||
|
|||||||
18
cmake/argon2.cmake
Normal file
18
cmake/argon2.cmake
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
if (WITH_ARGON2)
|
||||||
|
add_definitions(/DXMRIG_ALGO_ARGON2)
|
||||||
|
|
||||||
|
list(APPEND HEADERS_CRYPTO
|
||||||
|
src/crypto/argon2/Hash.h
|
||||||
|
src/crypto/argon2/Impl.h
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND SOURCES_CRYPTO
|
||||||
|
src/crypto/argon2/Impl.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
add_subdirectory(src/3rdparty/argon2)
|
||||||
|
set(ARGON2_LIBRARY argon2)
|
||||||
|
else()
|
||||||
|
remove_definitions(/DXMRIG_ALGO_ARGON2)
|
||||||
|
set(ARGON2_LIBRARY "")
|
||||||
|
endif()
|
||||||
@@ -2,6 +2,9 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|||||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
set(CMAKE_CXX_STANDARD 11)
|
set(CMAKE_CXX_STANDARD 11)
|
||||||
|
|
||||||
|
set(CMAKE_C_STANDARD 99)
|
||||||
|
set(CMAKE_C_STANDARD_REQUIRED ON)
|
||||||
|
|
||||||
if ("${CMAKE_BUILD_TYPE}" STREQUAL "")
|
if ("${CMAKE_BUILD_TYPE}" STREQUAL "")
|
||||||
set(CMAKE_BUILD_TYPE Release)
|
set(CMAKE_BUILD_TYPE Release)
|
||||||
endif()
|
endif()
|
||||||
@@ -13,11 +16,10 @@ endif()
|
|||||||
include(CheckSymbolExists)
|
include(CheckSymbolExists)
|
||||||
|
|
||||||
if (CMAKE_CXX_COMPILER_ID MATCHES GNU)
|
if (CMAKE_CXX_COMPILER_ID MATCHES GNU)
|
||||||
|
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wno-strict-aliasing")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wno-strict-aliasing")
|
||||||
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Ofast")
|
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Ofast")
|
||||||
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fexceptions -fno-rtti -Wno-class-memaccess")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fexceptions -fno-rtti -Wno-strict-aliasing -Wno-class-memaccess")
|
||||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Ofast -s")
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Ofast -s")
|
||||||
|
|
||||||
if (XMRIG_ARMv8)
|
if (XMRIG_ARMv8)
|
||||||
@@ -46,6 +48,7 @@ if (CMAKE_CXX_COMPILER_ID MATCHES GNU)
|
|||||||
add_definitions(/D_GNU_SOURCE)
|
add_definitions(/D_GNU_SOURCE)
|
||||||
|
|
||||||
if (${CMAKE_VERSION} VERSION_LESS "3.1.0")
|
if (${CMAKE_VERSION} VERSION_LESS "3.1.0")
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|||||||
57
cmake/randomx.cmake
Normal file
57
cmake/randomx.cmake
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
if (WITH_RANDOMX)
|
||||||
|
add_definitions(/DXMRIG_ALGO_RANDOMX)
|
||||||
|
|
||||||
|
list(APPEND HEADERS_CRYPTO
|
||||||
|
src/crypto/rx/Rx.h
|
||||||
|
src/crypto/rx/RxAlgo.h
|
||||||
|
src/crypto/rx/RxCache.h
|
||||||
|
src/crypto/rx/RxConfig.h
|
||||||
|
src/crypto/rx/RxDataset.h
|
||||||
|
src/crypto/rx/RxVm.h
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND SOURCES_CRYPTO
|
||||||
|
src/crypto/randomx/aes_hash.cpp
|
||||||
|
src/crypto/randomx/allocator.cpp
|
||||||
|
src/crypto/randomx/argon2_core.c
|
||||||
|
src/crypto/randomx/argon2_ref.c
|
||||||
|
src/crypto/randomx/blake2_generator.cpp
|
||||||
|
src/crypto/randomx/blake2/blake2b.c
|
||||||
|
src/crypto/randomx/bytecode_machine.cpp
|
||||||
|
src/crypto/randomx/dataset.cpp
|
||||||
|
src/crypto/randomx/instructions_portable.cpp
|
||||||
|
src/crypto/randomx/randomx.cpp
|
||||||
|
src/crypto/randomx/reciprocal.c
|
||||||
|
src/crypto/randomx/soft_aes.cpp
|
||||||
|
src/crypto/randomx/superscalar.cpp
|
||||||
|
src/crypto/randomx/virtual_machine.cpp
|
||||||
|
src/crypto/randomx/virtual_memory.cpp
|
||||||
|
src/crypto/randomx/vm_compiled_light.cpp
|
||||||
|
src/crypto/randomx/vm_compiled.cpp
|
||||||
|
src/crypto/randomx/vm_interpreted_light.cpp
|
||||||
|
src/crypto/randomx/vm_interpreted.cpp
|
||||||
|
src/crypto/rx/Rx.cpp
|
||||||
|
src/crypto/rx/RxAlgo.cpp
|
||||||
|
src/crypto/rx/RxCache.cpp
|
||||||
|
src/crypto/rx/RxConfig.cpp
|
||||||
|
src/crypto/rx/RxDataset.cpp
|
||||||
|
src/crypto/rx/RxVm.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
if (CMAKE_C_COMPILER_ID MATCHES MSVC)
|
||||||
|
enable_language(ASM_MASM)
|
||||||
|
list(APPEND SOURCES_CRYPTO
|
||||||
|
src/crypto/randomx/jit_compiler_x86_static.asm
|
||||||
|
src/crypto/randomx/jit_compiler_x86.cpp
|
||||||
|
)
|
||||||
|
elseif (NOT XMRIG_ARM AND CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||||
|
list(APPEND SOURCES_CRYPTO
|
||||||
|
src/crypto/randomx/jit_compiler_x86_static.S
|
||||||
|
src/crypto/randomx/jit_compiler_x86.cpp
|
||||||
|
)
|
||||||
|
# cheat because cmake and ccache hate each other
|
||||||
|
set_property(SOURCE src/crypto/randomx/jit_compiler_x86_static.S PROPERTY LANGUAGE C)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
remove_definitions(/DXMRIG_ALGO_RANDOMX)
|
||||||
|
endif()
|
||||||
@@ -23,27 +23,30 @@ Since version 3 mining [algorithm](#algorithm-names) should specified for each p
|
|||||||
|
|
||||||
## Algorithm names
|
## Algorithm names
|
||||||
|
|
||||||
| Name | Memory | Notes |
|
| Name | Memory | Version | Notes |
|
||||||
|-----------------|--------|--------------------------------------------------------------------------------------|
|
|------|--------|---------|-------|
|
||||||
| `cn/0` | 2 MB | CryptoNight (original) |
|
| `argon2/chukwa` | 512 KB | 3.1.0+ | Argon2id (Chukwa). |
|
||||||
| `cn/1` | 2 MB | CryptoNight variant 1 also known as `Monero7` and `CryptoNightV7`. |
|
| `argon2/wrkz` | 256 KB | 3.1.0+ | Argon2id (WRKZ) |
|
||||||
| `cn/2` | 2 MB | CryptoNight variant 2. |
|
| `rx/test` | 2 MB | 3.0.0+ | RandomX (reference configuration). |
|
||||||
| `cn/r` | 2 MB | CryptoNightR (Monero's variant 4). |
|
| `rx/0` | 2 MB | 3.0.0+ | RandomX (reference configuration), reserved for future use. |
|
||||||
| `cn/wow` | 2 MB | CryptoNightR (Wownero). |
|
| `rx/wow` | 1 MB | 3.0.0+ | RandomWOW. |
|
||||||
| `cn/fast` | 2 MB | CryptoNight variant 1 with half iterations. |
|
| `rx/loki` | 2 MB | 3.0.0+ | RandomXL. |
|
||||||
| `cn/half` | 2 MB | CryptoNight variant 2 with half iterations (Masari/Torque) |
|
| `cn/fast` | 2 MB | 3.0.0+ | CryptoNight variant 1 with half iterations. |
|
||||||
| `cn/xao` | 2 MB | CryptoNight variant 0 (modified, Alloy only) |
|
| `cn/rwz` | 2 MB | 2.14.0+ | CryptoNight variant 2 with 3/4 iterations and reversed shuffle operation. |
|
||||||
| `cn/rto` | 2 MB | CryptoNight variant 1 (modified, Arto only) |
|
| `cn/zls` | 2 MB | 2.14.0+ | CryptoNight variant 2 with 3/4 iterations. |
|
||||||
| `cn/rwz` | 2 MB | CryptoNight variant 2 with 3/4 iterations and reversed shuffle operation (Graft). |
|
| `cn/double` | 2 MB | 2.14.0+ | CryptoNight variant 2 with double iterations. |
|
||||||
| `cn/zls` | 2 MB | CryptoNight variant 2 with 3/4 iterations (Zelerius). |
|
| `cn/r` | 2 MB | 2.13.0+ | CryptoNightR (Monero's variant 4). |
|
||||||
| `cn/double` | 2 MB | CryptoNight variant 2 with double iterations (X-CASH). |
|
| `cn/wow` | 2 MB | 2.12.0+ | CryptoNightR (Wownero). |
|
||||||
| `cn/gpu` | 2 MB | CryptoNight-GPU (RYO). |
|
| `cn/gpu` | 2 MB | 2.11.0+ | CryptoNight-GPU. |
|
||||||
| `cn-lite/0` | 1 MB | CryptoNight-Lite variant 0. |
|
| `cn-pico` | 256 KB | 2.10.0+ | CryptoNight-Pico. |
|
||||||
| `cn-lite/1` | 1 MB | CryptoNight-Lite variant 1. |
|
| `cn/half` | 2 MB | 2.9.0+ | CryptoNight variant 2 with half iterations. |
|
||||||
| `cn-heavy/0` | 4 MB | CryptoNight-Heavy . |
|
| `cn/2` | 2 MB | 2.8.0+ | CryptoNight variant 2. |
|
||||||
| `cn-heavy/xhv` | 4 MB | CryptoNight-Heavy (modified, TUBE only). |
|
| `cn/xao` | 2 MB | 2.6.4+ | CryptoNight variant 0 (modified). |
|
||||||
| `cn-heavy/tube` | 4 MB | CryptoNight-Heavy (modified, Haven Protocol only). |
|
| `cn/rto` | 2 MB | 2.6.4+ | CryptoNight variant 1 (modified). |
|
||||||
| `cn-pico` | 256 KB | TurtleCoin (TRTL) |
|
| `cn-heavy/tube` | 4 MB | 2.6.4+ | CryptoNight-Heavy (modified). |
|
||||||
| `rx/0` | 2 MB | RandomX (reference configuration), reserved for future use. |
|
| `cn-heavy/xhv` | 4 MB | 2.6.3+ | CryptoNight-Heavy (modified). |
|
||||||
| `rx/wow` | 1 MB | RandomWOW (Wownero). |
|
| `cn-heavy/0` | 4 MB | 2.6.0+ | CryptoNight-Heavy. |
|
||||||
| `rx/loki` | 2 MB | RandomXL (Loki). |
|
| `cn/1` | 2 MB | 2.5.0+ | CryptoNight variant 1. |
|
||||||
|
| `cn-lite/1` | 1 MB | 2.5.0+ | CryptoNight-Lite variant 1. |
|
||||||
|
| `cn-lite/0` | 1 MB | 0.8.0+ | CryptoNight-Lite variant 0. |
|
||||||
|
| `cn/0` | 2 MB | 0.5.0+ | CryptoNight (original). |
|
||||||
|
|||||||
35
doc/API.md
35
doc/API.md
@@ -1,26 +1,39 @@
|
|||||||
# HTTP API
|
# HTTP API
|
||||||
|
|
||||||
If you want use API you need choice a port where is internal HTTP server will listen for incoming connections. API will not available if miner built without `libmicrohttpd`.
|
If you want use HTTP API you need enable it (`"enabled": true,`) then choice `port` and optionaly `host`. API not available if miner built without HTTP support (`-DWITH_HTTP=OFF`).
|
||||||
|
|
||||||
|
Offical HTTP client for API: http://workers.xmrig.info/
|
||||||
|
|
||||||
Example configuration:
|
Example configuration:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
"api": {
|
"api": {
|
||||||
"port": 44444,
|
"id": null,
|
||||||
"access-token": "TOKEN",
|
"worker-id": null,
|
||||||
"worker-id": null,
|
|
||||||
"ipv6": false,
|
|
||||||
"restricted": false
|
|
||||||
},
|
},
|
||||||
|
"http": {
|
||||||
|
"enabled": false,
|
||||||
|
"host": "127.0.0.1",
|
||||||
|
"port": 0,
|
||||||
|
"access-token": null,
|
||||||
|
"restricted": true
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
* **port** Port for incoming connections `http://<miner ip>:<port>`.
|
#### Global API options
|
||||||
* **access-token** [Bearer](https://gist.github.com/xmrig/c75fdd1f8e0f3bac05500be2ab718f8e#file-api-html-L54) access token to secure access to API.
|
* **id** Miner ID, if not set created automatically.
|
||||||
* **worker-id** Optional worker name, if not set will be detected automatically.
|
* **worker-id** Optional worker name, if not set will be detected automatically.
|
||||||
* **ipv6** Enable (`true`) or disable (`false`) IPv6 for API.
|
|
||||||
|
#### HTTP API options,
|
||||||
|
* **enabled** Enable (`true`) or disable (`false`) HTTP API.
|
||||||
|
* **host** Host for incoming connections `http://<host>:<port>`, to allow connections from all interfaces use `0.0.0.0` (IPv4) or `::` (IPv4+IPv6).
|
||||||
|
* **port** Port for incoming connections `http://<host>:<port>`, zero port is valid option and means random port.
|
||||||
|
* **access-token** [Bearer](https://gist.github.com/xmrig/c75fdd1f8e0f3bac05500be2ab718f8e#file-api-html-L54) access token to secure access to API. Miner support this token only via `Authorization` header.
|
||||||
* **restricted** Use `false` to allow remote configuration.
|
* **restricted** Use `false` to allow remote configuration.
|
||||||
|
|
||||||
If you prefer use command line options instead of config file, you can use options: `--api-port`, `--api-access-token`, `--api-worker-id`, `--api-ipv6` and `api-no-restricted`.
|
If you prefer use command line options instead of config file, you can use options: `--api-id`, `--api-worker-id`, `--http-enabled`, `--http-host`, `--http-access-token`, `--http-port`, `--http-no-restricted`.
|
||||||
|
|
||||||
|
Versions before 2.15 was use another options for API https://github.com/xmrig/xmrig/issues/1007
|
||||||
|
|
||||||
## Endpoints
|
## Endpoints
|
||||||
|
|
||||||
@@ -50,4 +63,4 @@ Curl example:
|
|||||||
|
|
||||||
```
|
```
|
||||||
curl -v --data-binary @config.json -X PUT -H "Content-Type: application/json" -H "Authorization: Bearer SECRET" http://127.0.0.1:44444/1/config
|
curl -v --data-binary @config.json -X PUT -H "Content-Type: application/json" -H "Authorization: Bearer SECRET" http://127.0.0.1:44444/1/config
|
||||||
```
|
```
|
||||||
|
|||||||
349
doc/CHANGELOG_OLD.md
Normal file
349
doc/CHANGELOG_OLD.md
Normal file
@@ -0,0 +1,349 @@
|
|||||||
|
# v2.99.6-beta
|
||||||
|
- Added commands `pause` and `resume` via JSON RPC 2.0 API (`POST /json_rpc`).
|
||||||
|
- Fixed autoconfig regression (since 2.99.5), mostly `rx/wow` was affected by this bug.
|
||||||
|
- Fixed user job recovery after donation round.
|
||||||
|
- Information about AVX2 CPU feature how hidden in miner summary.
|
||||||
|
|
||||||
|
# v2.99.5-beta
|
||||||
|
- [#1066](https://github.com/xmrig/xmrig/issues/1066#issuecomment-518080529) Fixed crash and added error message if pool not ready for RandomX.
|
||||||
|
- [#1092](https://github.com/xmrig/xmrig/issues/1092) Fixed crash if wrong CPU affinity used.
|
||||||
|
- [#1103](https://github.com/xmrig/xmrig/issues/1103) Improved auto configuration for RandomX for CPUs where L2 cache is limiting factor.
|
||||||
|
- [#1105](https://github.com/xmrig/xmrig/issues/1105) Improved auto configuration for `cn-pico` algorithm.
|
||||||
|
- [#1106](https://github.com/xmrig/xmrig/issues/1106) Fixed `hugepages` field in summary API.
|
||||||
|
- Added alternative short format for CPU threads.
|
||||||
|
- Changed format for CPU threads with intensity above 1.
|
||||||
|
- Name for reference RandomX configuration changed to `rx/test` to avoid potential conflicts in future.
|
||||||
|
|
||||||
|
# v2.99.4-beta
|
||||||
|
- [#1062](https://github.com/xmrig/xmrig/issues/1062) Fixed 32 bit support. **32 bit is slow and deprecated**.
|
||||||
|
- [#1088](https://github.com/xmrig/xmrig/pull/1088) Fixed macOS compilation.
|
||||||
|
- [#1095](https://github.com/xmrig/xmrig/pull/1095) Fixed compatibility with hwloc 1.10.x.
|
||||||
|
- Optimized RandomX initialization and switching, fixed rare crash when re-initialize dataset.
|
||||||
|
- Fixed ARM build with hwloc.
|
||||||
|
|
||||||
|
# v2.99.3-beta
|
||||||
|
- [#1082](https://github.com/xmrig/xmrig/issues/1082) Fixed hwloc auto configuration on AMD FX CPUs.
|
||||||
|
- Added command line option `--export-topology` for export hwloc topology to a XML file.
|
||||||
|
|
||||||
|
# v2.99.2-beta
|
||||||
|
- [#1077](https://github.com/xmrig/xmrig/issues/1077) Added NUMA support via **hwloc**.
|
||||||
|
- Fixed miner freeze when switch between RandomX variants.
|
||||||
|
- Fixed dataset initialization speed on Linux if thread affinity was used.
|
||||||
|
|
||||||
|
# v2.99.1-beta
|
||||||
|
- [#1072](https://github.com/xmrig/xmrig/issues/1072) Fixed RandomX `seed_hash` re-initialization.
|
||||||
|
|
||||||
|
# v2.99.0-beta
|
||||||
|
- [#1050](https://github.com/xmrig/xmrig/pull/1050) Added RandomXL algorithm for [Loki](https://loki.network/), algorithm name used by miner is `randomx/loki` or `rx/loki`.
|
||||||
|
- Added [flexible](https://github.com/xmrig/xmrig/blob/evo/doc/CPU.md) multi algorithm configuration.
|
||||||
|
- Added unlimited switching between incompatible algorithms, all mining options can be changed in runtime.
|
||||||
|
- Breaked backward compatibility with previous configs and command line, `variant` option replaced to `algo`, global option `algo` removed, all CPU related settings moved to `cpu` object.
|
||||||
|
- Options `av`, `safe` and `max-cpu-usage` removed.
|
||||||
|
- Algorithm `cn/msr` renamed to `cn/fast`.
|
||||||
|
- Algorithm `cn/xtl` removed.
|
||||||
|
- API endpoint `GET /1/threads` replaced to `GET /2/backends`.
|
||||||
|
|
||||||
|
# v2.16.0-beta
|
||||||
|
- [#1036](https://github.com/xmrig/xmrig/pull/1036) Added RandomWOW (RandomX with different preferences) algorithm support for [Wownero](http://wownero.org/).
|
||||||
|
- Algorithm name used by miner is `randomx/wow` or `rx/wow`.
|
||||||
|
- Currently runtime algorithm switching NOT supported with other algorithms.
|
||||||
|
|
||||||
|
# v2.15.4-beta
|
||||||
|
- Added global uptime and extended connection information in API.
|
||||||
|
- API now return current algorithm instead of global algorithm specified in config.
|
||||||
|
- This version also include all changes from stable version v2.14.4.
|
||||||
|
|
||||||
|
# v2.15.3-beta
|
||||||
|
- [#1014](https://github.com/xmrig/xmrig/issues/1014) Fixed regression, default value for `algo` option was not applied.
|
||||||
|
|
||||||
|
# v2.15.2-beta
|
||||||
|
- [#1010](https://github.com/xmrig/xmrig/pull/1010#issuecomment-482632107) Added daemon support (solo mining).
|
||||||
|
- [#1012](https://github.com/xmrig/xmrig/pull/1012) Fixed compatibility with clang 9.
|
||||||
|
- Config subsystem was rewritten, internally JSON is primary format now.
|
||||||
|
- Fixed regression, big HTTP responses was truncated.
|
||||||
|
|
||||||
|
# v2.15.1-beta
|
||||||
|
- [#1007](https://github.com/xmrig/xmrig/issues/1007) Old HTTP API backend based on libmicrohttpd, replaced to custom HTTP server (libuv + http_parser).
|
||||||
|
- [#257](https://github.com/xmrig/xmrig-nvidia/pull/257) New logging subsystem, file and syslog now always without colors.
|
||||||
|
|
||||||
|
# v2.15.0-beta
|
||||||
|
- [#314](https://github.com/xmrig/xmrig-proxy/issues/314) Added donate over proxy feature.
|
||||||
|
- Added new option `donate-over-proxy`.
|
||||||
|
- Added real graceful exit.
|
||||||
|
|
||||||
|
# v2.14.4
|
||||||
|
- [#992](https://github.com/xmrig/xmrig/pull/992) Fixed compilation with Clang 3.5.
|
||||||
|
- [#1012](https://github.com/xmrig/xmrig/pull/1012) Fixed compilation with Clang 9.0.
|
||||||
|
- In HTTP API for unknown hashrate now used `null` instead of `0.0`.
|
||||||
|
- Fixed MSVC 2019 version detection.
|
||||||
|
- Removed obsolete automatic variants.
|
||||||
|
|
||||||
|
# v2.14.1
|
||||||
|
* [#975](https://github.com/xmrig/xmrig/issues/975) Fixed crash on Linux if double thread mode used.
|
||||||
|
|
||||||
|
# v2.14.0
|
||||||
|
- **[#969](https://github.com/xmrig/xmrig/pull/969) Added new algorithm `cryptonight/rwz`, short alias `cn/rwz` (also known as CryptoNight ReverseWaltz), for upcoming [Graft](https://www.graft.network/) fork.**
|
||||||
|
- **[#931](https://github.com/xmrig/xmrig/issues/931) Added new algorithm `cryptonight/zls`, short alias `cn/zls` for [Zelerius Network](https://zelerius.org) fork.**
|
||||||
|
- **[#940](https://github.com/xmrig/xmrig/issues/940) Added new algorithm `cryptonight/double`, short alias `cn/double` (also known as CryptoNight HeavyX), for [X-CASH](https://x-cash.org/).**
|
||||||
|
- [#951](https://github.com/xmrig/xmrig/issues/951#issuecomment-469581529) Fixed crash if AVX was disabled on OS level.
|
||||||
|
- [#952](https://github.com/xmrig/xmrig/issues/952) Fixed compile error on some Linux.
|
||||||
|
- [#957](https://github.com/xmrig/xmrig/issues/957#issuecomment-468890667) Added support for embedded config.
|
||||||
|
- [#958](https://github.com/xmrig/xmrig/pull/958) Fixed incorrect user agent on ARM platforms.
|
||||||
|
- [#968](https://github.com/xmrig/xmrig/pull/968) Optimized `cn/r` algorithm performance.
|
||||||
|
|
||||||
|
# v2.13.1
|
||||||
|
- [#946](https://github.com/xmrig/xmrig/pull/946) Optimized software AES implementations for CPUs without hardware AES support. `cn/r`, `cn/wow` up to 2.6 times faster, 4-9% improvements for other algorithms.
|
||||||
|
|
||||||
|
# v2.13.0
|
||||||
|
- **[#938](https://github.com/xmrig/xmrig/issues/938) Added support for new algorithm `cryptonight/r`, short alias `cn/r` (also known as CryptoNightR or CryptoNight variant 4), for upcoming [Monero](https://www.getmonero.org/) fork on March 9, thanks [@SChernykh](https://github.com/SChernykh).**
|
||||||
|
- [#939](https://github.com/xmrig/xmrig/issues/939) Added support for dynamic (runtime) pools reload.
|
||||||
|
- [#932](https://github.com/xmrig/xmrig/issues/932) Fixed `cn-pico` hashrate drop, regression since v2.11.0.
|
||||||
|
|
||||||
|
# v2.12.0
|
||||||
|
- [#929](https://github.com/xmrig/xmrig/pull/929) Added support for new algorithm `cryptonight/wow`, short alias `cn/wow` (also known as CryptonightR), for upcoming [Wownero](http://wownero.org) fork on February 14.
|
||||||
|
|
||||||
|
# v2.11.0
|
||||||
|
- [#928](https://github.com/xmrig/xmrig/issues/928) Added support for new algorithm `cryptonight/gpu`, short alias `cn/gpu` (original name `cryptonight-gpu`), for upcoming [Ryo currency](https://ryo-currency.com) fork on February 14.
|
||||||
|
- [#749](https://github.com/xmrig/xmrig/issues/749) Added support for detect hardware AES in runtime on ARMv8 platforms.
|
||||||
|
- [#292](https://github.com/xmrig/xmrig/issues/292) Fixed build on ARMv8 platforms if compiler not support hardware AES.
|
||||||
|
|
||||||
|
# v2.10.0
|
||||||
|
- [#904](https://github.com/xmrig/xmrig/issues/904) Added new algorithm `cn-pico/trtl` (aliases `cryptonight-turtle`, `cn-trtl`) for upcoming TurtleCoin (TRTL) fork.
|
||||||
|
- Default value for option `max-cpu-usage` changed to `100` also this option now deprecated.
|
||||||
|
|
||||||
|
# v2.9.4
|
||||||
|
- [#913](https://github.com/xmrig/xmrig/issues/913) Fixed Masari (MSR) support (this update required for upcoming fork).
|
||||||
|
- [#915](https://github.com/xmrig/xmrig/pull/915) Improved security, JIT memory now read-only after patching.
|
||||||
|
|
||||||
|
# v2.9.3
|
||||||
|
- [#909](https://github.com/xmrig/xmrig/issues/909) Fixed compile errors on FreeBSD.
|
||||||
|
- [#912](https://github.com/xmrig/xmrig/pull/912) Fixed, C++ implementation of `cn/half` was produce up to 13% of invalid hashes.
|
||||||
|
|
||||||
|
# v2.9.2
|
||||||
|
- [#907](https://github.com/xmrig/xmrig/pull/907) Fixed crash on Linux.
|
||||||
|
|
||||||
|
# v2.9.1
|
||||||
|
- Restored compatibility with https://stellite.hashvault.pro.
|
||||||
|
|
||||||
|
# v2.9.0
|
||||||
|
- [#899](https://github.com/xmrig/xmrig/issues/899) Added support for new algorithm `cn/half` for Masari and Stellite forks.
|
||||||
|
- [#834](https://github.com/xmrig/xmrig/pull/834) Added ASM optimized code for AMD Bulldozer.
|
||||||
|
- [#839](https://github.com/xmrig/xmrig/issues/839) Fixed FreeBSD compile.
|
||||||
|
- [#857](https://github.com/xmrig/xmrig/pull/857) Fixed impossible to build for macOS without clang.
|
||||||
|
|
||||||
|
# v2.8.3
|
||||||
|
- [#813](https://github.com/xmrig/xmrig/issues/813) Fixed critical bug with Minergate pool and variant 2.
|
||||||
|
|
||||||
|
# v2.8.1
|
||||||
|
- [#768](https://github.com/xmrig/xmrig/issues/768) Fixed build with Visual Studio 2015.
|
||||||
|
- [#769](https://github.com/xmrig/xmrig/issues/769) Fixed regression, some ANSI escape sequences was in log with disabled colors.
|
||||||
|
- [#777](https://github.com/xmrig/xmrig/issues/777) Better report about pool connection issues.
|
||||||
|
- Simplified checks for ASM auto detection, only AES support necessary.
|
||||||
|
- Added missing options to `--help` output.
|
||||||
|
|
||||||
|
# v2.8.0
|
||||||
|
- **[#753](https://github.com/xmrig/xmrig/issues/753) Added new algorithm [CryptoNight variant 2](https://github.com/xmrig/xmrig/issues/753) for Monero fork, thanks [@SChernykh](https://github.com/SChernykh).**
|
||||||
|
- Added global and per thread option `"asm"` and and command line equivalent.
|
||||||
|
- **[#758](https://github.com/xmrig/xmrig/issues/758) Added SSL/TLS support for secure connections to pools.**
|
||||||
|
- Added per pool options `"tls"` and `"tls-fingerprint"` and command line equivalents.
|
||||||
|
- [#767](https://github.com/xmrig/xmrig/issues/767) Added config autosave feature, same with GPU miners.
|
||||||
|
- [#245](https://github.com/xmrig/xmrig-proxy/issues/245) Fixed API ID collision when run multiple miners on same machine.
|
||||||
|
- [#757](https://github.com/xmrig/xmrig/issues/757) Fixed send buffer overflow.
|
||||||
|
|
||||||
|
# v2.6.4
|
||||||
|
- [#700](https://github.com/xmrig/xmrig/issues/700) `cryptonight-lite/ipbc` replaced to `cryptonight-heavy/tube` for **Bittube (TUBE)**.
|
||||||
|
- Added `cryptonight/rto` (cryptonight variant 1 with IPBC/TUBE mod) variant for **Arto (RTO)** coin.
|
||||||
|
- Added `cryptonight/xao` (original cryptonight with bigger iteration count) variant for **Alloy (XAO)** coin.
|
||||||
|
- Better variant detection for **nicehash.com** and **minergate.com**.
|
||||||
|
- [#692](https://github.com/xmrig/xmrig/issues/692) Added support for specify both algorithm and variant via single `algo` option.
|
||||||
|
|
||||||
|
# v2.6.3
|
||||||
|
- **Added support for new cryptonight-heavy variant xhv** (`cn-heavy/xhv`) for upcoming Haven Protocol fork.
|
||||||
|
- **Added support for new cryptonight variant msr** (`cn/msr`) also known as `cryptonight-fast` for upcoming Masari fork.
|
||||||
|
- Added new detailed hashrate report.
|
||||||
|
- [#446](https://github.com/xmrig/xmrig/issues/446) Likely fixed SIGBUS error on 32 bit ARM CPUs.
|
||||||
|
- [#551](https://github.com/xmrig/xmrig/issues/551) Fixed `cn-heavy` algorithm on ARMv8.
|
||||||
|
- [#614](https://github.com/xmrig/xmrig/issues/614) Fixed display issue with huge pages percentage when colors disabled.
|
||||||
|
- [#615](https://github.com/xmrig/xmrig/issues/615) Fixed build without libcpuid.
|
||||||
|
- [#629](https://github.com/xmrig/xmrig/pull/629) Fixed file logging with non-seekable files.
|
||||||
|
- [#672](https://github.com/xmrig/xmrig/pull/672) Reverted back `cryptonight-light` and exit if no valid algorithm specified.
|
||||||
|
|
||||||
|
# v2.6.2
|
||||||
|
- [#607](https://github.com/xmrig/xmrig/issues/607) Fixed donation bug.
|
||||||
|
- [#610](https://github.com/xmrig/xmrig/issues/610) Fixed ARM build.
|
||||||
|
|
||||||
|
# v2.6.1
|
||||||
|
- [#168](https://github.com/xmrig/xmrig-proxy/issues/168) Added support for [mining algorithm negotiation](https://github.com/xmrig/xmrig-proxy/blob/dev/doc/STRATUM_EXT.md#1-mining-algorithm-negotiation).
|
||||||
|
- Added IPBC coin support, base algorithm `cn-lite` variant `ipbc`.
|
||||||
|
- [#581](https://github.com/xmrig/xmrig/issues/581) Added support for upcoming Stellite (XTL) fork, base algorithm `cn` variant `xtl`, variant can set now, no need do it after fork.
|
||||||
|
- Added support for **rig-id** stratum protocol extensions, compatible with xmr-stak.
|
||||||
|
- Changed behavior for option `variant=-1` for `cryptonight`, now variant is `1` by default, if you mine old coins need change `variant` to `0`.
|
||||||
|
- A lot of small fixes and better unification with proxy code.
|
||||||
|
|
||||||
|
# v2.6.0-beta3
|
||||||
|
- [#563](https://github.com/xmrig/xmrig/issues/563) **Added [advanced threads mode](https://github.com/xmrig/xmrig/issues/563), now possible configure each thread individually.**
|
||||||
|
- [#255](https://github.com/xmrig/xmrig/issues/563) Low power mode extended to **triple**, **quard** and **penta** modes.
|
||||||
|
- [#519](https://github.com/xmrig/xmrig/issues/519) Fixed high donation levels, improved donation start time randomization.
|
||||||
|
- [#554](https://github.com/xmrig/xmrig/issues/554) Fixed regression with `print-time` option.
|
||||||
|
|
||||||
|
# v2.6.0-beta2
|
||||||
|
- Improved performance for `cryptonight v7` especially in double hash mode.
|
||||||
|
- [#499](https://github.com/xmrig/xmrig/issues/499) IPv6 disabled for internal HTTP API by default, was causing issues on some systems.
|
||||||
|
- Added short aliases for algorithm names: `cn`, `cn-lite` and `cn-heavy`.
|
||||||
|
- Fixed regressions (v2.6.0-beta1 affected)
|
||||||
|
- [#494](https://github.com/xmrig/xmrig/issues/494) Command line option `--donate-level` was broken.
|
||||||
|
- [#502](https://github.com/xmrig/xmrig/issues/502) Build without libmicrohttpd was broken.
|
||||||
|
- Fixed nonce calculation for `--av 4` (software AES, double hash) was causing reduction of effective hashrate and rejected shares on nicehash.
|
||||||
|
|
||||||
|
# v2.6.0-beta1
|
||||||
|
- [#476](https://github.com/xmrig/xmrig/issues/476) **Added Cryptonight-Heavy support for Sumokoin ASIC resistance fork.**
|
||||||
|
- HTTP server now runs in main loop, it make possible easy extend API without worry about thread synchronization.
|
||||||
|
- Added initial graceful reload support, miner will reload configuration if config file changed, disabled by default until it will be fully implemented and tested.
|
||||||
|
- Added API endpoint `PUT /1/config` to update current config.
|
||||||
|
- Added API endpoint `GET /1/config` to get current active config.
|
||||||
|
- Added API endpoint `GET /1/threads` to get current active threads configuration.
|
||||||
|
- API endpoint `GET /` now deprecated, use `GET /1/summary` instead.
|
||||||
|
- Added `--api-no-ipv6` and similar config option to disable IPv6 support for HTTP API.
|
||||||
|
- Added `--api-no-restricted` to enable full access to api, this option has no effect if `--api-access-token` not specified.
|
||||||
|
|
||||||
|
# v2.5.3
|
||||||
|
- Fixed critical bug, in some cases miner was can't recovery connection and switch to failover pool, version 2.5.2 affected. If you use v2.6.0-beta3 this issue doesn't concern you.
|
||||||
|
- [#499](https://github.com/xmrig/xmrig/issues/499) IPv6 support disabled for internal HTTP API.
|
||||||
|
- Added workaround for nicehash.com if you use `cryptonightv7.<region>.nicehash.com` option `variant=1` will be set automatically.
|
||||||
|
|
||||||
|
# v2.5.2
|
||||||
|
- [#448](https://github.com/xmrig/xmrig/issues/478) Fixed broken reconnect.
|
||||||
|
|
||||||
|
# v2.5.1
|
||||||
|
- [#454](https://github.com/xmrig/xmrig/issues/454) Fixed build with libmicrohttpd version below v0.9.35.
|
||||||
|
- [#456](https://github.com/xmrig/xmrig/issues/459) Verbose errors related to donation pool was not fully silenced.
|
||||||
|
- [#459](https://github.com/xmrig/xmrig/issues/459) Fixed regression (version 2.5.0 affected) with connection to **xmr.f2pool.com**.
|
||||||
|
|
||||||
|
# v2.5.0
|
||||||
|
- [#434](https://github.com/xmrig/xmrig/issues/434) **Added support for Monero v7 PoW, scheduled on April 6.**
|
||||||
|
- Added full IPv6 support.
|
||||||
|
- Added protocol extension, when use the miner with xmrig-proxy 2.5+ no more need manually specify `nicehash` option.
|
||||||
|
- [#123](https://github.com/xmrig/xmrig-proxy/issues/123) Fixed regression (all versions since 2.4 affected) fragmented responses from pool/proxy was parsed incorrectly.
|
||||||
|
- [#428](https://github.com/xmrig/xmrig/issues/428) Fixed regression (version 2.4.5 affected) with CPU cache size detection.
|
||||||
|
|
||||||
|
# v2.4.5
|
||||||
|
- [#324](https://github.com/xmrig/xmrig/pull/324) Fixed build without libmicrohttpd (CMake cache issue).
|
||||||
|
- [#341](https://github.com/xmrig/xmrig/issues/341) Fixed wrong exit code and added command line option `--dry-run`.
|
||||||
|
- [#385](https://github.com/xmrig/xmrig/pull/385) Up to 20% performance increase for non-AES CPU and fixed Intel Core 2 cache detection.
|
||||||
|
|
||||||
|
# v2.4.4
|
||||||
|
- Added libmicrohttpd version to --version output.
|
||||||
|
- Fixed bug in singal handler, in some cases miner wasn't shutdown properly.
|
||||||
|
- Fixed recent MSVC 2017 version detection.
|
||||||
|
- [#279](https://github.com/xmrig/xmrig/pull/279) Fixed build on some macOS versions.
|
||||||
|
|
||||||
|
# v2.4.3
|
||||||
|
- [#94](https://github.com/xmrig/xmrig/issues/94#issuecomment-342019257) [#216](https://github.com/xmrig/xmrig/issues/216) Added **ARMv8** and **ARMv7** support. Hardware AES supported, thanks [Imran Yusuff](https://github.com/imranyusuff).
|
||||||
|
- [#157](https://github.com/xmrig/xmrig/issues/157) [#196](https://github.com/xmrig/xmrig/issues/196) Fixed Linux compile issues.
|
||||||
|
- [#184](https://github.com/xmrig/xmrig/issues/184) Fixed cache size detection for CPUs with disabled Hyper-Threading.
|
||||||
|
- [#200](https://github.com/xmrig/xmrig/issues/200) In some cases miner was doesn't write log to stdout.
|
||||||
|
|
||||||
|
# v2.4.2
|
||||||
|
- [#60](https://github.com/xmrig/xmrig/issues/60) Added FreeBSD support, thanks [vcambur](https://github.com/vcambur).
|
||||||
|
- [#153](https://github.com/xmrig/xmrig/issues/153) Fixed issues with dwarfpool.com.
|
||||||
|
|
||||||
|
# v2.4.1
|
||||||
|
- [#147](https://github.com/xmrig/xmrig/issues/147) Fixed comparability with monero-stratum.
|
||||||
|
|
||||||
|
# v2.4.0
|
||||||
|
- Added [HTTP API](https://github.com/xmrig/xmrig/wiki/API).
|
||||||
|
- Added comments support in config file.
|
||||||
|
- libjansson replaced to rapidjson.
|
||||||
|
- [#98](https://github.com/xmrig/xmrig/issues/98) Ignore `keepalive` option with minergate.com and nicehash.com.
|
||||||
|
- [#101](https://github.com/xmrig/xmrig/issues/101) Fixed MSVC 2017 (15.3) compile time version detection.
|
||||||
|
- [#108](https://github.com/xmrig/xmrig/issues/108) Silently ignore invalid values for `donate-level` option.
|
||||||
|
- [#111](https://github.com/xmrig/xmrig/issues/111) Fixed build without AEON support.
|
||||||
|
|
||||||
|
# v2.3.1
|
||||||
|
- [#68](https://github.com/xmrig/xmrig/issues/68) Fixed compatibility with Docker containers, was nothing print on console.
|
||||||
|
|
||||||
|
# v2.3.0
|
||||||
|
- Added `--cpu-priority` option (0 idle, 2 normal to 5 highest).
|
||||||
|
- Added `--user-agent` option, to set custom user-agent string for pool. For example `cpuminer-multi/0.1`.
|
||||||
|
- Added `--no-huge-pages` option, to disable huge pages support.
|
||||||
|
- [#62](https://github.com/xmrig/xmrig/issues/62) Don't send the login to the dev pool.
|
||||||
|
- Force reconnect if pool block miner IP address. helps switch to backup pool.
|
||||||
|
- Fixed: failed open default config file if path contains non English characters.
|
||||||
|
- Fixed: error occurred if try use unavailable stdin or stdout, regression since version 2.2.0.
|
||||||
|
- Fixed: message about huge pages support successfully enabled on Windows was not shown in release builds.
|
||||||
|
|
||||||
|
# v2.2.1
|
||||||
|
- Fixed [terminal issues](https://github.com/xmrig/xmrig-proxy/issues/2#issuecomment-319914085) after exit on Linux and OS X.
|
||||||
|
|
||||||
|
# v2.2.0
|
||||||
|
- [#46](https://github.com/xmrig/xmrig/issues/46) Restored config file support. Now possible use multiple config files and combine with command line options also added support for default config.
|
||||||
|
- Improved colors support on Windows, now used uv_tty, legacy code removed.
|
||||||
|
- QuickEdit Mode now disabled on Windows.
|
||||||
|
- Added interactive commands in console window:: **h**ashrate, **p**ause, **r**esume.
|
||||||
|
- Fixed autoconf mode for AMD FX CPUs.
|
||||||
|
|
||||||
|
# v2.1.0
|
||||||
|
- [#40](https://github.com/xmrig/xmrig/issues/40)
|
||||||
|
Improved miner shutdown, fixed crash on exit for Linux and OS X.
|
||||||
|
- Fixed, login request was contain malformed JSON if username or password has some special characters for example `\`.
|
||||||
|
- [#220](https://github.com/fireice-uk/xmr-stak-cpu/pull/220) Better support for Round Robin DNS, IP address now always chosen randomly instead of stuck on first one.
|
||||||
|
- Changed donation address, new [xmrig-proxy](https://github.com/xmrig/xmrig-proxy) is coming soon.
|
||||||
|
|
||||||
|
# v2.0.2
|
||||||
|
- Better deal with possible duplicate jobs from pool, show warning and ignore duplicates.
|
||||||
|
- For Windows builds libuv updated to version 1.13.1 and gcc to 7.1.0.
|
||||||
|
|
||||||
|
# v2.0.1
|
||||||
|
- [#27](https://github.com/xmrig/xmrig/issues/27) Fixed possibility crash on 32bit systems.
|
||||||
|
|
||||||
|
# v2.0.0
|
||||||
|
- Option `--backup-url` removed, instead now possibility specify multiple pools for example: `-o example1.com:3333 -u user1 -p password1 -k -o example2.com:5555 -u user2 -o example3.com:4444 -u user3`
|
||||||
|
- [#15](https://github.com/xmrig/xmrig/issues/15) Added option `-l, --log-file=FILE` to write log to file.
|
||||||
|
- [#15](https://github.com/xmrig/xmrig/issues/15) Added option `-S, --syslog` to use syslog for logging, Linux only.
|
||||||
|
- [#18](https://github.com/xmrig/xmrig/issues/18) Added nice messages for accepted/rejected shares with diff and network latency.
|
||||||
|
- [#20](https://github.com/xmrig/xmrig/issues/20) Fixed `--cpu-affinity` for more than 32 threads.
|
||||||
|
- Fixed Windows XP support.
|
||||||
|
- Fixed regression, option `--no-color` was not fully disable colored output.
|
||||||
|
- Show resolved pool IP address in miner output.
|
||||||
|
|
||||||
|
# v1.0.1
|
||||||
|
- Fix broken software AES implementation, app has crashed if CPU not support AES-NI, only version 1.0.0 affected.
|
||||||
|
|
||||||
|
# v1.0.0
|
||||||
|
- Miner complete rewritten in C++ with libuv.
|
||||||
|
- This version should be fully compatible (except config file) with previos versions, many new nice features will come in next versions.
|
||||||
|
- This is still beta. If you found regression, stability or perfomance issues or have an idea for new feature please fell free to open new [issue](https://github.com/xmrig/xmrig/issues/new).
|
||||||
|
- Added new option `--print-time=N`, print hashrate report every N seconds.
|
||||||
|
- New hashrate reports, by default every 60 secons.
|
||||||
|
- Added Microsoft Visual C++ 2015 and 2017 support.
|
||||||
|
- Removed dependency on libcurl.
|
||||||
|
- To compile this version from source please switch to [dev](https://github.com/xmrig/xmrig/tree/dev) branch.
|
||||||
|
|
||||||
|
# v0.8.2
|
||||||
|
- Fixed L2 cache size detection for AMD CPUs (Bulldozer/Piledriver/Steamroller/Excavator architecture).
|
||||||
|
|
||||||
|
# v0.8.2
|
||||||
|
- Fixed L2 cache size detection for AMD CPUs (Bulldozer/Piledriver/Steamroller/Excavator architecture).
|
||||||
|
- Fixed gcc 7.1 support.
|
||||||
|
|
||||||
|
# v0.8.1
|
||||||
|
- Added nicehash support, detects automaticaly by pool URL, for example `cryptonight.eu.nicehash.com:3355` or manually via option `--nicehash`.
|
||||||
|
|
||||||
|
# v0.8.0
|
||||||
|
- Added double hash mode, also known as lower power mode. `--av=2` and `--av=4`.
|
||||||
|
- Added smart automatic CPU configuration. Default threads count now depends on size of the L3 cache of CPU.
|
||||||
|
- Added CryptoNight-Lite support for AEON `-a cryptonight-lite`.
|
||||||
|
- Added `--max-cpu-usage` option for auto CPU configuration mode.
|
||||||
|
- Added `--safe` option for adjust threads and algorithm variations to current CPU.
|
||||||
|
- No more manual steps to enable huge pages on Windows. XMRig will do it automatically.
|
||||||
|
- Removed BMI2 algorithm variation.
|
||||||
|
- Removed default pool URL.
|
||||||
|
|
||||||
|
# v0.6.0
|
||||||
|
- Added automatic cryptonight self test.
|
||||||
|
- New software AES algorithm variation. Will be automatically selected if cpu not support AES-NI.
|
||||||
|
- Added 32 bit builds.
|
||||||
|
- Documented [algorithm variations](https://github.com/xmrig/xmrig#algorithm-variations).
|
||||||
|
|
||||||
|
# v0.5.0
|
||||||
|
- Initial public release.
|
||||||
70
doc/CPU.md
70
doc/CPU.md
@@ -9,6 +9,7 @@ Example below demonstrate all primary ideas of flexible profiles configuration:
|
|||||||
* `"rx/wow"` Exact match to algorithm `rx/wow`, defined 4 threads without CPU affinity.
|
* `"rx/wow"` Exact match to algorithm `rx/wow`, defined 4 threads without CPU affinity.
|
||||||
* `"cn"` Default failback profile for all `cn/*` algorithms, defined 2 threads with CPU affinity, another failback profiles is `cn-lite`, `cn-heavy` and `rx`.
|
* `"cn"` Default failback profile for all `cn/*` algorithms, defined 2 threads with CPU affinity, another failback profiles is `cn-lite`, `cn-heavy` and `rx`.
|
||||||
* `"cn-lite"` Default failback profile for all `cn-lite/*` algorithms, defined 2 double threads with CPU affinity.
|
* `"cn-lite"` Default failback profile for all `cn-lite/*` algorithms, defined 2 double threads with CPU affinity.
|
||||||
|
* `"cn-pico"` Alternative short object format.
|
||||||
* `"custom-profile"` Custom user defined profile.
|
* `"custom-profile"` Custom user defined profile.
|
||||||
* `"*"` Failback profile for all unhandled by other profiles algorithms.
|
* `"*"` Failback profile for all unhandled by other profiles algorithms.
|
||||||
* `"cn/r"` Exact match, alias to profile `custom-profile`.
|
* `"cn/r"` Exact match, alias to profile `custom-profile`.
|
||||||
@@ -22,41 +23,57 @@ Example below demonstrate all primary ideas of flexible profiles configuration:
|
|||||||
"hw-aes": null,
|
"hw-aes": null,
|
||||||
"priority": null,
|
"priority": null,
|
||||||
"asm": true,
|
"asm": true,
|
||||||
"rx/wow": [
|
"rx/wow": [-1, -1, -1, -1],
|
||||||
-1,
|
|
||||||
-1,
|
|
||||||
-1,
|
|
||||||
-1,
|
|
||||||
],
|
|
||||||
"cn": [
|
"cn": [
|
||||||
0,
|
[1, 0],
|
||||||
2
|
[1, 2]
|
||||||
],
|
],
|
||||||
"cn-lite": [
|
"cn-lite": [
|
||||||
{
|
[2, 0],
|
||||||
"intensity": 2,
|
[2, 2]
|
||||||
"affinity": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"intensity": 2,
|
|
||||||
"affinity": 2
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"custom-profile": [
|
|
||||||
0,
|
|
||||||
2,
|
|
||||||
],
|
|
||||||
"*": [
|
|
||||||
-1
|
|
||||||
],
|
],
|
||||||
|
"cn-pico": {
|
||||||
|
"intensity": 2,
|
||||||
|
"threads": 8,
|
||||||
|
"affinity": -1
|
||||||
|
},
|
||||||
|
"custom-profile": [0, 2],
|
||||||
|
"*": [-1],
|
||||||
"cn/r": "custom-profile",
|
"cn/r": "custom-profile",
|
||||||
"cn/0": false
|
"cn/0": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Intensity
|
## Threads definition
|
||||||
This option was known as `low_power_mode`, possible values is range from 1 to 5, for convinient if value 1 used, possible omit this option and specify CPU thread config by only one number: CPU affinity, instead of object.
|
Threads can be defined in 3 formats.
|
||||||
|
|
||||||
|
#### Array format
|
||||||
|
```json
|
||||||
|
[
|
||||||
|
[1, 0],
|
||||||
|
[1, 2],
|
||||||
|
[1, -1],
|
||||||
|
[2, -1]
|
||||||
|
]
|
||||||
|
```
|
||||||
|
Each line represent one thread, first element is intensity, this option was known as `low_power_mode`, possible values is range from 1 to 5, second element is CPU affinity, special value `-1` means no affinity.
|
||||||
|
|
||||||
|
#### Short array format
|
||||||
|
```json
|
||||||
|
[-1, -1, -1, -1]
|
||||||
|
```
|
||||||
|
Each number represent one thread and means CPU affinity, this is default format for algorithm with maximum intensity 1, currently it all RandomX variants and cryptonight-gpu.
|
||||||
|
|
||||||
|
#### Short object format
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"intensity": 2,
|
||||||
|
"threads": 8,
|
||||||
|
"affinity": -1
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Internal format, but can be user defined.
|
||||||
|
|
||||||
## Shared options
|
## Shared options
|
||||||
|
|
||||||
@@ -74,3 +91,6 @@ Mining threads priority, value from `1` (lowest priority) to `5` (highest possib
|
|||||||
|
|
||||||
#### `asm`
|
#### `asm`
|
||||||
Enable/configure or disable ASM optimizations. Possible values: `true`, `false`, `"intel"`, `"ryzen"`, `"bulldozer"`.
|
Enable/configure or disable ASM optimizations. Possible values: `true`, `false`, `"intel"`, `"ryzen"`, `"bulldozer"`.
|
||||||
|
|
||||||
|
#### `argon2-impl` (since v3.1.0)
|
||||||
|
Allow override automatically detected Argon2 implementation, this option added mostly for debug purposes, default value `null` means autodetect. Other possible values: `"x86_64"`, `"SSE2"`, `"SSSE3"`, `"XOP"`, `"AVX2"`, `"AVX-512F"`. Manual selection has no safe guards, if you CPU not support required instuctions, miner will crash.
|
||||||
|
|||||||
39
doc/build/CMAKE_OPTIONS.md
vendored
Normal file
39
doc/build/CMAKE_OPTIONS.md
vendored
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
# CMake options
|
||||||
|
This document contains list of useful cmake options.
|
||||||
|
|
||||||
|
## Algorithms
|
||||||
|
|
||||||
|
* **`-DWITH_CN_LITE=OFF`** disable all CryptoNight-Lite algorithms (`cn-lite/0`, `cn-lite/1`).
|
||||||
|
* **`-DWITH_CN_HEAVY=OFF`** disable all CryptoNight-Heavy algorithms (`cn-heavy/0`, `cn-heavy/xhv`, `cn-heavy/tube`).
|
||||||
|
* **`-DWITH_CN_PICO=OFF`** disable CryptoNight-Pico algorithm (`cn-pico`).
|
||||||
|
* **`-DWITH_CN_GPU=OFF`** disable CryptoNight-GPU algorithm (`cn/gpu`).
|
||||||
|
* **`-DWITH_RANDOMX=OFF`** disable RandomX algorithms (`rx/loki`, `rx/wow`).
|
||||||
|
* **`-DWITH_ARGON2=OFF`** disable Argon2 algorithms (`argon2/chukwa`, `argon2/wrkz`).
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
* **`-DWITH_HWLOC=OFF`**
|
||||||
|
disable [hwloc](https://github.com/xmrig/xmrig/issues/1077) support.
|
||||||
|
Disabling this feature is not recommended in most cases.
|
||||||
|
This feature add external dependency to libhwloc (1.10.0+) (except MSVC builds).
|
||||||
|
* **`-DWITH_LIBCPUID=OFF`** disable built in libcpuid support, this feature always disabled if hwloc enabled, if both hwloc and libcpuid disabled auto configuration for CPU will very limited.
|
||||||
|
* **`-DWITH_HTTP=OFF`** disable built in HTTP support, this feature used for HTTP API and daemon (solo mining) support.
|
||||||
|
* **`-DWITH_TLS=OFF`** disable SSL/TLS support (secure connections to pool). This feature add external dependency to OpenSSL.
|
||||||
|
* **`-DWITH_ASM=OFF`** disable assembly optimizations for modern CryptoNight algorithms.
|
||||||
|
* **`-DWITH_EMBEDDED_CONFIG=ON`** Enable [embedded](https://github.com/xmrig/xmrig/issues/957) config support.
|
||||||
|
|
||||||
|
## Debug options
|
||||||
|
|
||||||
|
* **`-DWITH_DEBUG_LOG=ON`** enable debug log (mostly network requests).
|
||||||
|
* **`-DHWLOC_DEBUG=ON`** enable some debug log for hwloc.
|
||||||
|
* **`-DCMAKE_BUILD_TYPE=Debug`** enable debug build, only useful for investigate crashes, this option slow down miner.
|
||||||
|
|
||||||
|
## Special build options
|
||||||
|
|
||||||
|
* **`-DXMRIG_DEPS=<path>`** path to precompiled dependensices https://github.com/xmrig/xmrig-deps
|
||||||
|
* **`-DARM_TARGET=<number>`** override ARM target, possible values `7` (ARMv7) and `8` (ARMv8).
|
||||||
|
* **`-DUV_INCLUDE_DIR=<path>`** custom path to libuv headers.
|
||||||
|
* **`-DUV_LIBRARY=<path>`** custom path to libuv library.
|
||||||
|
* **`-DHWLOC_INCLUDE_DIR=<path>`** custom path to hwloc headers.
|
||||||
|
* **`-DHWLOC_LIBRARY=<path>`** custom path to hwloc library.
|
||||||
|
* **`-DOPENSSL_ROOT_DIR=<path>`** custom path to OpenSSL.
|
||||||
BIN
doc/screenshot.png
Normal file
BIN
doc/screenshot.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 33 KiB |
86
doc/topology/AMD_FX_8320_windows_2_0_4.xml
Normal file
86
doc/topology/AMD_FX_8320_windows_2_0_4.xml
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE topology SYSTEM "hwloc2.dtd">
|
||||||
|
<topology version="2.0">
|
||||||
|
<object type="Machine" os_index="0" cpuset="0x000000ff" complete_cpuset="0x000000ff" allowed_cpuset="0x000000ff" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" gp_index="1">
|
||||||
|
<info name="Backend" value="Windows"/>
|
||||||
|
<info name="hwlocVersion" value="2.0.4"/>
|
||||||
|
<info name="ProcessName" value="lstopo.exe"/>
|
||||||
|
<object type="Package" cpuset="0x000000ff" complete_cpuset="0x000000ff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="2">
|
||||||
|
<info name="CPUVendor" value="AuthenticAMD"/>
|
||||||
|
<info name="CPUFamilyNumber" value="21"/>
|
||||||
|
<info name="CPUModelNumber" value="2"/>
|
||||||
|
<info name="CPUModel" value="AMD FX(tm)-8320 Eight-Core Processor "/>
|
||||||
|
<info name="CPUStepping" value="0"/>
|
||||||
|
<object type="NUMANode" os_index="0" cpuset="0x000000ff" complete_cpuset="0x000000ff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="24" local_memory="7033581568">
|
||||||
|
<page_type size="4096" count="0"/>
|
||||||
|
</object>
|
||||||
|
<object type="L3Cache" cpuset="0x000000ff" complete_cpuset="0x000000ff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="7" cache_size="8388608" depth="3" cache_linesize="64" cache_associativity="64" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L2Cache" cpuset="0x00000003" complete_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="6" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00000003" complete_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="5" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000003" complete_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="3">
|
||||||
|
<object type="L1Cache" cpuset="0x00000001" complete_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="4" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="26"/>
|
||||||
|
</object>
|
||||||
|
<object type="L1Cache" cpuset="0x00000002" complete_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="8" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="27"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x0000000c" complete_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="12" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x0000000c" complete_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="11" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x0000000c" complete_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="9">
|
||||||
|
<object type="L1Cache" cpuset="0x00000004" complete_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="10" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="28"/>
|
||||||
|
</object>
|
||||||
|
<object type="L1Cache" cpuset="0x00000008" complete_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="13" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="29"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000030" complete_cpuset="0x00000030" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="17" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00000030" complete_cpuset="0x00000030" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="16" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000030" complete_cpuset="0x00000030" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="14">
|
||||||
|
<object type="L1Cache" cpuset="0x00000010" complete_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="15" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="30"/>
|
||||||
|
</object>
|
||||||
|
<object type="L1Cache" cpuset="0x00000020" complete_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="18" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="31"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x000000c0" complete_cpuset="0x000000c0" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="22" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x000000c0" complete_cpuset="0x000000c0" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="21" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x000000c0" complete_cpuset="0x000000c0" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="19">
|
||||||
|
<object type="L1Cache" cpuset="0x00000040" complete_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="20" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="32"/>
|
||||||
|
</object>
|
||||||
|
<object type="L1Cache" cpuset="0x00000080" complete_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="23" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="33"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</topology>
|
||||||
234
doc/topology/AMD_Opteron_6272_x4_N8_linux_2_0_4_LXC.xml
Normal file
234
doc/topology/AMD_Opteron_6272_x4_N8_linux_2_0_4_LXC.xml
Normal file
@@ -0,0 +1,234 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE topology SYSTEM "hwloc2.dtd">
|
||||||
|
<topology version="2.0">
|
||||||
|
<object type="Machine" os_index="0" cpuset="0x0000ffff" complete_cpuset="0xffffffff,0xffffffff" allowed_cpuset="0x0000ffff" nodeset="0x000000ff" complete_nodeset="0x000000ff" allowed_nodeset="0x000000ff" gp_index="1">
|
||||||
|
<info name="DMIProductName" value="H8QG6"/>
|
||||||
|
<info name="DMIProductVersion" value="1234567890"/>
|
||||||
|
<info name="DMIProductSerial" value="1234567890"/>
|
||||||
|
<info name="DMIProductUUID" value="47513848-0036-2500-9058-002590582E10"/>
|
||||||
|
<info name="DMIBoardVendor" value="Supermicro"/>
|
||||||
|
<info name="DMIBoardName" value="H8QG6"/>
|
||||||
|
<info name="DMIBoardVersion" value="1234567890"/>
|
||||||
|
<info name="DMIBoardSerial" value="WM1AS70308"/>
|
||||||
|
<info name="DMIBoardAssetTag" value="1234567890"/>
|
||||||
|
<info name="DMIChassisVendor" value="Supermicro"/>
|
||||||
|
<info name="DMIChassisType" value="17"/>
|
||||||
|
<info name="DMIChassisVersion" value="1234567890"/>
|
||||||
|
<info name="DMIChassisSerial" value="1234567890."/>
|
||||||
|
<info name="DMIChassisAssetTag" value="1234567890"/>
|
||||||
|
<info name="DMIBIOSVendor" value="American Megatrends Inc."/>
|
||||||
|
<info name="DMIBIOSVersion" value="3.5 "/>
|
||||||
|
<info name="DMIBIOSDate" value="12/16/2013"/>
|
||||||
|
<info name="DMISysVendor" value="Supermicro"/>
|
||||||
|
<info name="Backend" value="Linux"/>
|
||||||
|
<info name="LinuxCgroup" value="/"/>
|
||||||
|
<info name="OSName" value="Linux"/>
|
||||||
|
<info name="OSRelease" value="4.15.18-17-pve"/>
|
||||||
|
<info name="OSVersion" value="#1 SMP PVE 4.15.18-43 (Tue, 25 Jun 2019 17:59:49 +0200)"/>
|
||||||
|
<info name="HostName" value="host"/>
|
||||||
|
<info name="Architecture" value="x86_64"/>
|
||||||
|
<info name="hwlocVersion" value="2.0.4"/>
|
||||||
|
<info name="ProcessName" value="xmrig"/>
|
||||||
|
<object type="Package" os_index="0" cpuset="0x0000ffff" complete_cpuset="0x0000ffff" nodeset="0x00000003" complete_nodeset="0x00000003" gp_index="2">
|
||||||
|
<info name="CPUVendor" value="AuthenticAMD"/>
|
||||||
|
<info name="CPUFamilyNumber" value="21"/>
|
||||||
|
<info name="CPUModelNumber" value="1"/>
|
||||||
|
<info name="CPUModel" value="AMD Opteron(TM) Processor 6272 "/>
|
||||||
|
<info name="CPUStepping" value="2"/>
|
||||||
|
<object type="L3Cache" cpuset="0x000000ff" complete_cpuset="0x000000ff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="7" cache_size="6291456" depth="3" cache_linesize="64" cache_associativity="48" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="NUMANode" os_index="0" cpuset="0x000000ff" complete_cpuset="0x000000ff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="238" local_memory="33751842816">
|
||||||
|
<page_type size="4096" count="7406660"/>
|
||||||
|
<page_type size="2097152" count="1628"/>
|
||||||
|
<page_type size="1073741824" count="0"/>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000003" complete_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="6" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000001" complete_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="5" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="3">
|
||||||
|
<object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="4"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L1Cache" cpuset="0x00000002" complete_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="10" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="8">
|
||||||
|
<object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="9"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x0000000c" complete_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="14" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000004" complete_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="13" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="11">
|
||||||
|
<object type="PU" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="12"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L1Cache" cpuset="0x00000008" complete_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="17" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="15">
|
||||||
|
<object type="PU" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="16"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000030" complete_cpuset="0x00000030" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="21" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000010" complete_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="20" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="18">
|
||||||
|
<object type="PU" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="19"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L1Cache" cpuset="0x00000020" complete_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="24" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="22">
|
||||||
|
<object type="PU" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="23"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x000000c0" complete_cpuset="0x000000c0" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="28" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000040" complete_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="27" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="25">
|
||||||
|
<object type="PU" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="26"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L1Cache" cpuset="0x00000080" complete_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="31" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="29">
|
||||||
|
<object type="PU" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="30"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L3Cache" cpuset="0x0000ff00" complete_cpuset="0x0000ff00" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="36" cache_size="6291456" depth="3" cache_linesize="64" cache_associativity="48" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="NUMANode" os_index="1" cpuset="0x0000ff00" complete_cpuset="0x0000ff00" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="239" local_memory="33821167616">
|
||||||
|
<page_type size="4096" count="7437921"/>
|
||||||
|
<page_type size="2097152" count="1600"/>
|
||||||
|
<page_type size="1073741824" count="0"/>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000300" complete_cpuset="0x00000300" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="35" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000100" complete_cpuset="0x00000100" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="34" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="0" cpuset="0x00000100" complete_cpuset="0x00000100" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="32">
|
||||||
|
<object type="PU" os_index="8" cpuset="0x00000100" complete_cpuset="0x00000100" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="33"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L1Cache" cpuset="0x00000200" complete_cpuset="0x00000200" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="39" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="1" cpuset="0x00000200" complete_cpuset="0x00000200" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="37">
|
||||||
|
<object type="PU" os_index="9" cpuset="0x00000200" complete_cpuset="0x00000200" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="38"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000c00" complete_cpuset="0x00000c00" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="43" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000400" complete_cpuset="0x00000400" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="42" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="2" cpuset="0x00000400" complete_cpuset="0x00000400" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="40">
|
||||||
|
<object type="PU" os_index="10" cpuset="0x00000400" complete_cpuset="0x00000400" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="41"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L1Cache" cpuset="0x00000800" complete_cpuset="0x00000800" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="46" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="3" cpuset="0x00000800" complete_cpuset="0x00000800" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="44">
|
||||||
|
<object type="PU" os_index="11" cpuset="0x00000800" complete_cpuset="0x00000800" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="45"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00003000" complete_cpuset="0x00003000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="50" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00001000" complete_cpuset="0x00001000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="49" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="4" cpuset="0x00001000" complete_cpuset="0x00001000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="47">
|
||||||
|
<object type="PU" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="48"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L1Cache" cpuset="0x00002000" complete_cpuset="0x00002000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="53" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="5" cpuset="0x00002000" complete_cpuset="0x00002000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="51">
|
||||||
|
<object type="PU" os_index="13" cpuset="0x00002000" complete_cpuset="0x00002000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="52"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x0000c000" complete_cpuset="0x0000c000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="57" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00004000" complete_cpuset="0x00004000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="56" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="6" cpuset="0x00004000" complete_cpuset="0x00004000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="54">
|
||||||
|
<object type="PU" os_index="14" cpuset="0x00004000" complete_cpuset="0x00004000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="55"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L1Cache" cpuset="0x00008000" complete_cpuset="0x00008000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="60" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="7" cpuset="0x00008000" complete_cpuset="0x00008000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="58">
|
||||||
|
<object type="PU" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="59"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Package" os_index="1" cpuset="0x0" complete_cpuset="0xffff0000" nodeset="0x0000000c" complete_nodeset="0x0000000c" gp_index="61">
|
||||||
|
<object type="L3Cache" cpuset="0x0" complete_cpuset="0x00ff0000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="66" cache_size="6291456" depth="3" cache_linesize="64" cache_associativity="48" cache_type="0">
|
||||||
|
<object type="NUMANode" os_index="2" cpuset="0x0" complete_cpuset="0x00ff0000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="240" local_memory="33821171712">
|
||||||
|
<page_type size="4096" count="7642722"/>
|
||||||
|
<page_type size="2097152" count="1200"/>
|
||||||
|
<page_type size="1073741824" count="0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L3Cache" cpuset="0x0" complete_cpuset="0xff000000" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="95" cache_size="6291456" depth="3" cache_linesize="64" cache_associativity="48" cache_type="0">
|
||||||
|
<object type="NUMANode" os_index="3" cpuset="0x0" complete_cpuset="0xff000000" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="241" local_memory="33821167616">
|
||||||
|
<page_type size="4096" count="7424097"/>
|
||||||
|
<page_type size="2097152" count="1627"/>
|
||||||
|
<page_type size="1073741824" count="0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Package" os_index="2" cpuset="0x0" complete_cpuset="0x0000ffff,0x0" nodeset="0x00000030" complete_nodeset="0x00000030" gp_index="120">
|
||||||
|
<object type="L3Cache" cpuset="0x0" complete_cpuset="0x000000ff,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" gp_index="125" cache_size="6291456" depth="3" cache_linesize="64" cache_associativity="48" cache_type="0">
|
||||||
|
<object type="NUMANode" os_index="4" cpuset="0x0" complete_cpuset="0x000000ff,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" gp_index="242" local_memory="33821171712">
|
||||||
|
<page_type size="4096" count="7936098"/>
|
||||||
|
<page_type size="2097152" count="627"/>
|
||||||
|
<page_type size="1073741824" count="0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L3Cache" cpuset="0x0" complete_cpuset="0x0000ff00,0x0" nodeset="0x00000020" complete_nodeset="0x00000020" gp_index="154" cache_size="6291456" depth="3" cache_linesize="64" cache_associativity="48" cache_type="0">
|
||||||
|
<object type="NUMANode" os_index="5" cpuset="0x0" complete_cpuset="0x0000ff00,0x0" nodeset="0x00000020" complete_nodeset="0x00000020" gp_index="243" local_memory="33798971392">
|
||||||
|
<page_type size="4096" count="7421238"/>
|
||||||
|
<page_type size="2097152" count="1622"/>
|
||||||
|
<page_type size="1073741824" count="0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Package" os_index="3" cpuset="0x0" complete_cpuset="0xffff0000,0x0" nodeset="0x000000c0" complete_nodeset="0x000000c0" gp_index="179">
|
||||||
|
<object type="L3Cache" cpuset="0x0" complete_cpuset="0x00ff0000,0x0" nodeset="0x00000040" complete_nodeset="0x00000040" gp_index="184" cache_size="6291456" depth="3" cache_linesize="64" cache_associativity="48" cache_type="0">
|
||||||
|
<object type="NUMANode" os_index="6" cpuset="0x0" complete_cpuset="0x00ff0000,0x0" nodeset="0x00000040" complete_nodeset="0x00000040" gp_index="244" local_memory="33821171712">
|
||||||
|
<page_type size="4096" count="8097890"/>
|
||||||
|
<page_type size="2097152" count="311"/>
|
||||||
|
<page_type size="1073741824" count="0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L3Cache" cpuset="0x0" complete_cpuset="0xff000000,0x0" nodeset="0x00000080" complete_nodeset="0x00000080" gp_index="213" cache_size="6291456" depth="3" cache_linesize="64" cache_associativity="48" cache_type="0">
|
||||||
|
<object type="NUMANode" os_index="7" cpuset="0x0" complete_cpuset="0xff000000,0x0" nodeset="0x00000080" complete_nodeset="0x00000080" gp_index="245" local_memory="33803800576">
|
||||||
|
<page_type size="4096" count="7748561"/>
|
||||||
|
<page_type size="2097152" count="985"/>
|
||||||
|
<page_type size="1073741824" count="0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<distances2 type="NUMANode" nbobjs="8" kind="5" indexing="os">
|
||||||
|
<indexes length="16">0 1 2 3 4 5 6 7 </indexes>
|
||||||
|
<u64values length="30">10 16 16 22 16 22 16 22 16 10 </u64values>
|
||||||
|
<u64values length="30">22 16 22 16 22 16 16 22 10 16 </u64values>
|
||||||
|
<u64values length="30">16 22 16 22 22 16 16 10 22 16 </u64values>
|
||||||
|
<u64values length="30">22 16 16 22 16 22 10 16 16 22 </u64values>
|
||||||
|
<u64values length="30">22 16 22 16 16 10 22 16 16 22 </u64values>
|
||||||
|
<u64values length="30">16 22 16 22 10 16 22 16 22 16 </u64values>
|
||||||
|
<u64values length="12">22 16 16 10 </u64values>
|
||||||
|
</distances2>
|
||||||
|
</topology>
|
||||||
294
doc/topology/AMD_Opteron_6278_x2_UMA_windows_2_0_4.xml
Normal file
294
doc/topology/AMD_Opteron_6278_x2_UMA_windows_2_0_4.xml
Normal file
@@ -0,0 +1,294 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE topology SYSTEM "hwloc2.dtd">
|
||||||
|
<topology version="2.0">
|
||||||
|
<object type="Machine" os_index="0" cpuset="0xffffffff" complete_cpuset="0xffffffff" allowed_cpuset="0xffffffff" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" gp_index="1">
|
||||||
|
<info name="Backend" value="Windows"/>
|
||||||
|
<info name="hwlocVersion" value="2.0.4"/>
|
||||||
|
<info name="ProcessName" value="lstopo.exe"/>
|
||||||
|
<object type="NUMANode" os_index="0" cpuset="0xffffffff" complete_cpuset="0xffffffff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="88" local_memory="25865580544">
|
||||||
|
<page_type size="4096" count="0"/>
|
||||||
|
</object>
|
||||||
|
<object type="Package" cpuset="0x0000ffff" complete_cpuset="0x0000ffff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="2">
|
||||||
|
<info name="CPUVendor" value="AuthenticAMD"/>
|
||||||
|
<info name="CPUFamilyNumber" value="21"/>
|
||||||
|
<info name="CPUModelNumber" value="1"/>
|
||||||
|
<info name="CPUModel" value="AMD Opteron(tm) Processor 6278 "/>
|
||||||
|
<info name="CPUStepping" value="2"/>
|
||||||
|
<object type="L3Cache" cpuset="0x000000ff" complete_cpuset="0x000000ff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="7" cache_size="6291456" depth="3" cache_linesize="64" cache_associativity="48" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L2Cache" cpuset="0x00000003" complete_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="6" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00000003" complete_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="5" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000003" complete_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="3">
|
||||||
|
<object type="L1Cache" cpuset="0x00000001" complete_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="4" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="91"/>
|
||||||
|
</object>
|
||||||
|
<object type="L1Cache" cpuset="0x00000002" complete_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="8" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="92"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x0000000c" complete_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="12" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x0000000c" complete_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="11" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x0000000c" complete_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="9">
|
||||||
|
<object type="L1Cache" cpuset="0x00000004" complete_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="10" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="93"/>
|
||||||
|
</object>
|
||||||
|
<object type="L1Cache" cpuset="0x00000008" complete_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="13" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="94"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000030" complete_cpuset="0x00000030" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="17" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00000030" complete_cpuset="0x00000030" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="16" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000030" complete_cpuset="0x00000030" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="14">
|
||||||
|
<object type="L1Cache" cpuset="0x00000010" complete_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="15" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="95"/>
|
||||||
|
</object>
|
||||||
|
<object type="L1Cache" cpuset="0x00000020" complete_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="18" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="96"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x000000c0" complete_cpuset="0x000000c0" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="22" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x000000c0" complete_cpuset="0x000000c0" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="21" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x000000c0" complete_cpuset="0x000000c0" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="19">
|
||||||
|
<object type="L1Cache" cpuset="0x00000040" complete_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="20" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="97"/>
|
||||||
|
</object>
|
||||||
|
<object type="L1Cache" cpuset="0x00000080" complete_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="23" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="98"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L3Cache" cpuset="0x0000ff00" complete_cpuset="0x0000ff00" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="28" cache_size="6291456" depth="3" cache_linesize="64" cache_associativity="48" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L2Cache" cpuset="0x00000300" complete_cpuset="0x00000300" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="27" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00000300" complete_cpuset="0x00000300" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="26" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000300" complete_cpuset="0x00000300" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="24">
|
||||||
|
<object type="L1Cache" cpuset="0x00000100" complete_cpuset="0x00000100" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="25" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="8" cpuset="0x00000100" complete_cpuset="0x00000100" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="99"/>
|
||||||
|
</object>
|
||||||
|
<object type="L1Cache" cpuset="0x00000200" complete_cpuset="0x00000200" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="29" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="9" cpuset="0x00000200" complete_cpuset="0x00000200" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="100"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000c00" complete_cpuset="0x00000c00" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="33" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00000c00" complete_cpuset="0x00000c00" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="32" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000c00" complete_cpuset="0x00000c00" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="30">
|
||||||
|
<object type="L1Cache" cpuset="0x00000400" complete_cpuset="0x00000400" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="31" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="10" cpuset="0x00000400" complete_cpuset="0x00000400" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="101"/>
|
||||||
|
</object>
|
||||||
|
<object type="L1Cache" cpuset="0x00000800" complete_cpuset="0x00000800" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="34" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="11" cpuset="0x00000800" complete_cpuset="0x00000800" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="102"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00003000" complete_cpuset="0x00003000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="38" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00003000" complete_cpuset="0x00003000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="37" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00003000" complete_cpuset="0x00003000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="35">
|
||||||
|
<object type="L1Cache" cpuset="0x00001000" complete_cpuset="0x00001000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="36" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="103"/>
|
||||||
|
</object>
|
||||||
|
<object type="L1Cache" cpuset="0x00002000" complete_cpuset="0x00002000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="39" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="13" cpuset="0x00002000" complete_cpuset="0x00002000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="104"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x0000c000" complete_cpuset="0x0000c000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="43" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x0000c000" complete_cpuset="0x0000c000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="42" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x0000c000" complete_cpuset="0x0000c000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="40">
|
||||||
|
<object type="L1Cache" cpuset="0x00004000" complete_cpuset="0x00004000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="41" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="14" cpuset="0x00004000" complete_cpuset="0x00004000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="105"/>
|
||||||
|
</object>
|
||||||
|
<object type="L1Cache" cpuset="0x00008000" complete_cpuset="0x00008000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="44" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="106"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Package" cpuset="0xffff0000" complete_cpuset="0xffff0000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="45">
|
||||||
|
<info name="CPUVendor" value="AuthenticAMD"/>
|
||||||
|
<info name="CPUFamilyNumber" value="21"/>
|
||||||
|
<info name="CPUModelNumber" value="1"/>
|
||||||
|
<info name="CPUModel" value="AMD Opteron(tm) Processor 6278 "/>
|
||||||
|
<info name="CPUStepping" value="2"/>
|
||||||
|
<object type="L3Cache" cpuset="0x00ff0000" complete_cpuset="0x00ff0000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="50" cache_size="6291456" depth="3" cache_linesize="64" cache_associativity="48" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L2Cache" cpuset="0x00030000" complete_cpuset="0x00030000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="49" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00030000" complete_cpuset="0x00030000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="48" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00030000" complete_cpuset="0x00030000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="46">
|
||||||
|
<object type="L1Cache" cpuset="0x00010000" complete_cpuset="0x00010000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="47" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="16" cpuset="0x00010000" complete_cpuset="0x00010000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="107"/>
|
||||||
|
</object>
|
||||||
|
<object type="L1Cache" cpuset="0x00020000" complete_cpuset="0x00020000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="51" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="17" cpuset="0x00020000" complete_cpuset="0x00020000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="108"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x000c0000" complete_cpuset="0x000c0000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="55" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x000c0000" complete_cpuset="0x000c0000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="54" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x000c0000" complete_cpuset="0x000c0000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="52">
|
||||||
|
<object type="L1Cache" cpuset="0x00040000" complete_cpuset="0x00040000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="53" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="18" cpuset="0x00040000" complete_cpuset="0x00040000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="109"/>
|
||||||
|
</object>
|
||||||
|
<object type="L1Cache" cpuset="0x00080000" complete_cpuset="0x00080000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="56" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="19" cpuset="0x00080000" complete_cpuset="0x00080000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="110"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00300000" complete_cpuset="0x00300000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="60" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00300000" complete_cpuset="0x00300000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="59" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00300000" complete_cpuset="0x00300000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="57">
|
||||||
|
<object type="L1Cache" cpuset="0x00100000" complete_cpuset="0x00100000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="58" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="20" cpuset="0x00100000" complete_cpuset="0x00100000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="111"/>
|
||||||
|
</object>
|
||||||
|
<object type="L1Cache" cpuset="0x00200000" complete_cpuset="0x00200000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="61" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="21" cpuset="0x00200000" complete_cpuset="0x00200000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="112"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00c00000" complete_cpuset="0x00c00000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="65" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00c00000" complete_cpuset="0x00c00000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="64" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00c00000" complete_cpuset="0x00c00000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="62">
|
||||||
|
<object type="L1Cache" cpuset="0x00400000" complete_cpuset="0x00400000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="63" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="22" cpuset="0x00400000" complete_cpuset="0x00400000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="113"/>
|
||||||
|
</object>
|
||||||
|
<object type="L1Cache" cpuset="0x00800000" complete_cpuset="0x00800000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="66" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="23" cpuset="0x00800000" complete_cpuset="0x00800000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="114"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L3Cache" cpuset="0xff000000" complete_cpuset="0xff000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="71" cache_size="6291456" depth="3" cache_linesize="64" cache_associativity="48" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L2Cache" cpuset="0x03000000" complete_cpuset="0x03000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="70" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x03000000" complete_cpuset="0x03000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="69" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x03000000" complete_cpuset="0x03000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="67">
|
||||||
|
<object type="L1Cache" cpuset="0x01000000" complete_cpuset="0x01000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="68" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="24" cpuset="0x01000000" complete_cpuset="0x01000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="115"/>
|
||||||
|
</object>
|
||||||
|
<object type="L1Cache" cpuset="0x02000000" complete_cpuset="0x02000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="72" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="25" cpuset="0x02000000" complete_cpuset="0x02000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="116"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x0c000000" complete_cpuset="0x0c000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="76" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x0c000000" complete_cpuset="0x0c000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="75" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x0c000000" complete_cpuset="0x0c000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="73">
|
||||||
|
<object type="L1Cache" cpuset="0x04000000" complete_cpuset="0x04000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="74" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="26" cpuset="0x04000000" complete_cpuset="0x04000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="117"/>
|
||||||
|
</object>
|
||||||
|
<object type="L1Cache" cpuset="0x08000000" complete_cpuset="0x08000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="77" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="27" cpuset="0x08000000" complete_cpuset="0x08000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="118"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x30000000" complete_cpuset="0x30000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="81" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x30000000" complete_cpuset="0x30000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="80" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x30000000" complete_cpuset="0x30000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="78">
|
||||||
|
<object type="L1Cache" cpuset="0x10000000" complete_cpuset="0x10000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="79" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="28" cpuset="0x10000000" complete_cpuset="0x10000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="119"/>
|
||||||
|
</object>
|
||||||
|
<object type="L1Cache" cpuset="0x20000000" complete_cpuset="0x20000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="82" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="29" cpuset="0x20000000" complete_cpuset="0x20000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="120"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0xc0000000" complete_cpuset="0xc0000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="86" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0xc0000000" complete_cpuset="0xc0000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="85" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0xc0000000" complete_cpuset="0xc0000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="83">
|
||||||
|
<object type="L1Cache" cpuset="0x40000000" complete_cpuset="0x40000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="84" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="30" cpuset="0x40000000" complete_cpuset="0x40000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="121"/>
|
||||||
|
</object>
|
||||||
|
<object type="L1Cache" cpuset="0x80000000" complete_cpuset="0x80000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="87" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="PU" os_index="31" cpuset="0x80000000" complete_cpuset="0x80000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="122"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</topology>
|
||||||
550
doc/topology/AMD_Opteron_6348_x4_N8_linux_1_11_2.xml
Normal file
550
doc/topology/AMD_Opteron_6348_x4_N8_linux_1_11_2.xml
Normal file
@@ -0,0 +1,550 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE topology SYSTEM "hwloc.dtd">
|
||||||
|
<topology>
|
||||||
|
<object type="Machine" os_index="0" cpuset="0x0000ffff,0xffffffff" complete_cpuset="0x0000ffff,0xffffffff" online_cpuset="0x0000ffff,0xffffffff" allowed_cpuset="0x0000ffff,0xffffffff" nodeset="0x000000ff" complete_nodeset="0x000000ff" allowed_nodeset="0x000000ff">
|
||||||
|
<page_type size="4096" count="0"/>
|
||||||
|
<page_type size="2097152" count="0"/>
|
||||||
|
<page_type size="1073741824" count="0"/>
|
||||||
|
<info name="DMIProductName" value="PowerEdge R815"/>
|
||||||
|
<info name="DMIProductVersion" value=""/>
|
||||||
|
<info name="DMIBoardVendor" value="Dell Inc."/>
|
||||||
|
<info name="DMIBoardName" value="0W13NR"/>
|
||||||
|
<info name="DMIBoardVersion" value="A00"/>
|
||||||
|
<info name="DMIBoardAssetTag" value=""/>
|
||||||
|
<info name="DMIChassisVendor" value="Dell Inc."/>
|
||||||
|
<info name="DMIChassisType" value="23"/>
|
||||||
|
<info name="DMIChassisVersion" value=""/>
|
||||||
|
<info name="DMIChassisAssetTag" value="2452806 "/>
|
||||||
|
<info name="DMIBIOSVendor" value="Dell Inc."/>
|
||||||
|
<info name="DMIBIOSVersion" value="3.2.2"/>
|
||||||
|
<info name="DMIBIOSDate" value="09/15/2014"/>
|
||||||
|
<info name="DMISysVendor" value="Dell Inc."/>
|
||||||
|
<info name="Backend" value="Linux"/>
|
||||||
|
<info name="LinuxCgroup" value="/"/>
|
||||||
|
<info name="OSName" value="Linux"/>
|
||||||
|
<info name="OSRelease" value="4.15.0-55-generic"/>
|
||||||
|
<info name="OSVersion" value="#60~16.04.2-Ubuntu SMP Thu Jul 4 09:03:09 UTC 2019"/>
|
||||||
|
<info name="HostName" value="host"/>
|
||||||
|
<info name="Architecture" value="x86_64"/>
|
||||||
|
<info name="hwlocVersion" value="1.11.2"/>
|
||||||
|
<info name="ProcessName" value="xmrig"/>
|
||||||
|
<distances nbobjs="8" relative_depth="2" latency_base="10.000000">
|
||||||
|
<latency value="1.000000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.000000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="1.000000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.000000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.000000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.000000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.000000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.000000"/>
|
||||||
|
</distances>
|
||||||
|
<object type="Package" os_index="0" cpuset="0x00000fff" complete_cpuset="0x00000fff" online_cpuset="0x00000fff" allowed_cpuset="0x00000fff" nodeset="0x00000003" complete_nodeset="0x00000003" allowed_nodeset="0x00000003">
|
||||||
|
<info name="CPUVendor" value="AuthenticAMD"/>
|
||||||
|
<info name="CPUFamilyNumber" value="21"/>
|
||||||
|
<info name="CPUModelNumber" value="2"/>
|
||||||
|
<info name="CPUModel" value="AMD Opteron(tm) Processor 6348"/>
|
||||||
|
<info name="CPUStepping" value="0"/>
|
||||||
|
<object type="NUMANode" os_index="0" cpuset="0x0000003f" complete_cpuset="0x0000003f" online_cpuset="0x0000003f" allowed_cpuset="0x0000003f" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" local_memory="4148948992">
|
||||||
|
<page_type size="4096" count="398527"/>
|
||||||
|
<page_type size="2097152" count="1200"/>
|
||||||
|
<page_type size="1073741824" count="0"/>
|
||||||
|
<object type="Cache" cpuset="0x0000003f" complete_cpuset="0x0000003f" online_cpuset="0x0000003f" allowed_cpuset="0x0000003f" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="8388608" depth="3" cache_linesize="64" cache_associativity="64" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
|
||||||
|
<object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
|
||||||
|
<object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x0000000c" complete_cpuset="0x0000000c" online_cpuset="0x0000000c" allowed_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
|
||||||
|
<object type="PU" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
|
||||||
|
<object type="PU" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000030" complete_cpuset="0x00000030" online_cpuset="0x00000030" allowed_cpuset="0x00000030" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
|
||||||
|
<object type="PU" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
|
||||||
|
<object type="PU" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="NUMANode" os_index="1" cpuset="0x00000fc0" complete_cpuset="0x00000fc0" online_cpuset="0x00000fc0" allowed_cpuset="0x00000fc0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" local_memory="4226547712">
|
||||||
|
<page_type size="4096" count="417472"/>
|
||||||
|
<page_type size="2097152" count="1200"/>
|
||||||
|
<page_type size="1073741824" count="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000fc0" complete_cpuset="0x00000fc0" online_cpuset="0x00000fc0" allowed_cpuset="0x00000fc0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="8388608" depth="3" cache_linesize="64" cache_associativity="64" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x000000c0" complete_cpuset="0x000000c0" online_cpuset="0x000000c0" allowed_cpuset="0x000000c0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="0" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
|
||||||
|
<object type="PU" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="1" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
|
||||||
|
<object type="PU" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000300" complete_cpuset="0x00000300" online_cpuset="0x00000300" allowed_cpuset="0x00000300" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000100" complete_cpuset="0x00000100" online_cpuset="0x00000100" allowed_cpuset="0x00000100" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="2" cpuset="0x00000100" complete_cpuset="0x00000100" online_cpuset="0x00000100" allowed_cpuset="0x00000100" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
|
||||||
|
<object type="PU" os_index="8" cpuset="0x00000100" complete_cpuset="0x00000100" online_cpuset="0x00000100" allowed_cpuset="0x00000100" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000200" complete_cpuset="0x00000200" online_cpuset="0x00000200" allowed_cpuset="0x00000200" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="3" cpuset="0x00000200" complete_cpuset="0x00000200" online_cpuset="0x00000200" allowed_cpuset="0x00000200" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
|
||||||
|
<object type="PU" os_index="9" cpuset="0x00000200" complete_cpuset="0x00000200" online_cpuset="0x00000200" allowed_cpuset="0x00000200" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000c00" complete_cpuset="0x00000c00" online_cpuset="0x00000c00" allowed_cpuset="0x00000c00" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000400" complete_cpuset="0x00000400" online_cpuset="0x00000400" allowed_cpuset="0x00000400" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="4" cpuset="0x00000400" complete_cpuset="0x00000400" online_cpuset="0x00000400" allowed_cpuset="0x00000400" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
|
||||||
|
<object type="PU" os_index="10" cpuset="0x00000400" complete_cpuset="0x00000400" online_cpuset="0x00000400" allowed_cpuset="0x00000400" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000800" complete_cpuset="0x00000800" online_cpuset="0x00000800" allowed_cpuset="0x00000800" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="5" cpuset="0x00000800" complete_cpuset="0x00000800" online_cpuset="0x00000800" allowed_cpuset="0x00000800" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
|
||||||
|
<object type="PU" os_index="11" cpuset="0x00000800" complete_cpuset="0x00000800" online_cpuset="0x00000800" allowed_cpuset="0x00000800" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Package" os_index="3" cpuset="0x00fff000" complete_cpuset="0x00fff000" online_cpuset="0x00fff000" allowed_cpuset="0x00fff000" nodeset="0x000000c0" complete_nodeset="0x000000c0" allowed_nodeset="0x000000c0">
|
||||||
|
<info name="CPUVendor" value="AuthenticAMD"/>
|
||||||
|
<info name="CPUFamilyNumber" value="21"/>
|
||||||
|
<info name="CPUModelNumber" value="2"/>
|
||||||
|
<info name="CPUModel" value="AMD Opteron(tm) Processor 6348"/>
|
||||||
|
<info name="CPUStepping" value="0"/>
|
||||||
|
<object type="NUMANode" os_index="6" cpuset="0x0003f000" complete_cpuset="0x0003f000" online_cpuset="0x0003f000" allowed_cpuset="0x0003f000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040" local_memory="4226547712">
|
||||||
|
<page_type size="4096" count="417472"/>
|
||||||
|
<page_type size="2097152" count="1200"/>
|
||||||
|
<page_type size="1073741824" count="0"/>
|
||||||
|
<object type="Cache" cpuset="0x0003f000" complete_cpuset="0x0003f000" online_cpuset="0x0003f000" allowed_cpuset="0x0003f000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040" cache_size="8388608" depth="3" cache_linesize="64" cache_associativity="64" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00003000" complete_cpuset="0x00003000" online_cpuset="0x00003000" allowed_cpuset="0x00003000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="0" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040">
|
||||||
|
<object type="PU" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="1" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040">
|
||||||
|
<object type="PU" os_index="13" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x0000c000" complete_cpuset="0x0000c000" online_cpuset="0x0000c000" allowed_cpuset="0x0000c000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="2" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040">
|
||||||
|
<object type="PU" os_index="14" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="3" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040">
|
||||||
|
<object type="PU" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00030000" complete_cpuset="0x00030000" online_cpuset="0x00030000" allowed_cpuset="0x00030000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00010000" complete_cpuset="0x00010000" online_cpuset="0x00010000" allowed_cpuset="0x00010000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="4" cpuset="0x00010000" complete_cpuset="0x00010000" online_cpuset="0x00010000" allowed_cpuset="0x00010000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040">
|
||||||
|
<object type="PU" os_index="16" cpuset="0x00010000" complete_cpuset="0x00010000" online_cpuset="0x00010000" allowed_cpuset="0x00010000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00020000" complete_cpuset="0x00020000" online_cpuset="0x00020000" allowed_cpuset="0x00020000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="5" cpuset="0x00020000" complete_cpuset="0x00020000" online_cpuset="0x00020000" allowed_cpuset="0x00020000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040">
|
||||||
|
<object type="PU" os_index="17" cpuset="0x00020000" complete_cpuset="0x00020000" online_cpuset="0x00020000" allowed_cpuset="0x00020000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="NUMANode" os_index="7" cpuset="0x00fc0000" complete_cpuset="0x00fc0000" online_cpuset="0x00fc0000" allowed_cpuset="0x00fc0000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x00000080" local_memory="4209184768">
|
||||||
|
<page_type size="4096" count="413233"/>
|
||||||
|
<page_type size="2097152" count="1200"/>
|
||||||
|
<page_type size="1073741824" count="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00fc0000" complete_cpuset="0x00fc0000" online_cpuset="0x00fc0000" allowed_cpuset="0x00fc0000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x00000080" cache_size="8388608" depth="3" cache_linesize="64" cache_associativity="64" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x000c0000" complete_cpuset="0x000c0000" online_cpuset="0x000c0000" allowed_cpuset="0x000c0000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x00000080" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00040000" complete_cpuset="0x00040000" online_cpuset="0x00040000" allowed_cpuset="0x00040000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x00000080" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="0" cpuset="0x00040000" complete_cpuset="0x00040000" online_cpuset="0x00040000" allowed_cpuset="0x00040000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x00000080">
|
||||||
|
<object type="PU" os_index="18" cpuset="0x00040000" complete_cpuset="0x00040000" online_cpuset="0x00040000" allowed_cpuset="0x00040000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x00000080"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00080000" complete_cpuset="0x00080000" online_cpuset="0x00080000" allowed_cpuset="0x00080000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x00000080" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="1" cpuset="0x00080000" complete_cpuset="0x00080000" online_cpuset="0x00080000" allowed_cpuset="0x00080000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x00000080">
|
||||||
|
<object type="PU" os_index="19" cpuset="0x00080000" complete_cpuset="0x00080000" online_cpuset="0x00080000" allowed_cpuset="0x00080000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x00000080"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00300000" complete_cpuset="0x00300000" online_cpuset="0x00300000" allowed_cpuset="0x00300000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x00000080" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00100000" complete_cpuset="0x00100000" online_cpuset="0x00100000" allowed_cpuset="0x00100000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x00000080" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="2" cpuset="0x00100000" complete_cpuset="0x00100000" online_cpuset="0x00100000" allowed_cpuset="0x00100000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x00000080">
|
||||||
|
<object type="PU" os_index="20" cpuset="0x00100000" complete_cpuset="0x00100000" online_cpuset="0x00100000" allowed_cpuset="0x00100000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x00000080"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00200000" complete_cpuset="0x00200000" online_cpuset="0x00200000" allowed_cpuset="0x00200000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x00000080" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="3" cpuset="0x00200000" complete_cpuset="0x00200000" online_cpuset="0x00200000" allowed_cpuset="0x00200000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x00000080">
|
||||||
|
<object type="PU" os_index="21" cpuset="0x00200000" complete_cpuset="0x00200000" online_cpuset="0x00200000" allowed_cpuset="0x00200000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x00000080"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00c00000" complete_cpuset="0x00c00000" online_cpuset="0x00c00000" allowed_cpuset="0x00c00000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x00000080" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00400000" complete_cpuset="0x00400000" online_cpuset="0x00400000" allowed_cpuset="0x00400000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x00000080" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="4" cpuset="0x00400000" complete_cpuset="0x00400000" online_cpuset="0x00400000" allowed_cpuset="0x00400000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x00000080">
|
||||||
|
<object type="PU" os_index="22" cpuset="0x00400000" complete_cpuset="0x00400000" online_cpuset="0x00400000" allowed_cpuset="0x00400000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x00000080"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00800000" complete_cpuset="0x00800000" online_cpuset="0x00800000" allowed_cpuset="0x00800000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x00000080" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="5" cpuset="0x00800000" complete_cpuset="0x00800000" online_cpuset="0x00800000" allowed_cpuset="0x00800000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x00000080">
|
||||||
|
<object type="PU" os_index="23" cpuset="0x00800000" complete_cpuset="0x00800000" online_cpuset="0x00800000" allowed_cpuset="0x00800000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x00000080"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Package" os_index="1" cpuset="0x0000000f,0xff000000" complete_cpuset="0x0000000f,0xff000000" online_cpuset="0x0000000f,0xff000000" allowed_cpuset="0x0000000f,0xff000000" nodeset="0x0000000c" complete_nodeset="0x0000000c" allowed_nodeset="0x0000000c">
|
||||||
|
<info name="CPUVendor" value="AuthenticAMD"/>
|
||||||
|
<info name="CPUFamilyNumber" value="21"/>
|
||||||
|
<info name="CPUModelNumber" value="2"/>
|
||||||
|
<info name="CPUModel" value="AMD Opteron(tm) Processor 6348"/>
|
||||||
|
<info name="CPUStepping" value="0"/>
|
||||||
|
<object type="NUMANode" os_index="2" cpuset="0x3f000000" complete_cpuset="0x3f000000" online_cpuset="0x3f000000" allowed_cpuset="0x3f000000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" local_memory="4226547712">
|
||||||
|
<page_type size="4096" count="417472"/>
|
||||||
|
<page_type size="2097152" count="1200"/>
|
||||||
|
<page_type size="1073741824" count="0"/>
|
||||||
|
<object type="Cache" cpuset="0x3f000000" complete_cpuset="0x3f000000" online_cpuset="0x3f000000" allowed_cpuset="0x3f000000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="8388608" depth="3" cache_linesize="64" cache_associativity="64" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x03000000" complete_cpuset="0x03000000" online_cpuset="0x03000000" allowed_cpuset="0x03000000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x01000000" complete_cpuset="0x01000000" online_cpuset="0x01000000" allowed_cpuset="0x01000000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="0" cpuset="0x01000000" complete_cpuset="0x01000000" online_cpuset="0x01000000" allowed_cpuset="0x01000000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
|
||||||
|
<object type="PU" os_index="24" cpuset="0x01000000" complete_cpuset="0x01000000" online_cpuset="0x01000000" allowed_cpuset="0x01000000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x02000000" complete_cpuset="0x02000000" online_cpuset="0x02000000" allowed_cpuset="0x02000000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="1" cpuset="0x02000000" complete_cpuset="0x02000000" online_cpuset="0x02000000" allowed_cpuset="0x02000000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
|
||||||
|
<object type="PU" os_index="25" cpuset="0x02000000" complete_cpuset="0x02000000" online_cpuset="0x02000000" allowed_cpuset="0x02000000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x0c000000" complete_cpuset="0x0c000000" online_cpuset="0x0c000000" allowed_cpuset="0x0c000000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x04000000" complete_cpuset="0x04000000" online_cpuset="0x04000000" allowed_cpuset="0x04000000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="2" cpuset="0x04000000" complete_cpuset="0x04000000" online_cpuset="0x04000000" allowed_cpuset="0x04000000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
|
||||||
|
<object type="PU" os_index="26" cpuset="0x04000000" complete_cpuset="0x04000000" online_cpuset="0x04000000" allowed_cpuset="0x04000000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x08000000" complete_cpuset="0x08000000" online_cpuset="0x08000000" allowed_cpuset="0x08000000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="3" cpuset="0x08000000" complete_cpuset="0x08000000" online_cpuset="0x08000000" allowed_cpuset="0x08000000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
|
||||||
|
<object type="PU" os_index="27" cpuset="0x08000000" complete_cpuset="0x08000000" online_cpuset="0x08000000" allowed_cpuset="0x08000000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x30000000" complete_cpuset="0x30000000" online_cpuset="0x30000000" allowed_cpuset="0x30000000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x10000000" complete_cpuset="0x10000000" online_cpuset="0x10000000" allowed_cpuset="0x10000000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="4" cpuset="0x10000000" complete_cpuset="0x10000000" online_cpuset="0x10000000" allowed_cpuset="0x10000000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
|
||||||
|
<object type="PU" os_index="28" cpuset="0x10000000" complete_cpuset="0x10000000" online_cpuset="0x10000000" allowed_cpuset="0x10000000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x20000000" complete_cpuset="0x20000000" online_cpuset="0x20000000" allowed_cpuset="0x20000000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="5" cpuset="0x20000000" complete_cpuset="0x20000000" online_cpuset="0x20000000" allowed_cpuset="0x20000000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
|
||||||
|
<object type="PU" os_index="29" cpuset="0x20000000" complete_cpuset="0x20000000" online_cpuset="0x20000000" allowed_cpuset="0x20000000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="NUMANode" os_index="3" cpuset="0x0000000f,0xc0000000" complete_cpuset="0x0000000f,0xc0000000" online_cpuset="0x0000000f,0xc0000000" allowed_cpuset="0x0000000f,0xc0000000" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" local_memory="4226547712">
|
||||||
|
<page_type size="4096" count="417472"/>
|
||||||
|
<page_type size="2097152" count="1200"/>
|
||||||
|
<page_type size="1073741824" count="0"/>
|
||||||
|
<object type="Cache" cpuset="0x0000000f,0xc0000000" complete_cpuset="0x0000000f,0xc0000000" online_cpuset="0x0000000f,0xc0000000" allowed_cpuset="0x0000000f,0xc0000000" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="8388608" depth="3" cache_linesize="64" cache_associativity="64" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0xc0000000" complete_cpuset="0xc0000000" online_cpuset="0xc0000000" allowed_cpuset="0xc0000000" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x40000000" complete_cpuset="0x40000000" online_cpuset="0x40000000" allowed_cpuset="0x40000000" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="0" cpuset="0x40000000" complete_cpuset="0x40000000" online_cpuset="0x40000000" allowed_cpuset="0x40000000" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
|
||||||
|
<object type="PU" os_index="30" cpuset="0x40000000" complete_cpuset="0x40000000" online_cpuset="0x40000000" allowed_cpuset="0x40000000" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x80000000" complete_cpuset="0x80000000" online_cpuset="0x80000000" allowed_cpuset="0x80000000" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="1" cpuset="0x80000000" complete_cpuset="0x80000000" online_cpuset="0x80000000" allowed_cpuset="0x80000000" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
|
||||||
|
<object type="PU" os_index="31" cpuset="0x80000000" complete_cpuset="0x80000000" online_cpuset="0x80000000" allowed_cpuset="0x80000000" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000003,0x0" complete_cpuset="0x00000003,0x0" online_cpuset="0x00000003,0x0" allowed_cpuset="0x00000003,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000001,0x0" complete_cpuset="0x00000001,0x0" online_cpuset="0x00000001,0x0" allowed_cpuset="0x00000001,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="2" cpuset="0x00000001,0x0" complete_cpuset="0x00000001,0x0" online_cpuset="0x00000001,0x0" allowed_cpuset="0x00000001,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
|
||||||
|
<object type="PU" os_index="32" cpuset="0x00000001,0x0" complete_cpuset="0x00000001,0x0" online_cpuset="0x00000001,0x0" allowed_cpuset="0x00000001,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000002,0x0" complete_cpuset="0x00000002,0x0" online_cpuset="0x00000002,0x0" allowed_cpuset="0x00000002,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="3" cpuset="0x00000002,0x0" complete_cpuset="0x00000002,0x0" online_cpuset="0x00000002,0x0" allowed_cpuset="0x00000002,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
|
||||||
|
<object type="PU" os_index="33" cpuset="0x00000002,0x0" complete_cpuset="0x00000002,0x0" online_cpuset="0x00000002,0x0" allowed_cpuset="0x00000002,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x0000000c,0x0" complete_cpuset="0x0000000c,0x0" online_cpuset="0x0000000c,0x0" allowed_cpuset="0x0000000c,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000004,0x0" complete_cpuset="0x00000004,0x0" online_cpuset="0x00000004,0x0" allowed_cpuset="0x00000004,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="4" cpuset="0x00000004,0x0" complete_cpuset="0x00000004,0x0" online_cpuset="0x00000004,0x0" allowed_cpuset="0x00000004,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
|
||||||
|
<object type="PU" os_index="34" cpuset="0x00000004,0x0" complete_cpuset="0x00000004,0x0" online_cpuset="0x00000004,0x0" allowed_cpuset="0x00000004,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000008,0x0" complete_cpuset="0x00000008,0x0" online_cpuset="0x00000008,0x0" allowed_cpuset="0x00000008,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="5" cpuset="0x00000008,0x0" complete_cpuset="0x00000008,0x0" online_cpuset="0x00000008,0x0" allowed_cpuset="0x00000008,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
|
||||||
|
<object type="PU" os_index="35" cpuset="0x00000008,0x0" complete_cpuset="0x00000008,0x0" online_cpuset="0x00000008,0x0" allowed_cpuset="0x00000008,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Package" os_index="2" cpuset="0x0000fff0,0x0" complete_cpuset="0x0000fff0,0x0" online_cpuset="0x0000fff0,0x0" allowed_cpuset="0x0000fff0,0x0" nodeset="0x00000030" complete_nodeset="0x00000030" allowed_nodeset="0x00000030">
|
||||||
|
<info name="CPUVendor" value="AuthenticAMD"/>
|
||||||
|
<info name="CPUFamilyNumber" value="21"/>
|
||||||
|
<info name="CPUModelNumber" value="2"/>
|
||||||
|
<info name="CPUModel" value="AMD Opteron(tm) Processor 6348"/>
|
||||||
|
<info name="CPUStepping" value="0"/>
|
||||||
|
<object type="NUMANode" os_index="4" cpuset="0x000003f0,0x0" complete_cpuset="0x000003f0,0x0" online_cpuset="0x000003f0,0x0" allowed_cpuset="0x000003f0,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010" local_memory="4226547712">
|
||||||
|
<page_type size="4096" count="417472"/>
|
||||||
|
<page_type size="2097152" count="1200"/>
|
||||||
|
<page_type size="1073741824" count="0"/>
|
||||||
|
<object type="Cache" cpuset="0x000003f0,0x0" complete_cpuset="0x000003f0,0x0" online_cpuset="0x000003f0,0x0" allowed_cpuset="0x000003f0,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010" cache_size="8388608" depth="3" cache_linesize="64" cache_associativity="64" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000030,0x0" complete_cpuset="0x00000030,0x0" online_cpuset="0x00000030,0x0" allowed_cpuset="0x00000030,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000010,0x0" complete_cpuset="0x00000010,0x0" online_cpuset="0x00000010,0x0" allowed_cpuset="0x00000010,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="0" cpuset="0x00000010,0x0" complete_cpuset="0x00000010,0x0" online_cpuset="0x00000010,0x0" allowed_cpuset="0x00000010,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010">
|
||||||
|
<object type="PU" os_index="36" cpuset="0x00000010,0x0" complete_cpuset="0x00000010,0x0" online_cpuset="0x00000010,0x0" allowed_cpuset="0x00000010,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000020,0x0" complete_cpuset="0x00000020,0x0" online_cpuset="0x00000020,0x0" allowed_cpuset="0x00000020,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="1" cpuset="0x00000020,0x0" complete_cpuset="0x00000020,0x0" online_cpuset="0x00000020,0x0" allowed_cpuset="0x00000020,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010">
|
||||||
|
<object type="PU" os_index="37" cpuset="0x00000020,0x0" complete_cpuset="0x00000020,0x0" online_cpuset="0x00000020,0x0" allowed_cpuset="0x00000020,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x000000c0,0x0" complete_cpuset="0x000000c0,0x0" online_cpuset="0x000000c0,0x0" allowed_cpuset="0x000000c0,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000040,0x0" complete_cpuset="0x00000040,0x0" online_cpuset="0x00000040,0x0" allowed_cpuset="0x00000040,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="2" cpuset="0x00000040,0x0" complete_cpuset="0x00000040,0x0" online_cpuset="0x00000040,0x0" allowed_cpuset="0x00000040,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010">
|
||||||
|
<object type="PU" os_index="38" cpuset="0x00000040,0x0" complete_cpuset="0x00000040,0x0" online_cpuset="0x00000040,0x0" allowed_cpuset="0x00000040,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000080,0x0" complete_cpuset="0x00000080,0x0" online_cpuset="0x00000080,0x0" allowed_cpuset="0x00000080,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="3" cpuset="0x00000080,0x0" complete_cpuset="0x00000080,0x0" online_cpuset="0x00000080,0x0" allowed_cpuset="0x00000080,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010">
|
||||||
|
<object type="PU" os_index="39" cpuset="0x00000080,0x0" complete_cpuset="0x00000080,0x0" online_cpuset="0x00000080,0x0" allowed_cpuset="0x00000080,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000300,0x0" complete_cpuset="0x00000300,0x0" online_cpuset="0x00000300,0x0" allowed_cpuset="0x00000300,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000100,0x0" complete_cpuset="0x00000100,0x0" online_cpuset="0x00000100,0x0" allowed_cpuset="0x00000100,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="4" cpuset="0x00000100,0x0" complete_cpuset="0x00000100,0x0" online_cpuset="0x00000100,0x0" allowed_cpuset="0x00000100,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010">
|
||||||
|
<object type="PU" os_index="40" cpuset="0x00000100,0x0" complete_cpuset="0x00000100,0x0" online_cpuset="0x00000100,0x0" allowed_cpuset="0x00000100,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000200,0x0" complete_cpuset="0x00000200,0x0" online_cpuset="0x00000200,0x0" allowed_cpuset="0x00000200,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="5" cpuset="0x00000200,0x0" complete_cpuset="0x00000200,0x0" online_cpuset="0x00000200,0x0" allowed_cpuset="0x00000200,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010">
|
||||||
|
<object type="PU" os_index="41" cpuset="0x00000200,0x0" complete_cpuset="0x00000200,0x0" online_cpuset="0x00000200,0x0" allowed_cpuset="0x00000200,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="NUMANode" os_index="5" cpuset="0x0000fc00,0x0" complete_cpuset="0x0000fc00,0x0" online_cpuset="0x0000fc00,0x0" allowed_cpuset="0x0000fc00,0x0" nodeset="0x00000020" complete_nodeset="0x00000020" allowed_nodeset="0x00000020" local_memory="4204392448">
|
||||||
|
<page_type size="4096" count="412063"/>
|
||||||
|
<page_type size="2097152" count="1200"/>
|
||||||
|
<page_type size="1073741824" count="0"/>
|
||||||
|
<object type="Cache" cpuset="0x0000fc00,0x0" complete_cpuset="0x0000fc00,0x0" online_cpuset="0x0000fc00,0x0" allowed_cpuset="0x0000fc00,0x0" nodeset="0x00000020" complete_nodeset="0x00000020" allowed_nodeset="0x00000020" cache_size="8388608" depth="3" cache_linesize="64" cache_associativity="64" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000c00,0x0" complete_cpuset="0x00000c00,0x0" online_cpuset="0x00000c00,0x0" allowed_cpuset="0x00000c00,0x0" nodeset="0x00000020" complete_nodeset="0x00000020" allowed_nodeset="0x00000020" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000400,0x0" complete_cpuset="0x00000400,0x0" online_cpuset="0x00000400,0x0" allowed_cpuset="0x00000400,0x0" nodeset="0x00000020" complete_nodeset="0x00000020" allowed_nodeset="0x00000020" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="0" cpuset="0x00000400,0x0" complete_cpuset="0x00000400,0x0" online_cpuset="0x00000400,0x0" allowed_cpuset="0x00000400,0x0" nodeset="0x00000020" complete_nodeset="0x00000020" allowed_nodeset="0x00000020">
|
||||||
|
<object type="PU" os_index="42" cpuset="0x00000400,0x0" complete_cpuset="0x00000400,0x0" online_cpuset="0x00000400,0x0" allowed_cpuset="0x00000400,0x0" nodeset="0x00000020" complete_nodeset="0x00000020" allowed_nodeset="0x00000020"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000800,0x0" complete_cpuset="0x00000800,0x0" online_cpuset="0x00000800,0x0" allowed_cpuset="0x00000800,0x0" nodeset="0x00000020" complete_nodeset="0x00000020" allowed_nodeset="0x00000020" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="1" cpuset="0x00000800,0x0" complete_cpuset="0x00000800,0x0" online_cpuset="0x00000800,0x0" allowed_cpuset="0x00000800,0x0" nodeset="0x00000020" complete_nodeset="0x00000020" allowed_nodeset="0x00000020">
|
||||||
|
<object type="PU" os_index="43" cpuset="0x00000800,0x0" complete_cpuset="0x00000800,0x0" online_cpuset="0x00000800,0x0" allowed_cpuset="0x00000800,0x0" nodeset="0x00000020" complete_nodeset="0x00000020" allowed_nodeset="0x00000020"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00003000,0x0" complete_cpuset="0x00003000,0x0" online_cpuset="0x00003000,0x0" allowed_cpuset="0x00003000,0x0" nodeset="0x00000020" complete_nodeset="0x00000020" allowed_nodeset="0x00000020" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00001000,0x0" complete_cpuset="0x00001000,0x0" online_cpuset="0x00001000,0x0" allowed_cpuset="0x00001000,0x0" nodeset="0x00000020" complete_nodeset="0x00000020" allowed_nodeset="0x00000020" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="2" cpuset="0x00001000,0x0" complete_cpuset="0x00001000,0x0" online_cpuset="0x00001000,0x0" allowed_cpuset="0x00001000,0x0" nodeset="0x00000020" complete_nodeset="0x00000020" allowed_nodeset="0x00000020">
|
||||||
|
<object type="PU" os_index="44" cpuset="0x00001000,0x0" complete_cpuset="0x00001000,0x0" online_cpuset="0x00001000,0x0" allowed_cpuset="0x00001000,0x0" nodeset="0x00000020" complete_nodeset="0x00000020" allowed_nodeset="0x00000020"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00002000,0x0" complete_cpuset="0x00002000,0x0" online_cpuset="0x00002000,0x0" allowed_cpuset="0x00002000,0x0" nodeset="0x00000020" complete_nodeset="0x00000020" allowed_nodeset="0x00000020" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="3" cpuset="0x00002000,0x0" complete_cpuset="0x00002000,0x0" online_cpuset="0x00002000,0x0" allowed_cpuset="0x00002000,0x0" nodeset="0x00000020" complete_nodeset="0x00000020" allowed_nodeset="0x00000020">
|
||||||
|
<object type="PU" os_index="45" cpuset="0x00002000,0x0" complete_cpuset="0x00002000,0x0" online_cpuset="0x00002000,0x0" allowed_cpuset="0x00002000,0x0" nodeset="0x00000020" complete_nodeset="0x00000020" allowed_nodeset="0x00000020"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x0000c000,0x0" complete_cpuset="0x0000c000,0x0" online_cpuset="0x0000c000,0x0" allowed_cpuset="0x0000c000,0x0" nodeset="0x00000020" complete_nodeset="0x00000020" allowed_nodeset="0x00000020" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00004000,0x0" complete_cpuset="0x00004000,0x0" online_cpuset="0x00004000,0x0" allowed_cpuset="0x00004000,0x0" nodeset="0x00000020" complete_nodeset="0x00000020" allowed_nodeset="0x00000020" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="4" cpuset="0x00004000,0x0" complete_cpuset="0x00004000,0x0" online_cpuset="0x00004000,0x0" allowed_cpuset="0x00004000,0x0" nodeset="0x00000020" complete_nodeset="0x00000020" allowed_nodeset="0x00000020">
|
||||||
|
<object type="PU" os_index="46" cpuset="0x00004000,0x0" complete_cpuset="0x00004000,0x0" online_cpuset="0x00004000,0x0" allowed_cpuset="0x00004000,0x0" nodeset="0x00000020" complete_nodeset="0x00000020" allowed_nodeset="0x00000020"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00008000,0x0" complete_cpuset="0x00008000,0x0" online_cpuset="0x00008000,0x0" allowed_cpuset="0x00008000,0x0" nodeset="0x00000020" complete_nodeset="0x00000020" allowed_nodeset="0x00000020" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="5" cpuset="0x00008000,0x0" complete_cpuset="0x00008000,0x0" online_cpuset="0x00008000,0x0" allowed_cpuset="0x00008000,0x0" nodeset="0x00000020" complete_nodeset="0x00000020" allowed_nodeset="0x00000020">
|
||||||
|
<object type="PU" os_index="47" cpuset="0x00008000,0x0" complete_cpuset="0x00008000,0x0" online_cpuset="0x00008000,0x0" allowed_cpuset="0x00008000,0x0" nodeset="0x00000020" complete_nodeset="0x00000020" allowed_nodeset="0x00000020"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</topology>
|
||||||
670
doc/topology/AMD_Opteron_6380_x4_N8_linux_1_11_5.xml
Normal file
670
doc/topology/AMD_Opteron_6380_x4_N8_linux_1_11_5.xml
Normal file
@@ -0,0 +1,670 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE topology SYSTEM "hwloc.dtd">
|
||||||
|
<topology>
|
||||||
|
<object type="Machine" os_index="0" cpuset="0xffffffff,0xffffffff" complete_cpuset="0xffffffff,0xffffffff" online_cpuset="0xffffffff,0xffffffff" allowed_cpuset="0xffffffff,0xffffffff" nodeset="0x00000055" complete_nodeset="0x000000ff" allowed_nodeset="0x00000055">
|
||||||
|
<page_type size="4096" count="0"/>
|
||||||
|
<page_type size="2097152" count="0"/>
|
||||||
|
<page_type size="1073741824" count="0"/>
|
||||||
|
<info name="DMIProductName" value="PowerEdge C6145 "/>
|
||||||
|
<info name="DMIProductVersion" value=" "/>
|
||||||
|
<info name="DMIProductSerial" value="BYSBHS1 "/>
|
||||||
|
<info name="DMIProductUUID" value="4C4C4544-0059-5310-8042-C2C04F485331"/>
|
||||||
|
<info name="DMIBoardVendor" value="Dell Inc. "/>
|
||||||
|
<info name="DMIBoardName" value="0VKT0M"/>
|
||||||
|
<info name="DMIBoardVersion" value="A00 "/>
|
||||||
|
<info name="DMIBoardSerial" value=".BYSBHS1.CN747511CV0156."/>
|
||||||
|
<info name="DMIBoardAssetTag" value=".2 "/>
|
||||||
|
<info name="DMIChassisVendor" value="Dell Inc. "/>
|
||||||
|
<info name="DMIChassisType" value="23"/>
|
||||||
|
<info name="DMIChassisVersion" value=" "/>
|
||||||
|
<info name="DMIChassisSerial" value="BYSBHS1 "/>
|
||||||
|
<info name="DMIChassisAssetTag" value=" "/>
|
||||||
|
<info name="DMIBIOSVendor" value="Dell Inc."/>
|
||||||
|
<info name="DMIBIOSVersion" value="3.5.0"/>
|
||||||
|
<info name="DMIBIOSDate" value="10/28/2014"/>
|
||||||
|
<info name="DMISysVendor" value="Dell Inc. "/>
|
||||||
|
<info name="Backend" value="Linux"/>
|
||||||
|
<info name="LinuxCgroup" value="/"/>
|
||||||
|
<info name="OSName" value="Linux"/>
|
||||||
|
<info name="OSRelease" value="4.9.0-6-amd64"/>
|
||||||
|
<info name="OSVersion" value="#1 SMP Debian 4.9.82-1+deb9u3 (2018-03-02)"/>
|
||||||
|
<info name="HostName" value="host"/>
|
||||||
|
<info name="Architecture" value="x86_64"/>
|
||||||
|
<info name="hwlocVersion" value="1.11.5"/>
|
||||||
|
<info name="ProcessName" value="x"/>
|
||||||
|
<distances nbobjs="8" relative_depth="2" latency_base="10.000000">
|
||||||
|
<latency value="1.000000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.000000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="1.000000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.000000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.000000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.000000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="1.000000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="2.200000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.600000"/>
|
||||||
|
<latency value="1.000000"/>
|
||||||
|
</distances>
|
||||||
|
<object type="Package" os_index="0" cpuset="0x0000ffff" complete_cpuset="0x0000ffff" online_cpuset="0x0000ffff" allowed_cpuset="0x0000ffff" nodeset="0x00000001" complete_nodeset="0x00000003" allowed_nodeset="0x00000001">
|
||||||
|
<info name="CPUVendor" value="AuthenticAMD"/>
|
||||||
|
<info name="CPUFamilyNumber" value="21"/>
|
||||||
|
<info name="CPUModelNumber" value="2"/>
|
||||||
|
<info name="CPUModel" value="AMD Opteron(tm) Processor 6380"/>
|
||||||
|
<info name="CPUStepping" value="0"/>
|
||||||
|
<object type="NUMANode" os_index="0" cpuset="0x000000ff" complete_cpuset="0x000000ff" online_cpuset="0x000000ff" allowed_cpuset="0x000000ff" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" local_memory="4151926784">
|
||||||
|
<page_type size="4096" count="1000342"/>
|
||||||
|
<page_type size="2097152" count="26"/>
|
||||||
|
<page_type size="1073741824" count="0"/>
|
||||||
|
<object type="Cache" cpuset="0x000000ff" complete_cpuset="0x000000ff" online_cpuset="0x000000ff" allowed_cpuset="0x000000ff" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="6291456" depth="3" cache_linesize="64" cache_associativity="48" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
|
||||||
|
<object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
|
||||||
|
<object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x0000000c" complete_cpuset="0x0000000c" online_cpuset="0x0000000c" allowed_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
|
||||||
|
<object type="PU" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
|
||||||
|
<object type="PU" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000030" complete_cpuset="0x00000030" online_cpuset="0x00000030" allowed_cpuset="0x00000030" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
|
||||||
|
<object type="PU" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
|
||||||
|
<object type="PU" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x000000c0" complete_cpuset="0x000000c0" online_cpuset="0x000000c0" allowed_cpuset="0x000000c0" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
|
||||||
|
<object type="PU" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
|
||||||
|
<object type="PU" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="NUMANode" os_index="1" cpuset="0x0000ff00" complete_cpuset="0x0000ff00" online_cpuset="0x0000ff00" allowed_cpuset="0x0000ff00" nodeset="0x0" complete_nodeset="0x00000002" allowed_nodeset="0x0">
|
||||||
|
<page_type size="4096" count="0"/>
|
||||||
|
<page_type size="2097152" count="0"/>
|
||||||
|
<object type="Cache" cpuset="0x0000ff00" complete_cpuset="0x0000ff00" online_cpuset="0x0000ff00" allowed_cpuset="0x0000ff00" nodeset="0x0" complete_nodeset="0x00000002" allowed_nodeset="0x0" cache_size="6291456" depth="3" cache_linesize="64" cache_associativity="48" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000300" complete_cpuset="0x00000300" online_cpuset="0x00000300" allowed_cpuset="0x00000300" nodeset="0x0" complete_nodeset="0x00000002" allowed_nodeset="0x0" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000100" complete_cpuset="0x00000100" online_cpuset="0x00000100" allowed_cpuset="0x00000100" nodeset="0x0" complete_nodeset="0x00000002" allowed_nodeset="0x0" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="0" cpuset="0x00000100" complete_cpuset="0x00000100" online_cpuset="0x00000100" allowed_cpuset="0x00000100" nodeset="0x0" complete_nodeset="0x00000002" allowed_nodeset="0x0">
|
||||||
|
<object type="PU" os_index="8" cpuset="0x00000100" complete_cpuset="0x00000100" online_cpuset="0x00000100" allowed_cpuset="0x00000100" nodeset="0x0" complete_nodeset="0x00000002" allowed_nodeset="0x0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000200" complete_cpuset="0x00000200" online_cpuset="0x00000200" allowed_cpuset="0x00000200" nodeset="0x0" complete_nodeset="0x00000002" allowed_nodeset="0x0" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="1" cpuset="0x00000200" complete_cpuset="0x00000200" online_cpuset="0x00000200" allowed_cpuset="0x00000200" nodeset="0x0" complete_nodeset="0x00000002" allowed_nodeset="0x0">
|
||||||
|
<object type="PU" os_index="9" cpuset="0x00000200" complete_cpuset="0x00000200" online_cpuset="0x00000200" allowed_cpuset="0x00000200" nodeset="0x0" complete_nodeset="0x00000002" allowed_nodeset="0x0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000c00" complete_cpuset="0x00000c00" online_cpuset="0x00000c00" allowed_cpuset="0x00000c00" nodeset="0x0" complete_nodeset="0x00000002" allowed_nodeset="0x0" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000400" complete_cpuset="0x00000400" online_cpuset="0x00000400" allowed_cpuset="0x00000400" nodeset="0x0" complete_nodeset="0x00000002" allowed_nodeset="0x0" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="2" cpuset="0x00000400" complete_cpuset="0x00000400" online_cpuset="0x00000400" allowed_cpuset="0x00000400" nodeset="0x0" complete_nodeset="0x00000002" allowed_nodeset="0x0">
|
||||||
|
<object type="PU" os_index="10" cpuset="0x00000400" complete_cpuset="0x00000400" online_cpuset="0x00000400" allowed_cpuset="0x00000400" nodeset="0x0" complete_nodeset="0x00000002" allowed_nodeset="0x0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000800" complete_cpuset="0x00000800" online_cpuset="0x00000800" allowed_cpuset="0x00000800" nodeset="0x0" complete_nodeset="0x00000002" allowed_nodeset="0x0" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="3" cpuset="0x00000800" complete_cpuset="0x00000800" online_cpuset="0x00000800" allowed_cpuset="0x00000800" nodeset="0x0" complete_nodeset="0x00000002" allowed_nodeset="0x0">
|
||||||
|
<object type="PU" os_index="11" cpuset="0x00000800" complete_cpuset="0x00000800" online_cpuset="0x00000800" allowed_cpuset="0x00000800" nodeset="0x0" complete_nodeset="0x00000002" allowed_nodeset="0x0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00003000" complete_cpuset="0x00003000" online_cpuset="0x00003000" allowed_cpuset="0x00003000" nodeset="0x0" complete_nodeset="0x00000002" allowed_nodeset="0x0" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x0" complete_nodeset="0x00000002" allowed_nodeset="0x0" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="4" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x0" complete_nodeset="0x00000002" allowed_nodeset="0x0">
|
||||||
|
<object type="PU" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x0" complete_nodeset="0x00000002" allowed_nodeset="0x0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000" nodeset="0x0" complete_nodeset="0x00000002" allowed_nodeset="0x0" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="5" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000" nodeset="0x0" complete_nodeset="0x00000002" allowed_nodeset="0x0">
|
||||||
|
<object type="PU" os_index="13" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000" nodeset="0x0" complete_nodeset="0x00000002" allowed_nodeset="0x0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x0000c000" complete_cpuset="0x0000c000" online_cpuset="0x0000c000" allowed_cpuset="0x0000c000" nodeset="0x0" complete_nodeset="0x00000002" allowed_nodeset="0x0" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x0" complete_nodeset="0x00000002" allowed_nodeset="0x0" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="6" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x0" complete_nodeset="0x00000002" allowed_nodeset="0x0">
|
||||||
|
<object type="PU" os_index="14" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x0" complete_nodeset="0x00000002" allowed_nodeset="0x0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" nodeset="0x0" complete_nodeset="0x00000002" allowed_nodeset="0x0" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="7" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" nodeset="0x0" complete_nodeset="0x00000002" allowed_nodeset="0x0">
|
||||||
|
<object type="PU" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" nodeset="0x0" complete_nodeset="0x00000002" allowed_nodeset="0x0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Package" os_index="1" cpuset="0xffff0000" complete_cpuset="0xffff0000" online_cpuset="0xffff0000" allowed_cpuset="0xffff0000" nodeset="0x00000004" complete_nodeset="0x0000000c" allowed_nodeset="0x00000004">
|
||||||
|
<info name="CPUVendor" value="AuthenticAMD"/>
|
||||||
|
<info name="CPUFamilyNumber" value="21"/>
|
||||||
|
<info name="CPUModelNumber" value="2"/>
|
||||||
|
<info name="CPUModel" value="AMD Opteron(tm) Processor 6380"/>
|
||||||
|
<info name="CPUStepping" value="0"/>
|
||||||
|
<object type="NUMANode" os_index="2" cpuset="0x00ff0000" complete_cpuset="0x00ff0000" online_cpuset="0x00ff0000" allowed_cpuset="0x00ff0000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" local_memory="4226686976">
|
||||||
|
<page_type size="4096" count="1018594"/>
|
||||||
|
<page_type size="2097152" count="26"/>
|
||||||
|
<page_type size="1073741824" count="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00ff0000" complete_cpuset="0x00ff0000" online_cpuset="0x00ff0000" allowed_cpuset="0x00ff0000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="6291456" depth="3" cache_linesize="64" cache_associativity="48" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00030000" complete_cpuset="0x00030000" online_cpuset="0x00030000" allowed_cpuset="0x00030000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00010000" complete_cpuset="0x00010000" online_cpuset="0x00010000" allowed_cpuset="0x00010000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="0" cpuset="0x00010000" complete_cpuset="0x00010000" online_cpuset="0x00010000" allowed_cpuset="0x00010000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
|
||||||
|
<object type="PU" os_index="16" cpuset="0x00010000" complete_cpuset="0x00010000" online_cpuset="0x00010000" allowed_cpuset="0x00010000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00020000" complete_cpuset="0x00020000" online_cpuset="0x00020000" allowed_cpuset="0x00020000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="1" cpuset="0x00020000" complete_cpuset="0x00020000" online_cpuset="0x00020000" allowed_cpuset="0x00020000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
|
||||||
|
<object type="PU" os_index="17" cpuset="0x00020000" complete_cpuset="0x00020000" online_cpuset="0x00020000" allowed_cpuset="0x00020000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x000c0000" complete_cpuset="0x000c0000" online_cpuset="0x000c0000" allowed_cpuset="0x000c0000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00040000" complete_cpuset="0x00040000" online_cpuset="0x00040000" allowed_cpuset="0x00040000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="2" cpuset="0x00040000" complete_cpuset="0x00040000" online_cpuset="0x00040000" allowed_cpuset="0x00040000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
|
||||||
|
<object type="PU" os_index="18" cpuset="0x00040000" complete_cpuset="0x00040000" online_cpuset="0x00040000" allowed_cpuset="0x00040000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00080000" complete_cpuset="0x00080000" online_cpuset="0x00080000" allowed_cpuset="0x00080000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="3" cpuset="0x00080000" complete_cpuset="0x00080000" online_cpuset="0x00080000" allowed_cpuset="0x00080000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
|
||||||
|
<object type="PU" os_index="19" cpuset="0x00080000" complete_cpuset="0x00080000" online_cpuset="0x00080000" allowed_cpuset="0x00080000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00300000" complete_cpuset="0x00300000" online_cpuset="0x00300000" allowed_cpuset="0x00300000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00100000" complete_cpuset="0x00100000" online_cpuset="0x00100000" allowed_cpuset="0x00100000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="4" cpuset="0x00100000" complete_cpuset="0x00100000" online_cpuset="0x00100000" allowed_cpuset="0x00100000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
|
||||||
|
<object type="PU" os_index="20" cpuset="0x00100000" complete_cpuset="0x00100000" online_cpuset="0x00100000" allowed_cpuset="0x00100000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00200000" complete_cpuset="0x00200000" online_cpuset="0x00200000" allowed_cpuset="0x00200000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="5" cpuset="0x00200000" complete_cpuset="0x00200000" online_cpuset="0x00200000" allowed_cpuset="0x00200000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
|
||||||
|
<object type="PU" os_index="21" cpuset="0x00200000" complete_cpuset="0x00200000" online_cpuset="0x00200000" allowed_cpuset="0x00200000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00c00000" complete_cpuset="0x00c00000" online_cpuset="0x00c00000" allowed_cpuset="0x00c00000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00400000" complete_cpuset="0x00400000" online_cpuset="0x00400000" allowed_cpuset="0x00400000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="6" cpuset="0x00400000" complete_cpuset="0x00400000" online_cpuset="0x00400000" allowed_cpuset="0x00400000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
|
||||||
|
<object type="PU" os_index="22" cpuset="0x00400000" complete_cpuset="0x00400000" online_cpuset="0x00400000" allowed_cpuset="0x00400000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00800000" complete_cpuset="0x00800000" online_cpuset="0x00800000" allowed_cpuset="0x00800000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="7" cpuset="0x00800000" complete_cpuset="0x00800000" online_cpuset="0x00800000" allowed_cpuset="0x00800000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
|
||||||
|
<object type="PU" os_index="23" cpuset="0x00800000" complete_cpuset="0x00800000" online_cpuset="0x00800000" allowed_cpuset="0x00800000" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="NUMANode" os_index="3" cpuset="0xff000000" complete_cpuset="0xff000000" online_cpuset="0xff000000" allowed_cpuset="0xff000000" nodeset="0x0" complete_nodeset="0x00000008" allowed_nodeset="0x0">
|
||||||
|
<page_type size="4096" count="0"/>
|
||||||
|
<page_type size="2097152" count="0"/>
|
||||||
|
<object type="Cache" cpuset="0xff000000" complete_cpuset="0xff000000" online_cpuset="0xff000000" allowed_cpuset="0xff000000" nodeset="0x0" complete_nodeset="0x00000008" allowed_nodeset="0x0" cache_size="6291456" depth="3" cache_linesize="64" cache_associativity="48" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x03000000" complete_cpuset="0x03000000" online_cpuset="0x03000000" allowed_cpuset="0x03000000" nodeset="0x0" complete_nodeset="0x00000008" allowed_nodeset="0x0" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x01000000" complete_cpuset="0x01000000" online_cpuset="0x01000000" allowed_cpuset="0x01000000" nodeset="0x0" complete_nodeset="0x00000008" allowed_nodeset="0x0" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="0" cpuset="0x01000000" complete_cpuset="0x01000000" online_cpuset="0x01000000" allowed_cpuset="0x01000000" nodeset="0x0" complete_nodeset="0x00000008" allowed_nodeset="0x0">
|
||||||
|
<object type="PU" os_index="24" cpuset="0x01000000" complete_cpuset="0x01000000" online_cpuset="0x01000000" allowed_cpuset="0x01000000" nodeset="0x0" complete_nodeset="0x00000008" allowed_nodeset="0x0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x02000000" complete_cpuset="0x02000000" online_cpuset="0x02000000" allowed_cpuset="0x02000000" nodeset="0x0" complete_nodeset="0x00000008" allowed_nodeset="0x0" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="1" cpuset="0x02000000" complete_cpuset="0x02000000" online_cpuset="0x02000000" allowed_cpuset="0x02000000" nodeset="0x0" complete_nodeset="0x00000008" allowed_nodeset="0x0">
|
||||||
|
<object type="PU" os_index="25" cpuset="0x02000000" complete_cpuset="0x02000000" online_cpuset="0x02000000" allowed_cpuset="0x02000000" nodeset="0x0" complete_nodeset="0x00000008" allowed_nodeset="0x0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x0c000000" complete_cpuset="0x0c000000" online_cpuset="0x0c000000" allowed_cpuset="0x0c000000" nodeset="0x0" complete_nodeset="0x00000008" allowed_nodeset="0x0" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x04000000" complete_cpuset="0x04000000" online_cpuset="0x04000000" allowed_cpuset="0x04000000" nodeset="0x0" complete_nodeset="0x00000008" allowed_nodeset="0x0" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="2" cpuset="0x04000000" complete_cpuset="0x04000000" online_cpuset="0x04000000" allowed_cpuset="0x04000000" nodeset="0x0" complete_nodeset="0x00000008" allowed_nodeset="0x0">
|
||||||
|
<object type="PU" os_index="26" cpuset="0x04000000" complete_cpuset="0x04000000" online_cpuset="0x04000000" allowed_cpuset="0x04000000" nodeset="0x0" complete_nodeset="0x00000008" allowed_nodeset="0x0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x08000000" complete_cpuset="0x08000000" online_cpuset="0x08000000" allowed_cpuset="0x08000000" nodeset="0x0" complete_nodeset="0x00000008" allowed_nodeset="0x0" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="3" cpuset="0x08000000" complete_cpuset="0x08000000" online_cpuset="0x08000000" allowed_cpuset="0x08000000" nodeset="0x0" complete_nodeset="0x00000008" allowed_nodeset="0x0">
|
||||||
|
<object type="PU" os_index="27" cpuset="0x08000000" complete_cpuset="0x08000000" online_cpuset="0x08000000" allowed_cpuset="0x08000000" nodeset="0x0" complete_nodeset="0x00000008" allowed_nodeset="0x0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x30000000" complete_cpuset="0x30000000" online_cpuset="0x30000000" allowed_cpuset="0x30000000" nodeset="0x0" complete_nodeset="0x00000008" allowed_nodeset="0x0" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x10000000" complete_cpuset="0x10000000" online_cpuset="0x10000000" allowed_cpuset="0x10000000" nodeset="0x0" complete_nodeset="0x00000008" allowed_nodeset="0x0" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="4" cpuset="0x10000000" complete_cpuset="0x10000000" online_cpuset="0x10000000" allowed_cpuset="0x10000000" nodeset="0x0" complete_nodeset="0x00000008" allowed_nodeset="0x0">
|
||||||
|
<object type="PU" os_index="28" cpuset="0x10000000" complete_cpuset="0x10000000" online_cpuset="0x10000000" allowed_cpuset="0x10000000" nodeset="0x0" complete_nodeset="0x00000008" allowed_nodeset="0x0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x20000000" complete_cpuset="0x20000000" online_cpuset="0x20000000" allowed_cpuset="0x20000000" nodeset="0x0" complete_nodeset="0x00000008" allowed_nodeset="0x0" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="5" cpuset="0x20000000" complete_cpuset="0x20000000" online_cpuset="0x20000000" allowed_cpuset="0x20000000" nodeset="0x0" complete_nodeset="0x00000008" allowed_nodeset="0x0">
|
||||||
|
<object type="PU" os_index="29" cpuset="0x20000000" complete_cpuset="0x20000000" online_cpuset="0x20000000" allowed_cpuset="0x20000000" nodeset="0x0" complete_nodeset="0x00000008" allowed_nodeset="0x0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0xc0000000" complete_cpuset="0xc0000000" online_cpuset="0xc0000000" allowed_cpuset="0xc0000000" nodeset="0x0" complete_nodeset="0x00000008" allowed_nodeset="0x0" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x40000000" complete_cpuset="0x40000000" online_cpuset="0x40000000" allowed_cpuset="0x40000000" nodeset="0x0" complete_nodeset="0x00000008" allowed_nodeset="0x0" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="6" cpuset="0x40000000" complete_cpuset="0x40000000" online_cpuset="0x40000000" allowed_cpuset="0x40000000" nodeset="0x0" complete_nodeset="0x00000008" allowed_nodeset="0x0">
|
||||||
|
<object type="PU" os_index="30" cpuset="0x40000000" complete_cpuset="0x40000000" online_cpuset="0x40000000" allowed_cpuset="0x40000000" nodeset="0x0" complete_nodeset="0x00000008" allowed_nodeset="0x0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x80000000" complete_cpuset="0x80000000" online_cpuset="0x80000000" allowed_cpuset="0x80000000" nodeset="0x0" complete_nodeset="0x00000008" allowed_nodeset="0x0" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="7" cpuset="0x80000000" complete_cpuset="0x80000000" online_cpuset="0x80000000" allowed_cpuset="0x80000000" nodeset="0x0" complete_nodeset="0x00000008" allowed_nodeset="0x0">
|
||||||
|
<object type="PU" os_index="31" cpuset="0x80000000" complete_cpuset="0x80000000" online_cpuset="0x80000000" allowed_cpuset="0x80000000" nodeset="0x0" complete_nodeset="0x00000008" allowed_nodeset="0x0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Package" os_index="2" cpuset="0x0000ffff,0x0" complete_cpuset="0x0000ffff,0x0" online_cpuset="0x0000ffff,0x0" allowed_cpuset="0x0000ffff,0x0" nodeset="0x00000010" complete_nodeset="0x00000030" allowed_nodeset="0x00000010">
|
||||||
|
<info name="CPUVendor" value="AuthenticAMD"/>
|
||||||
|
<info name="CPUFamilyNumber" value="21"/>
|
||||||
|
<info name="CPUModelNumber" value="2"/>
|
||||||
|
<info name="CPUModel" value="AMD Opteron(tm) Processor 6380"/>
|
||||||
|
<info name="CPUStepping" value="0"/>
|
||||||
|
<object type="NUMANode" os_index="4" cpuset="0x000000ff,0x0" complete_cpuset="0x000000ff,0x0" online_cpuset="0x000000ff,0x0" allowed_cpuset="0x000000ff,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010" local_memory="4226686976">
|
||||||
|
<page_type size="4096" count="1018594"/>
|
||||||
|
<page_type size="2097152" count="26"/>
|
||||||
|
<page_type size="1073741824" count="0"/>
|
||||||
|
<object type="Cache" cpuset="0x000000ff,0x0" complete_cpuset="0x000000ff,0x0" online_cpuset="0x000000ff,0x0" allowed_cpuset="0x000000ff,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010" cache_size="6291456" depth="3" cache_linesize="64" cache_associativity="48" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000003,0x0" complete_cpuset="0x00000003,0x0" online_cpuset="0x00000003,0x0" allowed_cpuset="0x00000003,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000001,0x0" complete_cpuset="0x00000001,0x0" online_cpuset="0x00000001,0x0" allowed_cpuset="0x00000001,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="0" cpuset="0x00000001,0x0" complete_cpuset="0x00000001,0x0" online_cpuset="0x00000001,0x0" allowed_cpuset="0x00000001,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010">
|
||||||
|
<object type="PU" os_index="32" cpuset="0x00000001,0x0" complete_cpuset="0x00000001,0x0" online_cpuset="0x00000001,0x0" allowed_cpuset="0x00000001,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000002,0x0" complete_cpuset="0x00000002,0x0" online_cpuset="0x00000002,0x0" allowed_cpuset="0x00000002,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="1" cpuset="0x00000002,0x0" complete_cpuset="0x00000002,0x0" online_cpuset="0x00000002,0x0" allowed_cpuset="0x00000002,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010">
|
||||||
|
<object type="PU" os_index="33" cpuset="0x00000002,0x0" complete_cpuset="0x00000002,0x0" online_cpuset="0x00000002,0x0" allowed_cpuset="0x00000002,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x0000000c,0x0" complete_cpuset="0x0000000c,0x0" online_cpuset="0x0000000c,0x0" allowed_cpuset="0x0000000c,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000004,0x0" complete_cpuset="0x00000004,0x0" online_cpuset="0x00000004,0x0" allowed_cpuset="0x00000004,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="2" cpuset="0x00000004,0x0" complete_cpuset="0x00000004,0x0" online_cpuset="0x00000004,0x0" allowed_cpuset="0x00000004,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010">
|
||||||
|
<object type="PU" os_index="34" cpuset="0x00000004,0x0" complete_cpuset="0x00000004,0x0" online_cpuset="0x00000004,0x0" allowed_cpuset="0x00000004,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000008,0x0" complete_cpuset="0x00000008,0x0" online_cpuset="0x00000008,0x0" allowed_cpuset="0x00000008,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="3" cpuset="0x00000008,0x0" complete_cpuset="0x00000008,0x0" online_cpuset="0x00000008,0x0" allowed_cpuset="0x00000008,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010">
|
||||||
|
<object type="PU" os_index="35" cpuset="0x00000008,0x0" complete_cpuset="0x00000008,0x0" online_cpuset="0x00000008,0x0" allowed_cpuset="0x00000008,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000030,0x0" complete_cpuset="0x00000030,0x0" online_cpuset="0x00000030,0x0" allowed_cpuset="0x00000030,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000010,0x0" complete_cpuset="0x00000010,0x0" online_cpuset="0x00000010,0x0" allowed_cpuset="0x00000010,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="4" cpuset="0x00000010,0x0" complete_cpuset="0x00000010,0x0" online_cpuset="0x00000010,0x0" allowed_cpuset="0x00000010,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010">
|
||||||
|
<object type="PU" os_index="36" cpuset="0x00000010,0x0" complete_cpuset="0x00000010,0x0" online_cpuset="0x00000010,0x0" allowed_cpuset="0x00000010,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000020,0x0" complete_cpuset="0x00000020,0x0" online_cpuset="0x00000020,0x0" allowed_cpuset="0x00000020,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="5" cpuset="0x00000020,0x0" complete_cpuset="0x00000020,0x0" online_cpuset="0x00000020,0x0" allowed_cpuset="0x00000020,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010">
|
||||||
|
<object type="PU" os_index="37" cpuset="0x00000020,0x0" complete_cpuset="0x00000020,0x0" online_cpuset="0x00000020,0x0" allowed_cpuset="0x00000020,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x000000c0,0x0" complete_cpuset="0x000000c0,0x0" online_cpuset="0x000000c0,0x0" allowed_cpuset="0x000000c0,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000040,0x0" complete_cpuset="0x00000040,0x0" online_cpuset="0x00000040,0x0" allowed_cpuset="0x00000040,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="6" cpuset="0x00000040,0x0" complete_cpuset="0x00000040,0x0" online_cpuset="0x00000040,0x0" allowed_cpuset="0x00000040,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010">
|
||||||
|
<object type="PU" os_index="38" cpuset="0x00000040,0x0" complete_cpuset="0x00000040,0x0" online_cpuset="0x00000040,0x0" allowed_cpuset="0x00000040,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000080,0x0" complete_cpuset="0x00000080,0x0" online_cpuset="0x00000080,0x0" allowed_cpuset="0x00000080,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="7" cpuset="0x00000080,0x0" complete_cpuset="0x00000080,0x0" online_cpuset="0x00000080,0x0" allowed_cpuset="0x00000080,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010">
|
||||||
|
<object type="PU" os_index="39" cpuset="0x00000080,0x0" complete_cpuset="0x00000080,0x0" online_cpuset="0x00000080,0x0" allowed_cpuset="0x00000080,0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="NUMANode" os_index="5" cpuset="0x0000ff00,0x0" complete_cpuset="0x0000ff00,0x0" online_cpuset="0x0000ff00,0x0" allowed_cpuset="0x0000ff00,0x0" nodeset="0x0" complete_nodeset="0x00000020" allowed_nodeset="0x0">
|
||||||
|
<page_type size="4096" count="0"/>
|
||||||
|
<page_type size="2097152" count="0"/>
|
||||||
|
<object type="Cache" cpuset="0x0000ff00,0x0" complete_cpuset="0x0000ff00,0x0" online_cpuset="0x0000ff00,0x0" allowed_cpuset="0x0000ff00,0x0" nodeset="0x0" complete_nodeset="0x00000020" allowed_nodeset="0x0" cache_size="6291456" depth="3" cache_linesize="64" cache_associativity="48" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000300,0x0" complete_cpuset="0x00000300,0x0" online_cpuset="0x00000300,0x0" allowed_cpuset="0x00000300,0x0" nodeset="0x0" complete_nodeset="0x00000020" allowed_nodeset="0x0" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000100,0x0" complete_cpuset="0x00000100,0x0" online_cpuset="0x00000100,0x0" allowed_cpuset="0x00000100,0x0" nodeset="0x0" complete_nodeset="0x00000020" allowed_nodeset="0x0" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="0" cpuset="0x00000100,0x0" complete_cpuset="0x00000100,0x0" online_cpuset="0x00000100,0x0" allowed_cpuset="0x00000100,0x0" nodeset="0x0" complete_nodeset="0x00000020" allowed_nodeset="0x0">
|
||||||
|
<object type="PU" os_index="40" cpuset="0x00000100,0x0" complete_cpuset="0x00000100,0x0" online_cpuset="0x00000100,0x0" allowed_cpuset="0x00000100,0x0" nodeset="0x0" complete_nodeset="0x00000020" allowed_nodeset="0x0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000200,0x0" complete_cpuset="0x00000200,0x0" online_cpuset="0x00000200,0x0" allowed_cpuset="0x00000200,0x0" nodeset="0x0" complete_nodeset="0x00000020" allowed_nodeset="0x0" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="1" cpuset="0x00000200,0x0" complete_cpuset="0x00000200,0x0" online_cpuset="0x00000200,0x0" allowed_cpuset="0x00000200,0x0" nodeset="0x0" complete_nodeset="0x00000020" allowed_nodeset="0x0">
|
||||||
|
<object type="PU" os_index="41" cpuset="0x00000200,0x0" complete_cpuset="0x00000200,0x0" online_cpuset="0x00000200,0x0" allowed_cpuset="0x00000200,0x0" nodeset="0x0" complete_nodeset="0x00000020" allowed_nodeset="0x0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000c00,0x0" complete_cpuset="0x00000c00,0x0" online_cpuset="0x00000c00,0x0" allowed_cpuset="0x00000c00,0x0" nodeset="0x0" complete_nodeset="0x00000020" allowed_nodeset="0x0" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000400,0x0" complete_cpuset="0x00000400,0x0" online_cpuset="0x00000400,0x0" allowed_cpuset="0x00000400,0x0" nodeset="0x0" complete_nodeset="0x00000020" allowed_nodeset="0x0" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="2" cpuset="0x00000400,0x0" complete_cpuset="0x00000400,0x0" online_cpuset="0x00000400,0x0" allowed_cpuset="0x00000400,0x0" nodeset="0x0" complete_nodeset="0x00000020" allowed_nodeset="0x0">
|
||||||
|
<object type="PU" os_index="42" cpuset="0x00000400,0x0" complete_cpuset="0x00000400,0x0" online_cpuset="0x00000400,0x0" allowed_cpuset="0x00000400,0x0" nodeset="0x0" complete_nodeset="0x00000020" allowed_nodeset="0x0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000800,0x0" complete_cpuset="0x00000800,0x0" online_cpuset="0x00000800,0x0" allowed_cpuset="0x00000800,0x0" nodeset="0x0" complete_nodeset="0x00000020" allowed_nodeset="0x0" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="3" cpuset="0x00000800,0x0" complete_cpuset="0x00000800,0x0" online_cpuset="0x00000800,0x0" allowed_cpuset="0x00000800,0x0" nodeset="0x0" complete_nodeset="0x00000020" allowed_nodeset="0x0">
|
||||||
|
<object type="PU" os_index="43" cpuset="0x00000800,0x0" complete_cpuset="0x00000800,0x0" online_cpuset="0x00000800,0x0" allowed_cpuset="0x00000800,0x0" nodeset="0x0" complete_nodeset="0x00000020" allowed_nodeset="0x0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00003000,0x0" complete_cpuset="0x00003000,0x0" online_cpuset="0x00003000,0x0" allowed_cpuset="0x00003000,0x0" nodeset="0x0" complete_nodeset="0x00000020" allowed_nodeset="0x0" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00001000,0x0" complete_cpuset="0x00001000,0x0" online_cpuset="0x00001000,0x0" allowed_cpuset="0x00001000,0x0" nodeset="0x0" complete_nodeset="0x00000020" allowed_nodeset="0x0" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="4" cpuset="0x00001000,0x0" complete_cpuset="0x00001000,0x0" online_cpuset="0x00001000,0x0" allowed_cpuset="0x00001000,0x0" nodeset="0x0" complete_nodeset="0x00000020" allowed_nodeset="0x0">
|
||||||
|
<object type="PU" os_index="44" cpuset="0x00001000,0x0" complete_cpuset="0x00001000,0x0" online_cpuset="0x00001000,0x0" allowed_cpuset="0x00001000,0x0" nodeset="0x0" complete_nodeset="0x00000020" allowed_nodeset="0x0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00002000,0x0" complete_cpuset="0x00002000,0x0" online_cpuset="0x00002000,0x0" allowed_cpuset="0x00002000,0x0" nodeset="0x0" complete_nodeset="0x00000020" allowed_nodeset="0x0" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="5" cpuset="0x00002000,0x0" complete_cpuset="0x00002000,0x0" online_cpuset="0x00002000,0x0" allowed_cpuset="0x00002000,0x0" nodeset="0x0" complete_nodeset="0x00000020" allowed_nodeset="0x0">
|
||||||
|
<object type="PU" os_index="45" cpuset="0x00002000,0x0" complete_cpuset="0x00002000,0x0" online_cpuset="0x00002000,0x0" allowed_cpuset="0x00002000,0x0" nodeset="0x0" complete_nodeset="0x00000020" allowed_nodeset="0x0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x0000c000,0x0" complete_cpuset="0x0000c000,0x0" online_cpuset="0x0000c000,0x0" allowed_cpuset="0x0000c000,0x0" nodeset="0x0" complete_nodeset="0x00000020" allowed_nodeset="0x0" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00004000,0x0" complete_cpuset="0x00004000,0x0" online_cpuset="0x00004000,0x0" allowed_cpuset="0x00004000,0x0" nodeset="0x0" complete_nodeset="0x00000020" allowed_nodeset="0x0" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="6" cpuset="0x00004000,0x0" complete_cpuset="0x00004000,0x0" online_cpuset="0x00004000,0x0" allowed_cpuset="0x00004000,0x0" nodeset="0x0" complete_nodeset="0x00000020" allowed_nodeset="0x0">
|
||||||
|
<object type="PU" os_index="46" cpuset="0x00004000,0x0" complete_cpuset="0x00004000,0x0" online_cpuset="0x00004000,0x0" allowed_cpuset="0x00004000,0x0" nodeset="0x0" complete_nodeset="0x00000020" allowed_nodeset="0x0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00008000,0x0" complete_cpuset="0x00008000,0x0" online_cpuset="0x00008000,0x0" allowed_cpuset="0x00008000,0x0" nodeset="0x0" complete_nodeset="0x00000020" allowed_nodeset="0x0" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="7" cpuset="0x00008000,0x0" complete_cpuset="0x00008000,0x0" online_cpuset="0x00008000,0x0" allowed_cpuset="0x00008000,0x0" nodeset="0x0" complete_nodeset="0x00000020" allowed_nodeset="0x0">
|
||||||
|
<object type="PU" os_index="47" cpuset="0x00008000,0x0" complete_cpuset="0x00008000,0x0" online_cpuset="0x00008000,0x0" allowed_cpuset="0x00008000,0x0" nodeset="0x0" complete_nodeset="0x00000020" allowed_nodeset="0x0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Package" os_index="3" cpuset="0xffff0000,0x0" complete_cpuset="0xffff0000,0x0" online_cpuset="0xffff0000,0x0" allowed_cpuset="0xffff0000,0x0" nodeset="0x00000040" complete_nodeset="0x000000c0" allowed_nodeset="0x00000040">
|
||||||
|
<info name="CPUVendor" value="AuthenticAMD"/>
|
||||||
|
<info name="CPUFamilyNumber" value="21"/>
|
||||||
|
<info name="CPUModelNumber" value="2"/>
|
||||||
|
<info name="CPUModel" value="AMD Opteron(tm) Processor 6380"/>
|
||||||
|
<info name="CPUStepping" value="0"/>
|
||||||
|
<object type="NUMANode" os_index="6" cpuset="0x00ff0000,0x0" complete_cpuset="0x00ff0000,0x0" online_cpuset="0x00ff0000,0x0" allowed_cpuset="0x00ff0000,0x0" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040" local_memory="4193374208">
|
||||||
|
<page_type size="4096" count="1010461"/>
|
||||||
|
<page_type size="2097152" count="26"/>
|
||||||
|
<page_type size="1073741824" count="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00ff0000,0x0" complete_cpuset="0x00ff0000,0x0" online_cpuset="0x00ff0000,0x0" allowed_cpuset="0x00ff0000,0x0" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040" cache_size="6291456" depth="3" cache_linesize="64" cache_associativity="48" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00030000,0x0" complete_cpuset="0x00030000,0x0" online_cpuset="0x00030000,0x0" allowed_cpuset="0x00030000,0x0" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00010000,0x0" complete_cpuset="0x00010000,0x0" online_cpuset="0x00010000,0x0" allowed_cpuset="0x00010000,0x0" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="0" cpuset="0x00010000,0x0" complete_cpuset="0x00010000,0x0" online_cpuset="0x00010000,0x0" allowed_cpuset="0x00010000,0x0" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040">
|
||||||
|
<object type="PU" os_index="48" cpuset="0x00010000,0x0" complete_cpuset="0x00010000,0x0" online_cpuset="0x00010000,0x0" allowed_cpuset="0x00010000,0x0" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00020000,0x0" complete_cpuset="0x00020000,0x0" online_cpuset="0x00020000,0x0" allowed_cpuset="0x00020000,0x0" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="1" cpuset="0x00020000,0x0" complete_cpuset="0x00020000,0x0" online_cpuset="0x00020000,0x0" allowed_cpuset="0x00020000,0x0" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040">
|
||||||
|
<object type="PU" os_index="49" cpuset="0x00020000,0x0" complete_cpuset="0x00020000,0x0" online_cpuset="0x00020000,0x0" allowed_cpuset="0x00020000,0x0" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x000c0000,0x0" complete_cpuset="0x000c0000,0x0" online_cpuset="0x000c0000,0x0" allowed_cpuset="0x000c0000,0x0" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00040000,0x0" complete_cpuset="0x00040000,0x0" online_cpuset="0x00040000,0x0" allowed_cpuset="0x00040000,0x0" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="2" cpuset="0x00040000,0x0" complete_cpuset="0x00040000,0x0" online_cpuset="0x00040000,0x0" allowed_cpuset="0x00040000,0x0" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040">
|
||||||
|
<object type="PU" os_index="50" cpuset="0x00040000,0x0" complete_cpuset="0x00040000,0x0" online_cpuset="0x00040000,0x0" allowed_cpuset="0x00040000,0x0" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00080000,0x0" complete_cpuset="0x00080000,0x0" online_cpuset="0x00080000,0x0" allowed_cpuset="0x00080000,0x0" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="3" cpuset="0x00080000,0x0" complete_cpuset="0x00080000,0x0" online_cpuset="0x00080000,0x0" allowed_cpuset="0x00080000,0x0" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040">
|
||||||
|
<object type="PU" os_index="51" cpuset="0x00080000,0x0" complete_cpuset="0x00080000,0x0" online_cpuset="0x00080000,0x0" allowed_cpuset="0x00080000,0x0" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00300000,0x0" complete_cpuset="0x00300000,0x0" online_cpuset="0x00300000,0x0" allowed_cpuset="0x00300000,0x0" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00100000,0x0" complete_cpuset="0x00100000,0x0" online_cpuset="0x00100000,0x0" allowed_cpuset="0x00100000,0x0" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="4" cpuset="0x00100000,0x0" complete_cpuset="0x00100000,0x0" online_cpuset="0x00100000,0x0" allowed_cpuset="0x00100000,0x0" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040">
|
||||||
|
<object type="PU" os_index="52" cpuset="0x00100000,0x0" complete_cpuset="0x00100000,0x0" online_cpuset="0x00100000,0x0" allowed_cpuset="0x00100000,0x0" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00200000,0x0" complete_cpuset="0x00200000,0x0" online_cpuset="0x00200000,0x0" allowed_cpuset="0x00200000,0x0" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="5" cpuset="0x00200000,0x0" complete_cpuset="0x00200000,0x0" online_cpuset="0x00200000,0x0" allowed_cpuset="0x00200000,0x0" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040">
|
||||||
|
<object type="PU" os_index="53" cpuset="0x00200000,0x0" complete_cpuset="0x00200000,0x0" online_cpuset="0x00200000,0x0" allowed_cpuset="0x00200000,0x0" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00c00000,0x0" complete_cpuset="0x00c00000,0x0" online_cpuset="0x00c00000,0x0" allowed_cpuset="0x00c00000,0x0" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00400000,0x0" complete_cpuset="0x00400000,0x0" online_cpuset="0x00400000,0x0" allowed_cpuset="0x00400000,0x0" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="6" cpuset="0x00400000,0x0" complete_cpuset="0x00400000,0x0" online_cpuset="0x00400000,0x0" allowed_cpuset="0x00400000,0x0" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040">
|
||||||
|
<object type="PU" os_index="54" cpuset="0x00400000,0x0" complete_cpuset="0x00400000,0x0" online_cpuset="0x00400000,0x0" allowed_cpuset="0x00400000,0x0" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00800000,0x0" complete_cpuset="0x00800000,0x0" online_cpuset="0x00800000,0x0" allowed_cpuset="0x00800000,0x0" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="7" cpuset="0x00800000,0x0" complete_cpuset="0x00800000,0x0" online_cpuset="0x00800000,0x0" allowed_cpuset="0x00800000,0x0" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040">
|
||||||
|
<object type="PU" os_index="55" cpuset="0x00800000,0x0" complete_cpuset="0x00800000,0x0" online_cpuset="0x00800000,0x0" allowed_cpuset="0x00800000,0x0" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x00000040"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="NUMANode" os_index="7" cpuset="0xff000000,0x0" complete_cpuset="0xff000000,0x0" online_cpuset="0xff000000,0x0" allowed_cpuset="0xff000000,0x0" nodeset="0x0" complete_nodeset="0x00000080" allowed_nodeset="0x0">
|
||||||
|
<page_type size="4096" count="0"/>
|
||||||
|
<page_type size="2097152" count="0"/>
|
||||||
|
<object type="Cache" cpuset="0xff000000,0x0" complete_cpuset="0xff000000,0x0" online_cpuset="0xff000000,0x0" allowed_cpuset="0xff000000,0x0" nodeset="0x0" complete_nodeset="0x00000080" allowed_nodeset="0x0" cache_size="6291456" depth="3" cache_linesize="64" cache_associativity="48" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x03000000,0x0" complete_cpuset="0x03000000,0x0" online_cpuset="0x03000000,0x0" allowed_cpuset="0x03000000,0x0" nodeset="0x0" complete_nodeset="0x00000080" allowed_nodeset="0x0" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x01000000,0x0" complete_cpuset="0x01000000,0x0" online_cpuset="0x01000000,0x0" allowed_cpuset="0x01000000,0x0" nodeset="0x0" complete_nodeset="0x00000080" allowed_nodeset="0x0" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="0" cpuset="0x01000000,0x0" complete_cpuset="0x01000000,0x0" online_cpuset="0x01000000,0x0" allowed_cpuset="0x01000000,0x0" nodeset="0x0" complete_nodeset="0x00000080" allowed_nodeset="0x0">
|
||||||
|
<object type="PU" os_index="56" cpuset="0x01000000,0x0" complete_cpuset="0x01000000,0x0" online_cpuset="0x01000000,0x0" allowed_cpuset="0x01000000,0x0" nodeset="0x0" complete_nodeset="0x00000080" allowed_nodeset="0x0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x02000000,0x0" complete_cpuset="0x02000000,0x0" online_cpuset="0x02000000,0x0" allowed_cpuset="0x02000000,0x0" nodeset="0x0" complete_nodeset="0x00000080" allowed_nodeset="0x0" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="1" cpuset="0x02000000,0x0" complete_cpuset="0x02000000,0x0" online_cpuset="0x02000000,0x0" allowed_cpuset="0x02000000,0x0" nodeset="0x0" complete_nodeset="0x00000080" allowed_nodeset="0x0">
|
||||||
|
<object type="PU" os_index="57" cpuset="0x02000000,0x0" complete_cpuset="0x02000000,0x0" online_cpuset="0x02000000,0x0" allowed_cpuset="0x02000000,0x0" nodeset="0x0" complete_nodeset="0x00000080" allowed_nodeset="0x0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x0c000000,0x0" complete_cpuset="0x0c000000,0x0" online_cpuset="0x0c000000,0x0" allowed_cpuset="0x0c000000,0x0" nodeset="0x0" complete_nodeset="0x00000080" allowed_nodeset="0x0" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x04000000,0x0" complete_cpuset="0x04000000,0x0" online_cpuset="0x04000000,0x0" allowed_cpuset="0x04000000,0x0" nodeset="0x0" complete_nodeset="0x00000080" allowed_nodeset="0x0" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="2" cpuset="0x04000000,0x0" complete_cpuset="0x04000000,0x0" online_cpuset="0x04000000,0x0" allowed_cpuset="0x04000000,0x0" nodeset="0x0" complete_nodeset="0x00000080" allowed_nodeset="0x0">
|
||||||
|
<object type="PU" os_index="58" cpuset="0x04000000,0x0" complete_cpuset="0x04000000,0x0" online_cpuset="0x04000000,0x0" allowed_cpuset="0x04000000,0x0" nodeset="0x0" complete_nodeset="0x00000080" allowed_nodeset="0x0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x08000000,0x0" complete_cpuset="0x08000000,0x0" online_cpuset="0x08000000,0x0" allowed_cpuset="0x08000000,0x0" nodeset="0x0" complete_nodeset="0x00000080" allowed_nodeset="0x0" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="3" cpuset="0x08000000,0x0" complete_cpuset="0x08000000,0x0" online_cpuset="0x08000000,0x0" allowed_cpuset="0x08000000,0x0" nodeset="0x0" complete_nodeset="0x00000080" allowed_nodeset="0x0">
|
||||||
|
<object type="PU" os_index="59" cpuset="0x08000000,0x0" complete_cpuset="0x08000000,0x0" online_cpuset="0x08000000,0x0" allowed_cpuset="0x08000000,0x0" nodeset="0x0" complete_nodeset="0x00000080" allowed_nodeset="0x0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x30000000,0x0" complete_cpuset="0x30000000,0x0" online_cpuset="0x30000000,0x0" allowed_cpuset="0x30000000,0x0" nodeset="0x0" complete_nodeset="0x00000080" allowed_nodeset="0x0" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x10000000,0x0" complete_cpuset="0x10000000,0x0" online_cpuset="0x10000000,0x0" allowed_cpuset="0x10000000,0x0" nodeset="0x0" complete_nodeset="0x00000080" allowed_nodeset="0x0" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="4" cpuset="0x10000000,0x0" complete_cpuset="0x10000000,0x0" online_cpuset="0x10000000,0x0" allowed_cpuset="0x10000000,0x0" nodeset="0x0" complete_nodeset="0x00000080" allowed_nodeset="0x0">
|
||||||
|
<object type="PU" os_index="60" cpuset="0x10000000,0x0" complete_cpuset="0x10000000,0x0" online_cpuset="0x10000000,0x0" allowed_cpuset="0x10000000,0x0" nodeset="0x0" complete_nodeset="0x00000080" allowed_nodeset="0x0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x20000000,0x0" complete_cpuset="0x20000000,0x0" online_cpuset="0x20000000,0x0" allowed_cpuset="0x20000000,0x0" nodeset="0x0" complete_nodeset="0x00000080" allowed_nodeset="0x0" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="5" cpuset="0x20000000,0x0" complete_cpuset="0x20000000,0x0" online_cpuset="0x20000000,0x0" allowed_cpuset="0x20000000,0x0" nodeset="0x0" complete_nodeset="0x00000080" allowed_nodeset="0x0">
|
||||||
|
<object type="PU" os_index="61" cpuset="0x20000000,0x0" complete_cpuset="0x20000000,0x0" online_cpuset="0x20000000,0x0" allowed_cpuset="0x20000000,0x0" nodeset="0x0" complete_nodeset="0x00000080" allowed_nodeset="0x0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0xc0000000,0x0" complete_cpuset="0xc0000000,0x0" online_cpuset="0xc0000000,0x0" allowed_cpuset="0xc0000000,0x0" nodeset="0x0" complete_nodeset="0x00000080" allowed_nodeset="0x0" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x40000000,0x0" complete_cpuset="0x40000000,0x0" online_cpuset="0x40000000,0x0" allowed_cpuset="0x40000000,0x0" nodeset="0x0" complete_nodeset="0x00000080" allowed_nodeset="0x0" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="6" cpuset="0x40000000,0x0" complete_cpuset="0x40000000,0x0" online_cpuset="0x40000000,0x0" allowed_cpuset="0x40000000,0x0" nodeset="0x0" complete_nodeset="0x00000080" allowed_nodeset="0x0">
|
||||||
|
<object type="PU" os_index="62" cpuset="0x40000000,0x0" complete_cpuset="0x40000000,0x0" online_cpuset="0x40000000,0x0" allowed_cpuset="0x40000000,0x0" nodeset="0x0" complete_nodeset="0x00000080" allowed_nodeset="0x0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x80000000,0x0" complete_cpuset="0x80000000,0x0" online_cpuset="0x80000000,0x0" allowed_cpuset="0x80000000,0x0" nodeset="0x0" complete_nodeset="0x00000080" allowed_nodeset="0x0" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="4" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="7" cpuset="0x80000000,0x0" complete_cpuset="0x80000000,0x0" online_cpuset="0x80000000,0x0" allowed_cpuset="0x80000000,0x0" nodeset="0x0" complete_nodeset="0x00000080" allowed_nodeset="0x0">
|
||||||
|
<object type="PU" os_index="63" cpuset="0x80000000,0x0" complete_cpuset="0x80000000,0x0" online_cpuset="0x80000000,0x0" allowed_cpuset="0x80000000,0x0" nodeset="0x0" complete_nodeset="0x00000080" allowed_nodeset="0x0"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</topology>
|
||||||
105
doc/topology/AMD_Ryzen_7_2700X_windows_2_0_4.xml
Normal file
105
doc/topology/AMD_Ryzen_7_2700X_windows_2_0_4.xml
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE topology SYSTEM "hwloc2.dtd">
|
||||||
|
<topology version="2.0">
|
||||||
|
<object type="Machine" os_index="0" cpuset="0x0000ffff" complete_cpuset="0x0000ffff" allowed_cpuset="0x0000ffff" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" gp_index="1">
|
||||||
|
<info name="Backend" value="Windows"/>
|
||||||
|
<info name="hwlocVersion" value="2.0.4"/>
|
||||||
|
<info name="ProcessName" value="xmrig.exe"/>
|
||||||
|
<object type="Package" cpuset="0x0000ffff" complete_cpuset="0x0000ffff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="2">
|
||||||
|
<info name="CPUVendor" value="AuthenticAMD"/>
|
||||||
|
<info name="CPUFamilyNumber" value="23"/>
|
||||||
|
<info name="CPUModelNumber" value="8"/>
|
||||||
|
<info name="CPUModel" value="AMD Ryzen 7 2700X Eight-Core Processor "/>
|
||||||
|
<info name="CPUStepping" value="2"/>
|
||||||
|
<object type="NUMANode" os_index="0" cpuset="0x0000ffff" complete_cpuset="0x0000ffff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="29" local_memory="25515728896">
|
||||||
|
<page_type size="4096" count="0"/>
|
||||||
|
</object>
|
||||||
|
<object type="L3Cache" cpuset="0x000000ff" complete_cpuset="0x000000ff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="6" cache_size="8388608" depth="3" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L2Cache" cpuset="0x00000003" complete_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="5" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000003" complete_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="4" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000003" complete_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="3">
|
||||||
|
<object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="31"/>
|
||||||
|
<object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="32"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x0000000c" complete_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="9" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L1Cache" cpuset="0x0000000c" complete_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="8" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x0000000c" complete_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="7">
|
||||||
|
<object type="PU" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="33"/>
|
||||||
|
<object type="PU" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="34"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000030" complete_cpuset="0x00000030" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="12" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000030" complete_cpuset="0x00000030" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="11" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000030" complete_cpuset="0x00000030" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="10">
|
||||||
|
<object type="PU" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="35"/>
|
||||||
|
<object type="PU" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="36"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x000000c0" complete_cpuset="0x000000c0" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="15" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L1Cache" cpuset="0x000000c0" complete_cpuset="0x000000c0" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="14" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x000000c0" complete_cpuset="0x000000c0" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="13">
|
||||||
|
<object type="PU" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="37"/>
|
||||||
|
<object type="PU" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="38"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L3Cache" cpuset="0x0000ff00" complete_cpuset="0x0000ff00" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="19" cache_size="8388608" depth="3" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L2Cache" cpuset="0x00000300" complete_cpuset="0x00000300" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="18" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000300" complete_cpuset="0x00000300" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="17" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000300" complete_cpuset="0x00000300" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="16">
|
||||||
|
<object type="PU" os_index="8" cpuset="0x00000100" complete_cpuset="0x00000100" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="39"/>
|
||||||
|
<object type="PU" os_index="9" cpuset="0x00000200" complete_cpuset="0x00000200" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="40"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000c00" complete_cpuset="0x00000c00" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="22" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000c00" complete_cpuset="0x00000c00" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="21" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000c00" complete_cpuset="0x00000c00" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="20">
|
||||||
|
<object type="PU" os_index="10" cpuset="0x00000400" complete_cpuset="0x00000400" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="41"/>
|
||||||
|
<object type="PU" os_index="11" cpuset="0x00000800" complete_cpuset="0x00000800" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="42"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00003000" complete_cpuset="0x00003000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="25" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00003000" complete_cpuset="0x00003000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="24" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00003000" complete_cpuset="0x00003000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="23">
|
||||||
|
<object type="PU" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="43"/>
|
||||||
|
<object type="PU" os_index="13" cpuset="0x00002000" complete_cpuset="0x00002000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="44"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x0000c000" complete_cpuset="0x0000c000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="28" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L1Cache" cpuset="0x0000c000" complete_cpuset="0x0000c000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="27" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x0000c000" complete_cpuset="0x0000c000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="26">
|
||||||
|
<object type="PU" os_index="14" cpuset="0x00004000" complete_cpuset="0x00004000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="45"/>
|
||||||
|
<object type="PU" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="46"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</topology>
|
||||||
104
doc/topology/AMD_Ryzen_7_3700X_windows_2_0_4.xml
Normal file
104
doc/topology/AMD_Ryzen_7_3700X_windows_2_0_4.xml
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE topology SYSTEM "hwloc2.dtd">
|
||||||
|
<topology version="2.0">
|
||||||
|
<object type="Machine" os_index="0" cpuset="0x0000ffff" complete_cpuset="0x0000ffff" allowed_cpuset="0x0000ffff" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" gp_index="1">
|
||||||
|
<info name="Backend" value="Windows"/>
|
||||||
|
<info name="hwlocVersion" value="2.0.4"/>
|
||||||
|
<object type="Package" cpuset="0x0000ffff" complete_cpuset="0x0000ffff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="2">
|
||||||
|
<info name="CPUVendor" value="AuthenticAMD"/>
|
||||||
|
<info name="CPUFamilyNumber" value="23"/>
|
||||||
|
<info name="CPUModelNumber" value="113"/>
|
||||||
|
<info name="CPUModel" value="AMD Ryzen 7 3700X 8-Core Processor "/>
|
||||||
|
<info name="CPUStepping" value="0"/>
|
||||||
|
<object type="NUMANode" os_index="0" cpuset="0x0000ffff" complete_cpuset="0x0000ffff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="29" local_memory="15508537344">
|
||||||
|
<page_type size="4096" count="0"/>
|
||||||
|
</object>
|
||||||
|
<object type="L3Cache" cpuset="0x000000ff" complete_cpuset="0x000000ff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="6" cache_size="16777216" depth="3" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L2Cache" cpuset="0x00000003" complete_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="5" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000003" complete_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="4" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000003" complete_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="3">
|
||||||
|
<object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="31"/>
|
||||||
|
<object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="32"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x0000000c" complete_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="9" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L1Cache" cpuset="0x0000000c" complete_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="8" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x0000000c" complete_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="7">
|
||||||
|
<object type="PU" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="33"/>
|
||||||
|
<object type="PU" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="34"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000030" complete_cpuset="0x00000030" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="12" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000030" complete_cpuset="0x00000030" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="11" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000030" complete_cpuset="0x00000030" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="10">
|
||||||
|
<object type="PU" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="35"/>
|
||||||
|
<object type="PU" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="36"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x000000c0" complete_cpuset="0x000000c0" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="15" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L1Cache" cpuset="0x000000c0" complete_cpuset="0x000000c0" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="14" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x000000c0" complete_cpuset="0x000000c0" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="13">
|
||||||
|
<object type="PU" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="37"/>
|
||||||
|
<object type="PU" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="38"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L3Cache" cpuset="0x0000ff00" complete_cpuset="0x0000ff00" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="19" cache_size="16777216" depth="3" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L2Cache" cpuset="0x00000300" complete_cpuset="0x00000300" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="18" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000300" complete_cpuset="0x00000300" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="17" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000300" complete_cpuset="0x00000300" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="16">
|
||||||
|
<object type="PU" os_index="8" cpuset="0x00000100" complete_cpuset="0x00000100" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="39"/>
|
||||||
|
<object type="PU" os_index="9" cpuset="0x00000200" complete_cpuset="0x00000200" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="40"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000c00" complete_cpuset="0x00000c00" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="22" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000c00" complete_cpuset="0x00000c00" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="21" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000c00" complete_cpuset="0x00000c00" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="20">
|
||||||
|
<object type="PU" os_index="10" cpuset="0x00000400" complete_cpuset="0x00000400" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="41"/>
|
||||||
|
<object type="PU" os_index="11" cpuset="0x00000800" complete_cpuset="0x00000800" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="42"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00003000" complete_cpuset="0x00003000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="25" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00003000" complete_cpuset="0x00003000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="24" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00003000" complete_cpuset="0x00003000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="23">
|
||||||
|
<object type="PU" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="43"/>
|
||||||
|
<object type="PU" os_index="13" cpuset="0x00002000" complete_cpuset="0x00002000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="44"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x0000c000" complete_cpuset="0x0000c000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="28" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L1Cache" cpuset="0x0000c000" complete_cpuset="0x0000c000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="27" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x0000c000" complete_cpuset="0x0000c000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="26">
|
||||||
|
<object type="PU" os_index="14" cpuset="0x00004000" complete_cpuset="0x00004000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="45"/>
|
||||||
|
<object type="PU" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="46"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</topology>
|
||||||
226
doc/topology/AMD_Ryzen_Threadripper_2950X_N2_linux_2_0_4.xml
Normal file
226
doc/topology/AMD_Ryzen_Threadripper_2950X_N2_linux_2_0_4.xml
Normal file
@@ -0,0 +1,226 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE topology SYSTEM "hwloc2.dtd">
|
||||||
|
<topology version="2.0">
|
||||||
|
<object type="Machine" os_index="0" cpuset="0xffffffff" complete_cpuset="0xffffffff" allowed_cpuset="0xffffffff" nodeset="0x00000003" complete_nodeset="0x00000003" allowed_nodeset="0x00000003" gp_index="1">
|
||||||
|
<info name="DMIProductName" value="System Product Name"/>
|
||||||
|
<info name="DMIProductVersion" value="System Version"/>
|
||||||
|
<info name="DMIBoardVendor" value="ASUSTeK COMPUTER INC."/>
|
||||||
|
<info name="DMIBoardName" value="PRIME X399-A"/>
|
||||||
|
<info name="DMIBoardVersion" value="Rev 1.xx"/>
|
||||||
|
<info name="DMIBoardAssetTag" value="Default string"/>
|
||||||
|
<info name="DMIChassisVendor" value="Default string"/>
|
||||||
|
<info name="DMIChassisType" value="3"/>
|
||||||
|
<info name="DMIChassisVersion" value="Default string"/>
|
||||||
|
<info name="DMIChassisAssetTag" value="Default string"/>
|
||||||
|
<info name="DMIBIOSVendor" value="American Megatrends Inc."/>
|
||||||
|
<info name="DMIBIOSVersion" value="1002"/>
|
||||||
|
<info name="DMIBIOSDate" value="02/15/2019"/>
|
||||||
|
<info name="DMISysVendor" value="System manufacturer"/>
|
||||||
|
<info name="Backend" value="Linux"/>
|
||||||
|
<info name="LinuxCgroup" value="/"/>
|
||||||
|
<info name="OSName" value="Linux"/>
|
||||||
|
<info name="OSRelease" value="4.15.0-55-generic"/>
|
||||||
|
<info name="OSVersion" value="#60-Ubuntu SMP Tue Jul 2 18:22:20 UTC 2019"/>
|
||||||
|
<info name="HostName" value="host"/>
|
||||||
|
<info name="Architecture" value="x86_64"/>
|
||||||
|
<info name="hwlocVersion" value="2.0.4"/>
|
||||||
|
<info name="ProcessName" value="xmrig"/>
|
||||||
|
<object type="Package" os_index="0" cpuset="0xffffffff" complete_cpuset="0xffffffff" nodeset="0x00000003" complete_nodeset="0x00000003" gp_index="2">
|
||||||
|
<info name="CPUVendor" value="AuthenticAMD"/>
|
||||||
|
<info name="CPUFamilyNumber" value="23"/>
|
||||||
|
<info name="CPUModelNumber" value="8"/>
|
||||||
|
<info name="CPUModel" value="AMD Ryzen Threadripper 2950X 16-Core Processor "/>
|
||||||
|
<info name="CPUStepping" value="2"/>
|
||||||
|
<object type="Group" cpuset="0x00ff00ff" complete_cpuset="0x00ff00ff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="89" kind="1001" subkind="0">
|
||||||
|
<object type="NUMANode" os_index="0" cpuset="0x00ff00ff" complete_cpuset="0x00ff00ff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="87" local_memory="8309678080">
|
||||||
|
<page_type size="4096" count="2028730"/>
|
||||||
|
<page_type size="2097152" count="0"/>
|
||||||
|
<page_type size="1073741824" count="0"/>
|
||||||
|
</object>
|
||||||
|
<object type="L3Cache" cpuset="0x000f000f" complete_cpuset="0x000f000f" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="7" cache_size="8388608" depth="3" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L2Cache" cpuset="0x00010001" complete_cpuset="0x00010001" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="6" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00010001" complete_cpuset="0x00010001" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="5" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="0" cpuset="0x00010001" complete_cpuset="0x00010001" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="3">
|
||||||
|
<object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="4"/>
|
||||||
|
<object type="PU" os_index="16" cpuset="0x00010000" complete_cpuset="0x00010000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="71"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00020002" complete_cpuset="0x00020002" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="11" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00020002" complete_cpuset="0x00020002" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="10" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="1" cpuset="0x00020002" complete_cpuset="0x00020002" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="8">
|
||||||
|
<object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="9"/>
|
||||||
|
<object type="PU" os_index="17" cpuset="0x00020000" complete_cpuset="0x00020000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="72"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00040004" complete_cpuset="0x00040004" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="15" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00040004" complete_cpuset="0x00040004" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="14" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="2" cpuset="0x00040004" complete_cpuset="0x00040004" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="12">
|
||||||
|
<object type="PU" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="13"/>
|
||||||
|
<object type="PU" os_index="18" cpuset="0x00040000" complete_cpuset="0x00040000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="73"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00080008" complete_cpuset="0x00080008" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="19" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00080008" complete_cpuset="0x00080008" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="18" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="3" cpuset="0x00080008" complete_cpuset="0x00080008" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="16">
|
||||||
|
<object type="PU" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="17"/>
|
||||||
|
<object type="PU" os_index="19" cpuset="0x00080000" complete_cpuset="0x00080000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="74"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L3Cache" cpuset="0x00f000f0" complete_cpuset="0x00f000f0" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="24" cache_size="8388608" depth="3" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L2Cache" cpuset="0x00100010" complete_cpuset="0x00100010" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="23" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00100010" complete_cpuset="0x00100010" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="22" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="4" cpuset="0x00100010" complete_cpuset="0x00100010" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="20">
|
||||||
|
<object type="PU" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="21"/>
|
||||||
|
<object type="PU" os_index="20" cpuset="0x00100000" complete_cpuset="0x00100000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="75"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00200020" complete_cpuset="0x00200020" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="28" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00200020" complete_cpuset="0x00200020" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="27" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="5" cpuset="0x00200020" complete_cpuset="0x00200020" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="25">
|
||||||
|
<object type="PU" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="26"/>
|
||||||
|
<object type="PU" os_index="21" cpuset="0x00200000" complete_cpuset="0x00200000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="76"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00400040" complete_cpuset="0x00400040" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="32" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00400040" complete_cpuset="0x00400040" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="31" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="6" cpuset="0x00400040" complete_cpuset="0x00400040" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="29">
|
||||||
|
<object type="PU" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="30"/>
|
||||||
|
<object type="PU" os_index="22" cpuset="0x00400000" complete_cpuset="0x00400000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="77"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00800080" complete_cpuset="0x00800080" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="36" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00800080" complete_cpuset="0x00800080" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="35" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="7" cpuset="0x00800080" complete_cpuset="0x00800080" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="33">
|
||||||
|
<object type="PU" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="34"/>
|
||||||
|
<object type="PU" os_index="23" cpuset="0x00800000" complete_cpuset="0x00800000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="78"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Group" cpuset="0xff00ff00" complete_cpuset="0xff00ff00" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="90" kind="1001" subkind="0">
|
||||||
|
<object type="NUMANode" os_index="1" cpuset="0xff00ff00" complete_cpuset="0xff00ff00" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="88" local_memory="8419663872">
|
||||||
|
<page_type size="4096" count="2055582"/>
|
||||||
|
<page_type size="2097152" count="0"/>
|
||||||
|
<page_type size="1073741824" count="0"/>
|
||||||
|
</object>
|
||||||
|
<object type="L3Cache" cpuset="0x0f000f00" complete_cpuset="0x0f000f00" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="41" cache_size="8388608" depth="3" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L2Cache" cpuset="0x01000100" complete_cpuset="0x01000100" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="40" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L1Cache" cpuset="0x01000100" complete_cpuset="0x01000100" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="39" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="0" cpuset="0x01000100" complete_cpuset="0x01000100" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="37">
|
||||||
|
<object type="PU" os_index="8" cpuset="0x00000100" complete_cpuset="0x00000100" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="38"/>
|
||||||
|
<object type="PU" os_index="24" cpuset="0x01000000" complete_cpuset="0x01000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="79"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x02000200" complete_cpuset="0x02000200" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="45" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L1Cache" cpuset="0x02000200" complete_cpuset="0x02000200" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="44" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="1" cpuset="0x02000200" complete_cpuset="0x02000200" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="42">
|
||||||
|
<object type="PU" os_index="9" cpuset="0x00000200" complete_cpuset="0x00000200" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="43"/>
|
||||||
|
<object type="PU" os_index="25" cpuset="0x02000000" complete_cpuset="0x02000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="80"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x04000400" complete_cpuset="0x04000400" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="49" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L1Cache" cpuset="0x04000400" complete_cpuset="0x04000400" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="48" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="2" cpuset="0x04000400" complete_cpuset="0x04000400" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="46">
|
||||||
|
<object type="PU" os_index="10" cpuset="0x00000400" complete_cpuset="0x00000400" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="47"/>
|
||||||
|
<object type="PU" os_index="26" cpuset="0x04000000" complete_cpuset="0x04000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="81"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x08000800" complete_cpuset="0x08000800" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="53" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L1Cache" cpuset="0x08000800" complete_cpuset="0x08000800" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="52" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="3" cpuset="0x08000800" complete_cpuset="0x08000800" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="50">
|
||||||
|
<object type="PU" os_index="11" cpuset="0x00000800" complete_cpuset="0x00000800" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="51"/>
|
||||||
|
<object type="PU" os_index="27" cpuset="0x08000000" complete_cpuset="0x08000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="82"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L3Cache" cpuset="0xf000f000" complete_cpuset="0xf000f000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="58" cache_size="8388608" depth="3" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L2Cache" cpuset="0x10001000" complete_cpuset="0x10001000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="57" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L1Cache" cpuset="0x10001000" complete_cpuset="0x10001000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="56" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="4" cpuset="0x10001000" complete_cpuset="0x10001000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="54">
|
||||||
|
<object type="PU" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="55"/>
|
||||||
|
<object type="PU" os_index="28" cpuset="0x10000000" complete_cpuset="0x10000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="83"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x20002000" complete_cpuset="0x20002000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="62" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L1Cache" cpuset="0x20002000" complete_cpuset="0x20002000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="61" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="5" cpuset="0x20002000" complete_cpuset="0x20002000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="59">
|
||||||
|
<object type="PU" os_index="13" cpuset="0x00002000" complete_cpuset="0x00002000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="60"/>
|
||||||
|
<object type="PU" os_index="29" cpuset="0x20000000" complete_cpuset="0x20000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="84"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x40004000" complete_cpuset="0x40004000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="66" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L1Cache" cpuset="0x40004000" complete_cpuset="0x40004000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="65" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="6" cpuset="0x40004000" complete_cpuset="0x40004000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="63">
|
||||||
|
<object type="PU" os_index="14" cpuset="0x00004000" complete_cpuset="0x00004000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="64"/>
|
||||||
|
<object type="PU" os_index="30" cpuset="0x40000000" complete_cpuset="0x40000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="85"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x80008000" complete_cpuset="0x80008000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="70" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L1Cache" cpuset="0x80008000" complete_cpuset="0x80008000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="69" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="7" cpuset="0x80008000" complete_cpuset="0x80008000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="67">
|
||||||
|
<object type="PU" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="68"/>
|
||||||
|
<object type="PU" os_index="31" cpuset="0x80000000" complete_cpuset="0x80000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="86"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<distances2 type="NUMANode" nbobjs="2" kind="5" indexing="os">
|
||||||
|
<indexes length="4">0 1 </indexes>
|
||||||
|
<u64values length="12">10 16 16 10 </u64values>
|
||||||
|
</distances2>
|
||||||
|
</topology>
|
||||||
328
doc/topology/AMD_Ryzen_Threadripper_2950X_UMA_linux_1_11_9.xml
Normal file
328
doc/topology/AMD_Ryzen_Threadripper_2950X_UMA_linux_1_11_9.xml
Normal file
@@ -0,0 +1,328 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE topology SYSTEM "hwloc.dtd">
|
||||||
|
<topology>
|
||||||
|
<object type="Machine" os_index="0" cpuset="0xffffffff" complete_cpuset="0xffffffff" online_cpuset="0xffffffff" allowed_cpuset="0xffffffff" local_memory="135131918336">
|
||||||
|
<page_type size="4096" count="32991191"/>
|
||||||
|
<page_type size="2097152" count="0"/>
|
||||||
|
<page_type size="1073741824" count="0"/>
|
||||||
|
<info name="DMIProductName" value="MS-7B09"/>
|
||||||
|
<info name="DMIProductVersion" value="2.0"/>
|
||||||
|
<info name="DMIProductSerial" value="To be filled by O.E.M."/>
|
||||||
|
<info name="DMIProductUUID" value="00000000-0000-0000-0000-00D8610EB83E"/>
|
||||||
|
<info name="DMIBoardVendor" value="Micro-Star International Co., Ltd."/>
|
||||||
|
<info name="DMIBoardName" value="X399 HZ"/>
|
||||||
|
<info name="DMIBoardVersion" value="2.0"/>
|
||||||
|
<info name="DMIBoardSerial" value="I916583383"/>
|
||||||
|
<info name="DMIBoardAssetTag" value="To be filled by O.E.M."/>
|
||||||
|
<info name="DMIChassisVendor" value="Micro-Star International Co., Ltd."/>
|
||||||
|
<info name="DMIChassisType" value="3"/>
|
||||||
|
<info name="DMIChassisVersion" value="2.0"/>
|
||||||
|
<info name="DMIChassisSerial" value="To be filled by O.E.M."/>
|
||||||
|
<info name="DMIChassisAssetTag" value="To be filled by O.E.M."/>
|
||||||
|
<info name="DMIBIOSVendor" value="American Megatrends Inc."/>
|
||||||
|
<info name="DMIBIOSVersion" value="A.E4"/>
|
||||||
|
<info name="DMIBIOSDate" value="01/21/2019"/>
|
||||||
|
<info name="DMISysVendor" value="Micro-Star International Co., Ltd."/>
|
||||||
|
<info name="Backend" value="Linux"/>
|
||||||
|
<info name="LinuxCgroup" value="/"/>
|
||||||
|
<info name="OSName" value="Linux"/>
|
||||||
|
<info name="OSRelease" value="4.15.0-52-generic"/>
|
||||||
|
<info name="OSVersion" value="#56-Ubuntu SMP Tue Jun 4 22:49:08 UTC 2019"/>
|
||||||
|
<info name="HostName" value="host"/>
|
||||||
|
<info name="Architecture" value="x86_64"/>
|
||||||
|
<info name="hwlocVersion" value="1.11.9"/>
|
||||||
|
<info name="ProcessName" value="lstopo"/>
|
||||||
|
<object type="Package" os_index="0" cpuset="0xffffffff" complete_cpuset="0xffffffff" online_cpuset="0xffffffff" allowed_cpuset="0xffffffff">
|
||||||
|
<info name="CPUVendor" value="AuthenticAMD"/>
|
||||||
|
<info name="CPUFamilyNumber" value="23"/>
|
||||||
|
<info name="CPUModelNumber" value="8"/>
|
||||||
|
<info name="CPUModel" value="AMD Ryzen Threadripper 2950X 16-Core Processor"/>
|
||||||
|
<info name="CPUStepping" value="2"/>
|
||||||
|
<object type="Cache" cpuset="0x000f000f" complete_cpuset="0x000f000f" online_cpuset="0x000f000f" allowed_cpuset="0x000f000f" cache_size="8388608" depth="3" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00010001" complete_cpuset="0x00010001" online_cpuset="0x00010001" allowed_cpuset="0x00010001" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="Cache" cpuset="0x00010001" complete_cpuset="0x00010001" online_cpuset="0x00010001" allowed_cpuset="0x00010001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00010001" complete_cpuset="0x00010001" online_cpuset="0x00010001" allowed_cpuset="0x00010001" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="0" cpuset="0x00010001" complete_cpuset="0x00010001" online_cpuset="0x00010001" allowed_cpuset="0x00010001">
|
||||||
|
<object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001"/>
|
||||||
|
<object type="PU" os_index="16" cpuset="0x00010000" complete_cpuset="0x00010000" online_cpuset="0x00010000" allowed_cpuset="0x00010000"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00020002" complete_cpuset="0x00020002" online_cpuset="0x00020002" allowed_cpuset="0x00020002" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="Cache" cpuset="0x00020002" complete_cpuset="0x00020002" online_cpuset="0x00020002" allowed_cpuset="0x00020002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00020002" complete_cpuset="0x00020002" online_cpuset="0x00020002" allowed_cpuset="0x00020002" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="1" cpuset="0x00020002" complete_cpuset="0x00020002" online_cpuset="0x00020002" allowed_cpuset="0x00020002">
|
||||||
|
<object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002"/>
|
||||||
|
<object type="PU" os_index="17" cpuset="0x00020000" complete_cpuset="0x00020000" online_cpuset="0x00020000" allowed_cpuset="0x00020000"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00040004" complete_cpuset="0x00040004" online_cpuset="0x00040004" allowed_cpuset="0x00040004" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="Cache" cpuset="0x00040004" complete_cpuset="0x00040004" online_cpuset="0x00040004" allowed_cpuset="0x00040004" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00040004" complete_cpuset="0x00040004" online_cpuset="0x00040004" allowed_cpuset="0x00040004" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="2" cpuset="0x00040004" complete_cpuset="0x00040004" online_cpuset="0x00040004" allowed_cpuset="0x00040004">
|
||||||
|
<object type="PU" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004"/>
|
||||||
|
<object type="PU" os_index="18" cpuset="0x00040000" complete_cpuset="0x00040000" online_cpuset="0x00040000" allowed_cpuset="0x00040000"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00080008" complete_cpuset="0x00080008" online_cpuset="0x00080008" allowed_cpuset="0x00080008" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="Cache" cpuset="0x00080008" complete_cpuset="0x00080008" online_cpuset="0x00080008" allowed_cpuset="0x00080008" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00080008" complete_cpuset="0x00080008" online_cpuset="0x00080008" allowed_cpuset="0x00080008" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="3" cpuset="0x00080008" complete_cpuset="0x00080008" online_cpuset="0x00080008" allowed_cpuset="0x00080008">
|
||||||
|
<object type="PU" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008"/>
|
||||||
|
<object type="PU" os_index="19" cpuset="0x00080000" complete_cpuset="0x00080000" online_cpuset="0x00080000" allowed_cpuset="0x00080000"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00f000f0" complete_cpuset="0x00f000f0" online_cpuset="0x00f000f0" allowed_cpuset="0x00f000f0" cache_size="8388608" depth="3" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00100010" complete_cpuset="0x00100010" online_cpuset="0x00100010" allowed_cpuset="0x00100010" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="Cache" cpuset="0x00100010" complete_cpuset="0x00100010" online_cpuset="0x00100010" allowed_cpuset="0x00100010" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00100010" complete_cpuset="0x00100010" online_cpuset="0x00100010" allowed_cpuset="0x00100010" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="4" cpuset="0x00100010" complete_cpuset="0x00100010" online_cpuset="0x00100010" allowed_cpuset="0x00100010">
|
||||||
|
<object type="PU" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010"/>
|
||||||
|
<object type="PU" os_index="20" cpuset="0x00100000" complete_cpuset="0x00100000" online_cpuset="0x00100000" allowed_cpuset="0x00100000"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00200020" complete_cpuset="0x00200020" online_cpuset="0x00200020" allowed_cpuset="0x00200020" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="Cache" cpuset="0x00200020" complete_cpuset="0x00200020" online_cpuset="0x00200020" allowed_cpuset="0x00200020" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00200020" complete_cpuset="0x00200020" online_cpuset="0x00200020" allowed_cpuset="0x00200020" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="5" cpuset="0x00200020" complete_cpuset="0x00200020" online_cpuset="0x00200020" allowed_cpuset="0x00200020">
|
||||||
|
<object type="PU" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020"/>
|
||||||
|
<object type="PU" os_index="21" cpuset="0x00200000" complete_cpuset="0x00200000" online_cpuset="0x00200000" allowed_cpuset="0x00200000"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00400040" complete_cpuset="0x00400040" online_cpuset="0x00400040" allowed_cpuset="0x00400040" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="Cache" cpuset="0x00400040" complete_cpuset="0x00400040" online_cpuset="0x00400040" allowed_cpuset="0x00400040" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00400040" complete_cpuset="0x00400040" online_cpuset="0x00400040" allowed_cpuset="0x00400040" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="6" cpuset="0x00400040" complete_cpuset="0x00400040" online_cpuset="0x00400040" allowed_cpuset="0x00400040">
|
||||||
|
<object type="PU" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040"/>
|
||||||
|
<object type="PU" os_index="22" cpuset="0x00400000" complete_cpuset="0x00400000" online_cpuset="0x00400000" allowed_cpuset="0x00400000"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00800080" complete_cpuset="0x00800080" online_cpuset="0x00800080" allowed_cpuset="0x00800080" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="Cache" cpuset="0x00800080" complete_cpuset="0x00800080" online_cpuset="0x00800080" allowed_cpuset="0x00800080" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00800080" complete_cpuset="0x00800080" online_cpuset="0x00800080" allowed_cpuset="0x00800080" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="7" cpuset="0x00800080" complete_cpuset="0x00800080" online_cpuset="0x00800080" allowed_cpuset="0x00800080">
|
||||||
|
<object type="PU" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080"/>
|
||||||
|
<object type="PU" os_index="23" cpuset="0x00800000" complete_cpuset="0x00800000" online_cpuset="0x00800000" allowed_cpuset="0x00800000"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x0f000f00" complete_cpuset="0x0f000f00" online_cpuset="0x0f000f00" allowed_cpuset="0x0f000f00" cache_size="8388608" depth="3" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x01000100" complete_cpuset="0x01000100" online_cpuset="0x01000100" allowed_cpuset="0x01000100" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="Cache" cpuset="0x01000100" complete_cpuset="0x01000100" online_cpuset="0x01000100" allowed_cpuset="0x01000100" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x01000100" complete_cpuset="0x01000100" online_cpuset="0x01000100" allowed_cpuset="0x01000100" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="0" cpuset="0x01000100" complete_cpuset="0x01000100" online_cpuset="0x01000100" allowed_cpuset="0x01000100">
|
||||||
|
<object type="PU" os_index="8" cpuset="0x00000100" complete_cpuset="0x00000100" online_cpuset="0x00000100" allowed_cpuset="0x00000100"/>
|
||||||
|
<object type="PU" os_index="24" cpuset="0x01000000" complete_cpuset="0x01000000" online_cpuset="0x01000000" allowed_cpuset="0x01000000"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x02000200" complete_cpuset="0x02000200" online_cpuset="0x02000200" allowed_cpuset="0x02000200" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="Cache" cpuset="0x02000200" complete_cpuset="0x02000200" online_cpuset="0x02000200" allowed_cpuset="0x02000200" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x02000200" complete_cpuset="0x02000200" online_cpuset="0x02000200" allowed_cpuset="0x02000200" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="1" cpuset="0x02000200" complete_cpuset="0x02000200" online_cpuset="0x02000200" allowed_cpuset="0x02000200">
|
||||||
|
<object type="PU" os_index="9" cpuset="0x00000200" complete_cpuset="0x00000200" online_cpuset="0x00000200" allowed_cpuset="0x00000200"/>
|
||||||
|
<object type="PU" os_index="25" cpuset="0x02000000" complete_cpuset="0x02000000" online_cpuset="0x02000000" allowed_cpuset="0x02000000"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x04000400" complete_cpuset="0x04000400" online_cpuset="0x04000400" allowed_cpuset="0x04000400" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="Cache" cpuset="0x04000400" complete_cpuset="0x04000400" online_cpuset="0x04000400" allowed_cpuset="0x04000400" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x04000400" complete_cpuset="0x04000400" online_cpuset="0x04000400" allowed_cpuset="0x04000400" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="2" cpuset="0x04000400" complete_cpuset="0x04000400" online_cpuset="0x04000400" allowed_cpuset="0x04000400">
|
||||||
|
<object type="PU" os_index="10" cpuset="0x00000400" complete_cpuset="0x00000400" online_cpuset="0x00000400" allowed_cpuset="0x00000400"/>
|
||||||
|
<object type="PU" os_index="26" cpuset="0x04000000" complete_cpuset="0x04000000" online_cpuset="0x04000000" allowed_cpuset="0x04000000"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x08000800" complete_cpuset="0x08000800" online_cpuset="0x08000800" allowed_cpuset="0x08000800" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="Cache" cpuset="0x08000800" complete_cpuset="0x08000800" online_cpuset="0x08000800" allowed_cpuset="0x08000800" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x08000800" complete_cpuset="0x08000800" online_cpuset="0x08000800" allowed_cpuset="0x08000800" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="3" cpuset="0x08000800" complete_cpuset="0x08000800" online_cpuset="0x08000800" allowed_cpuset="0x08000800">
|
||||||
|
<object type="PU" os_index="11" cpuset="0x00000800" complete_cpuset="0x00000800" online_cpuset="0x00000800" allowed_cpuset="0x00000800"/>
|
||||||
|
<object type="PU" os_index="27" cpuset="0x08000000" complete_cpuset="0x08000000" online_cpuset="0x08000000" allowed_cpuset="0x08000000"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0xf000f000" complete_cpuset="0xf000f000" online_cpuset="0xf000f000" allowed_cpuset="0xf000f000" cache_size="8388608" depth="3" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x10001000" complete_cpuset="0x10001000" online_cpuset="0x10001000" allowed_cpuset="0x10001000" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="Cache" cpuset="0x10001000" complete_cpuset="0x10001000" online_cpuset="0x10001000" allowed_cpuset="0x10001000" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x10001000" complete_cpuset="0x10001000" online_cpuset="0x10001000" allowed_cpuset="0x10001000" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="4" cpuset="0x10001000" complete_cpuset="0x10001000" online_cpuset="0x10001000" allowed_cpuset="0x10001000">
|
||||||
|
<object type="PU" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000"/>
|
||||||
|
<object type="PU" os_index="28" cpuset="0x10000000" complete_cpuset="0x10000000" online_cpuset="0x10000000" allowed_cpuset="0x10000000"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x20002000" complete_cpuset="0x20002000" online_cpuset="0x20002000" allowed_cpuset="0x20002000" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="Cache" cpuset="0x20002000" complete_cpuset="0x20002000" online_cpuset="0x20002000" allowed_cpuset="0x20002000" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x20002000" complete_cpuset="0x20002000" online_cpuset="0x20002000" allowed_cpuset="0x20002000" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="5" cpuset="0x20002000" complete_cpuset="0x20002000" online_cpuset="0x20002000" allowed_cpuset="0x20002000">
|
||||||
|
<object type="PU" os_index="13" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000"/>
|
||||||
|
<object type="PU" os_index="29" cpuset="0x20000000" complete_cpuset="0x20000000" online_cpuset="0x20000000" allowed_cpuset="0x20000000"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x40004000" complete_cpuset="0x40004000" online_cpuset="0x40004000" allowed_cpuset="0x40004000" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="Cache" cpuset="0x40004000" complete_cpuset="0x40004000" online_cpuset="0x40004000" allowed_cpuset="0x40004000" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x40004000" complete_cpuset="0x40004000" online_cpuset="0x40004000" allowed_cpuset="0x40004000" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="6" cpuset="0x40004000" complete_cpuset="0x40004000" online_cpuset="0x40004000" allowed_cpuset="0x40004000">
|
||||||
|
<object type="PU" os_index="14" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000"/>
|
||||||
|
<object type="PU" os_index="30" cpuset="0x40000000" complete_cpuset="0x40000000" online_cpuset="0x40000000" allowed_cpuset="0x40000000"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x80008000" complete_cpuset="0x80008000" online_cpuset="0x80008000" allowed_cpuset="0x80008000" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="Cache" cpuset="0x80008000" complete_cpuset="0x80008000" online_cpuset="0x80008000" allowed_cpuset="0x80008000" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x80008000" complete_cpuset="0x80008000" online_cpuset="0x80008000" allowed_cpuset="0x80008000" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="7" cpuset="0x80008000" complete_cpuset="0x80008000" online_cpuset="0x80008000" allowed_cpuset="0x80008000">
|
||||||
|
<object type="PU" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000"/>
|
||||||
|
<object type="PU" os_index="31" cpuset="0x80000000" complete_cpuset="0x80000000" online_cpuset="0x80000000" allowed_cpuset="0x80000000"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Bridge" os_index="0" bridge_type="0-1" depth="0" bridge_pci="0000:[00-0b]">
|
||||||
|
<object type="Bridge" os_index="17" name="Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) PCIe GPP Bridge" bridge_type="1-1" depth="1" bridge_pci="0000:[01-09]" pci_busid="0000:00:01.1" pci_type="0604 [1022:1453] [0000:0000] 00" pci_link_speed="3.938462">
|
||||||
|
<info name="PCIVendor" value="Advanced Micro Devices, Inc. [AMD]"/>
|
||||||
|
<info name="PCIDevice" value="Family 17h (Models 00h-0fh) PCIe GPP Bridge"/>
|
||||||
|
<object type="PCIDev" os_index="4097" name="Advanced Micro Devices, Inc. [AMD] X399 Series Chipset SATA Controller" pci_busid="0000:01:00.1" pci_type="0106 [1022:43b6] [1b21:1062] 02" pci_link_speed="3.938462">
|
||||||
|
<info name="PCIVendor" value="Advanced Micro Devices, Inc. [AMD]"/>
|
||||||
|
<info name="PCIDevice" value="X399 Series Chipset SATA Controller"/>
|
||||||
|
<object type="OSDev" name="sda" osdev_type="0">
|
||||||
|
<info name="LinuxDeviceID" value="8:0"/>
|
||||||
|
<info name="Model" value="INTEL_SSDSC2KB480G8"/>
|
||||||
|
<info name="Revision" value="XCV10110"/>
|
||||||
|
<info name="SerialNumber" value="PHYF8513029B480BGN"/>
|
||||||
|
<info name="Type" value="Disk"/>
|
||||||
|
</object>
|
||||||
|
<object type="OSDev" name="sdb" osdev_type="0">
|
||||||
|
<info name="LinuxDeviceID" value="8:16"/>
|
||||||
|
<info name="Model" value="INTEL_SSDSC2KB480G8"/>
|
||||||
|
<info name="Revision" value="XCV10110"/>
|
||||||
|
<info name="SerialNumber" value="PHYF8513033G480BGN"/>
|
||||||
|
<info name="Type" value="Disk"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Bridge" os_index="4098" name="Advanced Micro Devices, Inc. [AMD] X399 Series Chipset PCIe Bridge" bridge_type="1-1" depth="2" bridge_pci="0000:[02-09]" pci_busid="0000:01:00.2" pci_type="0604 [1022:43b1] [0000:0000] 02" pci_link_speed="3.938462">
|
||||||
|
<info name="PCIVendor" value="Advanced Micro Devices, Inc. [AMD]"/>
|
||||||
|
<info name="PCIDevice" value="X399 Series Chipset PCIe Bridge"/>
|
||||||
|
<object type="Bridge" os_index="8224" name="Advanced Micro Devices, Inc. [AMD] 300 Series Chipset PCIe Port" bridge_type="1-1" depth="3" bridge_pci="0000:[04-04]" pci_busid="0000:02:02.0" pci_type="0604 [1022:43b4] [0000:0000] 02" pci_link_speed="0.250000">
|
||||||
|
<info name="PCIVendor" value="Advanced Micro Devices, Inc. [AMD]"/>
|
||||||
|
<info name="PCIDevice" value="300 Series Chipset PCIe Port"/>
|
||||||
|
<object type="PCIDev" os_index="16384" name="Silicon Motion, Inc. SM750" pci_busid="0000:04:00.0" pci_type="0300 [126f:0750] [126f:0750] a1" pci_link_speed="0.250000">
|
||||||
|
<info name="PCIVendor" value="Silicon Motion, Inc."/>
|
||||||
|
<info name="PCIDevice" value="SM750"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Bridge" os_index="8288" name="Advanced Micro Devices, Inc. [AMD] 300 Series Chipset PCIe Port" bridge_type="1-1" depth="3" bridge_pci="0000:[08-08]" pci_busid="0000:02:06.0" pci_type="0604 [1022:43b4] [0000:0000] 02" pci_link_speed="0.250000">
|
||||||
|
<info name="PCIVendor" value="Advanced Micro Devices, Inc. [AMD]"/>
|
||||||
|
<info name="PCIDevice" value="300 Series Chipset PCIe Port"/>
|
||||||
|
<object type="PCIDev" os_index="32768" name="Intel Corporation I211 Gigabit Network Connection" pci_busid="0000:08:00.0" pci_type="0200 [8086:1539] [1462:7b09] 03" pci_link_speed="0.250000">
|
||||||
|
<info name="PCIVendor" value="Intel Corporation"/>
|
||||||
|
<info name="PCIDevice" value="I211 Gigabit Network Connection"/>
|
||||||
|
<object type="OSDev" name="enp8s0" osdev_type="2">
|
||||||
|
<info name="Address" value="00:d8:61:0e:b8:3e"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Bridge" os_index="129" name="Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) Internal PCIe GPP Bridge 0 to Bus B" bridge_type="1-1" depth="1" bridge_pci="0000:[0b-0b]" pci_busid="0000:00:08.1" pci_type="0604 [1022:1454] [0000:0000] 00" pci_link_speed="15.753846">
|
||||||
|
<info name="PCIVendor" value="Advanced Micro Devices, Inc. [AMD]"/>
|
||||||
|
<info name="PCIDevice" value="Family 17h (Models 00h-0fh) Internal PCIe GPP Bridge 0 to Bus B"/>
|
||||||
|
<object type="PCIDev" os_index="45058" name="Advanced Micro Devices, Inc. [AMD] FCH SATA Controller [AHCI mode]" pci_busid="0000:0b:00.2" pci_type="0106 [1022:7901] [1462:7b09] 51" pci_link_speed="15.753846">
|
||||||
|
<info name="PCIVendor" value="Advanced Micro Devices, Inc. [AMD]"/>
|
||||||
|
<info name="PCIDevice" value="FCH SATA Controller [AHCI mode]"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Bridge" os_index="1" bridge_type="0-1" depth="0" bridge_pci="0000:[40-42]">
|
||||||
|
<object type="Bridge" os_index="262273" name="Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) Internal PCIe GPP Bridge 0 to Bus B" bridge_type="1-1" depth="1" bridge_pci="0000:[42-42]" pci_busid="0000:40:08.1" pci_type="0604 [1022:1454] [0000:0000] 00" pci_link_speed="15.753846">
|
||||||
|
<info name="PCIVendor" value="Advanced Micro Devices, Inc. [AMD]"/>
|
||||||
|
<info name="PCIDevice" value="Family 17h (Models 00h-0fh) Internal PCIe GPP Bridge 0 to Bus B"/>
|
||||||
|
<object type="PCIDev" os_index="270338" name="Advanced Micro Devices, Inc. [AMD] FCH SATA Controller [AHCI mode]" pci_busid="0000:42:00.2" pci_type="0106 [1022:7901] [1462:7b09] 51" pci_link_speed="15.753846">
|
||||||
|
<info name="PCIVendor" value="Advanced Micro Devices, Inc. [AMD]"/>
|
||||||
|
<info name="PCIDevice" value="FCH SATA Controller [AHCI mode]"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</topology>
|
||||||
87
doc/topology/Intel_Core_i7-3770_linux_2_0_4.xml
Normal file
87
doc/topology/Intel_Core_i7-3770_linux_2_0_4.xml
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE topology SYSTEM "hwloc2.dtd">
|
||||||
|
<topology version="2.0">
|
||||||
|
<object type="Machine" os_index="0" cpuset="0x000000ff" complete_cpuset="0x000000ff" allowed_cpuset="0x000000ff" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" gp_index="1">
|
||||||
|
<info name="DMIProductName" value="System Product Name"/>
|
||||||
|
<info name="DMIProductVersion" value="System Version"/>
|
||||||
|
<info name="DMIProductSerial" value="System Serial Number"/>
|
||||||
|
<info name="DMIProductUUID" value="A052D200-D7E7-11DD-BC6C-50465D9F65F8"/>
|
||||||
|
<info name="DMIBoardVendor" value="ASUSTeK COMPUTER INC."/>
|
||||||
|
<info name="DMIBoardName" value="P8H77-M PRO"/>
|
||||||
|
<info name="DMIBoardVersion" value="Rev X.0x"/>
|
||||||
|
<info name="DMIBoardSerial" value="120902368900135"/>
|
||||||
|
<info name="DMIBoardAssetTag" value="To be filled by O.E.M."/>
|
||||||
|
<info name="DMIChassisVendor" value="Chassis Manufacture"/>
|
||||||
|
<info name="DMIChassisType" value="3"/>
|
||||||
|
<info name="DMIChassisVersion" value="Chassis Version"/>
|
||||||
|
<info name="DMIChassisSerial" value="Chassis Serial Number"/>
|
||||||
|
<info name="DMIChassisAssetTag" value="Asset-1234567890"/>
|
||||||
|
<info name="DMIBIOSVendor" value="American Megatrends Inc."/>
|
||||||
|
<info name="DMIBIOSVersion" value="9002"/>
|
||||||
|
<info name="DMIBIOSDate" value="05/30/2014"/>
|
||||||
|
<info name="DMISysVendor" value="System manufacturer"/>
|
||||||
|
<info name="Backend" value="Linux"/>
|
||||||
|
<info name="LinuxCgroup" value="/"/>
|
||||||
|
<info name="OSName" value="Linux"/>
|
||||||
|
<info name="OSRelease" value="4.15.0-47-generic"/>
|
||||||
|
<info name="OSVersion" value="#50~16.04.1-Ubuntu SMP Fri Mar 15 16:06:21 UTC 2019"/>
|
||||||
|
<info name="HostName" value="host"/>
|
||||||
|
<info name="Architecture" value="x86_64"/>
|
||||||
|
<info name="hwlocVersion" value="2.0.4"/>
|
||||||
|
<info name="ProcessName" value="xmrig"/>
|
||||||
|
<object type="Package" os_index="0" cpuset="0x000000ff" complete_cpuset="0x000000ff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="2">
|
||||||
|
<info name="CPUVendor" value="GenuineIntel"/>
|
||||||
|
<info name="CPUFamilyNumber" value="6"/>
|
||||||
|
<info name="CPUModelNumber" value="58"/>
|
||||||
|
<info name="CPUModel" value="Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz"/>
|
||||||
|
<info name="CPUStepping" value="9"/>
|
||||||
|
<object type="NUMANode" os_index="0" cpuset="0x000000ff" complete_cpuset="0x000000ff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="24" local_memory="33405804544">
|
||||||
|
<page_type size="4096" count="7490114"/>
|
||||||
|
<page_type size="2097152" count="1300"/>
|
||||||
|
</object>
|
||||||
|
<object type="L3Cache" cpuset="0x000000ff" complete_cpuset="0x000000ff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="7" cache_size="8388608" depth="3" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L2Cache" cpuset="0x00000011" complete_cpuset="0x00000011" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="6" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000011" complete_cpuset="0x00000011" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="5" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="0" cpuset="0x00000011" complete_cpuset="0x00000011" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="3">
|
||||||
|
<object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="4"/>
|
||||||
|
<object type="PU" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="20"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000022" complete_cpuset="0x00000022" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="11" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000022" complete_cpuset="0x00000022" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="10" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="1" cpuset="0x00000022" complete_cpuset="0x00000022" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="8">
|
||||||
|
<object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="9"/>
|
||||||
|
<object type="PU" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="21"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000044" complete_cpuset="0x00000044" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="15" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000044" complete_cpuset="0x00000044" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="14" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="2" cpuset="0x00000044" complete_cpuset="0x00000044" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="12">
|
||||||
|
<object type="PU" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="13"/>
|
||||||
|
<object type="PU" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="22"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000088" complete_cpuset="0x00000088" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="19" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000088" complete_cpuset="0x00000088" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="18" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="3" cpuset="0x00000088" complete_cpuset="0x00000088" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="16">
|
||||||
|
<object type="PU" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="17"/>
|
||||||
|
<object type="PU" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="23"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</topology>
|
||||||
88
doc/topology/Intel_Core_i7-6700_linux_2_0_4.xml
Normal file
88
doc/topology/Intel_Core_i7-6700_linux_2_0_4.xml
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE topology SYSTEM "hwloc2.dtd">
|
||||||
|
<topology version="2.0">
|
||||||
|
<object type="Machine" os_index="0" cpuset="0x000000ff" complete_cpuset="0x000000ff" allowed_cpuset="0x000000ff" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" gp_index="1">
|
||||||
|
<info name="DMIProductName" value="D3401-H1"/>
|
||||||
|
<info name="DMIProductVersion" value=" "/>
|
||||||
|
<info name="DMIProductSerial" value=" "/>
|
||||||
|
<info name="DMIProductUUID" value="283D9705-B724-F44A-850D-38F54DAC56AD"/>
|
||||||
|
<info name="DMIBoardVendor" value="FUJITSU"/>
|
||||||
|
<info name="DMIBoardName" value="D3401-H1"/>
|
||||||
|
<info name="DMIBoardVersion" value="S26361-D3401-H1 "/>
|
||||||
|
<info name="DMIBoardSerial" value="B2980829"/>
|
||||||
|
<info name="DMIBoardAssetTag" value=" "/>
|
||||||
|
<info name="DMIChassisVendor" value="FUJITSU"/>
|
||||||
|
<info name="DMIChassisType" value="3"/>
|
||||||
|
<info name="DMIChassisVersion" value=" "/>
|
||||||
|
<info name="DMIChassisSerial" value=" "/>
|
||||||
|
<info name="DMIChassisAssetTag" value=" "/>
|
||||||
|
<info name="DMIBIOSVendor" value="FUJITSU // American Megatrends Inc."/>
|
||||||
|
<info name="DMIBIOSVersion" value="V5.0.0.11 R1.14.0 for D3401-H1x "/>
|
||||||
|
<info name="DMIBIOSDate" value="06/09/2016"/>
|
||||||
|
<info name="DMISysVendor" value="FUJITSU"/>
|
||||||
|
<info name="Backend" value="Linux"/>
|
||||||
|
<info name="LinuxCgroup" value="/"/>
|
||||||
|
<info name="OSName" value="Linux"/>
|
||||||
|
<info name="OSRelease" value="4.4.0-45-generic"/>
|
||||||
|
<info name="OSVersion" value="#66-Ubuntu SMP Wed Oct 19 14:12:37 UTC 2016"/>
|
||||||
|
<info name="HostName" value="host"/>
|
||||||
|
<info name="Architecture" value="x86_64"/>
|
||||||
|
<info name="hwlocVersion" value="2.0.4"/>
|
||||||
|
<info name="ProcessName" value="xmrig"/>
|
||||||
|
<object type="Package" os_index="0" cpuset="0x000000ff" complete_cpuset="0x000000ff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="2">
|
||||||
|
<info name="CPUVendor" value="GenuineIntel"/>
|
||||||
|
<info name="CPUFamilyNumber" value="6"/>
|
||||||
|
<info name="CPUModelNumber" value="94"/>
|
||||||
|
<info name="CPUModel" value="Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz"/>
|
||||||
|
<info name="CPUStepping" value="3"/>
|
||||||
|
<object type="NUMANode" os_index="0" cpuset="0x000000ff" complete_cpuset="0x000000ff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="24" local_memory="33558884352">
|
||||||
|
<page_type size="4096" count="8184895"/>
|
||||||
|
<page_type size="2097152" count="16"/>
|
||||||
|
<page_type size="1073741824" count="0"/>
|
||||||
|
</object>
|
||||||
|
<object type="L3Cache" cpuset="0x000000ff" complete_cpuset="0x000000ff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="7" cache_size="8388608" depth="3" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L2Cache" cpuset="0x00000011" complete_cpuset="0x00000011" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="6" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="4" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000011" complete_cpuset="0x00000011" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="5" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="0" cpuset="0x00000011" complete_cpuset="0x00000011" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="3">
|
||||||
|
<object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="4"/>
|
||||||
|
<object type="PU" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="20"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000022" complete_cpuset="0x00000022" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="11" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="4" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000022" complete_cpuset="0x00000022" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="10" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="1" cpuset="0x00000022" complete_cpuset="0x00000022" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="8">
|
||||||
|
<object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="9"/>
|
||||||
|
<object type="PU" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="21"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000044" complete_cpuset="0x00000044" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="15" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="4" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000044" complete_cpuset="0x00000044" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="14" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="2" cpuset="0x00000044" complete_cpuset="0x00000044" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="12">
|
||||||
|
<object type="PU" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="13"/>
|
||||||
|
<object type="PU" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="22"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000088" complete_cpuset="0x00000088" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="19" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="4" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000088" complete_cpuset="0x00000088" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="18" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="3" cpuset="0x00000088" complete_cpuset="0x00000088" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="16">
|
||||||
|
<object type="PU" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="17"/>
|
||||||
|
<object type="PU" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="23"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</topology>
|
||||||
61
doc/topology/Intel_Core_i7-6700_windows_2_0_4.xml
Normal file
61
doc/topology/Intel_Core_i7-6700_windows_2_0_4.xml
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE topology SYSTEM "hwloc2.dtd">
|
||||||
|
<topology version="2.0">
|
||||||
|
<object type="Machine" os_index="0" cpuset="0x000000ff" complete_cpuset="0x000000ff" allowed_cpuset="0x000000ff" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" gp_index="1">
|
||||||
|
<info name="Backend" value="Windows"/>
|
||||||
|
<info name="hwlocVersion" value="2.0.4"/>
|
||||||
|
<object type="Package" cpuset="0x000000ff" complete_cpuset="0x000000ff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="2">
|
||||||
|
<info name="CPUVendor" value="GenuineIntel"/>
|
||||||
|
<info name="CPUFamilyNumber" value="6"/>
|
||||||
|
<info name="CPUModelNumber" value="94"/>
|
||||||
|
<info name="CPUModel" value="Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz"/>
|
||||||
|
<info name="CPUStepping" value="3"/>
|
||||||
|
<object type="NUMANode" os_index="0" cpuset="0x000000ff" complete_cpuset="0x000000ff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="16" local_memory="16811286528">
|
||||||
|
<page_type size="4096" count="0"/>
|
||||||
|
</object>
|
||||||
|
<object type="L3Cache" cpuset="0x000000ff" complete_cpuset="0x000000ff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="6" cache_size="8388608" depth="3" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L2Cache" cpuset="0x00000003" complete_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="5" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="4" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000003" complete_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="4" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000003" complete_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="3">
|
||||||
|
<object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="18"/>
|
||||||
|
<object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="19"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x0000000c" complete_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="9" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="4" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x0000000c" complete_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="8" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x0000000c" complete_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="7">
|
||||||
|
<object type="PU" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="20"/>
|
||||||
|
<object type="PU" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="21"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000030" complete_cpuset="0x00000030" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="12" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="4" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000030" complete_cpuset="0x00000030" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="11" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000030" complete_cpuset="0x00000030" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="10">
|
||||||
|
<object type="PU" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="22"/>
|
||||||
|
<object type="PU" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="23"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x000000c0" complete_cpuset="0x000000c0" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="15" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="4" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x000000c0" complete_cpuset="0x000000c0" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="14" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x000000c0" complete_cpuset="0x000000c0" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="13">
|
||||||
|
<object type="PU" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="24"/>
|
||||||
|
<object type="PU" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="25"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</topology>
|
||||||
41
doc/topology/Intel_Core_i7-7660U_windows_2_0_4.xml
Normal file
41
doc/topology/Intel_Core_i7-7660U_windows_2_0_4.xml
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE topology SYSTEM "hwloc2.dtd">
|
||||||
|
<topology version="2.0">
|
||||||
|
<object type="Machine" os_index="0" cpuset="0x0000000f" complete_cpuset="0x0000000f" allowed_cpuset="0x0000000f" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" gp_index="1">
|
||||||
|
<info name="Backend" value="Windows"/>
|
||||||
|
<info name="hwlocVersion" value="2.0.4"/>
|
||||||
|
<object type="Package" cpuset="0x0000000f" complete_cpuset="0x0000000f" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="2">
|
||||||
|
<info name="CPUVendor" value="GenuineIntel"/>
|
||||||
|
<info name="CPUFamilyNumber" value="6"/>
|
||||||
|
<info name="CPUModelNumber" value="142"/>
|
||||||
|
<info name="CPUModel" value="Intel(R) Core(TM) i7-7660U CPU @ 2.50GHz"/>
|
||||||
|
<info name="CPUStepping" value="9"/>
|
||||||
|
<object type="NUMANode" os_index="0" cpuset="0x0000000f" complete_cpuset="0x0000000f" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="10" local_memory="12868972544">
|
||||||
|
<page_type size="4096" count="0"/>
|
||||||
|
</object>
|
||||||
|
<object type="L3Cache" cpuset="0x0000000f" complete_cpuset="0x0000000f" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="6" cache_size="4194304" depth="3" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L2Cache" cpuset="0x00000003" complete_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="5" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="4" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000003" complete_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="4" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000003" complete_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="3">
|
||||||
|
<object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="12"/>
|
||||||
|
<object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="13"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x0000000c" complete_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="9" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="4" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x0000000c" complete_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="8" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x0000000c" complete_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="7">
|
||||||
|
<object type="PU" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="14"/>
|
||||||
|
<object type="PU" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="15"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</topology>
|
||||||
477
doc/topology/Intel_Xeon_E5-4650_0_x4_N4_windows_2_0_4.xml
Normal file
477
doc/topology/Intel_Xeon_E5-4650_0_x4_N4_windows_2_0_4.xml
Normal file
@@ -0,0 +1,477 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE topology SYSTEM "hwloc2.dtd">
|
||||||
|
<topology version="2.0">
|
||||||
|
<object type="Machine" os_index="0" cpuset="0xffffffff,0xffffffff" complete_cpuset="0xffffffff,0xffffffff" allowed_cpuset="0xffffffff,0xffffffff" nodeset="0x0000000f" complete_nodeset="0x0000000f" allowed_nodeset="0x0000000f" gp_index="1">
|
||||||
|
<info name="Backend" value="Windows"/>
|
||||||
|
<info name="hwlocVersion" value="2.0.4"/>
|
||||||
|
<info name="ProcessName" value="lstopo.exe"/>
|
||||||
|
<object type="Package" cpuset="0x0000ffff" complete_cpuset="0x0000ffff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="2">
|
||||||
|
<info name="CPUVendor" value="GenuineIntel"/>
|
||||||
|
<info name="CPUFamilyNumber" value="6"/>
|
||||||
|
<info name="CPUModelNumber" value="45"/>
|
||||||
|
<info name="CPUModel" value="Intel(R) Xeon(R) CPU E5-4650 0 @ 2.70GHz"/>
|
||||||
|
<info name="CPUStepping" value="7"/>
|
||||||
|
<object type="NUMANode" os_index="0" cpuset="0x0000ffff" complete_cpuset="0x0000ffff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="138" local_memory="5372829696">
|
||||||
|
<page_type size="4096" count="0"/>
|
||||||
|
</object>
|
||||||
|
<object type="L3Cache" cpuset="0x0000ffff" complete_cpuset="0x0000ffff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="7" cache_size="20971520" depth="3" cache_linesize="64" cache_associativity="20" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L2Cache" cpuset="0x00000003" complete_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="6" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000003" complete_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="4" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00000003" complete_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="5" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000003" complete_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="3">
|
||||||
|
<object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="143"/>
|
||||||
|
<object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="144"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x0000000c" complete_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="11" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x0000000c" complete_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="9" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x0000000c" complete_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="10" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x0000000c" complete_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="8">
|
||||||
|
<object type="PU" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="145"/>
|
||||||
|
<object type="PU" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="146"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000030" complete_cpuset="0x00000030" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="15" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000030" complete_cpuset="0x00000030" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="13" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00000030" complete_cpuset="0x00000030" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="14" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000030" complete_cpuset="0x00000030" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="12">
|
||||||
|
<object type="PU" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="147"/>
|
||||||
|
<object type="PU" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="148"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x000000c0" complete_cpuset="0x000000c0" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="19" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x000000c0" complete_cpuset="0x000000c0" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="17" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x000000c0" complete_cpuset="0x000000c0" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="18" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x000000c0" complete_cpuset="0x000000c0" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="16">
|
||||||
|
<object type="PU" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="149"/>
|
||||||
|
<object type="PU" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="150"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000300" complete_cpuset="0x00000300" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="23" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000300" complete_cpuset="0x00000300" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="21" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00000300" complete_cpuset="0x00000300" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="22" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000300" complete_cpuset="0x00000300" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="20">
|
||||||
|
<object type="PU" os_index="8" cpuset="0x00000100" complete_cpuset="0x00000100" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="151"/>
|
||||||
|
<object type="PU" os_index="9" cpuset="0x00000200" complete_cpuset="0x00000200" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="152"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000c00" complete_cpuset="0x00000c00" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="27" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000c00" complete_cpuset="0x00000c00" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="25" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00000c00" complete_cpuset="0x00000c00" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="26" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000c00" complete_cpuset="0x00000c00" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="24">
|
||||||
|
<object type="PU" os_index="10" cpuset="0x00000400" complete_cpuset="0x00000400" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="153"/>
|
||||||
|
<object type="PU" os_index="11" cpuset="0x00000800" complete_cpuset="0x00000800" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="154"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00003000" complete_cpuset="0x00003000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="31" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00003000" complete_cpuset="0x00003000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="29" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00003000" complete_cpuset="0x00003000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="30" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00003000" complete_cpuset="0x00003000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="28">
|
||||||
|
<object type="PU" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="155"/>
|
||||||
|
<object type="PU" os_index="13" cpuset="0x00002000" complete_cpuset="0x00002000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="156"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x0000c000" complete_cpuset="0x0000c000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="35" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x0000c000" complete_cpuset="0x0000c000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="33" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x0000c000" complete_cpuset="0x0000c000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="34" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x0000c000" complete_cpuset="0x0000c000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="32">
|
||||||
|
<object type="PU" os_index="14" cpuset="0x00004000" complete_cpuset="0x00004000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="157"/>
|
||||||
|
<object type="PU" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="158"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Package" cpuset="0xffff0000" complete_cpuset="0xffff0000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="36">
|
||||||
|
<info name="CPUVendor" value="GenuineIntel"/>
|
||||||
|
<info name="CPUFamilyNumber" value="6"/>
|
||||||
|
<info name="CPUModelNumber" value="45"/>
|
||||||
|
<info name="CPUModel" value="Intel(R) Xeon(R) CPU E5-4650 0 @ 2.70GHz"/>
|
||||||
|
<info name="CPUStepping" value="7"/>
|
||||||
|
<object type="NUMANode" os_index="1" cpuset="0xffff0000" complete_cpuset="0xffff0000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="139" local_memory="7688192">
|
||||||
|
<page_type size="4096" count="0"/>
|
||||||
|
</object>
|
||||||
|
<object type="L3Cache" cpuset="0xffff0000" complete_cpuset="0xffff0000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="41" cache_size="20971520" depth="3" cache_linesize="64" cache_associativity="20" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L2Cache" cpuset="0x00030000" complete_cpuset="0x00030000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="40" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00030000" complete_cpuset="0x00030000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="38" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00030000" complete_cpuset="0x00030000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="39" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00030000" complete_cpuset="0x00030000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="37">
|
||||||
|
<object type="PU" os_index="16" cpuset="0x00010000" complete_cpuset="0x00010000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="159"/>
|
||||||
|
<object type="PU" os_index="17" cpuset="0x00020000" complete_cpuset="0x00020000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="160"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x000c0000" complete_cpuset="0x000c0000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="45" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x000c0000" complete_cpuset="0x000c0000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="43" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x000c0000" complete_cpuset="0x000c0000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="44" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x000c0000" complete_cpuset="0x000c0000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="42">
|
||||||
|
<object type="PU" os_index="18" cpuset="0x00040000" complete_cpuset="0x00040000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="161"/>
|
||||||
|
<object type="PU" os_index="19" cpuset="0x00080000" complete_cpuset="0x00080000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="162"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00300000" complete_cpuset="0x00300000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="49" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00300000" complete_cpuset="0x00300000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="47" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00300000" complete_cpuset="0x00300000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="48" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00300000" complete_cpuset="0x00300000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="46">
|
||||||
|
<object type="PU" os_index="20" cpuset="0x00100000" complete_cpuset="0x00100000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="163"/>
|
||||||
|
<object type="PU" os_index="21" cpuset="0x00200000" complete_cpuset="0x00200000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="164"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00c00000" complete_cpuset="0x00c00000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="53" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00c00000" complete_cpuset="0x00c00000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="51" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00c00000" complete_cpuset="0x00c00000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="52" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00c00000" complete_cpuset="0x00c00000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="50">
|
||||||
|
<object type="PU" os_index="22" cpuset="0x00400000" complete_cpuset="0x00400000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="165"/>
|
||||||
|
<object type="PU" os_index="23" cpuset="0x00800000" complete_cpuset="0x00800000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="166"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x03000000" complete_cpuset="0x03000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="57" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x03000000" complete_cpuset="0x03000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="55" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x03000000" complete_cpuset="0x03000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="56" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x03000000" complete_cpuset="0x03000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="54">
|
||||||
|
<object type="PU" os_index="24" cpuset="0x01000000" complete_cpuset="0x01000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="167"/>
|
||||||
|
<object type="PU" os_index="25" cpuset="0x02000000" complete_cpuset="0x02000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="168"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x0c000000" complete_cpuset="0x0c000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="61" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x0c000000" complete_cpuset="0x0c000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="59" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x0c000000" complete_cpuset="0x0c000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="60" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x0c000000" complete_cpuset="0x0c000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="58">
|
||||||
|
<object type="PU" os_index="26" cpuset="0x04000000" complete_cpuset="0x04000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="169"/>
|
||||||
|
<object type="PU" os_index="27" cpuset="0x08000000" complete_cpuset="0x08000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="170"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x30000000" complete_cpuset="0x30000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="65" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x30000000" complete_cpuset="0x30000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="63" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x30000000" complete_cpuset="0x30000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="64" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x30000000" complete_cpuset="0x30000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="62">
|
||||||
|
<object type="PU" os_index="28" cpuset="0x10000000" complete_cpuset="0x10000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="171"/>
|
||||||
|
<object type="PU" os_index="29" cpuset="0x20000000" complete_cpuset="0x20000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="172"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0xc0000000" complete_cpuset="0xc0000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="69" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0xc0000000" complete_cpuset="0xc0000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="67" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0xc0000000" complete_cpuset="0xc0000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="68" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0xc0000000" complete_cpuset="0xc0000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="66">
|
||||||
|
<object type="PU" os_index="30" cpuset="0x40000000" complete_cpuset="0x40000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="173"/>
|
||||||
|
<object type="PU" os_index="31" cpuset="0x80000000" complete_cpuset="0x80000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="174"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Package" cpuset="0x0000ffff,0x0" complete_cpuset="0x0000ffff,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="70">
|
||||||
|
<info name="CPUVendor" value="GenuineIntel"/>
|
||||||
|
<info name="CPUFamilyNumber" value="6"/>
|
||||||
|
<info name="CPUModelNumber" value="45"/>
|
||||||
|
<info name="CPUModel" value="Intel(R) Xeon(R) CPU E5-4650 0 @ 2.70GHz"/>
|
||||||
|
<info name="CPUStepping" value="7"/>
|
||||||
|
<object type="NUMANode" os_index="2" cpuset="0x0000ffff,0x0" complete_cpuset="0x0000ffff,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="140" local_memory="3033407488">
|
||||||
|
<page_type size="4096" count="0"/>
|
||||||
|
</object>
|
||||||
|
<object type="L3Cache" cpuset="0x0000ffff,0x0" complete_cpuset="0x0000ffff,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="75" cache_size="20971520" depth="3" cache_linesize="64" cache_associativity="20" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L2Cache" cpuset="0x00000003,0x0" complete_cpuset="0x00000003,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="74" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000003,0x0" complete_cpuset="0x00000003,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="72" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00000003,0x0" complete_cpuset="0x00000003,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="73" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000003,0x0" complete_cpuset="0x00000003,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="71">
|
||||||
|
<object type="PU" os_index="32" cpuset="0x00000001,0x0" complete_cpuset="0x00000001,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="175"/>
|
||||||
|
<object type="PU" os_index="33" cpuset="0x00000002,0x0" complete_cpuset="0x00000002,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="176"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x0000000c,0x0" complete_cpuset="0x0000000c,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="79" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x0000000c,0x0" complete_cpuset="0x0000000c,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="77" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x0000000c,0x0" complete_cpuset="0x0000000c,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="78" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x0000000c,0x0" complete_cpuset="0x0000000c,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="76">
|
||||||
|
<object type="PU" os_index="34" cpuset="0x00000004,0x0" complete_cpuset="0x00000004,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="177"/>
|
||||||
|
<object type="PU" os_index="35" cpuset="0x00000008,0x0" complete_cpuset="0x00000008,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="178"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000030,0x0" complete_cpuset="0x00000030,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="83" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000030,0x0" complete_cpuset="0x00000030,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="81" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00000030,0x0" complete_cpuset="0x00000030,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="82" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000030,0x0" complete_cpuset="0x00000030,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="80">
|
||||||
|
<object type="PU" os_index="36" cpuset="0x00000010,0x0" complete_cpuset="0x00000010,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="179"/>
|
||||||
|
<object type="PU" os_index="37" cpuset="0x00000020,0x0" complete_cpuset="0x00000020,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="180"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x000000c0,0x0" complete_cpuset="0x000000c0,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="87" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x000000c0,0x0" complete_cpuset="0x000000c0,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="85" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x000000c0,0x0" complete_cpuset="0x000000c0,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="86" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x000000c0,0x0" complete_cpuset="0x000000c0,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="84">
|
||||||
|
<object type="PU" os_index="38" cpuset="0x00000040,0x0" complete_cpuset="0x00000040,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="181"/>
|
||||||
|
<object type="PU" os_index="39" cpuset="0x00000080,0x0" complete_cpuset="0x00000080,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="182"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000300,0x0" complete_cpuset="0x00000300,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="91" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000300,0x0" complete_cpuset="0x00000300,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="89" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00000300,0x0" complete_cpuset="0x00000300,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="90" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000300,0x0" complete_cpuset="0x00000300,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="88">
|
||||||
|
<object type="PU" os_index="40" cpuset="0x00000100,0x0" complete_cpuset="0x00000100,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="183"/>
|
||||||
|
<object type="PU" os_index="41" cpuset="0x00000200,0x0" complete_cpuset="0x00000200,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="184"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000c00,0x0" complete_cpuset="0x00000c00,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="95" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000c00,0x0" complete_cpuset="0x00000c00,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="93" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00000c00,0x0" complete_cpuset="0x00000c00,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="94" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000c00,0x0" complete_cpuset="0x00000c00,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="92">
|
||||||
|
<object type="PU" os_index="42" cpuset="0x00000400,0x0" complete_cpuset="0x00000400,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="185"/>
|
||||||
|
<object type="PU" os_index="43" cpuset="0x00000800,0x0" complete_cpuset="0x00000800,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="186"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00003000,0x0" complete_cpuset="0x00003000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="99" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00003000,0x0" complete_cpuset="0x00003000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="97" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00003000,0x0" complete_cpuset="0x00003000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="98" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00003000,0x0" complete_cpuset="0x00003000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="96">
|
||||||
|
<object type="PU" os_index="44" cpuset="0x00001000,0x0" complete_cpuset="0x00001000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="187"/>
|
||||||
|
<object type="PU" os_index="45" cpuset="0x00002000,0x0" complete_cpuset="0x00002000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="188"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x0000c000,0x0" complete_cpuset="0x0000c000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="103" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x0000c000,0x0" complete_cpuset="0x0000c000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="101" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x0000c000,0x0" complete_cpuset="0x0000c000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="102" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x0000c000,0x0" complete_cpuset="0x0000c000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="100">
|
||||||
|
<object type="PU" os_index="46" cpuset="0x00004000,0x0" complete_cpuset="0x00004000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="189"/>
|
||||||
|
<object type="PU" os_index="47" cpuset="0x00008000,0x0" complete_cpuset="0x00008000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="190"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Package" cpuset="0xffff0000,0x0" complete_cpuset="0xffff0000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="104">
|
||||||
|
<info name="CPUVendor" value="GenuineIntel"/>
|
||||||
|
<info name="CPUFamilyNumber" value="6"/>
|
||||||
|
<info name="CPUModelNumber" value="45"/>
|
||||||
|
<info name="CPUModel" value="Intel(R) Xeon(R) CPU E5-4650 0 @ 2.70GHz"/>
|
||||||
|
<info name="CPUStepping" value="7"/>
|
||||||
|
<object type="NUMANode" os_index="3" cpuset="0xffff0000,0x0" complete_cpuset="0xffff0000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="141" local_memory="5658210304">
|
||||||
|
<page_type size="4096" count="0"/>
|
||||||
|
</object>
|
||||||
|
<object type="L3Cache" cpuset="0xffff0000,0x0" complete_cpuset="0xffff0000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="109" cache_size="20971520" depth="3" cache_linesize="64" cache_associativity="20" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L2Cache" cpuset="0x00030000,0x0" complete_cpuset="0x00030000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="108" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00030000,0x0" complete_cpuset="0x00030000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="106" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00030000,0x0" complete_cpuset="0x00030000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="107" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00030000,0x0" complete_cpuset="0x00030000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="105">
|
||||||
|
<object type="PU" os_index="48" cpuset="0x00010000,0x0" complete_cpuset="0x00010000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="191"/>
|
||||||
|
<object type="PU" os_index="49" cpuset="0x00020000,0x0" complete_cpuset="0x00020000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="192"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x000c0000,0x0" complete_cpuset="0x000c0000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="113" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x000c0000,0x0" complete_cpuset="0x000c0000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="111" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x000c0000,0x0" complete_cpuset="0x000c0000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="112" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x000c0000,0x0" complete_cpuset="0x000c0000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="110">
|
||||||
|
<object type="PU" os_index="50" cpuset="0x00040000,0x0" complete_cpuset="0x00040000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="193"/>
|
||||||
|
<object type="PU" os_index="51" cpuset="0x00080000,0x0" complete_cpuset="0x00080000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="194"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00300000,0x0" complete_cpuset="0x00300000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="117" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00300000,0x0" complete_cpuset="0x00300000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="115" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00300000,0x0" complete_cpuset="0x00300000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="116" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00300000,0x0" complete_cpuset="0x00300000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="114">
|
||||||
|
<object type="PU" os_index="52" cpuset="0x00100000,0x0" complete_cpuset="0x00100000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="195"/>
|
||||||
|
<object type="PU" os_index="53" cpuset="0x00200000,0x0" complete_cpuset="0x00200000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="196"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00c00000,0x0" complete_cpuset="0x00c00000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="121" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00c00000,0x0" complete_cpuset="0x00c00000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="119" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00c00000,0x0" complete_cpuset="0x00c00000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="120" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00c00000,0x0" complete_cpuset="0x00c00000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="118">
|
||||||
|
<object type="PU" os_index="54" cpuset="0x00400000,0x0" complete_cpuset="0x00400000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="197"/>
|
||||||
|
<object type="PU" os_index="55" cpuset="0x00800000,0x0" complete_cpuset="0x00800000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="198"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x03000000,0x0" complete_cpuset="0x03000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="125" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x03000000,0x0" complete_cpuset="0x03000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="123" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x03000000,0x0" complete_cpuset="0x03000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="124" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x03000000,0x0" complete_cpuset="0x03000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="122">
|
||||||
|
<object type="PU" os_index="56" cpuset="0x01000000,0x0" complete_cpuset="0x01000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="199"/>
|
||||||
|
<object type="PU" os_index="57" cpuset="0x02000000,0x0" complete_cpuset="0x02000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="200"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x0c000000,0x0" complete_cpuset="0x0c000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="129" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x0c000000,0x0" complete_cpuset="0x0c000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="127" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x0c000000,0x0" complete_cpuset="0x0c000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="128" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x0c000000,0x0" complete_cpuset="0x0c000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="126">
|
||||||
|
<object type="PU" os_index="58" cpuset="0x04000000,0x0" complete_cpuset="0x04000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="201"/>
|
||||||
|
<object type="PU" os_index="59" cpuset="0x08000000,0x0" complete_cpuset="0x08000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="202"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x30000000,0x0" complete_cpuset="0x30000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="133" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x30000000,0x0" complete_cpuset="0x30000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="131" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x30000000,0x0" complete_cpuset="0x30000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="132" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x30000000,0x0" complete_cpuset="0x30000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="130">
|
||||||
|
<object type="PU" os_index="60" cpuset="0x10000000,0x0" complete_cpuset="0x10000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="203"/>
|
||||||
|
<object type="PU" os_index="61" cpuset="0x20000000,0x0" complete_cpuset="0x20000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="204"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0xc0000000,0x0" complete_cpuset="0xc0000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="137" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0xc0000000,0x0" complete_cpuset="0xc0000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="135" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0xc0000000,0x0" complete_cpuset="0xc0000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="136" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0xc0000000,0x0" complete_cpuset="0xc0000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="134">
|
||||||
|
<object type="PU" os_index="62" cpuset="0x40000000,0x0" complete_cpuset="0x40000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="205"/>
|
||||||
|
<object type="PU" os_index="63" cpuset="0x80000000,0x0" complete_cpuset="0x80000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="206"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</topology>
|
||||||
111
doc/topology/Intel_Xeon_E5620_x2_UMA_windows_2_0_4.xml
Normal file
111
doc/topology/Intel_Xeon_E5620_x2_UMA_windows_2_0_4.xml
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE topology SYSTEM "hwloc2.dtd">
|
||||||
|
<topology version="2.0">
|
||||||
|
<object type="Machine" os_index="0" cpuset="0x0000ffff" complete_cpuset="0x0000ffff" allowed_cpuset="0x0000ffff" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" gp_index="1">
|
||||||
|
<info name="Backend" value="Windows"/>
|
||||||
|
<info name="hwlocVersion" value="2.0.4"/>
|
||||||
|
<object type="NUMANode" os_index="0" cpuset="0x0000ffff" complete_cpuset="0x0000ffff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="30" local_memory="29786447872">
|
||||||
|
<page_type size="4096" count="0"/>
|
||||||
|
</object>
|
||||||
|
<object type="Package" cpuset="0x000000ff" complete_cpuset="0x000000ff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="2">
|
||||||
|
<info name="CPUVendor" value="GenuineIntel"/>
|
||||||
|
<info name="CPUFamilyNumber" value="6"/>
|
||||||
|
<info name="CPUModelNumber" value="44"/>
|
||||||
|
<info name="CPUModel" value="Intel(R) Xeon(R) CPU E5620 @ 2.40GHz"/>
|
||||||
|
<info name="CPUStepping" value="2"/>
|
||||||
|
<object type="L3Cache" cpuset="0x000000ff" complete_cpuset="0x000000ff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="6" cache_size="12582912" depth="3" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L2Cache" cpuset="0x00000003" complete_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="5" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000003" complete_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="4" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000003" complete_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="3">
|
||||||
|
<object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="33"/>
|
||||||
|
<object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="34"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x0000000c" complete_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="9" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x0000000c" complete_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="8" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x0000000c" complete_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="7">
|
||||||
|
<object type="PU" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="35"/>
|
||||||
|
<object type="PU" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="36"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000030" complete_cpuset="0x00000030" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="12" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000030" complete_cpuset="0x00000030" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="11" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000030" complete_cpuset="0x00000030" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="10">
|
||||||
|
<object type="PU" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="37"/>
|
||||||
|
<object type="PU" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="38"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x000000c0" complete_cpuset="0x000000c0" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="15" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x000000c0" complete_cpuset="0x000000c0" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="14" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x000000c0" complete_cpuset="0x000000c0" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="13">
|
||||||
|
<object type="PU" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="39"/>
|
||||||
|
<object type="PU" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="40"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Package" cpuset="0x0000ff00" complete_cpuset="0x0000ff00" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="16">
|
||||||
|
<info name="CPUVendor" value="GenuineIntel"/>
|
||||||
|
<info name="CPUFamilyNumber" value="6"/>
|
||||||
|
<info name="CPUModelNumber" value="44"/>
|
||||||
|
<info name="CPUModel" value="Intel(R) Xeon(R) CPU E5620 @ 2.40GHz"/>
|
||||||
|
<info name="CPUStepping" value="2"/>
|
||||||
|
<object type="L3Cache" cpuset="0x0000ff00" complete_cpuset="0x0000ff00" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="20" cache_size="12582912" depth="3" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L2Cache" cpuset="0x00000300" complete_cpuset="0x00000300" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="19" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000300" complete_cpuset="0x00000300" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="18" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000300" complete_cpuset="0x00000300" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="17">
|
||||||
|
<object type="PU" os_index="8" cpuset="0x00000100" complete_cpuset="0x00000100" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="41"/>
|
||||||
|
<object type="PU" os_index="9" cpuset="0x00000200" complete_cpuset="0x00000200" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="42"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000c00" complete_cpuset="0x00000c00" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="23" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000c00" complete_cpuset="0x00000c00" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="22" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000c00" complete_cpuset="0x00000c00" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="21">
|
||||||
|
<object type="PU" os_index="10" cpuset="0x00000400" complete_cpuset="0x00000400" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="43"/>
|
||||||
|
<object type="PU" os_index="11" cpuset="0x00000800" complete_cpuset="0x00000800" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="44"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00003000" complete_cpuset="0x00003000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="26" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00003000" complete_cpuset="0x00003000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="25" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00003000" complete_cpuset="0x00003000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="24">
|
||||||
|
<object type="PU" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="45"/>
|
||||||
|
<object type="PU" os_index="13" cpuset="0x00002000" complete_cpuset="0x00002000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="46"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x0000c000" complete_cpuset="0x0000c000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="29" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x0000c000" complete_cpuset="0x0000c000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="28" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x0000c000" complete_cpuset="0x0000c000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="27">
|
||||||
|
<object type="PU" os_index="14" cpuset="0x00004000" complete_cpuset="0x00004000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="47"/>
|
||||||
|
<object type="PU" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="48"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</topology>
|
||||||
541
doc/topology/Intel_Xeon_E7-4870_x4_N4_windows_2_0_4.xml
Normal file
541
doc/topology/Intel_Xeon_E7-4870_x4_N4_windows_2_0_4.xml
Normal file
@@ -0,0 +1,541 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE topology SYSTEM "hwloc2.dtd">
|
||||||
|
<topology version="2.0">
|
||||||
|
<object type="Machine" os_index="0" cpuset="0x000000ff,0xffffffff" complete_cpuset="0x000000ff,0xffffffff" allowed_cpuset="0x000000ff,0xffffffff" nodeset="0x0000000f" complete_nodeset="0x0000000f" allowed_nodeset="0x0000000f" gp_index="1">
|
||||||
|
<info name="Backend" value="Windows"/>
|
||||||
|
<info name="hwlocVersion" value="2.0.4"/>
|
||||||
|
<info name="ProcessName" value="lstopo.exe"/>
|
||||||
|
<object type="Package" cpuset="0x000003ff" complete_cpuset="0x000003ff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="2">
|
||||||
|
<info name="CPUVendor" value="GenuineIntel"/>
|
||||||
|
<info name="CPUFamilyNumber" value="6"/>
|
||||||
|
<info name="CPUModelNumber" value="47"/>
|
||||||
|
<info name="CPUModel" value="Intel(R) Xeon(R) CPU E7- 4870 @ 2.40GHz"/>
|
||||||
|
<info name="CPUStepping" value="2"/>
|
||||||
|
<object type="NUMANode" os_index="0" cpuset="0x000003ff" complete_cpuset="0x000003ff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="170" local_memory="5481340928">
|
||||||
|
<page_type size="4096" count="0"/>
|
||||||
|
</object>
|
||||||
|
<object type="L3Cache" cpuset="0x000003ff" complete_cpuset="0x000003ff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="7" cache_size="31457280" depth="3" cache_linesize="64" cache_associativity="24" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L2Cache" cpuset="0x00000001" complete_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="6" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000001" complete_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="4" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00000001" complete_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="5" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000001" complete_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="3">
|
||||||
|
<object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="175"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000002" complete_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="11" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000002" complete_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="9" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00000002" complete_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="10" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000002" complete_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="8">
|
||||||
|
<object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="176"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000004" complete_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="15" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000004" complete_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="13" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00000004" complete_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="14" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000004" complete_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="12">
|
||||||
|
<object type="PU" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="177"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000008" complete_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="19" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000008" complete_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="17" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00000008" complete_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="18" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000008" complete_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="16">
|
||||||
|
<object type="PU" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="178"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000010" complete_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="23" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000010" complete_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="21" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00000010" complete_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="22" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000010" complete_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="20">
|
||||||
|
<object type="PU" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="179"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000020" complete_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="27" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000020" complete_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="25" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00000020" complete_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="26" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000020" complete_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="24">
|
||||||
|
<object type="PU" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="180"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000040" complete_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="31" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000040" complete_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="29" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00000040" complete_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="30" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000040" complete_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="28">
|
||||||
|
<object type="PU" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="181"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000080" complete_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="35" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000080" complete_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="33" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00000080" complete_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="34" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000080" complete_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="32">
|
||||||
|
<object type="PU" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="182"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000100" complete_cpuset="0x00000100" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="39" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000100" complete_cpuset="0x00000100" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="37" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00000100" complete_cpuset="0x00000100" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="38" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000100" complete_cpuset="0x00000100" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="36">
|
||||||
|
<object type="PU" os_index="8" cpuset="0x00000100" complete_cpuset="0x00000100" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="183"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000200" complete_cpuset="0x00000200" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="43" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000200" complete_cpuset="0x00000200" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="41" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00000200" complete_cpuset="0x00000200" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="42" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000200" complete_cpuset="0x00000200" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="40">
|
||||||
|
<object type="PU" os_index="9" cpuset="0x00000200" complete_cpuset="0x00000200" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="184"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Package" cpuset="0x000ffc00" complete_cpuset="0x000ffc00" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="44">
|
||||||
|
<info name="CPUVendor" value="GenuineIntel"/>
|
||||||
|
<info name="CPUFamilyNumber" value="6"/>
|
||||||
|
<info name="CPUModelNumber" value="47"/>
|
||||||
|
<info name="CPUModel" value="Intel(R) Xeon(R) CPU E7- 4870 @ 2.40GHz"/>
|
||||||
|
<info name="CPUStepping" value="2"/>
|
||||||
|
<object type="NUMANode" os_index="1" cpuset="0x000ffc00" complete_cpuset="0x000ffc00" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="171" local_memory="5652529152">
|
||||||
|
<page_type size="4096" count="0"/>
|
||||||
|
</object>
|
||||||
|
<object type="L3Cache" cpuset="0x000ffc00" complete_cpuset="0x000ffc00" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="49" cache_size="31457280" depth="3" cache_linesize="64" cache_associativity="24" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L2Cache" cpuset="0x00000400" complete_cpuset="0x00000400" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="48" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000400" complete_cpuset="0x00000400" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="46" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00000400" complete_cpuset="0x00000400" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="47" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000400" complete_cpuset="0x00000400" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="45">
|
||||||
|
<object type="PU" os_index="10" cpuset="0x00000400" complete_cpuset="0x00000400" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="185"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000800" complete_cpuset="0x00000800" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="53" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000800" complete_cpuset="0x00000800" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="51" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00000800" complete_cpuset="0x00000800" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="52" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000800" complete_cpuset="0x00000800" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="50">
|
||||||
|
<object type="PU" os_index="11" cpuset="0x00000800" complete_cpuset="0x00000800" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="186"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00001000" complete_cpuset="0x00001000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="57" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00001000" complete_cpuset="0x00001000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="55" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00001000" complete_cpuset="0x00001000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="56" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00001000" complete_cpuset="0x00001000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="54">
|
||||||
|
<object type="PU" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="187"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00002000" complete_cpuset="0x00002000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="61" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00002000" complete_cpuset="0x00002000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="59" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00002000" complete_cpuset="0x00002000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="60" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00002000" complete_cpuset="0x00002000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="58">
|
||||||
|
<object type="PU" os_index="13" cpuset="0x00002000" complete_cpuset="0x00002000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="188"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00004000" complete_cpuset="0x00004000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="65" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00004000" complete_cpuset="0x00004000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="63" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00004000" complete_cpuset="0x00004000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="64" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00004000" complete_cpuset="0x00004000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="62">
|
||||||
|
<object type="PU" os_index="14" cpuset="0x00004000" complete_cpuset="0x00004000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="189"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00008000" complete_cpuset="0x00008000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="69" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00008000" complete_cpuset="0x00008000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="67" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00008000" complete_cpuset="0x00008000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="68" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00008000" complete_cpuset="0x00008000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="66">
|
||||||
|
<object type="PU" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="190"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00010000" complete_cpuset="0x00010000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="73" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00010000" complete_cpuset="0x00010000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="71" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00010000" complete_cpuset="0x00010000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="72" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00010000" complete_cpuset="0x00010000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="70">
|
||||||
|
<object type="PU" os_index="16" cpuset="0x00010000" complete_cpuset="0x00010000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="191"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00020000" complete_cpuset="0x00020000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="77" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00020000" complete_cpuset="0x00020000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="75" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00020000" complete_cpuset="0x00020000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="76" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00020000" complete_cpuset="0x00020000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="74">
|
||||||
|
<object type="PU" os_index="17" cpuset="0x00020000" complete_cpuset="0x00020000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="192"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00040000" complete_cpuset="0x00040000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="81" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00040000" complete_cpuset="0x00040000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="79" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00040000" complete_cpuset="0x00040000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="80" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00040000" complete_cpuset="0x00040000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="78">
|
||||||
|
<object type="PU" os_index="18" cpuset="0x00040000" complete_cpuset="0x00040000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="193"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00080000" complete_cpuset="0x00080000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="85" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00080000" complete_cpuset="0x00080000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="83" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00080000" complete_cpuset="0x00080000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="84" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00080000" complete_cpuset="0x00080000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="82">
|
||||||
|
<object type="PU" os_index="19" cpuset="0x00080000" complete_cpuset="0x00080000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="194"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Package" cpuset="0x3ff00000" complete_cpuset="0x3ff00000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="86">
|
||||||
|
<info name="CPUVendor" value="GenuineIntel"/>
|
||||||
|
<info name="CPUFamilyNumber" value="6"/>
|
||||||
|
<info name="CPUModelNumber" value="47"/>
|
||||||
|
<info name="CPUModel" value="Intel(R) Xeon(R) CPU E7- 4870 @ 2.40GHz"/>
|
||||||
|
<info name="CPUStepping" value="2"/>
|
||||||
|
<object type="NUMANode" os_index="2" cpuset="0x3ff00000" complete_cpuset="0x3ff00000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="172" local_memory="5460840448">
|
||||||
|
<page_type size="4096" count="0"/>
|
||||||
|
</object>
|
||||||
|
<object type="L3Cache" cpuset="0x3ff00000" complete_cpuset="0x3ff00000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="91" cache_size="31457280" depth="3" cache_linesize="64" cache_associativity="24" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L2Cache" cpuset="0x00100000" complete_cpuset="0x00100000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="90" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00100000" complete_cpuset="0x00100000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="88" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00100000" complete_cpuset="0x00100000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="89" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00100000" complete_cpuset="0x00100000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="87">
|
||||||
|
<object type="PU" os_index="20" cpuset="0x00100000" complete_cpuset="0x00100000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="195"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00200000" complete_cpuset="0x00200000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="95" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00200000" complete_cpuset="0x00200000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="93" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00200000" complete_cpuset="0x00200000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="94" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00200000" complete_cpuset="0x00200000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="92">
|
||||||
|
<object type="PU" os_index="21" cpuset="0x00200000" complete_cpuset="0x00200000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="196"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00400000" complete_cpuset="0x00400000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="99" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00400000" complete_cpuset="0x00400000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="97" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00400000" complete_cpuset="0x00400000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="98" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00400000" complete_cpuset="0x00400000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="96">
|
||||||
|
<object type="PU" os_index="22" cpuset="0x00400000" complete_cpuset="0x00400000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="197"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00800000" complete_cpuset="0x00800000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="103" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00800000" complete_cpuset="0x00800000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="101" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00800000" complete_cpuset="0x00800000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="102" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00800000" complete_cpuset="0x00800000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="100">
|
||||||
|
<object type="PU" os_index="23" cpuset="0x00800000" complete_cpuset="0x00800000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="198"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x01000000" complete_cpuset="0x01000000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="107" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x01000000" complete_cpuset="0x01000000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="105" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x01000000" complete_cpuset="0x01000000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="106" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x01000000" complete_cpuset="0x01000000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="104">
|
||||||
|
<object type="PU" os_index="24" cpuset="0x01000000" complete_cpuset="0x01000000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="199"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x02000000" complete_cpuset="0x02000000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="111" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x02000000" complete_cpuset="0x02000000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="109" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x02000000" complete_cpuset="0x02000000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="110" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x02000000" complete_cpuset="0x02000000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="108">
|
||||||
|
<object type="PU" os_index="25" cpuset="0x02000000" complete_cpuset="0x02000000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="200"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x04000000" complete_cpuset="0x04000000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="115" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x04000000" complete_cpuset="0x04000000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="113" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x04000000" complete_cpuset="0x04000000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="114" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x04000000" complete_cpuset="0x04000000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="112">
|
||||||
|
<object type="PU" os_index="26" cpuset="0x04000000" complete_cpuset="0x04000000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="201"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x08000000" complete_cpuset="0x08000000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="119" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x08000000" complete_cpuset="0x08000000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="117" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x08000000" complete_cpuset="0x08000000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="118" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x08000000" complete_cpuset="0x08000000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="116">
|
||||||
|
<object type="PU" os_index="27" cpuset="0x08000000" complete_cpuset="0x08000000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="202"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x10000000" complete_cpuset="0x10000000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="123" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x10000000" complete_cpuset="0x10000000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="121" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x10000000" complete_cpuset="0x10000000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="122" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x10000000" complete_cpuset="0x10000000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="120">
|
||||||
|
<object type="PU" os_index="28" cpuset="0x10000000" complete_cpuset="0x10000000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="203"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x20000000" complete_cpuset="0x20000000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="127" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x20000000" complete_cpuset="0x20000000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="125" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x20000000" complete_cpuset="0x20000000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="126" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x20000000" complete_cpuset="0x20000000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="124">
|
||||||
|
<object type="PU" os_index="29" cpuset="0x20000000" complete_cpuset="0x20000000" nodeset="0x00000004" complete_nodeset="0x00000004" gp_index="204"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Package" cpuset="0x000000ff,0xc0000000" complete_cpuset="0x000000ff,0xc0000000" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="128">
|
||||||
|
<info name="CPUVendor" value="GenuineIntel"/>
|
||||||
|
<info name="CPUFamilyNumber" value="6"/>
|
||||||
|
<info name="CPUModelNumber" value="47"/>
|
||||||
|
<info name="CPUModel" value="Intel(R) Xeon(R) CPU E7- 4870 @ 2.40GHz"/>
|
||||||
|
<info name="CPUStepping" value="2"/>
|
||||||
|
<object type="NUMANode" os_index="3" cpuset="0x000000ff,0xc0000000" complete_cpuset="0x000000ff,0xc0000000" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="173" local_memory="5332008960">
|
||||||
|
<page_type size="4096" count="0"/>
|
||||||
|
</object>
|
||||||
|
<object type="L3Cache" cpuset="0x000000ff,0xc0000000" complete_cpuset="0x000000ff,0xc0000000" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="133" cache_size="31457280" depth="3" cache_linesize="64" cache_associativity="24" cache_type="0">
|
||||||
|
<info name="Inclusive" value="1"/>
|
||||||
|
<object type="L2Cache" cpuset="0x40000000" complete_cpuset="0x40000000" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="132" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x40000000" complete_cpuset="0x40000000" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="130" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x40000000" complete_cpuset="0x40000000" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="131" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x40000000" complete_cpuset="0x40000000" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="129">
|
||||||
|
<object type="PU" os_index="30" cpuset="0x40000000" complete_cpuset="0x40000000" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="205"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x80000000" complete_cpuset="0x80000000" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="137" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x80000000" complete_cpuset="0x80000000" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="135" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x80000000" complete_cpuset="0x80000000" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="136" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x80000000" complete_cpuset="0x80000000" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="134">
|
||||||
|
<object type="PU" os_index="31" cpuset="0x80000000" complete_cpuset="0x80000000" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="206"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000001,0x0" complete_cpuset="0x00000001,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="141" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000001,0x0" complete_cpuset="0x00000001,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="139" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00000001,0x0" complete_cpuset="0x00000001,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="140" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000001,0x0" complete_cpuset="0x00000001,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="138">
|
||||||
|
<object type="PU" os_index="32" cpuset="0x00000001,0x0" complete_cpuset="0x00000001,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="207"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000002,0x0" complete_cpuset="0x00000002,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="145" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000002,0x0" complete_cpuset="0x00000002,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="143" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00000002,0x0" complete_cpuset="0x00000002,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="144" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000002,0x0" complete_cpuset="0x00000002,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="142">
|
||||||
|
<object type="PU" os_index="33" cpuset="0x00000002,0x0" complete_cpuset="0x00000002,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="208"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000004,0x0" complete_cpuset="0x00000004,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="149" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000004,0x0" complete_cpuset="0x00000004,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="147" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00000004,0x0" complete_cpuset="0x00000004,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="148" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000004,0x0" complete_cpuset="0x00000004,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="146">
|
||||||
|
<object type="PU" os_index="34" cpuset="0x00000004,0x0" complete_cpuset="0x00000004,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="209"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000008,0x0" complete_cpuset="0x00000008,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="153" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000008,0x0" complete_cpuset="0x00000008,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="151" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00000008,0x0" complete_cpuset="0x00000008,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="152" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000008,0x0" complete_cpuset="0x00000008,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="150">
|
||||||
|
<object type="PU" os_index="35" cpuset="0x00000008,0x0" complete_cpuset="0x00000008,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="210"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000010,0x0" complete_cpuset="0x00000010,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="157" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000010,0x0" complete_cpuset="0x00000010,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="155" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00000010,0x0" complete_cpuset="0x00000010,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="156" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000010,0x0" complete_cpuset="0x00000010,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="154">
|
||||||
|
<object type="PU" os_index="36" cpuset="0x00000010,0x0" complete_cpuset="0x00000010,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="211"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000020,0x0" complete_cpuset="0x00000020,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="161" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000020,0x0" complete_cpuset="0x00000020,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="159" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00000020,0x0" complete_cpuset="0x00000020,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="160" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000020,0x0" complete_cpuset="0x00000020,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="158">
|
||||||
|
<object type="PU" os_index="37" cpuset="0x00000020,0x0" complete_cpuset="0x00000020,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="212"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000040,0x0" complete_cpuset="0x00000040,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="165" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000040,0x0" complete_cpuset="0x00000040,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="163" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00000040,0x0" complete_cpuset="0x00000040,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="164" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000040,0x0" complete_cpuset="0x00000040,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="162">
|
||||||
|
<object type="PU" os_index="38" cpuset="0x00000040,0x0" complete_cpuset="0x00000040,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="213"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000080,0x0" complete_cpuset="0x00000080,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="169" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000080,0x0" complete_cpuset="0x00000080,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="167" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1iCache" cpuset="0x00000080,0x0" complete_cpuset="0x00000080,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="168" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="4" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" cpuset="0x00000080,0x0" complete_cpuset="0x00000080,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="166">
|
||||||
|
<object type="PU" os_index="39" cpuset="0x00000080,0x0" complete_cpuset="0x00000080,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" gp_index="214"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</topology>
|
||||||
246
doc/topology/Intel_Xeon_Gold_6146_x2_UMA_linux_2_0_4.xml
Normal file
246
doc/topology/Intel_Xeon_Gold_6146_x2_UMA_linux_2_0_4.xml
Normal file
@@ -0,0 +1,246 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE topology SYSTEM "hwloc2.dtd">
|
||||||
|
<topology version="2.0">
|
||||||
|
<object type="Machine" os_index="0" cpuset="0x00ffffff" complete_cpuset="0x00ffffff" allowed_cpuset="0x00ffffff" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" gp_index="1">
|
||||||
|
<object type="NUMANode" os_index="0" cpuset="0x00ffffff" complete_cpuset="0x00ffffff" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="102" local_memory="410779004928">
|
||||||
|
<page_type size="4096" count="99632483"/>
|
||||||
|
<page_type size="2097152" count="1280"/>
|
||||||
|
</object>
|
||||||
|
<object type="Package" os_index="0" cpuset="0x00555555" complete_cpuset="0x00555555" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="2">
|
||||||
|
<info name="CPUVendor" value="GenuineIntel"/>
|
||||||
|
<info name="CPUFamilyNumber" value="6"/>
|
||||||
|
<info name="CPUModelNumber" value="85"/>
|
||||||
|
<info name="CPUModel" value="Intel(R) Xeon(R) Gold 6146 CPU @ 3.20GHz"/>
|
||||||
|
<info name="CPUStepping" value="4"/>
|
||||||
|
<object type="L3Cache" cpuset="0x00555555" complete_cpuset="0x00555555" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="7" cache_size="25952256" depth="3" cache_linesize="64" cache_associativity="11" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L2Cache" cpuset="0x00000001" complete_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="6" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000001" complete_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="5" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="3">
|
||||||
|
<object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="4"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000004" complete_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="17" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000004" complete_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="16" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="4" cpuset="0x00000004" complete_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="14">
|
||||||
|
<object type="PU" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="15"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000010" complete_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="25" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000010" complete_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="24" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="1" cpuset="0x00000010" complete_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="22">
|
||||||
|
<object type="PU" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="23"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000040" complete_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="33" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000040" complete_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="32" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="3" cpuset="0x00000040" complete_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="30">
|
||||||
|
<object type="PU" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="31"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000100" complete_cpuset="0x00000100" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="41" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000100" complete_cpuset="0x00000100" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="40" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="2" cpuset="0x00000100" complete_cpuset="0x00000100" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="38">
|
||||||
|
<object type="PU" os_index="8" cpuset="0x00000100" complete_cpuset="0x00000100" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="39"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000400" complete_cpuset="0x00000400" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="49" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000400" complete_cpuset="0x00000400" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="48" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="10" cpuset="0x00000400" complete_cpuset="0x00000400" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="46">
|
||||||
|
<object type="PU" os_index="10" cpuset="0x00000400" complete_cpuset="0x00000400" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="47"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00001000" complete_cpuset="0x00001000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="57" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00001000" complete_cpuset="0x00001000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="56" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="9" cpuset="0x00001000" complete_cpuset="0x00001000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="54">
|
||||||
|
<object type="PU" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="55"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00004000" complete_cpuset="0x00004000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="65" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00004000" complete_cpuset="0x00004000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="64" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="19" cpuset="0x00004000" complete_cpuset="0x00004000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="62">
|
||||||
|
<object type="PU" os_index="14" cpuset="0x00004000" complete_cpuset="0x00004000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="63"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00010000" complete_cpuset="0x00010000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="73" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00010000" complete_cpuset="0x00010000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="72" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="16" cpuset="0x00010000" complete_cpuset="0x00010000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="70">
|
||||||
|
<object type="PU" os_index="16" cpuset="0x00010000" complete_cpuset="0x00010000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="71"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00040000" complete_cpuset="0x00040000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="81" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00040000" complete_cpuset="0x00040000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="80" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="18" cpuset="0x00040000" complete_cpuset="0x00040000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="78">
|
||||||
|
<object type="PU" os_index="18" cpuset="0x00040000" complete_cpuset="0x00040000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="79"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00100000" complete_cpuset="0x00100000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="89" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00100000" complete_cpuset="0x00100000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="88" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="25" cpuset="0x00100000" complete_cpuset="0x00100000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="86">
|
||||||
|
<object type="PU" os_index="20" cpuset="0x00100000" complete_cpuset="0x00100000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="87"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00400000" complete_cpuset="0x00400000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="97" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00400000" complete_cpuset="0x00400000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="96" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="26" cpuset="0x00400000" complete_cpuset="0x00400000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="94">
|
||||||
|
<object type="PU" os_index="22" cpuset="0x00400000" complete_cpuset="0x00400000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="95"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Package" os_index="1" cpuset="0x00aaaaaa" complete_cpuset="0x00aaaaaa" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="8">
|
||||||
|
<info name="CPUVendor" value="GenuineIntel"/>
|
||||||
|
<info name="CPUFamilyNumber" value="6"/>
|
||||||
|
<info name="CPUModelNumber" value="85"/>
|
||||||
|
<info name="CPUModel" value="Intel(R) Xeon(R) Gold 6146 CPU @ 3.20GHz"/>
|
||||||
|
<info name="CPUStepping" value="4"/>
|
||||||
|
<object type="L3Cache" cpuset="0x00aaaaaa" complete_cpuset="0x00aaaaaa" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="13" cache_size="25952256" depth="3" cache_linesize="64" cache_associativity="11" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L2Cache" cpuset="0x00000002" complete_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="12" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000002" complete_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="11" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="0" cpuset="0x00000002" complete_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="9">
|
||||||
|
<object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="10"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000008" complete_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="21" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000008" complete_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="20" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="4" cpuset="0x00000008" complete_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="18">
|
||||||
|
<object type="PU" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="19"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000020" complete_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="29" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000020" complete_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="28" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="1" cpuset="0x00000020" complete_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="26">
|
||||||
|
<object type="PU" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="27"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000080" complete_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="37" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000080" complete_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="36" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="3" cpuset="0x00000080" complete_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="34">
|
||||||
|
<object type="PU" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="35"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000200" complete_cpuset="0x00000200" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="45" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000200" complete_cpuset="0x00000200" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="44" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="2" cpuset="0x00000200" complete_cpuset="0x00000200" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="42">
|
||||||
|
<object type="PU" os_index="9" cpuset="0x00000200" complete_cpuset="0x00000200" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="43"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000800" complete_cpuset="0x00000800" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="53" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000800" complete_cpuset="0x00000800" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="52" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="11" cpuset="0x00000800" complete_cpuset="0x00000800" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="50">
|
||||||
|
<object type="PU" os_index="11" cpuset="0x00000800" complete_cpuset="0x00000800" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="51"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00002000" complete_cpuset="0x00002000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="61" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00002000" complete_cpuset="0x00002000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="60" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="8" cpuset="0x00002000" complete_cpuset="0x00002000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="58">
|
||||||
|
<object type="PU" os_index="13" cpuset="0x00002000" complete_cpuset="0x00002000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="59"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00008000" complete_cpuset="0x00008000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="69" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00008000" complete_cpuset="0x00008000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="68" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="9" cpuset="0x00008000" complete_cpuset="0x00008000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="66">
|
||||||
|
<object type="PU" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="67"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00020000" complete_cpuset="0x00020000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="77" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00020000" complete_cpuset="0x00020000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="76" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="17" cpuset="0x00020000" complete_cpuset="0x00020000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="74">
|
||||||
|
<object type="PU" os_index="17" cpuset="0x00020000" complete_cpuset="0x00020000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="75"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00080000" complete_cpuset="0x00080000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="85" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00080000" complete_cpuset="0x00080000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="84" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="20" cpuset="0x00080000" complete_cpuset="0x00080000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="82">
|
||||||
|
<object type="PU" os_index="19" cpuset="0x00080000" complete_cpuset="0x00080000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="83"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00200000" complete_cpuset="0x00200000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="93" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00200000" complete_cpuset="0x00200000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="92" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="18" cpuset="0x00200000" complete_cpuset="0x00200000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="90">
|
||||||
|
<object type="PU" os_index="21" cpuset="0x00200000" complete_cpuset="0x00200000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="91"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00800000" complete_cpuset="0x00800000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="101" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00800000" complete_cpuset="0x00800000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="100" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="19" cpuset="0x00800000" complete_cpuset="0x00800000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="98">
|
||||||
|
<object type="PU" os_index="23" cpuset="0x00800000" complete_cpuset="0x00800000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="99"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</topology>
|
||||||
403
doc/topology/Intel_Xeon_Silver_4114_x2_N2_linux_1_11_9.xml
Normal file
403
doc/topology/Intel_Xeon_Silver_4114_x2_N2_linux_1_11_9.xml
Normal file
@@ -0,0 +1,403 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE topology SYSTEM "hwloc.dtd">
|
||||||
|
<topology>
|
||||||
|
<object type="Machine" os_index="0" cpuset="0x000000ff,0xffffffff" complete_cpuset="0x000000ff,0xffffffff" online_cpuset="0x000000ff,0xffffffff" allowed_cpuset="0x000000ff,0xffffffff" nodeset="0x00000003" complete_nodeset="0x00000003" allowed_nodeset="0x00000003">
|
||||||
|
<page_type size="4096" count="0"/>
|
||||||
|
<page_type size="2097152" count="0"/>
|
||||||
|
<page_type size="1073741824" count="0"/>
|
||||||
|
<info name="DMIProductName" value="PowerEdge C6420"/>
|
||||||
|
<info name="DMIProductVersion" value=""/>
|
||||||
|
<info name="DMIBoardVendor" value="Dell Inc."/>
|
||||||
|
<info name="DMIBoardName" value="0K2TT6"/>
|
||||||
|
<info name="DMIBoardVersion" value="A07"/>
|
||||||
|
<info name="DMIBoardAssetTag" value=""/>
|
||||||
|
<info name="DMIChassisVendor" value="Dell Inc."/>
|
||||||
|
<info name="DMIChassisType" value="23"/>
|
||||||
|
<info name="DMIChassisVersion" value="PowerEdge C6400"/>
|
||||||
|
<info name="DMIChassisAssetTag" value=""/>
|
||||||
|
<info name="DMIBIOSVendor" value="Dell Inc."/>
|
||||||
|
<info name="DMIBIOSVersion" value="1.4.9"/>
|
||||||
|
<info name="DMIBIOSDate" value="05/30/2018"/>
|
||||||
|
<info name="DMISysVendor" value="Dell Inc."/>
|
||||||
|
<info name="Backend" value="Linux"/>
|
||||||
|
<info name="LinuxCgroup" value="/"/>
|
||||||
|
<info name="OSName" value="Linux"/>
|
||||||
|
<info name="OSRelease" value="4.15.0-55-generic"/>
|
||||||
|
<info name="OSVersion" value="#60-Ubuntu SMP Tue Jul 2 18:22:20 UTC 2019"/>
|
||||||
|
<info name="HostName" value="host"/>
|
||||||
|
<info name="Architecture" value="x86_64"/>
|
||||||
|
<info name="hwlocVersion" value="1.11.9"/>
|
||||||
|
<info name="ProcessName" value="lstopo"/>
|
||||||
|
<distances nbobjs="2" relative_depth="1" latency_base="10.000000">
|
||||||
|
<latency value="1.000000"/>
|
||||||
|
<latency value="2.100000"/>
|
||||||
|
<latency value="2.100000"/>
|
||||||
|
<latency value="1.000000"/>
|
||||||
|
</distances>
|
||||||
|
<object type="NUMANode" os_index="0" cpuset="0x00000055,0x55555555" complete_cpuset="0x00000055,0x55555555" online_cpuset="0x00000055,0x55555555" allowed_cpuset="0x00000055,0x55555555" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" local_memory="67245707264">
|
||||||
|
<page_type size="4096" count="15893121"/>
|
||||||
|
<page_type size="2097152" count="1024"/>
|
||||||
|
<page_type size="1073741824" count="0"/>
|
||||||
|
<object type="Package" os_index="0" cpuset="0x00000055,0x55555555" complete_cpuset="0x00000055,0x55555555" online_cpuset="0x00000055,0x55555555" allowed_cpuset="0x00000055,0x55555555" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
|
||||||
|
<info name="CPUVendor" value="GenuineIntel"/>
|
||||||
|
<info name="CPUFamilyNumber" value="6"/>
|
||||||
|
<info name="CPUModelNumber" value="85"/>
|
||||||
|
<info name="CPUModel" value="Intel(R) Xeon(R) Silver 4114 CPU @ 2.20GHz"/>
|
||||||
|
<info name="CPUStepping" value="4"/>
|
||||||
|
<object type="Cache" cpuset="0x00000055,0x55555555" complete_cpuset="0x00000055,0x55555555" online_cpuset="0x00000055,0x55555555" allowed_cpuset="0x00000055,0x55555555" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="14417920" depth="3" cache_linesize="64" cache_associativity="11" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00100001" complete_cpuset="0x00100001" online_cpuset="0x00100001" allowed_cpuset="0x00100001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00100001" complete_cpuset="0x00100001" online_cpuset="0x00100001" allowed_cpuset="0x00100001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00100001" complete_cpuset="0x00100001" online_cpuset="0x00100001" allowed_cpuset="0x00100001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="0" cpuset="0x00100001" complete_cpuset="0x00100001" online_cpuset="0x00100001" allowed_cpuset="0x00100001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
|
||||||
|
<object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
|
||||||
|
<object type="PU" os_index="20" cpuset="0x00100000" complete_cpuset="0x00100000" online_cpuset="0x00100000" allowed_cpuset="0x00100000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00400004" complete_cpuset="0x00400004" online_cpuset="0x00400004" allowed_cpuset="0x00400004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00400004" complete_cpuset="0x00400004" online_cpuset="0x00400004" allowed_cpuset="0x00400004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00400004" complete_cpuset="0x00400004" online_cpuset="0x00400004" allowed_cpuset="0x00400004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="4" cpuset="0x00400004" complete_cpuset="0x00400004" online_cpuset="0x00400004" allowed_cpuset="0x00400004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
|
||||||
|
<object type="PU" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
|
||||||
|
<object type="PU" os_index="22" cpuset="0x00400000" complete_cpuset="0x00400000" online_cpuset="0x00400000" allowed_cpuset="0x00400000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x01000010" complete_cpuset="0x01000010" online_cpuset="0x01000010" allowed_cpuset="0x01000010" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x01000010" complete_cpuset="0x01000010" online_cpuset="0x01000010" allowed_cpuset="0x01000010" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x01000010" complete_cpuset="0x01000010" online_cpuset="0x01000010" allowed_cpuset="0x01000010" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="1" cpuset="0x01000010" complete_cpuset="0x01000010" online_cpuset="0x01000010" allowed_cpuset="0x01000010" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
|
||||||
|
<object type="PU" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
|
||||||
|
<object type="PU" os_index="24" cpuset="0x01000000" complete_cpuset="0x01000000" online_cpuset="0x01000000" allowed_cpuset="0x01000000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x04000040" complete_cpuset="0x04000040" online_cpuset="0x04000040" allowed_cpuset="0x04000040" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x04000040" complete_cpuset="0x04000040" online_cpuset="0x04000040" allowed_cpuset="0x04000040" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x04000040" complete_cpuset="0x04000040" online_cpuset="0x04000040" allowed_cpuset="0x04000040" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="3" cpuset="0x04000040" complete_cpuset="0x04000040" online_cpuset="0x04000040" allowed_cpuset="0x04000040" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
|
||||||
|
<object type="PU" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
|
||||||
|
<object type="PU" os_index="26" cpuset="0x04000000" complete_cpuset="0x04000000" online_cpuset="0x04000000" allowed_cpuset="0x04000000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x10000100" complete_cpuset="0x10000100" online_cpuset="0x10000100" allowed_cpuset="0x10000100" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x10000100" complete_cpuset="0x10000100" online_cpuset="0x10000100" allowed_cpuset="0x10000100" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x10000100" complete_cpuset="0x10000100" online_cpuset="0x10000100" allowed_cpuset="0x10000100" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="2" cpuset="0x10000100" complete_cpuset="0x10000100" online_cpuset="0x10000100" allowed_cpuset="0x10000100" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
|
||||||
|
<object type="PU" os_index="8" cpuset="0x00000100" complete_cpuset="0x00000100" online_cpuset="0x00000100" allowed_cpuset="0x00000100" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
|
||||||
|
<object type="PU" os_index="28" cpuset="0x10000000" complete_cpuset="0x10000000" online_cpuset="0x10000000" allowed_cpuset="0x10000000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x40000400" complete_cpuset="0x40000400" online_cpuset="0x40000400" allowed_cpuset="0x40000400" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x40000400" complete_cpuset="0x40000400" online_cpuset="0x40000400" allowed_cpuset="0x40000400" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x40000400" complete_cpuset="0x40000400" online_cpuset="0x40000400" allowed_cpuset="0x40000400" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="12" cpuset="0x40000400" complete_cpuset="0x40000400" online_cpuset="0x40000400" allowed_cpuset="0x40000400" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
|
||||||
|
<object type="PU" os_index="10" cpuset="0x00000400" complete_cpuset="0x00000400" online_cpuset="0x00000400" allowed_cpuset="0x00000400" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
|
||||||
|
<object type="PU" os_index="30" cpuset="0x40000000" complete_cpuset="0x40000000" online_cpuset="0x40000000" allowed_cpuset="0x40000000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000001,0x00001000" complete_cpuset="0x00000001,0x00001000" online_cpuset="0x00000001,0x00001000" allowed_cpuset="0x00000001,0x00001000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000001,0x00001000" complete_cpuset="0x00000001,0x00001000" online_cpuset="0x00000001,0x00001000" allowed_cpuset="0x00000001,0x00001000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000001,0x00001000" complete_cpuset="0x00000001,0x00001000" online_cpuset="0x00000001,0x00001000" allowed_cpuset="0x00000001,0x00001000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="8" cpuset="0x00000001,0x00001000" complete_cpuset="0x00000001,0x00001000" online_cpuset="0x00000001,0x00001000" allowed_cpuset="0x00000001,0x00001000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
|
||||||
|
<object type="PU" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
|
||||||
|
<object type="PU" os_index="32" cpuset="0x00000001,0x0" complete_cpuset="0x00000001,0x0" online_cpuset="0x00000001,0x0" allowed_cpuset="0x00000001,0x0" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000004,0x00004000" complete_cpuset="0x00000004,0x00004000" online_cpuset="0x00000004,0x00004000" allowed_cpuset="0x00000004,0x00004000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000004,0x00004000" complete_cpuset="0x00000004,0x00004000" online_cpuset="0x00000004,0x00004000" allowed_cpuset="0x00000004,0x00004000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000004,0x00004000" complete_cpuset="0x00000004,0x00004000" online_cpuset="0x00000004,0x00004000" allowed_cpuset="0x00000004,0x00004000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="11" cpuset="0x00000004,0x00004000" complete_cpuset="0x00000004,0x00004000" online_cpuset="0x00000004,0x00004000" allowed_cpuset="0x00000004,0x00004000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
|
||||||
|
<object type="PU" os_index="14" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
|
||||||
|
<object type="PU" os_index="34" cpuset="0x00000004,0x0" complete_cpuset="0x00000004,0x0" online_cpuset="0x00000004,0x0" allowed_cpuset="0x00000004,0x0" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000010,0x00010000" complete_cpuset="0x00000010,0x00010000" online_cpuset="0x00000010,0x00010000" allowed_cpuset="0x00000010,0x00010000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000010,0x00010000" complete_cpuset="0x00000010,0x00010000" online_cpuset="0x00000010,0x00010000" allowed_cpuset="0x00000010,0x00010000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000010,0x00010000" complete_cpuset="0x00000010,0x00010000" online_cpuset="0x00000010,0x00010000" allowed_cpuset="0x00000010,0x00010000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="9" cpuset="0x00000010,0x00010000" complete_cpuset="0x00000010,0x00010000" online_cpuset="0x00000010,0x00010000" allowed_cpuset="0x00000010,0x00010000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
|
||||||
|
<object type="PU" os_index="16" cpuset="0x00010000" complete_cpuset="0x00010000" online_cpuset="0x00010000" allowed_cpuset="0x00010000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
|
||||||
|
<object type="PU" os_index="36" cpuset="0x00000010,0x0" complete_cpuset="0x00000010,0x0" online_cpuset="0x00000010,0x0" allowed_cpuset="0x00000010,0x0" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000040,0x00040000" complete_cpuset="0x00000040,0x00040000" online_cpuset="0x00000040,0x00040000" allowed_cpuset="0x00000040,0x00040000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000040,0x00040000" complete_cpuset="0x00000040,0x00040000" online_cpuset="0x00000040,0x00040000" allowed_cpuset="0x00000040,0x00040000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000040,0x00040000" complete_cpuset="0x00000040,0x00040000" online_cpuset="0x00000040,0x00040000" allowed_cpuset="0x00000040,0x00040000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="10" cpuset="0x00000040,0x00040000" complete_cpuset="0x00000040,0x00040000" online_cpuset="0x00000040,0x00040000" allowed_cpuset="0x00000040,0x00040000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
|
||||||
|
<object type="PU" os_index="18" cpuset="0x00040000" complete_cpuset="0x00040000" online_cpuset="0x00040000" allowed_cpuset="0x00040000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
|
||||||
|
<object type="PU" os_index="38" cpuset="0x00000040,0x0" complete_cpuset="0x00000040,0x0" online_cpuset="0x00000040,0x0" allowed_cpuset="0x00000040,0x0" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Bridge" os_index="0" bridge_type="0-1" depth="0" bridge_pci="0000:[00-04]">
|
||||||
|
<object type="PCIDev" os_index="277" name="Intel Corporation C620 Series Chipset Family SSATA Controller [AHCI mode]" pci_busid="0000:00:11.5" pci_type="0106 [8086:a1d2] [1028:0757] 09" pci_link_speed="0.000000">
|
||||||
|
<info name="PCIVendor" value="Intel Corporation"/>
|
||||||
|
<info name="PCIDevice" value="C620 Series Chipset Family SSATA Controller [AHCI mode]"/>
|
||||||
|
</object>
|
||||||
|
<object type="PCIDev" os_index="368" name="Intel Corporation C620 Series Chipset Family SATA Controller [AHCI mode]" pci_busid="0000:00:17.0" pci_type="0106 [8086:a182] [1028:0757] 09" pci_link_speed="0.000000">
|
||||||
|
<info name="PCIVendor" value="Intel Corporation"/>
|
||||||
|
<info name="PCIDevice" value="C620 Series Chipset Family SATA Controller [AHCI mode]"/>
|
||||||
|
</object>
|
||||||
|
<object type="Bridge" os_index="452" name="Intel Corporation C620 Series Chipset Family PCI Express Root Port #5" bridge_type="1-1" depth="1" bridge_pci="0000:[02-03]" pci_busid="0000:00:1c.4" pci_type="0604 [8086:a194] [0000:0000] f9" pci_link_speed="0.000000">
|
||||||
|
<info name="PCIVendor" value="Intel Corporation"/>
|
||||||
|
<info name="PCIDevice" value="C620 Series Chipset Family PCI Express Root Port #5"/>
|
||||||
|
<object type="Bridge" os_index="8192" name="PLDA" bridge_type="1-1" depth="2" bridge_pci="0000:[03-03]" pci_busid="0000:02:00.0" pci_type="0604 [1556:be00] [0000:0000] 02" pci_link_speed="0.000000">
|
||||||
|
<info name="PCIVendor" value="PLDA"/>
|
||||||
|
<object type="PCIDev" os_index="12288" name="Matrox Electronics Systems Ltd. Integrated Matrox G200eW3 Graphics Controller" pci_busid="0000:03:00.0" pci_type="0300 [102b:0536] [1028:0757] 04" pci_link_speed="0.000000">
|
||||||
|
<info name="PCIVendor" value="Matrox Electronics Systems Ltd."/>
|
||||||
|
<info name="PCIDevice" value="Integrated Matrox G200eW3 Graphics Controller"/>
|
||||||
|
<object type="OSDev" name="controlD64" osdev_type="1"/>
|
||||||
|
<object type="OSDev" name="card0" osdev_type="1"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Bridge" os_index="453" name="Intel Corporation C620 Series Chipset Family PCI Express Root Port #6" bridge_type="1-1" depth="1" bridge_pci="0000:[04-04]" pci_busid="0000:00:1c.5" pci_type="0604 [8086:a195] [0000:0000] f9" pci_link_speed="0.000000">
|
||||||
|
<info name="PCIVendor" value="Intel Corporation"/>
|
||||||
|
<info name="PCIDevice" value="C620 Series Chipset Family PCI Express Root Port #6"/>
|
||||||
|
<object type="PCIDev" os_index="16384" name="Intel Corporation I350 Gigabit Network Connection" pci_busid="0000:04:00.0" pci_type="0200 [8086:1521] [1028:0757] 01" pci_link_speed="0.000000">
|
||||||
|
<info name="PCIVendor" value="Intel Corporation"/>
|
||||||
|
<info name="PCIDevice" value="I350 Gigabit Network Connection"/>
|
||||||
|
<object type="OSDev" name="eno16" osdev_type="2">
|
||||||
|
<info name="Address" value="50:9a:4c:87:d8:60"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Bridge" os_index="3" bridge_type="0-1" depth="0" bridge_pci="0000:[5d-5e]">
|
||||||
|
<object type="Bridge" os_index="380928" name="Intel Corporation Sky Lake-E PCI Express Root Port A" bridge_type="1-1" depth="1" bridge_pci="0000:[5e-5e]" pci_busid="0000:5d:00.0" pci_type="0604 [8086:2030] [0000:0000] 04" pci_link_speed="0.000000">
|
||||||
|
<info name="PCIVendor" value="Intel Corporation"/>
|
||||||
|
<info name="PCIDevice" value="Sky Lake-E PCI Express Root Port A"/>
|
||||||
|
<info name="PCISlot" value="4"/>
|
||||||
|
<object type="PCIDev" os_index="385024" name="Intel Corporation Ethernet Controller 10G X550T" pci_busid="0000:5e:00.0" pci_type="0200 [8086:1563] [8086:001d] 01" pci_link_speed="0.000000">
|
||||||
|
<info name="PCIVendor" value="Intel Corporation"/>
|
||||||
|
<info name="PCIDevice" value="Ethernet Controller 10G X550T"/>
|
||||||
|
<object type="OSDev" name="enp94s0f0" osdev_type="2">
|
||||||
|
<info name="Address" value="b4:96:91:23:be:34"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="PCIDev" os_index="385025" name="Intel Corporation Ethernet Controller 10G X550T" pci_busid="0000:5e:00.1" pci_type="0200 [8086:1563] [8086:001d] 01" pci_link_speed="0.000000">
|
||||||
|
<info name="PCIVendor" value="Intel Corporation"/>
|
||||||
|
<info name="PCIDevice" value="Ethernet Controller 10G X550T"/>
|
||||||
|
<object type="OSDev" name="enp94s0f1" osdev_type="2">
|
||||||
|
<info name="Address" value="b4:96:91:23:be:36"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="NUMANode" os_index="1" cpuset="0x000000aa,0xaaaaaaaa" complete_cpuset="0x000000aa,0xaaaaaaaa" online_cpuset="0x000000aa,0xaaaaaaaa" allowed_cpuset="0x000000aa,0xaaaaaaaa" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" local_memory="67618639872">
|
||||||
|
<page_type size="4096" count="15984169"/>
|
||||||
|
<page_type size="2097152" count="1024"/>
|
||||||
|
<page_type size="1073741824" count="0"/>
|
||||||
|
<object type="Package" os_index="1" cpuset="0x000000aa,0xaaaaaaaa" complete_cpuset="0x000000aa,0xaaaaaaaa" online_cpuset="0x000000aa,0xaaaaaaaa" allowed_cpuset="0x000000aa,0xaaaaaaaa" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
|
||||||
|
<info name="CPUVendor" value="GenuineIntel"/>
|
||||||
|
<info name="CPUFamilyNumber" value="6"/>
|
||||||
|
<info name="CPUModelNumber" value="85"/>
|
||||||
|
<info name="CPUModel" value="Intel(R) Xeon(R) Silver 4114 CPU @ 2.20GHz"/>
|
||||||
|
<info name="CPUStepping" value="4"/>
|
||||||
|
<object type="Cache" cpuset="0x000000aa,0xaaaaaaaa" complete_cpuset="0x000000aa,0xaaaaaaaa" online_cpuset="0x000000aa,0xaaaaaaaa" allowed_cpuset="0x000000aa,0xaaaaaaaa" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="14417920" depth="3" cache_linesize="64" cache_associativity="11" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00200002" complete_cpuset="0x00200002" online_cpuset="0x00200002" allowed_cpuset="0x00200002" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00200002" complete_cpuset="0x00200002" online_cpuset="0x00200002" allowed_cpuset="0x00200002" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00200002" complete_cpuset="0x00200002" online_cpuset="0x00200002" allowed_cpuset="0x00200002" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="0" cpuset="0x00200002" complete_cpuset="0x00200002" online_cpuset="0x00200002" allowed_cpuset="0x00200002" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
|
||||||
|
<object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
|
||||||
|
<object type="PU" os_index="21" cpuset="0x00200000" complete_cpuset="0x00200000" online_cpuset="0x00200000" allowed_cpuset="0x00200000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00800008" complete_cpuset="0x00800008" online_cpuset="0x00800008" allowed_cpuset="0x00800008" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00800008" complete_cpuset="0x00800008" online_cpuset="0x00800008" allowed_cpuset="0x00800008" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00800008" complete_cpuset="0x00800008" online_cpuset="0x00800008" allowed_cpuset="0x00800008" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="4" cpuset="0x00800008" complete_cpuset="0x00800008" online_cpuset="0x00800008" allowed_cpuset="0x00800008" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
|
||||||
|
<object type="PU" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
|
||||||
|
<object type="PU" os_index="23" cpuset="0x00800000" complete_cpuset="0x00800000" online_cpuset="0x00800000" allowed_cpuset="0x00800000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x02000020" complete_cpuset="0x02000020" online_cpuset="0x02000020" allowed_cpuset="0x02000020" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x02000020" complete_cpuset="0x02000020" online_cpuset="0x02000020" allowed_cpuset="0x02000020" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x02000020" complete_cpuset="0x02000020" online_cpuset="0x02000020" allowed_cpuset="0x02000020" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="1" cpuset="0x02000020" complete_cpuset="0x02000020" online_cpuset="0x02000020" allowed_cpuset="0x02000020" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
|
||||||
|
<object type="PU" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
|
||||||
|
<object type="PU" os_index="25" cpuset="0x02000000" complete_cpuset="0x02000000" online_cpuset="0x02000000" allowed_cpuset="0x02000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x08000080" complete_cpuset="0x08000080" online_cpuset="0x08000080" allowed_cpuset="0x08000080" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x08000080" complete_cpuset="0x08000080" online_cpuset="0x08000080" allowed_cpuset="0x08000080" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x08000080" complete_cpuset="0x08000080" online_cpuset="0x08000080" allowed_cpuset="0x08000080" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="3" cpuset="0x08000080" complete_cpuset="0x08000080" online_cpuset="0x08000080" allowed_cpuset="0x08000080" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
|
||||||
|
<object type="PU" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
|
||||||
|
<object type="PU" os_index="27" cpuset="0x08000000" complete_cpuset="0x08000000" online_cpuset="0x08000000" allowed_cpuset="0x08000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x20000200" complete_cpuset="0x20000200" online_cpuset="0x20000200" allowed_cpuset="0x20000200" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x20000200" complete_cpuset="0x20000200" online_cpuset="0x20000200" allowed_cpuset="0x20000200" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x20000200" complete_cpuset="0x20000200" online_cpuset="0x20000200" allowed_cpuset="0x20000200" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="2" cpuset="0x20000200" complete_cpuset="0x20000200" online_cpuset="0x20000200" allowed_cpuset="0x20000200" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
|
||||||
|
<object type="PU" os_index="9" cpuset="0x00000200" complete_cpuset="0x00000200" online_cpuset="0x00000200" allowed_cpuset="0x00000200" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
|
||||||
|
<object type="PU" os_index="29" cpuset="0x20000000" complete_cpuset="0x20000000" online_cpuset="0x20000000" allowed_cpuset="0x20000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x80000800" complete_cpuset="0x80000800" online_cpuset="0x80000800" allowed_cpuset="0x80000800" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x80000800" complete_cpuset="0x80000800" online_cpuset="0x80000800" allowed_cpuset="0x80000800" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x80000800" complete_cpuset="0x80000800" online_cpuset="0x80000800" allowed_cpuset="0x80000800" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="12" cpuset="0x80000800" complete_cpuset="0x80000800" online_cpuset="0x80000800" allowed_cpuset="0x80000800" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
|
||||||
|
<object type="PU" os_index="11" cpuset="0x00000800" complete_cpuset="0x00000800" online_cpuset="0x00000800" allowed_cpuset="0x00000800" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
|
||||||
|
<object type="PU" os_index="31" cpuset="0x80000000" complete_cpuset="0x80000000" online_cpuset="0x80000000" allowed_cpuset="0x80000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000002,0x00002000" complete_cpuset="0x00000002,0x00002000" online_cpuset="0x00000002,0x00002000" allowed_cpuset="0x00000002,0x00002000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000002,0x00002000" complete_cpuset="0x00000002,0x00002000" online_cpuset="0x00000002,0x00002000" allowed_cpuset="0x00000002,0x00002000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000002,0x00002000" complete_cpuset="0x00000002,0x00002000" online_cpuset="0x00000002,0x00002000" allowed_cpuset="0x00000002,0x00002000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="8" cpuset="0x00000002,0x00002000" complete_cpuset="0x00000002,0x00002000" online_cpuset="0x00000002,0x00002000" allowed_cpuset="0x00000002,0x00002000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
|
||||||
|
<object type="PU" os_index="13" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
|
||||||
|
<object type="PU" os_index="33" cpuset="0x00000002,0x0" complete_cpuset="0x00000002,0x0" online_cpuset="0x00000002,0x0" allowed_cpuset="0x00000002,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000008,0x00008000" complete_cpuset="0x00000008,0x00008000" online_cpuset="0x00000008,0x00008000" allowed_cpuset="0x00000008,0x00008000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000008,0x00008000" complete_cpuset="0x00000008,0x00008000" online_cpuset="0x00000008,0x00008000" allowed_cpuset="0x00000008,0x00008000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000008,0x00008000" complete_cpuset="0x00000008,0x00008000" online_cpuset="0x00000008,0x00008000" allowed_cpuset="0x00000008,0x00008000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="11" cpuset="0x00000008,0x00008000" complete_cpuset="0x00000008,0x00008000" online_cpuset="0x00000008,0x00008000" allowed_cpuset="0x00000008,0x00008000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
|
||||||
|
<object type="PU" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
|
||||||
|
<object type="PU" os_index="35" cpuset="0x00000008,0x0" complete_cpuset="0x00000008,0x0" online_cpuset="0x00000008,0x0" allowed_cpuset="0x00000008,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000020,0x00020000" complete_cpuset="0x00000020,0x00020000" online_cpuset="0x00000020,0x00020000" allowed_cpuset="0x00000020,0x00020000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000020,0x00020000" complete_cpuset="0x00000020,0x00020000" online_cpuset="0x00000020,0x00020000" allowed_cpuset="0x00000020,0x00020000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000020,0x00020000" complete_cpuset="0x00000020,0x00020000" online_cpuset="0x00000020,0x00020000" allowed_cpuset="0x00000020,0x00020000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="9" cpuset="0x00000020,0x00020000" complete_cpuset="0x00000020,0x00020000" online_cpuset="0x00000020,0x00020000" allowed_cpuset="0x00000020,0x00020000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
|
||||||
|
<object type="PU" os_index="17" cpuset="0x00020000" complete_cpuset="0x00020000" online_cpuset="0x00020000" allowed_cpuset="0x00020000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
|
||||||
|
<object type="PU" os_index="37" cpuset="0x00000020,0x0" complete_cpuset="0x00000020,0x0" online_cpuset="0x00000020,0x0" allowed_cpuset="0x00000020,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Cache" cpuset="0x00000080,0x00080000" complete_cpuset="0x00000080,0x00080000" online_cpuset="0x00000080,0x00080000" allowed_cpuset="0x00000080,0x00080000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000080,0x00080000" complete_cpuset="0x00000080,0x00080000" online_cpuset="0x00000080,0x00080000" allowed_cpuset="0x00000080,0x00080000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Cache" cpuset="0x00000080,0x00080000" complete_cpuset="0x00000080,0x00080000" online_cpuset="0x00000080,0x00080000" allowed_cpuset="0x00000080,0x00080000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="10" cpuset="0x00000080,0x00080000" complete_cpuset="0x00000080,0x00080000" online_cpuset="0x00000080,0x00080000" allowed_cpuset="0x00000080,0x00080000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
|
||||||
|
<object type="PU" os_index="19" cpuset="0x00080000" complete_cpuset="0x00080000" online_cpuset="0x00080000" allowed_cpuset="0x00080000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
|
||||||
|
<object type="PU" os_index="39" cpuset="0x00000080,0x0" complete_cpuset="0x00000080,0x0" online_cpuset="0x00000080,0x0" allowed_cpuset="0x00000080,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Bridge" os_index="7" bridge_type="0-1" depth="0" bridge_pci="0000:[d7-db]">
|
||||||
|
<object type="Bridge" os_index="880640" name="Intel Corporation Sky Lake-E PCI Express Root Port A" bridge_type="1-1" depth="1" bridge_pci="0000:[d8-d8]" pci_busid="0000:d7:00.0" pci_type="0604 [8086:2030] [0000:0000] 04" pci_link_speed="0.000000">
|
||||||
|
<info name="PCIVendor" value="Intel Corporation"/>
|
||||||
|
<info name="PCIDevice" value="Sky Lake-E PCI Express Root Port A"/>
|
||||||
|
<object type="PCIDev" os_index="884736" name="Intel Corporation Express Flash NVMe P4500/P4600" pci_busid="0000:d8:00.0" pci_type="0108 [8086:0a54] [1028:1fe1] 00" pci_link_speed="0.000000">
|
||||||
|
<info name="PCIVendor" value="Intel Corporation"/>
|
||||||
|
<info name="PCIDevice" value="Express Flash NVMe P4500/P4600"/>
|
||||||
|
<info name="PCISlot" value="160"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Bridge" os_index="880656" name="Intel Corporation Sky Lake-E PCI Express Root Port B" bridge_type="1-1" depth="1" bridge_pci="0000:[d9-d9]" pci_busid="0000:d7:01.0" pci_type="0604 [8086:2031] [0000:0000] 04" pci_link_speed="0.000000">
|
||||||
|
<info name="PCIVendor" value="Intel Corporation"/>
|
||||||
|
<info name="PCIDevice" value="Sky Lake-E PCI Express Root Port B"/>
|
||||||
|
<object type="PCIDev" os_index="888832" name="Intel Corporation Express Flash NVMe P4500/P4600" pci_busid="0000:d9:00.0" pci_type="0108 [8086:0a54] [1028:1fe1] 00" pci_link_speed="0.000000">
|
||||||
|
<info name="PCIVendor" value="Intel Corporation"/>
|
||||||
|
<info name="PCIDevice" value="Express Flash NVMe P4500/P4600"/>
|
||||||
|
<info name="PCISlot" value="161"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</topology>
|
||||||
263
doc/topology/Intel_Xeon_Silver_4114_x2_N2_linux_2_0_4.xml
Normal file
263
doc/topology/Intel_Xeon_Silver_4114_x2_N2_linux_2_0_4.xml
Normal file
@@ -0,0 +1,263 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE topology SYSTEM "hwloc2.dtd">
|
||||||
|
<topology version="2.0">
|
||||||
|
<object type="Machine" os_index="0" cpuset="0x000000ff,0xffffffff" complete_cpuset="0x000000ff,0xffffffff" allowed_cpuset="0x000000ff,0xffffffff" nodeset="0x00000003" complete_nodeset="0x00000003" allowed_nodeset="0x00000003" gp_index="1">
|
||||||
|
<info name="DMIProductName" value="PowerEdge C6420"/>
|
||||||
|
<info name="DMIProductVersion" value=""/>
|
||||||
|
<info name="DMIBoardVendor" value="Dell Inc."/>
|
||||||
|
<info name="DMIBoardName" value="0K2TT6"/>
|
||||||
|
<info name="DMIBoardVersion" value="A07"/>
|
||||||
|
<info name="DMIBoardAssetTag" value=""/>
|
||||||
|
<info name="DMIChassisVendor" value="Dell Inc."/>
|
||||||
|
<info name="DMIChassisType" value="23"/>
|
||||||
|
<info name="DMIChassisVersion" value="PowerEdge C6400"/>
|
||||||
|
<info name="DMIChassisAssetTag" value=""/>
|
||||||
|
<info name="DMIBIOSVendor" value="Dell Inc."/>
|
||||||
|
<info name="DMIBIOSVersion" value="1.4.9"/>
|
||||||
|
<info name="DMIBIOSDate" value="05/30/2018"/>
|
||||||
|
<info name="DMISysVendor" value="Dell Inc."/>
|
||||||
|
<info name="Backend" value="Linux"/>
|
||||||
|
<info name="LinuxCgroup" value="/"/>
|
||||||
|
<info name="OSName" value="Linux"/>
|
||||||
|
<info name="OSRelease" value="4.15.0-55-generic"/>
|
||||||
|
<info name="OSVersion" value="#60-Ubuntu SMP Tue Jul 2 18:22:20 UTC 2019"/>
|
||||||
|
<info name="HostName" value="sd-146751"/>
|
||||||
|
<info name="Architecture" value="x86_64"/>
|
||||||
|
<info name="hwlocVersion" value="2.0.4"/>
|
||||||
|
<info name="ProcessName" value="xmrig"/>
|
||||||
|
<object type="Package" os_index="0" cpuset="0x00000055,0x55555555" complete_cpuset="0x00000055,0x55555555" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="2">
|
||||||
|
<info name="CPUVendor" value="GenuineIntel"/>
|
||||||
|
<info name="CPUFamilyNumber" value="6"/>
|
||||||
|
<info name="CPUModelNumber" value="85"/>
|
||||||
|
<info name="CPUModel" value="Intel(R) Xeon(R) Silver 4114 CPU @ 2.20GHz"/>
|
||||||
|
<info name="CPUStepping" value="4"/>
|
||||||
|
<object type="NUMANode" os_index="0" cpuset="0x00000055,0x55555555" complete_cpuset="0x00000055,0x55555555" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="106" local_memory="67245707264">
|
||||||
|
<page_type size="4096" count="15762049"/>
|
||||||
|
<page_type size="2097152" count="1280"/>
|
||||||
|
<page_type size="1073741824" count="0"/>
|
||||||
|
</object>
|
||||||
|
<object type="L3Cache" cpuset="0x00000055,0x55555555" complete_cpuset="0x00000055,0x55555555" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="7" cache_size="14417920" depth="3" cache_linesize="64" cache_associativity="11" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L2Cache" cpuset="0x00100001" complete_cpuset="0x00100001" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="6" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00100001" complete_cpuset="0x00100001" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="5" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="0" cpuset="0x00100001" complete_cpuset="0x00100001" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="3">
|
||||||
|
<object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="4"/>
|
||||||
|
<object type="PU" os_index="20" cpuset="0x00100000" complete_cpuset="0x00100000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="86"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00400004" complete_cpuset="0x00400004" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="17" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00400004" complete_cpuset="0x00400004" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="16" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="4" cpuset="0x00400004" complete_cpuset="0x00400004" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="14">
|
||||||
|
<object type="PU" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="15"/>
|
||||||
|
<object type="PU" os_index="22" cpuset="0x00400000" complete_cpuset="0x00400000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="88"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x01000010" complete_cpuset="0x01000010" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="25" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x01000010" complete_cpuset="0x01000010" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="24" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="1" cpuset="0x01000010" complete_cpuset="0x01000010" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="22">
|
||||||
|
<object type="PU" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="23"/>
|
||||||
|
<object type="PU" os_index="24" cpuset="0x01000000" complete_cpuset="0x01000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="90"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x04000040" complete_cpuset="0x04000040" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="33" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x04000040" complete_cpuset="0x04000040" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="32" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="3" cpuset="0x04000040" complete_cpuset="0x04000040" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="30">
|
||||||
|
<object type="PU" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="31"/>
|
||||||
|
<object type="PU" os_index="26" cpuset="0x04000000" complete_cpuset="0x04000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="92"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x10000100" complete_cpuset="0x10000100" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="41" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x10000100" complete_cpuset="0x10000100" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="40" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="2" cpuset="0x10000100" complete_cpuset="0x10000100" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="38">
|
||||||
|
<object type="PU" os_index="8" cpuset="0x00000100" complete_cpuset="0x00000100" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="39"/>
|
||||||
|
<object type="PU" os_index="28" cpuset="0x10000000" complete_cpuset="0x10000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="94"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x40000400" complete_cpuset="0x40000400" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="49" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x40000400" complete_cpuset="0x40000400" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="48" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="12" cpuset="0x40000400" complete_cpuset="0x40000400" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="46">
|
||||||
|
<object type="PU" os_index="10" cpuset="0x00000400" complete_cpuset="0x00000400" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="47"/>
|
||||||
|
<object type="PU" os_index="30" cpuset="0x40000000" complete_cpuset="0x40000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="96"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000001,0x00001000" complete_cpuset="0x00000001,0x00001000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="57" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000001,0x00001000" complete_cpuset="0x00000001,0x00001000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="56" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="8" cpuset="0x00000001,0x00001000" complete_cpuset="0x00000001,0x00001000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="54">
|
||||||
|
<object type="PU" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="55"/>
|
||||||
|
<object type="PU" os_index="32" cpuset="0x00000001,0x0" complete_cpuset="0x00000001,0x0" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="98"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000004,0x00004000" complete_cpuset="0x00000004,0x00004000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="65" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000004,0x00004000" complete_cpuset="0x00000004,0x00004000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="64" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="11" cpuset="0x00000004,0x00004000" complete_cpuset="0x00000004,0x00004000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="62">
|
||||||
|
<object type="PU" os_index="14" cpuset="0x00004000" complete_cpuset="0x00004000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="63"/>
|
||||||
|
<object type="PU" os_index="34" cpuset="0x00000004,0x0" complete_cpuset="0x00000004,0x0" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="100"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000010,0x00010000" complete_cpuset="0x00000010,0x00010000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="73" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000010,0x00010000" complete_cpuset="0x00000010,0x00010000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="72" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="9" cpuset="0x00000010,0x00010000" complete_cpuset="0x00000010,0x00010000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="70">
|
||||||
|
<object type="PU" os_index="16" cpuset="0x00010000" complete_cpuset="0x00010000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="71"/>
|
||||||
|
<object type="PU" os_index="36" cpuset="0x00000010,0x0" complete_cpuset="0x00000010,0x0" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="102"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000040,0x00040000" complete_cpuset="0x00000040,0x00040000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="81" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000040,0x00040000" complete_cpuset="0x00000040,0x00040000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="80" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="10" cpuset="0x00000040,0x00040000" complete_cpuset="0x00000040,0x00040000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="78">
|
||||||
|
<object type="PU" os_index="18" cpuset="0x00040000" complete_cpuset="0x00040000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="79"/>
|
||||||
|
<object type="PU" os_index="38" cpuset="0x00000040,0x0" complete_cpuset="0x00000040,0x0" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="104"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="Package" os_index="1" cpuset="0x000000aa,0xaaaaaaaa" complete_cpuset="0x000000aa,0xaaaaaaaa" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="8">
|
||||||
|
<info name="CPUVendor" value="GenuineIntel"/>
|
||||||
|
<info name="CPUFamilyNumber" value="6"/>
|
||||||
|
<info name="CPUModelNumber" value="85"/>
|
||||||
|
<info name="CPUModel" value="Intel(R) Xeon(R) Silver 4114 CPU @ 2.20GHz"/>
|
||||||
|
<info name="CPUStepping" value="4"/>
|
||||||
|
<object type="NUMANode" os_index="1" cpuset="0x000000aa,0xaaaaaaaa" complete_cpuset="0x000000aa,0xaaaaaaaa" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="107" local_memory="67618639872">
|
||||||
|
<page_type size="4096" count="15853097"/>
|
||||||
|
<page_type size="2097152" count="1280"/>
|
||||||
|
<page_type size="1073741824" count="0"/>
|
||||||
|
</object>
|
||||||
|
<object type="L3Cache" cpuset="0x000000aa,0xaaaaaaaa" complete_cpuset="0x000000aa,0xaaaaaaaa" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="13" cache_size="14417920" depth="3" cache_linesize="64" cache_associativity="11" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L2Cache" cpuset="0x00200002" complete_cpuset="0x00200002" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="12" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00200002" complete_cpuset="0x00200002" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="11" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="0" cpuset="0x00200002" complete_cpuset="0x00200002" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="9">
|
||||||
|
<object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="10"/>
|
||||||
|
<object type="PU" os_index="21" cpuset="0x00200000" complete_cpuset="0x00200000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="87"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00800008" complete_cpuset="0x00800008" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="21" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00800008" complete_cpuset="0x00800008" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="20" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="4" cpuset="0x00800008" complete_cpuset="0x00800008" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="18">
|
||||||
|
<object type="PU" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="19"/>
|
||||||
|
<object type="PU" os_index="23" cpuset="0x00800000" complete_cpuset="0x00800000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="89"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x02000020" complete_cpuset="0x02000020" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="29" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x02000020" complete_cpuset="0x02000020" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="28" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="1" cpuset="0x02000020" complete_cpuset="0x02000020" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="26">
|
||||||
|
<object type="PU" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="27"/>
|
||||||
|
<object type="PU" os_index="25" cpuset="0x02000000" complete_cpuset="0x02000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="91"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x08000080" complete_cpuset="0x08000080" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="37" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x08000080" complete_cpuset="0x08000080" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="36" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="3" cpuset="0x08000080" complete_cpuset="0x08000080" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="34">
|
||||||
|
<object type="PU" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="35"/>
|
||||||
|
<object type="PU" os_index="27" cpuset="0x08000000" complete_cpuset="0x08000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="93"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x20000200" complete_cpuset="0x20000200" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="45" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x20000200" complete_cpuset="0x20000200" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="44" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="2" cpuset="0x20000200" complete_cpuset="0x20000200" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="42">
|
||||||
|
<object type="PU" os_index="9" cpuset="0x00000200" complete_cpuset="0x00000200" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="43"/>
|
||||||
|
<object type="PU" os_index="29" cpuset="0x20000000" complete_cpuset="0x20000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="95"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x80000800" complete_cpuset="0x80000800" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="53" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x80000800" complete_cpuset="0x80000800" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="52" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="12" cpuset="0x80000800" complete_cpuset="0x80000800" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="50">
|
||||||
|
<object type="PU" os_index="11" cpuset="0x00000800" complete_cpuset="0x00000800" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="51"/>
|
||||||
|
<object type="PU" os_index="31" cpuset="0x80000000" complete_cpuset="0x80000000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="97"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000002,0x00002000" complete_cpuset="0x00000002,0x00002000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="61" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000002,0x00002000" complete_cpuset="0x00000002,0x00002000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="60" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="8" cpuset="0x00000002,0x00002000" complete_cpuset="0x00000002,0x00002000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="58">
|
||||||
|
<object type="PU" os_index="13" cpuset="0x00002000" complete_cpuset="0x00002000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="59"/>
|
||||||
|
<object type="PU" os_index="33" cpuset="0x00000002,0x0" complete_cpuset="0x00000002,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="99"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000008,0x00008000" complete_cpuset="0x00000008,0x00008000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="69" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000008,0x00008000" complete_cpuset="0x00000008,0x00008000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="68" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="11" cpuset="0x00000008,0x00008000" complete_cpuset="0x00000008,0x00008000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="66">
|
||||||
|
<object type="PU" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="67"/>
|
||||||
|
<object type="PU" os_index="35" cpuset="0x00000008,0x0" complete_cpuset="0x00000008,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="101"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000020,0x00020000" complete_cpuset="0x00000020,0x00020000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="77" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000020,0x00020000" complete_cpuset="0x00000020,0x00020000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="76" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="9" cpuset="0x00000020,0x00020000" complete_cpuset="0x00000020,0x00020000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="74">
|
||||||
|
<object type="PU" os_index="17" cpuset="0x00020000" complete_cpuset="0x00020000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="75"/>
|
||||||
|
<object type="PU" os_index="37" cpuset="0x00000020,0x0" complete_cpuset="0x00000020,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="103"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object type="L2Cache" cpuset="0x00000080,0x00080000" complete_cpuset="0x00000080,0x00080000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="85" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16" cache_type="0">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="L1Cache" cpuset="0x00000080,0x00080000" complete_cpuset="0x00000080,0x00080000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="84" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1">
|
||||||
|
<info name="Inclusive" value="0"/>
|
||||||
|
<object type="Core" os_index="10" cpuset="0x00000080,0x00080000" complete_cpuset="0x00000080,0x00080000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="82">
|
||||||
|
<object type="PU" os_index="19" cpuset="0x00080000" complete_cpuset="0x00080000" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="83"/>
|
||||||
|
<object type="PU" os_index="39" cpuset="0x00000080,0x0" complete_cpuset="0x00000080,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="105"/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<distances2 type="NUMANode" nbobjs="2" kind="5" indexing="os">
|
||||||
|
<indexes length="4">0 1 </indexes>
|
||||||
|
<u64values length="12">10 21 21 10 </u64values>
|
||||||
|
</distances2>
|
||||||
|
</topology>
|
||||||
33
src/3rdparty/argon2.h
vendored
Normal file
33
src/3rdparty/argon2.h
vendored
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
/* XMRig
|
||||||
|
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
||||||
|
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
||||||
|
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
||||||
|
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
||||||
|
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
||||||
|
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
||||||
|
* Copyright 2018-2019 SChernykh <https://github.com/SChernykh>
|
||||||
|
* Copyright 2016-2019 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef XMRIG_3RDPARTY_ARGON2_H
|
||||||
|
#define XMRIG_3RDPARTY_ARGON2_H
|
||||||
|
|
||||||
|
|
||||||
|
#include "3rdparty/argon2/include/argon2.h"
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* XMRIG_3RDPARTY_ARGON2_H */
|
||||||
88
src/3rdparty/argon2/CMakeLists.txt
vendored
Normal file
88
src/3rdparty/argon2/CMakeLists.txt
vendored
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
cmake_minimum_required(VERSION 2.8)
|
||||||
|
|
||||||
|
project(argon2 C)
|
||||||
|
set(CMAKE_C_STANDARD 99)
|
||||||
|
set(CMAKE_C_STANDARD_REQUIRED ON)
|
||||||
|
|
||||||
|
include(CheckCSourceCompiles)
|
||||||
|
|
||||||
|
set(ARGON2_SOURCES
|
||||||
|
lib/argon2.c
|
||||||
|
lib/core.c
|
||||||
|
lib/encoding.c
|
||||||
|
lib/genkat.c
|
||||||
|
lib/impl-select.c
|
||||||
|
lib/blake2/blake2.c
|
||||||
|
)
|
||||||
|
|
||||||
|
set(ARGON2_X86_64_ENABLED ON)
|
||||||
|
set(ARGON2_X86_64_LIBS argon2-sse2 argon2-ssse3 argon2-xop argon2-avx2 argon2-avx512f)
|
||||||
|
set(ARGON2_X86_64_SOURCES arch/x86_64/lib/argon2-arch.c arch/x86_64/lib/cpu-flags.c)
|
||||||
|
|
||||||
|
if (CMAKE_C_COMPILER_ID MATCHES MSVC)
|
||||||
|
function(add_feature_impl FEATURE MSVC_FLAG DEF)
|
||||||
|
add_library(argon2-${FEATURE} STATIC arch/x86_64/lib/argon2-${FEATURE}.c)
|
||||||
|
target_include_directories(argon2-${FEATURE} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
|
||||||
|
target_include_directories(argon2-${FEATURE} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/lib)
|
||||||
|
set_target_properties(argon2-${FEATURE} PROPERTIES POSITION_INDEPENDENT_CODE True)
|
||||||
|
|
||||||
|
target_compile_options(argon2-${FEATURE} PRIVATE ${MSVC_FLAG})
|
||||||
|
target_compile_definitions(argon2-${FEATURE} PRIVATE ${DEF})
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
add_feature_impl(sse2 "" HAVE_SSE2)
|
||||||
|
add_feature_impl(ssse3 "/arch:SSSE3" HAVE_SSSE3)
|
||||||
|
add_feature_impl(xop "" HAVE_XOP)
|
||||||
|
add_feature_impl(avx2 "/arch:AVX2" HAVE_AVX2)
|
||||||
|
add_feature_impl(avx512f "/arch:AVX512F" HAVE_AVX512F)
|
||||||
|
elseif (NOT XMRIG_ARM AND CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||||
|
function(add_feature_impl FEATURE GCC_FLAG DEF)
|
||||||
|
add_library(argon2-${FEATURE} STATIC arch/x86_64/lib/argon2-${FEATURE}.c)
|
||||||
|
target_include_directories(argon2-${FEATURE} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
|
||||||
|
target_include_directories(argon2-${FEATURE} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/lib)
|
||||||
|
set_target_properties(argon2-${FEATURE} PROPERTIES POSITION_INDEPENDENT_CODE True)
|
||||||
|
|
||||||
|
message("-- argon2: detecting feature '${FEATURE}'...")
|
||||||
|
file(READ arch/x86_64/src/test-feature-${FEATURE}.c SOURCE_CODE)
|
||||||
|
|
||||||
|
# try without flag:
|
||||||
|
check_c_source_compiles("${SOURCE_CODE}" FEATURE_${FEATURE}_NOFLAG)
|
||||||
|
set(HAS_FEATURE ${FEATURE_${FEATURE}_NOFLAG})
|
||||||
|
if (NOT "${HAS_FEATURE}")
|
||||||
|
# try with -m<feature> flag:
|
||||||
|
set(CMAKE_REQUIRED_FLAGS ${GCC_FLAG})
|
||||||
|
check_c_source_compiles("${SOURCE_CODE}" FEATURE_${FEATURE}_FLAG)
|
||||||
|
set(CMAKE_REQUIRED_FLAGS "")
|
||||||
|
|
||||||
|
set(HAS_FEATURE ${FEATURE_${FEATURE}_FLAG})
|
||||||
|
if (${HAS_FEATURE})
|
||||||
|
target_compile_options(argon2-${FEATURE} PRIVATE ${GCC_FLAG})
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (${HAS_FEATURE})
|
||||||
|
message("-- argon2: feature '${FEATURE}' detected!")
|
||||||
|
target_compile_definitions(argon2-${FEATURE} PRIVATE ${DEF})
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
add_feature_impl(sse2 -msse2 HAVE_SSE2)
|
||||||
|
add_feature_impl(ssse3 -mssse3 HAVE_SSSE3)
|
||||||
|
add_feature_impl(xop -mxop HAVE_XOP)
|
||||||
|
add_feature_impl(avx2 -mavx2 HAVE_AVX2)
|
||||||
|
add_feature_impl(avx512f -mavx512f HAVE_AVX512F)
|
||||||
|
else()
|
||||||
|
set(ARGON2_X86_64_ENABLED OFF)
|
||||||
|
list(APPEND ARGON2_SOURCES arch/generic/lib/argon2-arch.c)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (ARGON2_X86_64_ENABLED)
|
||||||
|
set(ARGON2_LIBS ${ARGON2_X86_64_LIBS})
|
||||||
|
list(APPEND ARGON2_SOURCES ${ARGON2_X86_64_SOURCES})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_library(argon2 STATIC ${ARGON2_SOURCES})
|
||||||
|
target_link_libraries(argon2 ${ARGON2_LIBS})
|
||||||
|
|
||||||
|
target_include_directories(argon2 PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
|
||||||
|
target_include_directories(argon2 PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/lib)
|
||||||
21
src/3rdparty/argon2/LICENSE
vendored
Normal file
21
src/3rdparty/argon2/LICENSE
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2016 Ondrej Mosnáček
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
58
src/3rdparty/argon2/README.md
vendored
Normal file
58
src/3rdparty/argon2/README.md
vendored
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
# Argon2 [](https://travis-ci.org/WOnder93/argon2)
|
||||||
|
A multi-arch library implementing the Argon2 password hashing algorithm.
|
||||||
|
|
||||||
|
This project is based on the [original source code](https://github.com/P-H-C/phc-winner-argon2) by the Argon2 authors. The goal of this project is to provide efficient Argon2 implementations for various HW architectures (x86, SSE, ARM, PowerPC, ...).
|
||||||
|
|
||||||
|
For the x86_64 architecture, the library implements a simple CPU dispatch which automatically selects the best implementation based on CPU flags and quick benchmarks.
|
||||||
|
|
||||||
|
# Building
|
||||||
|
## Using GNU autotools
|
||||||
|
|
||||||
|
To prepare the build environment, run:
|
||||||
|
```bash
|
||||||
|
autoreconf -i
|
||||||
|
./configure
|
||||||
|
```
|
||||||
|
|
||||||
|
After that, just run `make` to build the library.
|
||||||
|
|
||||||
|
### Running tests
|
||||||
|
After configuring the build environment, run `make check` to run the tests.
|
||||||
|
|
||||||
|
### Architecture options
|
||||||
|
You can specify the target architecture by passing the `--host=...` flag to `./configure`.
|
||||||
|
|
||||||
|
Supported architectures:
|
||||||
|
* `x86_64` – 64-bit x86 architecture
|
||||||
|
* `generic` – use generic C impementation
|
||||||
|
|
||||||
|
## Using CMake
|
||||||
|
|
||||||
|
To prepare the build environment, run:
|
||||||
|
```bash
|
||||||
|
cmake -DCMAKE_BUILD_TYPE=Release .
|
||||||
|
```
|
||||||
|
|
||||||
|
Then you can run `make` to build the library.
|
||||||
|
|
||||||
|
## Using QMake/Qt Creator
|
||||||
|
A [QMake](http://doc.qt.io/qt-4.8/qmake-manual.html) project is also available in the `qmake` directory. You can open it in the [Qt Creator IDE](http://wiki.qt.io/Category:Tools::QtCreator) or build it from terminal:
|
||||||
|
```bash
|
||||||
|
cd qmake
|
||||||
|
# see table below for the list of possible ARCH and CONFIG values
|
||||||
|
qmake ARCH=... CONFIG+=...
|
||||||
|
make
|
||||||
|
```
|
||||||
|
|
||||||
|
### Architecture options
|
||||||
|
For QMake builds you can configure support for different architectures. Use the `ARCH` variable to choose the architecture and the `CONFIG` variable to set additional options.
|
||||||
|
|
||||||
|
Supported architectures:
|
||||||
|
* `x86_64` – 64-bit x86 architecture
|
||||||
|
* QMake config flags:
|
||||||
|
* `USE_SSE2` – use SSE2 instructions
|
||||||
|
* `USE_SSSE3` – use SSSE3 instructions
|
||||||
|
* `USE_XOP` – use XOP instructions
|
||||||
|
* `USE_AVX2` – use AVX2 instructions
|
||||||
|
* `USE_AVX512F` – use AVX-512F instructions
|
||||||
|
* `generic` – use generic C impementation
|
||||||
20
src/3rdparty/argon2/arch/generic/lib/argon2-arch.c
vendored
Normal file
20
src/3rdparty/argon2/arch/generic/lib/argon2-arch.c
vendored
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
#include <stdint.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "impl-select.h"
|
||||||
|
|
||||||
|
#define rotr64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
|
||||||
|
|
||||||
|
#include "argon2-template-64.h"
|
||||||
|
|
||||||
|
void fill_segment_default(const argon2_instance_t *instance,
|
||||||
|
argon2_position_t position)
|
||||||
|
{
|
||||||
|
fill_segment_64(instance, position);
|
||||||
|
}
|
||||||
|
|
||||||
|
void argon2_get_impl_list(argon2_impl_list *list)
|
||||||
|
{
|
||||||
|
list->count = 0;
|
||||||
|
}
|
||||||
41
src/3rdparty/argon2/arch/x86_64/lib/argon2-arch.c
vendored
Normal file
41
src/3rdparty/argon2/arch/x86_64/lib/argon2-arch.c
vendored
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
#include <stdint.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "impl-select.h"
|
||||||
|
|
||||||
|
#include "cpu-flags.h"
|
||||||
|
#include "argon2-sse2.h"
|
||||||
|
#include "argon2-ssse3.h"
|
||||||
|
#include "argon2-xop.h"
|
||||||
|
#include "argon2-avx2.h"
|
||||||
|
#include "argon2-avx512f.h"
|
||||||
|
|
||||||
|
/* NOTE: there is no portable intrinsic for 64-bit rotate, but any
|
||||||
|
* sane compiler should be able to compile this into a ROR instruction: */
|
||||||
|
#define rotr64(x, n) ((x) >> (n)) | ((x) << (64 - (n)))
|
||||||
|
|
||||||
|
#include "argon2-template-64.h"
|
||||||
|
|
||||||
|
void fill_segment_default(const argon2_instance_t *instance,
|
||||||
|
argon2_position_t position)
|
||||||
|
{
|
||||||
|
fill_segment_64(instance, position);
|
||||||
|
}
|
||||||
|
|
||||||
|
void argon2_get_impl_list(argon2_impl_list *list)
|
||||||
|
{
|
||||||
|
static const argon2_impl IMPLS[] = {
|
||||||
|
{ "x86_64", NULL, fill_segment_default },
|
||||||
|
{ "SSE2", check_sse2, fill_segment_sse2 },
|
||||||
|
{ "SSSE3", check_ssse3, fill_segment_ssse3 },
|
||||||
|
{ "XOP", check_xop, fill_segment_xop },
|
||||||
|
{ "AVX2", check_avx2, fill_segment_avx2 },
|
||||||
|
{ "AVX-512F", check_avx512f, fill_segment_avx512f },
|
||||||
|
};
|
||||||
|
|
||||||
|
cpu_flags_get();
|
||||||
|
|
||||||
|
list->count = sizeof(IMPLS) / sizeof(IMPLS[0]);
|
||||||
|
list->entries = IMPLS;
|
||||||
|
}
|
||||||
347
src/3rdparty/argon2/arch/x86_64/lib/argon2-avx2.c
vendored
Normal file
347
src/3rdparty/argon2/arch/x86_64/lib/argon2-avx2.c
vendored
Normal file
@@ -0,0 +1,347 @@
|
|||||||
|
#include "argon2-avx2.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_AVX2
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
# include <x86intrin.h>
|
||||||
|
#else
|
||||||
|
# include <intrin.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "cpu-flags.h"
|
||||||
|
|
||||||
|
#define r16 (_mm256_setr_epi8( \
|
||||||
|
2, 3, 4, 5, 6, 7, 0, 1, \
|
||||||
|
10, 11, 12, 13, 14, 15, 8, 9, \
|
||||||
|
18, 19, 20, 21, 22, 23, 16, 17, \
|
||||||
|
26, 27, 28, 29, 30, 31, 24, 25))
|
||||||
|
|
||||||
|
#define r24 (_mm256_setr_epi8( \
|
||||||
|
3, 4, 5, 6, 7, 0, 1, 2, \
|
||||||
|
11, 12, 13, 14, 15, 8, 9, 10, \
|
||||||
|
19, 20, 21, 22, 23, 16, 17, 18, \
|
||||||
|
27, 28, 29, 30, 31, 24, 25, 26))
|
||||||
|
|
||||||
|
#define ror64_16(x) _mm256_shuffle_epi8((x), r16)
|
||||||
|
#define ror64_24(x) _mm256_shuffle_epi8((x), r24)
|
||||||
|
#define ror64_32(x) _mm256_shuffle_epi32((x), _MM_SHUFFLE(2, 3, 0, 1))
|
||||||
|
#define ror64_63(x) \
|
||||||
|
_mm256_xor_si256(_mm256_srli_epi64((x), 63), _mm256_add_epi64((x), (x)))
|
||||||
|
|
||||||
|
static __m256i f(__m256i x, __m256i y)
|
||||||
|
{
|
||||||
|
__m256i z = _mm256_mul_epu32(x, y);
|
||||||
|
return _mm256_add_epi64(_mm256_add_epi64(x, y), _mm256_add_epi64(z, z));
|
||||||
|
}
|
||||||
|
|
||||||
|
#define G1(A0, B0, C0, D0, A1, B1, C1, D1) \
|
||||||
|
do { \
|
||||||
|
A0 = f(A0, B0); \
|
||||||
|
A1 = f(A1, B1); \
|
||||||
|
\
|
||||||
|
D0 = _mm256_xor_si256(D0, A0); \
|
||||||
|
D1 = _mm256_xor_si256(D1, A1); \
|
||||||
|
\
|
||||||
|
D0 = ror64_32(D0); \
|
||||||
|
D1 = ror64_32(D1); \
|
||||||
|
\
|
||||||
|
C0 = f(C0, D0); \
|
||||||
|
C1 = f(C1, D1); \
|
||||||
|
\
|
||||||
|
B0 = _mm256_xor_si256(B0, C0); \
|
||||||
|
B1 = _mm256_xor_si256(B1, C1); \
|
||||||
|
\
|
||||||
|
B0 = ror64_24(B0); \
|
||||||
|
B1 = ror64_24(B1); \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
#define G2(A0, B0, C0, D0, A1, B1, C1, D1) \
|
||||||
|
do { \
|
||||||
|
A0 = f(A0, B0); \
|
||||||
|
A1 = f(A1, B1); \
|
||||||
|
\
|
||||||
|
D0 = _mm256_xor_si256(D0, A0); \
|
||||||
|
D1 = _mm256_xor_si256(D1, A1); \
|
||||||
|
\
|
||||||
|
D0 = ror64_16(D0); \
|
||||||
|
D1 = ror64_16(D1); \
|
||||||
|
\
|
||||||
|
C0 = f(C0, D0); \
|
||||||
|
C1 = f(C1, D1); \
|
||||||
|
\
|
||||||
|
B0 = _mm256_xor_si256(B0, C0); \
|
||||||
|
B1 = _mm256_xor_si256(B1, C1); \
|
||||||
|
\
|
||||||
|
B0 = ror64_63(B0); \
|
||||||
|
B1 = ror64_63(B1); \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
#define DIAGONALIZE1(A0, B0, C0, D0, A1, B1, C1, D1) \
|
||||||
|
do { \
|
||||||
|
B0 = _mm256_permute4x64_epi64(B0, _MM_SHUFFLE(0, 3, 2, 1)); \
|
||||||
|
B1 = _mm256_permute4x64_epi64(B1, _MM_SHUFFLE(0, 3, 2, 1)); \
|
||||||
|
\
|
||||||
|
C0 = _mm256_permute4x64_epi64(C0, _MM_SHUFFLE(1, 0, 3, 2)); \
|
||||||
|
C1 = _mm256_permute4x64_epi64(C1, _MM_SHUFFLE(1, 0, 3, 2)); \
|
||||||
|
\
|
||||||
|
D0 = _mm256_permute4x64_epi64(D0, _MM_SHUFFLE(2, 1, 0, 3)); \
|
||||||
|
D1 = _mm256_permute4x64_epi64(D1, _MM_SHUFFLE(2, 1, 0, 3)); \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
#define UNDIAGONALIZE1(A0, B0, C0, D0, A1, B1, C1, D1) \
|
||||||
|
do { \
|
||||||
|
B0 = _mm256_permute4x64_epi64(B0, _MM_SHUFFLE(2, 1, 0, 3)); \
|
||||||
|
B1 = _mm256_permute4x64_epi64(B1, _MM_SHUFFLE(2, 1, 0, 3)); \
|
||||||
|
\
|
||||||
|
C0 = _mm256_permute4x64_epi64(C0, _MM_SHUFFLE(1, 0, 3, 2)); \
|
||||||
|
C1 = _mm256_permute4x64_epi64(C1, _MM_SHUFFLE(1, 0, 3, 2)); \
|
||||||
|
\
|
||||||
|
D0 = _mm256_permute4x64_epi64(D0, _MM_SHUFFLE(0, 3, 2, 1)); \
|
||||||
|
D1 = _mm256_permute4x64_epi64(D1, _MM_SHUFFLE(0, 3, 2, 1)); \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
#define DIAGONALIZE2(A0, B0, C0, D0, A1, B1, C1, D1) \
|
||||||
|
do { \
|
||||||
|
__m256i tmp1, tmp2; \
|
||||||
|
tmp1 = _mm256_blend_epi32(B0, B1, 0xCC); \
|
||||||
|
tmp2 = _mm256_blend_epi32(B0, B1, 0x33); \
|
||||||
|
B1 = _mm256_permute4x64_epi64(tmp1, _MM_SHUFFLE(2,3,0,1)); \
|
||||||
|
B0 = _mm256_permute4x64_epi64(tmp2, _MM_SHUFFLE(2,3,0,1)); \
|
||||||
|
\
|
||||||
|
tmp1 = C0; \
|
||||||
|
C0 = C1; \
|
||||||
|
C1 = tmp1; \
|
||||||
|
\
|
||||||
|
tmp1 = _mm256_blend_epi32(D0, D1, 0xCC); \
|
||||||
|
tmp2 = _mm256_blend_epi32(D0, D1, 0x33); \
|
||||||
|
D0 = _mm256_permute4x64_epi64(tmp1, _MM_SHUFFLE(2,3,0,1)); \
|
||||||
|
D1 = _mm256_permute4x64_epi64(tmp2, _MM_SHUFFLE(2,3,0,1)); \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
#define UNDIAGONALIZE2(A0, B0, C0, D0, A1, B1, C1, D1) \
|
||||||
|
do { \
|
||||||
|
__m256i tmp1, tmp2; \
|
||||||
|
tmp1 = _mm256_blend_epi32(B0, B1, 0xCC); \
|
||||||
|
tmp2 = _mm256_blend_epi32(B0, B1, 0x33); \
|
||||||
|
B0 = _mm256_permute4x64_epi64(tmp1, _MM_SHUFFLE(2,3,0,1)); \
|
||||||
|
B1 = _mm256_permute4x64_epi64(tmp2, _MM_SHUFFLE(2,3,0,1)); \
|
||||||
|
\
|
||||||
|
tmp1 = C0; \
|
||||||
|
C0 = C1; \
|
||||||
|
C1 = tmp1; \
|
||||||
|
\
|
||||||
|
tmp1 = _mm256_blend_epi32(D0, D1, 0xCC); \
|
||||||
|
tmp2 = _mm256_blend_epi32(D0, D1, 0x33); \
|
||||||
|
D1 = _mm256_permute4x64_epi64(tmp1, _MM_SHUFFLE(2,3,0,1)); \
|
||||||
|
D0 = _mm256_permute4x64_epi64(tmp2, _MM_SHUFFLE(2,3,0,1)); \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
#define BLAKE2_ROUND1(A0, B0, C0, D0, A1, B1, C1, D1) \
|
||||||
|
do { \
|
||||||
|
G1(A0, B0, C0, D0, A1, B1, C1, D1); \
|
||||||
|
G2(A0, B0, C0, D0, A1, B1, C1, D1); \
|
||||||
|
\
|
||||||
|
DIAGONALIZE1(A0, B0, C0, D0, A1, B1, C1, D1); \
|
||||||
|
\
|
||||||
|
G1(A0, B0, C0, D0, A1, B1, C1, D1); \
|
||||||
|
G2(A0, B0, C0, D0, A1, B1, C1, D1); \
|
||||||
|
\
|
||||||
|
UNDIAGONALIZE1(A0, B0, C0, D0, A1, B1, C1, D1); \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
#define BLAKE2_ROUND2(A0, A1, B0, B1, C0, C1, D0, D1) \
|
||||||
|
do { \
|
||||||
|
G1(A0, B0, C0, D0, A1, B1, C1, D1); \
|
||||||
|
G2(A0, B0, C0, D0, A1, B1, C1, D1); \
|
||||||
|
\
|
||||||
|
DIAGONALIZE2(A0, B0, C0, D0, A1, B1, C1, D1); \
|
||||||
|
\
|
||||||
|
G1(A0, B0, C0, D0, A1, B1, C1, D1); \
|
||||||
|
G2(A0, B0, C0, D0, A1, B1, C1, D1); \
|
||||||
|
\
|
||||||
|
UNDIAGONALIZE2(A0, B0, C0, D0, A1, B1, C1, D1); \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
enum {
|
||||||
|
ARGON2_HWORDS_IN_BLOCK = ARGON2_OWORDS_IN_BLOCK / 2,
|
||||||
|
};
|
||||||
|
|
||||||
|
static void fill_block(__m256i *s, const block *ref_block, block *next_block,
|
||||||
|
int with_xor)
|
||||||
|
{
|
||||||
|
__m256i block_XY[ARGON2_HWORDS_IN_BLOCK];
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
if (with_xor) {
|
||||||
|
for (i = 0; i < ARGON2_HWORDS_IN_BLOCK; i++) {
|
||||||
|
s[i] =_mm256_xor_si256(
|
||||||
|
s[i], _mm256_loadu_si256((const __m256i *)ref_block->v + i));
|
||||||
|
block_XY[i] = _mm256_xor_si256(
|
||||||
|
s[i], _mm256_loadu_si256((const __m256i *)next_block->v + i));
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
for (i = 0; i < ARGON2_HWORDS_IN_BLOCK; i++) {
|
||||||
|
block_XY[i] = s[i] =_mm256_xor_si256(
|
||||||
|
s[i], _mm256_loadu_si256((const __m256i *)ref_block->v + i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < 4; ++i) {
|
||||||
|
BLAKE2_ROUND1(
|
||||||
|
s[8 * i + 0], s[8 * i + 1], s[8 * i + 2], s[8 * i + 3],
|
||||||
|
s[8 * i + 4], s[8 * i + 5], s[8 * i + 6], s[8 * i + 7]);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < 4; ++i) {
|
||||||
|
BLAKE2_ROUND2(
|
||||||
|
s[4 * 0 + i], s[4 * 1 + i], s[4 * 2 + i], s[4 * 3 + i],
|
||||||
|
s[4 * 4 + i], s[4 * 5 + i], s[4 * 6 + i], s[4 * 7 + i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < ARGON2_HWORDS_IN_BLOCK; i++) {
|
||||||
|
s[i] = _mm256_xor_si256(s[i], block_XY[i]);
|
||||||
|
_mm256_storeu_si256((__m256i *)next_block->v + i, s[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void next_addresses(block *address_block, block *input_block)
|
||||||
|
{
|
||||||
|
/*Temporary zero-initialized blocks*/
|
||||||
|
__m256i zero_block[ARGON2_HWORDS_IN_BLOCK];
|
||||||
|
__m256i zero2_block[ARGON2_HWORDS_IN_BLOCK];
|
||||||
|
|
||||||
|
memset(zero_block, 0, sizeof(zero_block));
|
||||||
|
memset(zero2_block, 0, sizeof(zero2_block));
|
||||||
|
|
||||||
|
/*Increasing index counter*/
|
||||||
|
input_block->v[6]++;
|
||||||
|
|
||||||
|
/*First iteration of G*/
|
||||||
|
fill_block(zero_block, input_block, address_block, 0);
|
||||||
|
|
||||||
|
/*Second iteration of G*/
|
||||||
|
fill_block(zero2_block, address_block, address_block, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void fill_segment_avx2(const argon2_instance_t *instance,
|
||||||
|
argon2_position_t position)
|
||||||
|
{
|
||||||
|
block *ref_block = NULL, *curr_block = NULL;
|
||||||
|
block address_block, input_block;
|
||||||
|
uint64_t pseudo_rand, ref_index, ref_lane;
|
||||||
|
uint32_t prev_offset, curr_offset;
|
||||||
|
uint32_t starting_index, i;
|
||||||
|
__m256i state[ARGON2_HWORDS_IN_BLOCK];
|
||||||
|
int data_independent_addressing;
|
||||||
|
|
||||||
|
if (instance == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
data_independent_addressing = (instance->type == Argon2_i) ||
|
||||||
|
(instance->type == Argon2_id && (position.pass == 0) &&
|
||||||
|
(position.slice < ARGON2_SYNC_POINTS / 2));
|
||||||
|
|
||||||
|
if (data_independent_addressing) {
|
||||||
|
init_block_value(&input_block, 0);
|
||||||
|
|
||||||
|
input_block.v[0] = position.pass;
|
||||||
|
input_block.v[1] = position.lane;
|
||||||
|
input_block.v[2] = position.slice;
|
||||||
|
input_block.v[3] = instance->memory_blocks;
|
||||||
|
input_block.v[4] = instance->passes;
|
||||||
|
input_block.v[5] = instance->type;
|
||||||
|
}
|
||||||
|
|
||||||
|
starting_index = 0;
|
||||||
|
|
||||||
|
if ((0 == position.pass) && (0 == position.slice)) {
|
||||||
|
starting_index = 2; /* we have already generated the first two blocks */
|
||||||
|
|
||||||
|
/* Don't forget to generate the first block of addresses: */
|
||||||
|
if (data_independent_addressing) {
|
||||||
|
next_addresses(&address_block, &input_block);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Offset of the current block */
|
||||||
|
curr_offset = position.lane * instance->lane_length +
|
||||||
|
position.slice * instance->segment_length + starting_index;
|
||||||
|
|
||||||
|
if (0 == curr_offset % instance->lane_length) {
|
||||||
|
/* Last block in this lane */
|
||||||
|
prev_offset = curr_offset + instance->lane_length - 1;
|
||||||
|
} else {
|
||||||
|
/* Previous block */
|
||||||
|
prev_offset = curr_offset - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(state, ((instance->memory + prev_offset)->v), ARGON2_BLOCK_SIZE);
|
||||||
|
|
||||||
|
for (i = starting_index; i < instance->segment_length;
|
||||||
|
++i, ++curr_offset, ++prev_offset) {
|
||||||
|
/*1.1 Rotating prev_offset if needed */
|
||||||
|
if (curr_offset % instance->lane_length == 1) {
|
||||||
|
prev_offset = curr_offset - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 1.2 Computing the index of the reference block */
|
||||||
|
/* 1.2.1 Taking pseudo-random value from the previous block */
|
||||||
|
if (data_independent_addressing) {
|
||||||
|
if (i % ARGON2_ADDRESSES_IN_BLOCK == 0) {
|
||||||
|
next_addresses(&address_block, &input_block);
|
||||||
|
}
|
||||||
|
pseudo_rand = address_block.v[i % ARGON2_ADDRESSES_IN_BLOCK];
|
||||||
|
} else {
|
||||||
|
pseudo_rand = instance->memory[prev_offset].v[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 1.2.2 Computing the lane of the reference block */
|
||||||
|
ref_lane = ((pseudo_rand >> 32)) % instance->lanes;
|
||||||
|
|
||||||
|
if ((position.pass == 0) && (position.slice == 0)) {
|
||||||
|
/* Can not reference other lanes yet */
|
||||||
|
ref_lane = position.lane;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 1.2.3 Computing the number of possible reference block within the
|
||||||
|
* lane.
|
||||||
|
*/
|
||||||
|
position.index = i;
|
||||||
|
ref_index = index_alpha(instance, &position, pseudo_rand & 0xFFFFFFFF,
|
||||||
|
ref_lane == position.lane);
|
||||||
|
|
||||||
|
/* 2 Creating a new block */
|
||||||
|
ref_block =
|
||||||
|
instance->memory + instance->lane_length * ref_lane + ref_index;
|
||||||
|
curr_block = instance->memory + curr_offset;
|
||||||
|
|
||||||
|
/* version 1.2.1 and earlier: overwrite, not XOR */
|
||||||
|
if (0 == position.pass || ARGON2_VERSION_10 == instance->version) {
|
||||||
|
fill_block(state, ref_block, curr_block, 0);
|
||||||
|
} else {
|
||||||
|
fill_block(state, ref_block, curr_block, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int check_avx2(void)
|
||||||
|
{
|
||||||
|
return cpu_flags_have_avx2();
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
void fill_segment_avx2(const argon2_instance_t *instance,
|
||||||
|
argon2_position_t position)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
int check_avx2(void)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
11
src/3rdparty/argon2/arch/x86_64/lib/argon2-avx2.h
vendored
Normal file
11
src/3rdparty/argon2/arch/x86_64/lib/argon2-avx2.h
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
#ifndef ARGON2_AVX2_H
|
||||||
|
#define ARGON2_AVX2_H
|
||||||
|
|
||||||
|
#include "core.h"
|
||||||
|
|
||||||
|
void fill_segment_avx2(const argon2_instance_t *instance,
|
||||||
|
argon2_position_t position);
|
||||||
|
|
||||||
|
int check_avx2(void);
|
||||||
|
|
||||||
|
#endif // ARGON2_AVX2_H
|
||||||
332
src/3rdparty/argon2/arch/x86_64/lib/argon2-avx512f.c
vendored
Normal file
332
src/3rdparty/argon2/arch/x86_64/lib/argon2-avx512f.c
vendored
Normal file
@@ -0,0 +1,332 @@
|
|||||||
|
#include "argon2-avx512f.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_AVX512F
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
# include <x86intrin.h>
|
||||||
|
#else
|
||||||
|
# include <intrin.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "cpu-flags.h"
|
||||||
|
|
||||||
|
#define ror64(x, n) _mm512_ror_epi64((x), (n))
|
||||||
|
|
||||||
|
static __m512i f(__m512i x, __m512i y)
|
||||||
|
{
|
||||||
|
__m512i z = _mm512_mul_epu32(x, y);
|
||||||
|
return _mm512_add_epi64(_mm512_add_epi64(x, y), _mm512_add_epi64(z, z));
|
||||||
|
}
|
||||||
|
|
||||||
|
#define G1(A0, B0, C0, D0, A1, B1, C1, D1) \
|
||||||
|
do { \
|
||||||
|
A0 = f(A0, B0); \
|
||||||
|
A1 = f(A1, B1); \
|
||||||
|
\
|
||||||
|
D0 = _mm512_xor_si512(D0, A0); \
|
||||||
|
D1 = _mm512_xor_si512(D1, A1); \
|
||||||
|
\
|
||||||
|
D0 = ror64(D0, 32); \
|
||||||
|
D1 = ror64(D1, 32); \
|
||||||
|
\
|
||||||
|
C0 = f(C0, D0); \
|
||||||
|
C1 = f(C1, D1); \
|
||||||
|
\
|
||||||
|
B0 = _mm512_xor_si512(B0, C0); \
|
||||||
|
B1 = _mm512_xor_si512(B1, C1); \
|
||||||
|
\
|
||||||
|
B0 = ror64(B0, 24); \
|
||||||
|
B1 = ror64(B1, 24); \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
#define G2(A0, B0, C0, D0, A1, B1, C1, D1) \
|
||||||
|
do { \
|
||||||
|
A0 = f(A0, B0); \
|
||||||
|
A1 = f(A1, B1); \
|
||||||
|
\
|
||||||
|
D0 = _mm512_xor_si512(D0, A0); \
|
||||||
|
D1 = _mm512_xor_si512(D1, A1); \
|
||||||
|
\
|
||||||
|
D0 = ror64(D0, 16); \
|
||||||
|
D1 = ror64(D1, 16); \
|
||||||
|
\
|
||||||
|
C0 = f(C0, D0); \
|
||||||
|
C1 = f(C1, D1); \
|
||||||
|
\
|
||||||
|
B0 = _mm512_xor_si512(B0, C0); \
|
||||||
|
B1 = _mm512_xor_si512(B1, C1); \
|
||||||
|
\
|
||||||
|
B0 = ror64(B0, 63); \
|
||||||
|
B1 = ror64(B1, 63); \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
#define DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \
|
||||||
|
do { \
|
||||||
|
B0 = _mm512_permutex_epi64(B0, _MM_SHUFFLE(0, 3, 2, 1)); \
|
||||||
|
B1 = _mm512_permutex_epi64(B1, _MM_SHUFFLE(0, 3, 2, 1)); \
|
||||||
|
\
|
||||||
|
C0 = _mm512_permutex_epi64(C0, _MM_SHUFFLE(1, 0, 3, 2)); \
|
||||||
|
C1 = _mm512_permutex_epi64(C1, _MM_SHUFFLE(1, 0, 3, 2)); \
|
||||||
|
\
|
||||||
|
D0 = _mm512_permutex_epi64(D0, _MM_SHUFFLE(2, 1, 0, 3)); \
|
||||||
|
D1 = _mm512_permutex_epi64(D1, _MM_SHUFFLE(2, 1, 0, 3)); \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
#define UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \
|
||||||
|
do { \
|
||||||
|
B0 = _mm512_permutex_epi64(B0, _MM_SHUFFLE(2, 1, 0, 3)); \
|
||||||
|
B1 = _mm512_permutex_epi64(B1, _MM_SHUFFLE(2, 1, 0, 3)); \
|
||||||
|
\
|
||||||
|
C0 = _mm512_permutex_epi64(C0, _MM_SHUFFLE(1, 0, 3, 2)); \
|
||||||
|
C1 = _mm512_permutex_epi64(C1, _MM_SHUFFLE(1, 0, 3, 2)); \
|
||||||
|
\
|
||||||
|
D0 = _mm512_permutex_epi64(D0, _MM_SHUFFLE(0, 3, 2, 1)); \
|
||||||
|
D1 = _mm512_permutex_epi64(D1, _MM_SHUFFLE(0, 3, 2, 1)); \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
#define BLAKE2_ROUND(A0, B0, C0, D0, A1, B1, C1, D1) \
|
||||||
|
do { \
|
||||||
|
G1(A0, B0, C0, D0, A1, B1, C1, D1); \
|
||||||
|
G2(A0, B0, C0, D0, A1, B1, C1, D1); \
|
||||||
|
\
|
||||||
|
DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1); \
|
||||||
|
\
|
||||||
|
G1(A0, B0, C0, D0, A1, B1, C1, D1); \
|
||||||
|
G2(A0, B0, C0, D0, A1, B1, C1, D1); \
|
||||||
|
\
|
||||||
|
UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1); \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
#define SWAP_HALVES(A0, A1) \
|
||||||
|
do { \
|
||||||
|
__m512i t0, t1; \
|
||||||
|
t0 = _mm512_shuffle_i64x2(A0, A1, _MM_SHUFFLE(1, 0, 1, 0)); \
|
||||||
|
t1 = _mm512_shuffle_i64x2(A0, A1, _MM_SHUFFLE(3, 2, 3, 2)); \
|
||||||
|
A0 = t0; \
|
||||||
|
A1 = t1; \
|
||||||
|
} while((void)0, 0)
|
||||||
|
|
||||||
|
#define SWAP_QUARTERS(A0, A1) \
|
||||||
|
do { \
|
||||||
|
SWAP_HALVES(A0, A1); \
|
||||||
|
A0 = _mm512_permutexvar_epi64(_mm512_setr_epi64(0, 1, 4, 5, 2, 3, 6, 7), A0); \
|
||||||
|
A1 = _mm512_permutexvar_epi64(_mm512_setr_epi64(0, 1, 4, 5, 2, 3, 6, 7), A1); \
|
||||||
|
} while((void)0, 0)
|
||||||
|
|
||||||
|
#define UNSWAP_QUARTERS(A0, A1) \
|
||||||
|
do { \
|
||||||
|
A0 = _mm512_permutexvar_epi64(_mm512_setr_epi64(0, 1, 4, 5, 2, 3, 6, 7), A0); \
|
||||||
|
A1 = _mm512_permutexvar_epi64(_mm512_setr_epi64(0, 1, 4, 5, 2, 3, 6, 7), A1); \
|
||||||
|
SWAP_HALVES(A0, A1); \
|
||||||
|
} while((void)0, 0)
|
||||||
|
|
||||||
|
#define BLAKE2_ROUND1(A0, C0, B0, D0, A1, C1, B1, D1) \
|
||||||
|
do { \
|
||||||
|
SWAP_HALVES(A0, B0); \
|
||||||
|
SWAP_HALVES(C0, D0); \
|
||||||
|
SWAP_HALVES(A1, B1); \
|
||||||
|
SWAP_HALVES(C1, D1); \
|
||||||
|
BLAKE2_ROUND(A0, B0, C0, D0, A1, B1, C1, D1); \
|
||||||
|
SWAP_HALVES(A0, B0); \
|
||||||
|
SWAP_HALVES(C0, D0); \
|
||||||
|
SWAP_HALVES(A1, B1); \
|
||||||
|
SWAP_HALVES(C1, D1); \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
#define BLAKE2_ROUND2(A0, A1, B0, B1, C0, C1, D0, D1) \
|
||||||
|
do { \
|
||||||
|
SWAP_QUARTERS(A0, A1); \
|
||||||
|
SWAP_QUARTERS(B0, B1); \
|
||||||
|
SWAP_QUARTERS(C0, C1); \
|
||||||
|
SWAP_QUARTERS(D0, D1); \
|
||||||
|
BLAKE2_ROUND(A0, B0, C0, D0, A1, B1, C1, D1); \
|
||||||
|
UNSWAP_QUARTERS(A0, A1); \
|
||||||
|
UNSWAP_QUARTERS(B0, B1); \
|
||||||
|
UNSWAP_QUARTERS(C0, C1); \
|
||||||
|
UNSWAP_QUARTERS(D0, D1); \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
enum {
|
||||||
|
ARGON2_VECS_IN_BLOCK = ARGON2_OWORDS_IN_BLOCK / 4,
|
||||||
|
};
|
||||||
|
|
||||||
|
static void fill_block(__m512i *s, const block *ref_block, block *next_block,
|
||||||
|
int with_xor)
|
||||||
|
{
|
||||||
|
__m512i block_XY[ARGON2_VECS_IN_BLOCK];
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
if (with_xor) {
|
||||||
|
for (i = 0; i < ARGON2_VECS_IN_BLOCK; i++) {
|
||||||
|
s[i] =_mm512_xor_si512(
|
||||||
|
s[i], _mm512_loadu_si512((const __m512i *)ref_block->v + i));
|
||||||
|
block_XY[i] = _mm512_xor_si512(
|
||||||
|
s[i], _mm512_loadu_si512((const __m512i *)next_block->v + i));
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
for (i = 0; i < ARGON2_VECS_IN_BLOCK; i++) {
|
||||||
|
block_XY[i] = s[i] =_mm512_xor_si512(
|
||||||
|
s[i], _mm512_loadu_si512((const __m512i *)ref_block->v + i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < 2; ++i) {
|
||||||
|
BLAKE2_ROUND1(
|
||||||
|
s[8 * i + 0], s[8 * i + 1], s[8 * i + 2], s[8 * i + 3],
|
||||||
|
s[8 * i + 4], s[8 * i + 5], s[8 * i + 6], s[8 * i + 7]);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < 2; ++i) {
|
||||||
|
BLAKE2_ROUND2(
|
||||||
|
s[2 * 0 + i], s[2 * 1 + i], s[2 * 2 + i], s[2 * 3 + i],
|
||||||
|
s[2 * 4 + i], s[2 * 5 + i], s[2 * 6 + i], s[2 * 7 + i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < ARGON2_VECS_IN_BLOCK; i++) {
|
||||||
|
s[i] = _mm512_xor_si512(s[i], block_XY[i]);
|
||||||
|
_mm512_storeu_si512((__m512i *)next_block->v + i, s[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void next_addresses(block *address_block, block *input_block)
|
||||||
|
{
|
||||||
|
/*Temporary zero-initialized blocks*/
|
||||||
|
__m512i zero_block[ARGON2_VECS_IN_BLOCK];
|
||||||
|
__m512i zero2_block[ARGON2_VECS_IN_BLOCK];
|
||||||
|
|
||||||
|
memset(zero_block, 0, sizeof(zero_block));
|
||||||
|
memset(zero2_block, 0, sizeof(zero2_block));
|
||||||
|
|
||||||
|
/*Increasing index counter*/
|
||||||
|
input_block->v[6]++;
|
||||||
|
|
||||||
|
/*First iteration of G*/
|
||||||
|
fill_block(zero_block, input_block, address_block, 0);
|
||||||
|
|
||||||
|
/*Second iteration of G*/
|
||||||
|
fill_block(zero2_block, address_block, address_block, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void fill_segment_avx512f(const argon2_instance_t *instance,
|
||||||
|
argon2_position_t position)
|
||||||
|
{
|
||||||
|
block *ref_block = NULL, *curr_block = NULL;
|
||||||
|
block address_block, input_block;
|
||||||
|
uint64_t pseudo_rand, ref_index, ref_lane;
|
||||||
|
uint32_t prev_offset, curr_offset;
|
||||||
|
uint32_t starting_index, i;
|
||||||
|
__m512i state[ARGON2_VECS_IN_BLOCK];
|
||||||
|
int data_independent_addressing;
|
||||||
|
|
||||||
|
if (instance == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
data_independent_addressing = (instance->type == Argon2_i) ||
|
||||||
|
(instance->type == Argon2_id && (position.pass == 0) &&
|
||||||
|
(position.slice < ARGON2_SYNC_POINTS / 2));
|
||||||
|
|
||||||
|
if (data_independent_addressing) {
|
||||||
|
init_block_value(&input_block, 0);
|
||||||
|
|
||||||
|
input_block.v[0] = position.pass;
|
||||||
|
input_block.v[1] = position.lane;
|
||||||
|
input_block.v[2] = position.slice;
|
||||||
|
input_block.v[3] = instance->memory_blocks;
|
||||||
|
input_block.v[4] = instance->passes;
|
||||||
|
input_block.v[5] = instance->type;
|
||||||
|
}
|
||||||
|
|
||||||
|
starting_index = 0;
|
||||||
|
|
||||||
|
if ((0 == position.pass) && (0 == position.slice)) {
|
||||||
|
starting_index = 2; /* we have already generated the first two blocks */
|
||||||
|
|
||||||
|
/* Don't forget to generate the first block of addresses: */
|
||||||
|
if (data_independent_addressing) {
|
||||||
|
next_addresses(&address_block, &input_block);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Offset of the current block */
|
||||||
|
curr_offset = position.lane * instance->lane_length +
|
||||||
|
position.slice * instance->segment_length + starting_index;
|
||||||
|
|
||||||
|
if (0 == curr_offset % instance->lane_length) {
|
||||||
|
/* Last block in this lane */
|
||||||
|
prev_offset = curr_offset + instance->lane_length - 1;
|
||||||
|
} else {
|
||||||
|
/* Previous block */
|
||||||
|
prev_offset = curr_offset - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(state, ((instance->memory + prev_offset)->v), ARGON2_BLOCK_SIZE);
|
||||||
|
|
||||||
|
for (i = starting_index; i < instance->segment_length;
|
||||||
|
++i, ++curr_offset, ++prev_offset) {
|
||||||
|
/*1.1 Rotating prev_offset if needed */
|
||||||
|
if (curr_offset % instance->lane_length == 1) {
|
||||||
|
prev_offset = curr_offset - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 1.2 Computing the index of the reference block */
|
||||||
|
/* 1.2.1 Taking pseudo-random value from the previous block */
|
||||||
|
if (data_independent_addressing) {
|
||||||
|
if (i % ARGON2_ADDRESSES_IN_BLOCK == 0) {
|
||||||
|
next_addresses(&address_block, &input_block);
|
||||||
|
}
|
||||||
|
pseudo_rand = address_block.v[i % ARGON2_ADDRESSES_IN_BLOCK];
|
||||||
|
} else {
|
||||||
|
pseudo_rand = instance->memory[prev_offset].v[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 1.2.2 Computing the lane of the reference block */
|
||||||
|
ref_lane = ((pseudo_rand >> 32)) % instance->lanes;
|
||||||
|
|
||||||
|
if ((position.pass == 0) && (position.slice == 0)) {
|
||||||
|
/* Can not reference other lanes yet */
|
||||||
|
ref_lane = position.lane;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 1.2.3 Computing the number of possible reference block within the
|
||||||
|
* lane.
|
||||||
|
*/
|
||||||
|
position.index = i;
|
||||||
|
ref_index = index_alpha(instance, &position, pseudo_rand & 0xFFFFFFFF,
|
||||||
|
ref_lane == position.lane);
|
||||||
|
|
||||||
|
/* 2 Creating a new block */
|
||||||
|
ref_block =
|
||||||
|
instance->memory + instance->lane_length * ref_lane + ref_index;
|
||||||
|
curr_block = instance->memory + curr_offset;
|
||||||
|
|
||||||
|
/* version 1.2.1 and earlier: overwrite, not XOR */
|
||||||
|
if (0 == position.pass || ARGON2_VERSION_10 == instance->version) {
|
||||||
|
fill_block(state, ref_block, curr_block, 0);
|
||||||
|
} else {
|
||||||
|
fill_block(state, ref_block, curr_block, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int check_avx512f(void)
|
||||||
|
{
|
||||||
|
return cpu_flags_have_avx512f();
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
void fill_segment_avx512f(const argon2_instance_t *instance,
|
||||||
|
argon2_position_t position)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
int check_avx512f(void)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
11
src/3rdparty/argon2/arch/x86_64/lib/argon2-avx512f.h
vendored
Normal file
11
src/3rdparty/argon2/arch/x86_64/lib/argon2-avx512f.h
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
#ifndef ARGON2_AVX512F_H
|
||||||
|
#define ARGON2_AVX512F_H
|
||||||
|
|
||||||
|
#include "core.h"
|
||||||
|
|
||||||
|
void fill_segment_avx512f(const argon2_instance_t *instance,
|
||||||
|
argon2_position_t position);
|
||||||
|
|
||||||
|
int check_avx512f(void);
|
||||||
|
|
||||||
|
#endif // ARGON2_AVX512F_H
|
||||||
128
src/3rdparty/argon2/arch/x86_64/lib/argon2-sse2.c
vendored
Normal file
128
src/3rdparty/argon2/arch/x86_64/lib/argon2-sse2.c
vendored
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
#include "argon2-sse2.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_SSE2
|
||||||
|
#ifdef __GNUC__
|
||||||
|
# include <x86intrin.h>
|
||||||
|
#else
|
||||||
|
# include <intrin.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "cpu-flags.h"
|
||||||
|
|
||||||
|
#define ror64_16(x) \
|
||||||
|
_mm_shufflehi_epi16( \
|
||||||
|
_mm_shufflelo_epi16((x), _MM_SHUFFLE(0, 3, 2, 1)), \
|
||||||
|
_MM_SHUFFLE(0, 3, 2, 1))
|
||||||
|
#define ror64_24(x) \
|
||||||
|
_mm_xor_si128(_mm_srli_epi64((x), 24), _mm_slli_epi64((x), 40))
|
||||||
|
#define ror64_32(x) _mm_shuffle_epi32((x), _MM_SHUFFLE(2, 3, 0, 1))
|
||||||
|
#define ror64_63(x) \
|
||||||
|
_mm_xor_si128(_mm_srli_epi64((x), 63), _mm_add_epi64((x), (x)))
|
||||||
|
|
||||||
|
static __m128i f(__m128i x, __m128i y)
|
||||||
|
{
|
||||||
|
__m128i z = _mm_mul_epu32(x, y);
|
||||||
|
return _mm_add_epi64(_mm_add_epi64(x, y), _mm_add_epi64(z, z));
|
||||||
|
}
|
||||||
|
|
||||||
|
#define G1(A0, B0, C0, D0, A1, B1, C1, D1) \
|
||||||
|
do { \
|
||||||
|
A0 = f(A0, B0); \
|
||||||
|
A1 = f(A1, B1); \
|
||||||
|
\
|
||||||
|
D0 = _mm_xor_si128(D0, A0); \
|
||||||
|
D1 = _mm_xor_si128(D1, A1); \
|
||||||
|
\
|
||||||
|
D0 = ror64_32(D0); \
|
||||||
|
D1 = ror64_32(D1); \
|
||||||
|
\
|
||||||
|
C0 = f(C0, D0); \
|
||||||
|
C1 = f(C1, D1); \
|
||||||
|
\
|
||||||
|
B0 = _mm_xor_si128(B0, C0); \
|
||||||
|
B1 = _mm_xor_si128(B1, C1); \
|
||||||
|
\
|
||||||
|
B0 = ror64_24(B0); \
|
||||||
|
B1 = ror64_24(B1); \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
#define G2(A0, B0, C0, D0, A1, B1, C1, D1) \
|
||||||
|
do { \
|
||||||
|
A0 = f(A0, B0); \
|
||||||
|
A1 = f(A1, B1); \
|
||||||
|
\
|
||||||
|
D0 = _mm_xor_si128(D0, A0); \
|
||||||
|
D1 = _mm_xor_si128(D1, A1); \
|
||||||
|
\
|
||||||
|
D0 = ror64_16(D0); \
|
||||||
|
D1 = ror64_16(D1); \
|
||||||
|
\
|
||||||
|
C0 = f(C0, D0); \
|
||||||
|
C1 = f(C1, D1); \
|
||||||
|
\
|
||||||
|
B0 = _mm_xor_si128(B0, C0); \
|
||||||
|
B1 = _mm_xor_si128(B1, C1); \
|
||||||
|
\
|
||||||
|
B0 = ror64_63(B0); \
|
||||||
|
B1 = ror64_63(B1); \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
#define DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \
|
||||||
|
do { \
|
||||||
|
__m128i t0 = D0; \
|
||||||
|
__m128i t1 = B0; \
|
||||||
|
D0 = _mm_unpackhi_epi64(D1, _mm_unpacklo_epi64(t0, t0)); \
|
||||||
|
D1 = _mm_unpackhi_epi64(t0, _mm_unpacklo_epi64(D1, D1)); \
|
||||||
|
B0 = _mm_unpackhi_epi64(B0, _mm_unpacklo_epi64(B1, B1)); \
|
||||||
|
B1 = _mm_unpackhi_epi64(B1, _mm_unpacklo_epi64(t1, t1)); \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
#define UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \
|
||||||
|
do { \
|
||||||
|
__m128i t0 = B0; \
|
||||||
|
__m128i t1 = D0; \
|
||||||
|
B0 = _mm_unpackhi_epi64(B1, _mm_unpacklo_epi64(B0, B0)); \
|
||||||
|
B1 = _mm_unpackhi_epi64(t0, _mm_unpacklo_epi64(B1, B1)); \
|
||||||
|
D0 = _mm_unpackhi_epi64(D0, _mm_unpacklo_epi64(D1, D1)); \
|
||||||
|
D1 = _mm_unpackhi_epi64(D1, _mm_unpacklo_epi64(t1, t1)); \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
#define BLAKE2_ROUND(A0, A1, B0, B1, C0, C1, D0, D1) \
|
||||||
|
do { \
|
||||||
|
G1(A0, B0, C0, D0, A1, B1, C1, D1); \
|
||||||
|
G2(A0, B0, C0, D0, A1, B1, C1, D1); \
|
||||||
|
\
|
||||||
|
DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1); \
|
||||||
|
\
|
||||||
|
G1(A0, B0, C1, D0, A1, B1, C0, D1); \
|
||||||
|
G2(A0, B0, C1, D0, A1, B1, C0, D1); \
|
||||||
|
\
|
||||||
|
UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1); \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
#include "argon2-template-128.h"
|
||||||
|
|
||||||
|
void fill_segment_sse2(const argon2_instance_t *instance,
|
||||||
|
argon2_position_t position)
|
||||||
|
{
|
||||||
|
fill_segment_128(instance, position);
|
||||||
|
}
|
||||||
|
|
||||||
|
int check_sse2(void)
|
||||||
|
{
|
||||||
|
return cpu_flags_have_sse2();
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
void fill_segment_sse2(const argon2_instance_t *instance,
|
||||||
|
argon2_position_t position)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
int check_sse2(void)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
11
src/3rdparty/argon2/arch/x86_64/lib/argon2-sse2.h
vendored
Normal file
11
src/3rdparty/argon2/arch/x86_64/lib/argon2-sse2.h
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
#ifndef ARGON2_SSE2_H
|
||||||
|
#define ARGON2_SSE2_H
|
||||||
|
|
||||||
|
#include "core.h"
|
||||||
|
|
||||||
|
void fill_segment_sse2(const argon2_instance_t *instance,
|
||||||
|
argon2_position_t position);
|
||||||
|
|
||||||
|
int check_sse2(void);
|
||||||
|
|
||||||
|
#endif // ARGON2_SSE2_H
|
||||||
140
src/3rdparty/argon2/arch/x86_64/lib/argon2-ssse3.c
vendored
Normal file
140
src/3rdparty/argon2/arch/x86_64/lib/argon2-ssse3.c
vendored
Normal file
@@ -0,0 +1,140 @@
|
|||||||
|
#include "argon2-ssse3.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_SSSE3
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
# include <x86intrin.h>
|
||||||
|
#else
|
||||||
|
# include <intrin.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "cpu-flags.h"
|
||||||
|
|
||||||
|
#define r16 (_mm_setr_epi8( \
|
||||||
|
2, 3, 4, 5, 6, 7, 0, 1, \
|
||||||
|
10, 11, 12, 13, 14, 15, 8, 9))
|
||||||
|
|
||||||
|
#define r24 (_mm_setr_epi8( \
|
||||||
|
3, 4, 5, 6, 7, 0, 1, 2, \
|
||||||
|
11, 12, 13, 14, 15, 8, 9, 10))
|
||||||
|
|
||||||
|
#define ror64_16(x) _mm_shuffle_epi8((x), r16)
|
||||||
|
#define ror64_24(x) _mm_shuffle_epi8((x), r24)
|
||||||
|
#define ror64_32(x) _mm_shuffle_epi32((x), _MM_SHUFFLE(2, 3, 0, 1))
|
||||||
|
#define ror64_63(x) \
|
||||||
|
_mm_xor_si128(_mm_srli_epi64((x), 63), _mm_add_epi64((x), (x)))
|
||||||
|
|
||||||
|
static __m128i f(__m128i x, __m128i y)
|
||||||
|
{
|
||||||
|
__m128i z = _mm_mul_epu32(x, y);
|
||||||
|
return _mm_add_epi64(_mm_add_epi64(x, y), _mm_add_epi64(z, z));
|
||||||
|
}
|
||||||
|
|
||||||
|
#define G1(A0, B0, C0, D0, A1, B1, C1, D1) \
|
||||||
|
do { \
|
||||||
|
A0 = f(A0, B0); \
|
||||||
|
A1 = f(A1, B1); \
|
||||||
|
\
|
||||||
|
D0 = _mm_xor_si128(D0, A0); \
|
||||||
|
D1 = _mm_xor_si128(D1, A1); \
|
||||||
|
\
|
||||||
|
D0 = ror64_32(D0); \
|
||||||
|
D1 = ror64_32(D1); \
|
||||||
|
\
|
||||||
|
C0 = f(C0, D0); \
|
||||||
|
C1 = f(C1, D1); \
|
||||||
|
\
|
||||||
|
B0 = _mm_xor_si128(B0, C0); \
|
||||||
|
B1 = _mm_xor_si128(B1, C1); \
|
||||||
|
\
|
||||||
|
B0 = ror64_24(B0); \
|
||||||
|
B1 = ror64_24(B1); \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
#define G2(A0, B0, C0, D0, A1, B1, C1, D1) \
|
||||||
|
do { \
|
||||||
|
A0 = f(A0, B0); \
|
||||||
|
A1 = f(A1, B1); \
|
||||||
|
\
|
||||||
|
D0 = _mm_xor_si128(D0, A0); \
|
||||||
|
D1 = _mm_xor_si128(D1, A1); \
|
||||||
|
\
|
||||||
|
D0 = ror64_16(D0); \
|
||||||
|
D1 = ror64_16(D1); \
|
||||||
|
\
|
||||||
|
C0 = f(C0, D0); \
|
||||||
|
C1 = f(C1, D1); \
|
||||||
|
\
|
||||||
|
B0 = _mm_xor_si128(B0, C0); \
|
||||||
|
B1 = _mm_xor_si128(B1, C1); \
|
||||||
|
\
|
||||||
|
B0 = ror64_63(B0); \
|
||||||
|
B1 = ror64_63(B1); \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
#define DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \
|
||||||
|
do { \
|
||||||
|
__m128i t0 = _mm_alignr_epi8(B1, B0, 8); \
|
||||||
|
__m128i t1 = _mm_alignr_epi8(B0, B1, 8); \
|
||||||
|
B0 = t0; \
|
||||||
|
B1 = t1; \
|
||||||
|
\
|
||||||
|
t0 = _mm_alignr_epi8(D1, D0, 8); \
|
||||||
|
t1 = _mm_alignr_epi8(D0, D1, 8); \
|
||||||
|
D0 = t1; \
|
||||||
|
D1 = t0; \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
#define UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \
|
||||||
|
do { \
|
||||||
|
__m128i t0 = _mm_alignr_epi8(B0, B1, 8); \
|
||||||
|
__m128i t1 = _mm_alignr_epi8(B1, B0, 8); \
|
||||||
|
B0 = t0; \
|
||||||
|
B1 = t1; \
|
||||||
|
\
|
||||||
|
t0 = _mm_alignr_epi8(D0, D1, 8); \
|
||||||
|
t1 = _mm_alignr_epi8(D1, D0, 8); \
|
||||||
|
D0 = t1; \
|
||||||
|
D1 = t0; \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
#define BLAKE2_ROUND(A0, A1, B0, B1, C0, C1, D0, D1) \
|
||||||
|
do { \
|
||||||
|
G1(A0, B0, C0, D0, A1, B1, C1, D1); \
|
||||||
|
G2(A0, B0, C0, D0, A1, B1, C1, D1); \
|
||||||
|
\
|
||||||
|
DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1); \
|
||||||
|
\
|
||||||
|
G1(A0, B0, C1, D0, A1, B1, C0, D1); \
|
||||||
|
G2(A0, B0, C1, D0, A1, B1, C0, D1); \
|
||||||
|
\
|
||||||
|
UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1); \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
#include "argon2-template-128.h"
|
||||||
|
|
||||||
|
void fill_segment_ssse3(const argon2_instance_t *instance,
|
||||||
|
argon2_position_t position)
|
||||||
|
{
|
||||||
|
fill_segment_128(instance, position);
|
||||||
|
}
|
||||||
|
|
||||||
|
int check_ssse3(void)
|
||||||
|
{
|
||||||
|
return cpu_flags_have_ssse3();
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
void fill_segment_ssse3(const argon2_instance_t *instance,
|
||||||
|
argon2_position_t position)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
int check_ssse3(void)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
11
src/3rdparty/argon2/arch/x86_64/lib/argon2-ssse3.h
vendored
Normal file
11
src/3rdparty/argon2/arch/x86_64/lib/argon2-ssse3.h
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
#ifndef ARGON2_SSSE3_H
|
||||||
|
#define ARGON2_SSSE3_H
|
||||||
|
|
||||||
|
#include "core.h"
|
||||||
|
|
||||||
|
void fill_segment_ssse3(const argon2_instance_t *instance,
|
||||||
|
argon2_position_t position);
|
||||||
|
|
||||||
|
int check_ssse3(void);
|
||||||
|
|
||||||
|
#endif // ARGON2_SSSE3_H
|
||||||
168
src/3rdparty/argon2/arch/x86_64/lib/argon2-template-128.h
vendored
Normal file
168
src/3rdparty/argon2/arch/x86_64/lib/argon2-template-128.h
vendored
Normal file
@@ -0,0 +1,168 @@
|
|||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
# include <x86intrin.h>
|
||||||
|
#else
|
||||||
|
# include <intrin.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "core.h"
|
||||||
|
|
||||||
|
static void fill_block(__m128i *s, const block *ref_block, block *next_block,
|
||||||
|
int with_xor)
|
||||||
|
{
|
||||||
|
__m128i block_XY[ARGON2_OWORDS_IN_BLOCK];
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
if (with_xor) {
|
||||||
|
for (i = 0; i < ARGON2_OWORDS_IN_BLOCK; i++) {
|
||||||
|
s[i] = _mm_xor_si128(
|
||||||
|
s[i], _mm_loadu_si128((const __m128i *)ref_block->v + i));
|
||||||
|
block_XY[i] = _mm_xor_si128(
|
||||||
|
s[i], _mm_loadu_si128((const __m128i *)next_block->v + i));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (i = 0; i < ARGON2_OWORDS_IN_BLOCK; i++) {
|
||||||
|
block_XY[i] = s[i] = _mm_xor_si128(
|
||||||
|
s[i], _mm_loadu_si128((const __m128i *)ref_block->v + i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < 8; ++i) {
|
||||||
|
BLAKE2_ROUND(
|
||||||
|
s[8 * i + 0], s[8 * i + 1], s[8 * i + 2], s[8 * i + 3],
|
||||||
|
s[8 * i + 4], s[8 * i + 5], s[8 * i + 6], s[8 * i + 7]);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < 8; ++i) {
|
||||||
|
BLAKE2_ROUND(
|
||||||
|
s[8 * 0 + i], s[8 * 1 + i], s[8 * 2 + i], s[8 * 3 + i],
|
||||||
|
s[8 * 4 + i], s[8 * 5 + i], s[8 * 6 + i], s[8 * 7 + i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < ARGON2_OWORDS_IN_BLOCK; i++) {
|
||||||
|
s[i] = _mm_xor_si128(s[i], block_XY[i]);
|
||||||
|
_mm_storeu_si128((__m128i *)next_block->v + i, s[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void next_addresses(block *address_block, block *input_block)
|
||||||
|
{
|
||||||
|
/*Temporary zero-initialized blocks*/
|
||||||
|
__m128i zero_block[ARGON2_OWORDS_IN_BLOCK];
|
||||||
|
__m128i zero2_block[ARGON2_OWORDS_IN_BLOCK];
|
||||||
|
|
||||||
|
memset(zero_block, 0, sizeof(zero_block));
|
||||||
|
memset(zero2_block, 0, sizeof(zero2_block));
|
||||||
|
|
||||||
|
/*Increasing index counter*/
|
||||||
|
input_block->v[6]++;
|
||||||
|
|
||||||
|
/*First iteration of G*/
|
||||||
|
fill_block(zero_block, input_block, address_block, 0);
|
||||||
|
|
||||||
|
/*Second iteration of G*/
|
||||||
|
fill_block(zero2_block, address_block, address_block, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void fill_segment_128(const argon2_instance_t *instance,
|
||||||
|
argon2_position_t position)
|
||||||
|
{
|
||||||
|
block *ref_block = NULL, *curr_block = NULL;
|
||||||
|
block address_block, input_block;
|
||||||
|
uint64_t pseudo_rand, ref_index, ref_lane;
|
||||||
|
uint32_t prev_offset, curr_offset;
|
||||||
|
uint32_t starting_index, i;
|
||||||
|
__m128i state[ARGON2_OWORDS_IN_BLOCK];
|
||||||
|
int data_independent_addressing;
|
||||||
|
|
||||||
|
if (instance == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
data_independent_addressing = (instance->type == Argon2_i) ||
|
||||||
|
(instance->type == Argon2_id && (position.pass == 0) &&
|
||||||
|
(position.slice < ARGON2_SYNC_POINTS / 2));
|
||||||
|
|
||||||
|
if (data_independent_addressing) {
|
||||||
|
init_block_value(&input_block, 0);
|
||||||
|
|
||||||
|
input_block.v[0] = position.pass;
|
||||||
|
input_block.v[1] = position.lane;
|
||||||
|
input_block.v[2] = position.slice;
|
||||||
|
input_block.v[3] = instance->memory_blocks;
|
||||||
|
input_block.v[4] = instance->passes;
|
||||||
|
input_block.v[5] = instance->type;
|
||||||
|
}
|
||||||
|
|
||||||
|
starting_index = 0;
|
||||||
|
|
||||||
|
if ((0 == position.pass) && (0 == position.slice)) {
|
||||||
|
starting_index = 2; /* we have already generated the first two blocks */
|
||||||
|
|
||||||
|
/* Don't forget to generate the first block of addresses: */
|
||||||
|
if (data_independent_addressing) {
|
||||||
|
next_addresses(&address_block, &input_block);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Offset of the current block */
|
||||||
|
curr_offset = position.lane * instance->lane_length +
|
||||||
|
position.slice * instance->segment_length + starting_index;
|
||||||
|
|
||||||
|
if (0 == curr_offset % instance->lane_length) {
|
||||||
|
/* Last block in this lane */
|
||||||
|
prev_offset = curr_offset + instance->lane_length - 1;
|
||||||
|
} else {
|
||||||
|
/* Previous block */
|
||||||
|
prev_offset = curr_offset - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(state, ((instance->memory + prev_offset)->v), ARGON2_BLOCK_SIZE);
|
||||||
|
|
||||||
|
for (i = starting_index; i < instance->segment_length;
|
||||||
|
++i, ++curr_offset, ++prev_offset) {
|
||||||
|
/*1.1 Rotating prev_offset if needed */
|
||||||
|
if (curr_offset % instance->lane_length == 1) {
|
||||||
|
prev_offset = curr_offset - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 1.2 Computing the index of the reference block */
|
||||||
|
/* 1.2.1 Taking pseudo-random value from the previous block */
|
||||||
|
if (data_independent_addressing) {
|
||||||
|
if (i % ARGON2_ADDRESSES_IN_BLOCK == 0) {
|
||||||
|
next_addresses(&address_block, &input_block);
|
||||||
|
}
|
||||||
|
pseudo_rand = address_block.v[i % ARGON2_ADDRESSES_IN_BLOCK];
|
||||||
|
} else {
|
||||||
|
pseudo_rand = instance->memory[prev_offset].v[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 1.2.2 Computing the lane of the reference block */
|
||||||
|
ref_lane = ((pseudo_rand >> 32)) % instance->lanes;
|
||||||
|
|
||||||
|
if ((position.pass == 0) && (position.slice == 0)) {
|
||||||
|
/* Can not reference other lanes yet */
|
||||||
|
ref_lane = position.lane;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 1.2.3 Computing the number of possible reference block within the
|
||||||
|
* lane.
|
||||||
|
*/
|
||||||
|
position.index = i;
|
||||||
|
ref_index = index_alpha(instance, &position, pseudo_rand & 0xFFFFFFFF,
|
||||||
|
ref_lane == position.lane);
|
||||||
|
|
||||||
|
/* 2 Creating a new block */
|
||||||
|
ref_block =
|
||||||
|
instance->memory + instance->lane_length * ref_lane + ref_index;
|
||||||
|
curr_block = instance->memory + curr_offset;
|
||||||
|
|
||||||
|
/* version 1.2.1 and earlier: overwrite, not XOR */
|
||||||
|
if (0 == position.pass || ARGON2_VERSION_10 == instance->version) {
|
||||||
|
fill_block(state, ref_block, curr_block, 0);
|
||||||
|
} else {
|
||||||
|
fill_block(state, ref_block, curr_block, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
128
src/3rdparty/argon2/arch/x86_64/lib/argon2-xop.c
vendored
Normal file
128
src/3rdparty/argon2/arch/x86_64/lib/argon2-xop.c
vendored
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
#include "argon2-xop.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_XOP
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
# include <x86intrin.h>
|
||||||
|
#else
|
||||||
|
# include <intrin.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "cpu-flags.h"
|
||||||
|
|
||||||
|
#define ror64(x, c) _mm_roti_epi64((x), -(c))
|
||||||
|
|
||||||
|
static __m128i f(__m128i x, __m128i y)
|
||||||
|
{
|
||||||
|
__m128i z = _mm_mul_epu32(x, y);
|
||||||
|
return _mm_add_epi64(_mm_add_epi64(x, y), _mm_add_epi64(z, z));
|
||||||
|
}
|
||||||
|
|
||||||
|
#define G1(A0, B0, C0, D0, A1, B1, C1, D1) \
|
||||||
|
do { \
|
||||||
|
A0 = f(A0, B0); \
|
||||||
|
A1 = f(A1, B1); \
|
||||||
|
\
|
||||||
|
D0 = _mm_xor_si128(D0, A0); \
|
||||||
|
D1 = _mm_xor_si128(D1, A1); \
|
||||||
|
\
|
||||||
|
D0 = ror64(D0, 32); \
|
||||||
|
D1 = ror64(D1, 32); \
|
||||||
|
\
|
||||||
|
C0 = f(C0, D0); \
|
||||||
|
C1 = f(C1, D1); \
|
||||||
|
\
|
||||||
|
B0 = _mm_xor_si128(B0, C0); \
|
||||||
|
B1 = _mm_xor_si128(B1, C1); \
|
||||||
|
\
|
||||||
|
B0 = ror64(B0, 24); \
|
||||||
|
B1 = ror64(B1, 24); \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
#define G2(A0, B0, C0, D0, A1, B1, C1, D1) \
|
||||||
|
do { \
|
||||||
|
A0 = f(A0, B0); \
|
||||||
|
A1 = f(A1, B1); \
|
||||||
|
\
|
||||||
|
D0 = _mm_xor_si128(D0, A0); \
|
||||||
|
D1 = _mm_xor_si128(D1, A1); \
|
||||||
|
\
|
||||||
|
D0 = ror64(D0, 16); \
|
||||||
|
D1 = ror64(D1, 16); \
|
||||||
|
\
|
||||||
|
C0 = f(C0, D0); \
|
||||||
|
C1 = f(C1, D1); \
|
||||||
|
\
|
||||||
|
B0 = _mm_xor_si128(B0, C0); \
|
||||||
|
B1 = _mm_xor_si128(B1, C1); \
|
||||||
|
\
|
||||||
|
B0 = ror64(B0, 63); \
|
||||||
|
B1 = ror64(B1, 63); \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
#define DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \
|
||||||
|
do { \
|
||||||
|
__m128i t0 = _mm_alignr_epi8(B1, B0, 8); \
|
||||||
|
__m128i t1 = _mm_alignr_epi8(B0, B1, 8); \
|
||||||
|
B0 = t0; \
|
||||||
|
B1 = t1; \
|
||||||
|
\
|
||||||
|
t0 = _mm_alignr_epi8(D1, D0, 8); \
|
||||||
|
t1 = _mm_alignr_epi8(D0, D1, 8); \
|
||||||
|
D0 = t1; \
|
||||||
|
D1 = t0; \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
#define UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \
|
||||||
|
do { \
|
||||||
|
__m128i t0 = _mm_alignr_epi8(B0, B1, 8); \
|
||||||
|
__m128i t1 = _mm_alignr_epi8(B1, B0, 8); \
|
||||||
|
B0 = t0; \
|
||||||
|
B1 = t1; \
|
||||||
|
\
|
||||||
|
t0 = _mm_alignr_epi8(D0, D1, 8); \
|
||||||
|
t1 = _mm_alignr_epi8(D1, D0, 8); \
|
||||||
|
D0 = t1; \
|
||||||
|
D1 = t0; \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
#define BLAKE2_ROUND(A0, A1, B0, B1, C0, C1, D0, D1) \
|
||||||
|
do { \
|
||||||
|
G1(A0, B0, C0, D0, A1, B1, C1, D1); \
|
||||||
|
G2(A0, B0, C0, D0, A1, B1, C1, D1); \
|
||||||
|
\
|
||||||
|
DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1); \
|
||||||
|
\
|
||||||
|
G1(A0, B0, C1, D0, A1, B1, C0, D1); \
|
||||||
|
G2(A0, B0, C1, D0, A1, B1, C0, D1); \
|
||||||
|
\
|
||||||
|
UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1); \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
#include "argon2-template-128.h"
|
||||||
|
|
||||||
|
void fill_segment_xop(const argon2_instance_t *instance,
|
||||||
|
argon2_position_t position)
|
||||||
|
{
|
||||||
|
fill_segment_128(instance, position);
|
||||||
|
}
|
||||||
|
|
||||||
|
int check_xop(void)
|
||||||
|
{
|
||||||
|
return cpu_flags_have_xop();
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
void fill_segment_xop(const argon2_instance_t *instance,
|
||||||
|
argon2_position_t position)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
int check_xop(void)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
11
src/3rdparty/argon2/arch/x86_64/lib/argon2-xop.h
vendored
Normal file
11
src/3rdparty/argon2/arch/x86_64/lib/argon2-xop.h
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
#ifndef ARGON2_XOP_H
|
||||||
|
#define ARGON2_XOP_H
|
||||||
|
|
||||||
|
#include "core.h"
|
||||||
|
|
||||||
|
void fill_segment_xop(const argon2_instance_t *instance,
|
||||||
|
argon2_position_t position);
|
||||||
|
|
||||||
|
int check_xop(void);
|
||||||
|
|
||||||
|
#endif // ARGON2_XOP_H
|
||||||
129
src/3rdparty/argon2/arch/x86_64/lib/cpu-flags.c
vendored
Normal file
129
src/3rdparty/argon2/arch/x86_64/lib/cpu-flags.c
vendored
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
|
||||||
|
#include "cpu-flags.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
# include <intrin.h>
|
||||||
|
#else
|
||||||
|
# include <cpuid.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef bit_OSXSAVE
|
||||||
|
# define bit_OSXSAVE (1 << 27)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef bit_SSE2
|
||||||
|
# define bit_SSE2 (1 << 26)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef bit_SSSE3
|
||||||
|
# define bit_SSSE3 (1 << 9)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef bit_AVX2
|
||||||
|
# define bit_AVX2 (1 << 5)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef bit_AVX512F
|
||||||
|
# define bit_AVX512F (1 << 16)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef bit_XOP
|
||||||
|
# define bit_XOP (1 << 11)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define PROCESSOR_INFO (1)
|
||||||
|
#define EXTENDED_FEATURES (7)
|
||||||
|
|
||||||
|
#define EAX_Reg (0)
|
||||||
|
#define EBX_Reg (1)
|
||||||
|
#define ECX_Reg (2)
|
||||||
|
#define EDX_Reg (3)
|
||||||
|
|
||||||
|
|
||||||
|
enum {
|
||||||
|
X86_64_FEATURE_SSE2 = (1 << 0),
|
||||||
|
X86_64_FEATURE_SSSE3 = (1 << 1),
|
||||||
|
X86_64_FEATURE_XOP = (1 << 2),
|
||||||
|
X86_64_FEATURE_AVX2 = (1 << 3),
|
||||||
|
X86_64_FEATURE_AVX512F = (1 << 4),
|
||||||
|
};
|
||||||
|
|
||||||
|
static unsigned int cpu_flags;
|
||||||
|
|
||||||
|
|
||||||
|
static inline void cpuid(uint32_t level, int32_t output[4])
|
||||||
|
{
|
||||||
|
# ifdef _MSC_VER
|
||||||
|
__cpuid(output, (int) level);
|
||||||
|
# else
|
||||||
|
__cpuid_count(level, 0, output[0], output[1], output[2], output[3]);
|
||||||
|
# endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static bool has_feature(uint32_t level, uint32_t reg, int32_t bit)
|
||||||
|
{
|
||||||
|
int32_t cpu_info[4] = { 0 };
|
||||||
|
cpuid(level, cpu_info);
|
||||||
|
|
||||||
|
return (cpu_info[reg] & bit) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void cpu_flags_get(void)
|
||||||
|
{
|
||||||
|
if (has_feature(PROCESSOR_INFO, EDX_Reg, bit_SSE2)) {
|
||||||
|
cpu_flags |= X86_64_FEATURE_SSE2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (has_feature(PROCESSOR_INFO, ECX_Reg, bit_SSSE3)) {
|
||||||
|
cpu_flags |= X86_64_FEATURE_SSSE3;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!has_feature(PROCESSOR_INFO, ECX_Reg, bit_OSXSAVE)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (has_feature(EXTENDED_FEATURES, EBX_Reg, bit_AVX2)) {
|
||||||
|
cpu_flags |= X86_64_FEATURE_AVX2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (has_feature(EXTENDED_FEATURES, EBX_Reg, bit_AVX512F)) {
|
||||||
|
cpu_flags |= X86_64_FEATURE_AVX512F;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (has_feature(0x80000001, ECX_Reg, bit_XOP)) {
|
||||||
|
cpu_flags |= X86_64_FEATURE_XOP;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int cpu_flags_have_sse2(void)
|
||||||
|
{
|
||||||
|
return cpu_flags & X86_64_FEATURE_SSE2;
|
||||||
|
}
|
||||||
|
|
||||||
|
int cpu_flags_have_ssse3(void)
|
||||||
|
{
|
||||||
|
return cpu_flags & X86_64_FEATURE_SSSE3;
|
||||||
|
}
|
||||||
|
|
||||||
|
int cpu_flags_have_xop(void)
|
||||||
|
{
|
||||||
|
return cpu_flags & X86_64_FEATURE_XOP;
|
||||||
|
}
|
||||||
|
|
||||||
|
int cpu_flags_have_avx2(void)
|
||||||
|
{
|
||||||
|
return cpu_flags & X86_64_FEATURE_AVX2;
|
||||||
|
}
|
||||||
|
|
||||||
|
int cpu_flags_have_avx512f(void)
|
||||||
|
{
|
||||||
|
return cpu_flags & X86_64_FEATURE_AVX512F;
|
||||||
|
}
|
||||||
|
|
||||||
12
src/3rdparty/argon2/arch/x86_64/lib/cpu-flags.h
vendored
Normal file
12
src/3rdparty/argon2/arch/x86_64/lib/cpu-flags.h
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
#ifndef ARGON2_CPU_FLAGS_H
|
||||||
|
#define ARGON2_CPU_FLAGS_H
|
||||||
|
|
||||||
|
void cpu_flags_get(void);
|
||||||
|
|
||||||
|
int cpu_flags_have_sse2(void);
|
||||||
|
int cpu_flags_have_ssse3(void);
|
||||||
|
int cpu_flags_have_xop(void);
|
||||||
|
int cpu_flags_have_avx2(void);
|
||||||
|
int cpu_flags_have_avx512f(void);
|
||||||
|
|
||||||
|
#endif // ARGON2_CPU_FLAGS_H
|
||||||
8
src/3rdparty/argon2/arch/x86_64/src/test-feature-avx2.c
vendored
Normal file
8
src/3rdparty/argon2/arch/x86_64/src/test-feature-avx2.c
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
#include <x86intrin.h>
|
||||||
|
|
||||||
|
void function_avx2(__m256i *dst, const __m256i *a, const __m256i *b)
|
||||||
|
{
|
||||||
|
*dst = _mm256_xor_si256(*a, *b);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void) { return 0; }
|
||||||
8
src/3rdparty/argon2/arch/x86_64/src/test-feature-avx512f.c
vendored
Normal file
8
src/3rdparty/argon2/arch/x86_64/src/test-feature-avx512f.c
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
#include <x86intrin.h>
|
||||||
|
|
||||||
|
void function_avx512f(__m512i *dst, const __m512i *a)
|
||||||
|
{
|
||||||
|
*dst = _mm512_ror_epi64(*a, 57);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void) { return 0; }
|
||||||
8
src/3rdparty/argon2/arch/x86_64/src/test-feature-sse2.c
vendored
Normal file
8
src/3rdparty/argon2/arch/x86_64/src/test-feature-sse2.c
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
#include <x86intrin.h>
|
||||||
|
|
||||||
|
void function_sse2(__m128i *dst, const __m128i *a, const __m128i *b)
|
||||||
|
{
|
||||||
|
*dst = _mm_xor_si128(*a, *b);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void) { return 0; }
|
||||||
8
src/3rdparty/argon2/arch/x86_64/src/test-feature-ssse3.c
vendored
Normal file
8
src/3rdparty/argon2/arch/x86_64/src/test-feature-ssse3.c
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
#include <x86intrin.h>
|
||||||
|
|
||||||
|
void function_ssse3(__m128i *dst, const __m128i *a, const __m128i *b)
|
||||||
|
{
|
||||||
|
*dst = _mm_shuffle_epi8(*a, *b);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void) { return 0; }
|
||||||
8
src/3rdparty/argon2/arch/x86_64/src/test-feature-xop.c
vendored
Normal file
8
src/3rdparty/argon2/arch/x86_64/src/test-feature-xop.c
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
#include <x86intrin.h>
|
||||||
|
|
||||||
|
void function_xop(__m128i *dst, const __m128i *a, int b)
|
||||||
|
{
|
||||||
|
*dst = _mm_roti_epi64(*a, b);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void) { return 0; }
|
||||||
465
src/3rdparty/argon2/include/argon2.h
vendored
Normal file
465
src/3rdparty/argon2/include/argon2.h
vendored
Normal file
@@ -0,0 +1,465 @@
|
|||||||
|
/*
|
||||||
|
* Argon2 source code package
|
||||||
|
*
|
||||||
|
* Written by Daniel Dinu and Dmitry Khovratovich, 2015
|
||||||
|
*
|
||||||
|
* This work is licensed under a Creative Commons CC0 1.0 License/Waiver.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the CC0 Public Domain Dedication
|
||||||
|
* along with this software. If not, see
|
||||||
|
* <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef ARGON2_H
|
||||||
|
#define ARGON2_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
|
/* Symbols visibility control */
|
||||||
|
#define ARGON2_PUBLIC
|
||||||
|
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Argon2 input parameter restrictions
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Minimum and maximum number of lanes (degree of parallelism) */
|
||||||
|
#define ARGON2_MIN_LANES UINT32_C(1)
|
||||||
|
#define ARGON2_MAX_LANES UINT32_C(0xFFFFFF)
|
||||||
|
|
||||||
|
/* Minimum and maximum number of threads */
|
||||||
|
#define ARGON2_MIN_THREADS UINT32_C(1)
|
||||||
|
#define ARGON2_MAX_THREADS UINT32_C(0xFFFFFF)
|
||||||
|
|
||||||
|
/* Number of synchronization points between lanes per pass */
|
||||||
|
#define ARGON2_SYNC_POINTS UINT32_C(4)
|
||||||
|
|
||||||
|
/* Minimum and maximum digest size in bytes */
|
||||||
|
#define ARGON2_MIN_OUTLEN UINT32_C(4)
|
||||||
|
#define ARGON2_MAX_OUTLEN UINT32_C(0xFFFFFFFF)
|
||||||
|
|
||||||
|
/* Minimum and maximum number of memory blocks (each of BLOCK_SIZE bytes) */
|
||||||
|
#define ARGON2_MIN_MEMORY (2 * ARGON2_SYNC_POINTS) /* 2 blocks per slice */
|
||||||
|
|
||||||
|
#define ARGON2_MIN(a, b) ((a) < (b) ? (a) : (b))
|
||||||
|
/* Max memory size is addressing-space/2, topping at 2^32 blocks (4 TB) */
|
||||||
|
#define ARGON2_MAX_MEMORY_BITS \
|
||||||
|
ARGON2_MIN(UINT32_C(32), (sizeof(void *) * CHAR_BIT - 10 - 1))
|
||||||
|
#define ARGON2_MAX_MEMORY \
|
||||||
|
ARGON2_MIN(UINT32_C(0xFFFFFFFF), UINT64_C(1) << ARGON2_MAX_MEMORY_BITS)
|
||||||
|
|
||||||
|
/* Minimum and maximum number of passes */
|
||||||
|
#define ARGON2_MIN_TIME UINT32_C(1)
|
||||||
|
#define ARGON2_MAX_TIME UINT32_C(0xFFFFFFFF)
|
||||||
|
|
||||||
|
/* Minimum and maximum password length in bytes */
|
||||||
|
#define ARGON2_MIN_PWD_LENGTH UINT32_C(0)
|
||||||
|
#define ARGON2_MAX_PWD_LENGTH UINT32_C(0xFFFFFFFF)
|
||||||
|
|
||||||
|
/* Minimum and maximum associated data length in bytes */
|
||||||
|
#define ARGON2_MIN_AD_LENGTH UINT32_C(0)
|
||||||
|
#define ARGON2_MAX_AD_LENGTH UINT32_C(0xFFFFFFFF)
|
||||||
|
|
||||||
|
/* Minimum and maximum salt length in bytes */
|
||||||
|
#define ARGON2_MIN_SALT_LENGTH UINT32_C(8)
|
||||||
|
#define ARGON2_MAX_SALT_LENGTH UINT32_C(0xFFFFFFFF)
|
||||||
|
|
||||||
|
/* Minimum and maximum key length in bytes */
|
||||||
|
#define ARGON2_MIN_SECRET UINT32_C(0)
|
||||||
|
#define ARGON2_MAX_SECRET UINT32_C(0xFFFFFFFF)
|
||||||
|
|
||||||
|
/* Flags to determine which fields are securely wiped (default = no wipe). */
|
||||||
|
#define ARGON2_DEFAULT_FLAGS UINT32_C(0)
|
||||||
|
#define ARGON2_FLAG_CLEAR_PASSWORD (UINT32_C(1) << 0)
|
||||||
|
#define ARGON2_FLAG_CLEAR_SECRET (UINT32_C(1) << 1)
|
||||||
|
#define ARGON2_FLAG_GENKAT (UINT32_C(1) << 3)
|
||||||
|
|
||||||
|
/* Global flag to determine if we are wiping internal memory buffers. This flag
|
||||||
|
* is defined in core.c and deafults to 1 (wipe internal memory). */
|
||||||
|
extern int FLAG_clear_internal_memory;
|
||||||
|
|
||||||
|
/* Error codes */
|
||||||
|
typedef enum Argon2_ErrorCodes {
|
||||||
|
ARGON2_OK = 0,
|
||||||
|
|
||||||
|
ARGON2_OUTPUT_PTR_NULL = -1,
|
||||||
|
|
||||||
|
ARGON2_OUTPUT_TOO_SHORT = -2,
|
||||||
|
ARGON2_OUTPUT_TOO_LONG = -3,
|
||||||
|
|
||||||
|
ARGON2_PWD_TOO_SHORT = -4,
|
||||||
|
ARGON2_PWD_TOO_LONG = -5,
|
||||||
|
|
||||||
|
ARGON2_SALT_TOO_SHORT = -6,
|
||||||
|
ARGON2_SALT_TOO_LONG = -7,
|
||||||
|
|
||||||
|
ARGON2_AD_TOO_SHORT = -8,
|
||||||
|
ARGON2_AD_TOO_LONG = -9,
|
||||||
|
|
||||||
|
ARGON2_SECRET_TOO_SHORT = -10,
|
||||||
|
ARGON2_SECRET_TOO_LONG = -11,
|
||||||
|
|
||||||
|
ARGON2_TIME_TOO_SMALL = -12,
|
||||||
|
ARGON2_TIME_TOO_LARGE = -13,
|
||||||
|
|
||||||
|
ARGON2_MEMORY_TOO_LITTLE = -14,
|
||||||
|
ARGON2_MEMORY_TOO_MUCH = -15,
|
||||||
|
|
||||||
|
ARGON2_LANES_TOO_FEW = -16,
|
||||||
|
ARGON2_LANES_TOO_MANY = -17,
|
||||||
|
|
||||||
|
ARGON2_PWD_PTR_MISMATCH = -18, /* NULL ptr with non-zero length */
|
||||||
|
ARGON2_SALT_PTR_MISMATCH = -19, /* NULL ptr with non-zero length */
|
||||||
|
ARGON2_SECRET_PTR_MISMATCH = -20, /* NULL ptr with non-zero length */
|
||||||
|
ARGON2_AD_PTR_MISMATCH = -21, /* NULL ptr with non-zero length */
|
||||||
|
|
||||||
|
ARGON2_MEMORY_ALLOCATION_ERROR = -22,
|
||||||
|
|
||||||
|
ARGON2_FREE_MEMORY_CBK_NULL = -23,
|
||||||
|
ARGON2_ALLOCATE_MEMORY_CBK_NULL = -24,
|
||||||
|
|
||||||
|
ARGON2_INCORRECT_PARAMETER = -25,
|
||||||
|
ARGON2_INCORRECT_TYPE = -26,
|
||||||
|
|
||||||
|
ARGON2_OUT_PTR_MISMATCH = -27,
|
||||||
|
|
||||||
|
ARGON2_THREADS_TOO_FEW = -28,
|
||||||
|
ARGON2_THREADS_TOO_MANY = -29,
|
||||||
|
|
||||||
|
ARGON2_MISSING_ARGS = -30,
|
||||||
|
|
||||||
|
ARGON2_ENCODING_FAIL = -31,
|
||||||
|
|
||||||
|
ARGON2_DECODING_FAIL = -32,
|
||||||
|
|
||||||
|
ARGON2_THREAD_FAIL = -33,
|
||||||
|
|
||||||
|
ARGON2_DECODING_LENGTH_FAIL = -34,
|
||||||
|
|
||||||
|
ARGON2_VERIFY_MISMATCH = -35
|
||||||
|
} argon2_error_codes;
|
||||||
|
|
||||||
|
/* Memory allocator types --- for external allocation */
|
||||||
|
typedef int (*allocate_fptr)(uint8_t **memory, size_t bytes_to_allocate);
|
||||||
|
typedef void (*deallocate_fptr)(uint8_t *memory, size_t bytes_to_allocate);
|
||||||
|
|
||||||
|
/* Argon2 external data structures */
|
||||||
|
|
||||||
|
/*
|
||||||
|
*****
|
||||||
|
* Context: structure to hold Argon2 inputs:
|
||||||
|
* output array and its length,
|
||||||
|
* password and its length,
|
||||||
|
* salt and its length,
|
||||||
|
* secret and its length,
|
||||||
|
* associated data and its length,
|
||||||
|
* number of passes, amount of used memory (in KBytes, can be rounded up a bit)
|
||||||
|
* number of parallel threads that will be run.
|
||||||
|
* All the parameters above affect the output hash value.
|
||||||
|
* Additionally, two function pointers can be provided to allocate and
|
||||||
|
* deallocate the memory (if NULL, memory will be allocated internally).
|
||||||
|
* Also, three flags indicate whether to erase password, secret as soon as they
|
||||||
|
* are pre-hashed (and thus not needed anymore), and the entire memory
|
||||||
|
*****
|
||||||
|
* Simplest situation: you have output array out[8], password is stored in
|
||||||
|
* pwd[32], salt is stored in salt[16], you do not have keys nor associated
|
||||||
|
* data. You need to spend 1 GB of RAM and you run 5 passes of Argon2d with
|
||||||
|
* 4 parallel lanes.
|
||||||
|
* You want to erase the password, but you're OK with last pass not being
|
||||||
|
* erased. You want to use the default memory allocator.
|
||||||
|
* Then you initialize:
|
||||||
|
Argon2_Context(out,8,pwd,32,salt,16,NULL,0,NULL,0,5,1<<20,4,4,NULL,NULL,true,false,false,false)
|
||||||
|
*/
|
||||||
|
typedef struct Argon2_Context {
|
||||||
|
uint8_t *out; /* output array */
|
||||||
|
uint32_t outlen; /* digest length */
|
||||||
|
|
||||||
|
uint8_t *pwd; /* password array */
|
||||||
|
uint32_t pwdlen; /* password length */
|
||||||
|
|
||||||
|
uint8_t *salt; /* salt array */
|
||||||
|
uint32_t saltlen; /* salt length */
|
||||||
|
|
||||||
|
uint8_t *secret; /* key array */
|
||||||
|
uint32_t secretlen; /* key length */
|
||||||
|
|
||||||
|
uint8_t *ad; /* associated data array */
|
||||||
|
uint32_t adlen; /* associated data length */
|
||||||
|
|
||||||
|
uint32_t t_cost; /* number of passes */
|
||||||
|
uint32_t m_cost; /* amount of memory requested (KB) */
|
||||||
|
uint32_t lanes; /* number of lanes */
|
||||||
|
uint32_t threads; /* maximum number of threads */
|
||||||
|
|
||||||
|
uint32_t version; /* version number */
|
||||||
|
|
||||||
|
allocate_fptr allocate_cbk; /* pointer to memory allocator */
|
||||||
|
deallocate_fptr free_cbk; /* pointer to memory deallocator */
|
||||||
|
|
||||||
|
uint32_t flags; /* array of bool options */
|
||||||
|
} argon2_context;
|
||||||
|
|
||||||
|
/* Argon2 primitive type */
|
||||||
|
typedef enum Argon2_type {
|
||||||
|
Argon2_d = 0,
|
||||||
|
Argon2_i = 1,
|
||||||
|
Argon2_id = 2
|
||||||
|
} argon2_type;
|
||||||
|
|
||||||
|
/* Version of the algorithm */
|
||||||
|
typedef enum Argon2_version {
|
||||||
|
ARGON2_VERSION_10 = 0x10,
|
||||||
|
ARGON2_VERSION_13 = 0x13,
|
||||||
|
ARGON2_VERSION_NUMBER = ARGON2_VERSION_13
|
||||||
|
} argon2_version;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Function that gives the string representation of an argon2_type.
|
||||||
|
* @param type The argon2_type that we want the string for
|
||||||
|
* @param uppercase Whether the string should have the first letter uppercase
|
||||||
|
* @return NULL if invalid type, otherwise the string representation.
|
||||||
|
*/
|
||||||
|
ARGON2_PUBLIC const char *argon2_type2string(argon2_type type, int uppercase);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Function that performs memory-hard hashing with certain degree of parallelism
|
||||||
|
* @param context Pointer to the Argon2 internal structure
|
||||||
|
* @return Error code if smth is wrong, ARGON2_OK otherwise
|
||||||
|
*/
|
||||||
|
ARGON2_PUBLIC int argon2_ctx(argon2_context *context, argon2_type type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hashes a password with Argon2i, producing an encoded hash
|
||||||
|
* @param t_cost Number of iterations
|
||||||
|
* @param m_cost Sets memory usage to m_cost kibibytes
|
||||||
|
* @param parallelism Number of threads and compute lanes
|
||||||
|
* @param pwd Pointer to password
|
||||||
|
* @param pwdlen Password size in bytes
|
||||||
|
* @param salt Pointer to salt
|
||||||
|
* @param saltlen Salt size in bytes
|
||||||
|
* @param hashlen Desired length of the hash in bytes
|
||||||
|
* @param encoded Buffer where to write the encoded hash
|
||||||
|
* @param encodedlen Size of the buffer (thus max size of the encoded hash)
|
||||||
|
* @pre Different parallelism levels will give different results
|
||||||
|
* @pre Returns ARGON2_OK if successful
|
||||||
|
*/
|
||||||
|
ARGON2_PUBLIC int argon2i_hash_encoded(const uint32_t t_cost,
|
||||||
|
const uint32_t m_cost,
|
||||||
|
const uint32_t parallelism,
|
||||||
|
const void *pwd, const size_t pwdlen,
|
||||||
|
const void *salt, const size_t saltlen,
|
||||||
|
const size_t hashlen, char *encoded,
|
||||||
|
const size_t encodedlen);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hashes a password with Argon2i, producing a raw hash by allocating memory at
|
||||||
|
* @hash
|
||||||
|
* @param t_cost Number of iterations
|
||||||
|
* @param m_cost Sets memory usage to m_cost kibibytes
|
||||||
|
* @param parallelism Number of threads and compute lanes
|
||||||
|
* @param pwd Pointer to password
|
||||||
|
* @param pwdlen Password size in bytes
|
||||||
|
* @param salt Pointer to salt
|
||||||
|
* @param saltlen Salt size in bytes
|
||||||
|
* @param hash Buffer where to write the raw hash - updated by the function
|
||||||
|
* @param hashlen Desired length of the hash in bytes
|
||||||
|
* @pre Different parallelism levels will give different results
|
||||||
|
* @pre Returns ARGON2_OK if successful
|
||||||
|
*/
|
||||||
|
ARGON2_PUBLIC int argon2i_hash_raw(const uint32_t t_cost, const uint32_t m_cost,
|
||||||
|
const uint32_t parallelism, const void *pwd,
|
||||||
|
const size_t pwdlen, const void *salt,
|
||||||
|
const size_t saltlen, void *hash,
|
||||||
|
const size_t hashlen);
|
||||||
|
|
||||||
|
ARGON2_PUBLIC int argon2d_hash_encoded(const uint32_t t_cost,
|
||||||
|
const uint32_t m_cost,
|
||||||
|
const uint32_t parallelism,
|
||||||
|
const void *pwd, const size_t pwdlen,
|
||||||
|
const void *salt, const size_t saltlen,
|
||||||
|
const size_t hashlen, char *encoded,
|
||||||
|
const size_t encodedlen);
|
||||||
|
|
||||||
|
ARGON2_PUBLIC int argon2d_hash_raw(const uint32_t t_cost,
|
||||||
|
const uint32_t m_cost,
|
||||||
|
const uint32_t parallelism, const void *pwd,
|
||||||
|
const size_t pwdlen, const void *salt,
|
||||||
|
const size_t saltlen, void *hash,
|
||||||
|
const size_t hashlen);
|
||||||
|
|
||||||
|
ARGON2_PUBLIC int argon2id_hash_encoded(const uint32_t t_cost,
|
||||||
|
const uint32_t m_cost,
|
||||||
|
const uint32_t parallelism,
|
||||||
|
const void *pwd, const size_t pwdlen,
|
||||||
|
const void *salt, const size_t saltlen,
|
||||||
|
const size_t hashlen, char *encoded,
|
||||||
|
const size_t encodedlen);
|
||||||
|
|
||||||
|
ARGON2_PUBLIC int argon2id_hash_raw(const uint32_t t_cost,
|
||||||
|
const uint32_t m_cost,
|
||||||
|
const uint32_t parallelism, const void *pwd,
|
||||||
|
const size_t pwdlen, const void *salt,
|
||||||
|
const size_t saltlen, void *hash,
|
||||||
|
const size_t hashlen);
|
||||||
|
|
||||||
|
ARGON2_PUBLIC int argon2id_hash_raw_ex(const uint32_t t_cost,
|
||||||
|
const uint32_t m_cost,
|
||||||
|
const uint32_t parallelism, const void *pwd,
|
||||||
|
const size_t pwdlen, const void *salt,
|
||||||
|
const size_t saltlen, void *hash,
|
||||||
|
const size_t hashlen,
|
||||||
|
void *memory);
|
||||||
|
|
||||||
|
/* generic function underlying the above ones */
|
||||||
|
ARGON2_PUBLIC int argon2_hash(const uint32_t t_cost, const uint32_t m_cost,
|
||||||
|
const uint32_t parallelism, const void *pwd,
|
||||||
|
const size_t pwdlen, const void *salt,
|
||||||
|
const size_t saltlen, void *hash,
|
||||||
|
const size_t hashlen, char *encoded,
|
||||||
|
const size_t encodedlen, argon2_type type,
|
||||||
|
const uint32_t version);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verifies a password against an encoded string
|
||||||
|
* Encoded string is restricted as in validate_inputs()
|
||||||
|
* @param encoded String encoding parameters, salt, hash
|
||||||
|
* @param pwd Pointer to password
|
||||||
|
* @pre Returns ARGON2_OK if successful
|
||||||
|
*/
|
||||||
|
ARGON2_PUBLIC int argon2i_verify(const char *encoded, const void *pwd,
|
||||||
|
const size_t pwdlen);
|
||||||
|
|
||||||
|
ARGON2_PUBLIC int argon2d_verify(const char *encoded, const void *pwd,
|
||||||
|
const size_t pwdlen);
|
||||||
|
|
||||||
|
ARGON2_PUBLIC int argon2id_verify(const char *encoded, const void *pwd,
|
||||||
|
const size_t pwdlen);
|
||||||
|
|
||||||
|
/* generic function underlying the above ones */
|
||||||
|
ARGON2_PUBLIC int argon2_verify(const char *encoded, const void *pwd,
|
||||||
|
const size_t pwdlen, argon2_type type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Argon2d: Version of Argon2 that picks memory blocks depending
|
||||||
|
* on the password and salt. Only for side-channel-free
|
||||||
|
* environment!!
|
||||||
|
*****
|
||||||
|
* @param context Pointer to current Argon2 context
|
||||||
|
* @return Zero if successful, a non zero error code otherwise
|
||||||
|
*/
|
||||||
|
ARGON2_PUBLIC int argon2d_ctx(argon2_context *context);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Argon2i: Version of Argon2 that picks memory blocks
|
||||||
|
* independent on the password and salt. Good for side-channels,
|
||||||
|
* but worse w.r.t. tradeoff attacks if only one pass is used.
|
||||||
|
*****
|
||||||
|
* @param context Pointer to current Argon2 context
|
||||||
|
* @return Zero if successful, a non zero error code otherwise
|
||||||
|
*/
|
||||||
|
ARGON2_PUBLIC int argon2i_ctx(argon2_context *context);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Argon2id: Version of Argon2 where the first half-pass over memory is
|
||||||
|
* password-independent, the rest are password-dependent (on the password and
|
||||||
|
* salt). OK against side channels (they reduce to 1/2-pass Argon2i), and
|
||||||
|
* better with w.r.t. tradeoff attacks (similar to Argon2d).
|
||||||
|
*****
|
||||||
|
* @param context Pointer to current Argon2 context
|
||||||
|
* @return Zero if successful, a non zero error code otherwise
|
||||||
|
*/
|
||||||
|
ARGON2_PUBLIC int argon2id_ctx(argon2_context *context);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verify if a given password is correct for Argon2d hashing
|
||||||
|
* @param context Pointer to current Argon2 context
|
||||||
|
* @param hash The password hash to verify. The length of the hash is
|
||||||
|
* specified by the context outlen member
|
||||||
|
* @return Zero if successful, a non zero error code otherwise
|
||||||
|
*/
|
||||||
|
ARGON2_PUBLIC int argon2d_verify_ctx(argon2_context *context, const char *hash);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verify if a given password is correct for Argon2i hashing
|
||||||
|
* @param context Pointer to current Argon2 context
|
||||||
|
* @param hash The password hash to verify. The length of the hash is
|
||||||
|
* specified by the context outlen member
|
||||||
|
* @return Zero if successful, a non zero error code otherwise
|
||||||
|
*/
|
||||||
|
ARGON2_PUBLIC int argon2i_verify_ctx(argon2_context *context, const char *hash);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verify if a given password is correct for Argon2id hashing
|
||||||
|
* @param context Pointer to current Argon2 context
|
||||||
|
* @param hash The password hash to verify. The length of the hash is
|
||||||
|
* specified by the context outlen member
|
||||||
|
* @return Zero if successful, a non zero error code otherwise
|
||||||
|
*/
|
||||||
|
ARGON2_PUBLIC int argon2id_verify_ctx(argon2_context *context,
|
||||||
|
const char *hash);
|
||||||
|
|
||||||
|
/* generic function underlying the above ones */
|
||||||
|
ARGON2_PUBLIC int argon2_verify_ctx(argon2_context *context, const char *hash,
|
||||||
|
argon2_type type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the associated error message for given error code
|
||||||
|
* @return The error message associated with the given error code
|
||||||
|
*/
|
||||||
|
ARGON2_PUBLIC const char *argon2_error_message(int error_code);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the encoded hash length for the given input parameters
|
||||||
|
* @param t_cost Number of iterations
|
||||||
|
* @param m_cost Memory usage in kibibytes
|
||||||
|
* @param parallelism Number of threads; used to compute lanes
|
||||||
|
* @param saltlen Salt size in bytes
|
||||||
|
* @param hashlen Hash size in bytes
|
||||||
|
* @param type The argon2_type that we want the encoded length for
|
||||||
|
* @return The encoded hash length in bytes
|
||||||
|
*/
|
||||||
|
ARGON2_PUBLIC size_t argon2_encodedlen(uint32_t t_cost, uint32_t m_cost,
|
||||||
|
uint32_t parallelism, uint32_t saltlen,
|
||||||
|
uint32_t hashlen, argon2_type type);
|
||||||
|
|
||||||
|
/* signals availability of argon2_select_impl: */
|
||||||
|
#define ARGON2_SELECTABLE_IMPL
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Selects the fastest available optimized implementation.
|
||||||
|
* @param out The file for debug output (e. g. stderr; pass NULL for no
|
||||||
|
* debug output)
|
||||||
|
* @param prefix What to print before each line; NULL is equivalent to empty
|
||||||
|
* string
|
||||||
|
*/
|
||||||
|
ARGON2_PUBLIC void argon2_select_impl();
|
||||||
|
ARGON2_PUBLIC const char *argon2_get_impl_name();
|
||||||
|
ARGON2_PUBLIC int argon2_select_impl_by_name(const char *name);
|
||||||
|
|
||||||
|
/* signals support for passing preallocated memory: */
|
||||||
|
#define ARGON2_PREALLOCATED_MEMORY
|
||||||
|
|
||||||
|
ARGON2_PUBLIC size_t argon2_memory_size(uint32_t m_cost, uint32_t parallelism);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function that performs memory-hard hashing with certain degree of parallelism
|
||||||
|
* @param context Pointer to the Argon2 internal structure
|
||||||
|
* @param type The Argon2 type
|
||||||
|
* @param memory Preallocated memory for blocks (or NULL)
|
||||||
|
* @param memory_size The size of preallocated memory
|
||||||
|
* @return Error code if smth is wrong, ARGON2_OK otherwise
|
||||||
|
*/
|
||||||
|
ARGON2_PUBLIC int argon2_ctx_mem(argon2_context *context, argon2_type type,
|
||||||
|
void *memory, size_t memory_size);
|
||||||
|
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
193
src/3rdparty/argon2/lib/argon2-template-64.h
vendored
Normal file
193
src/3rdparty/argon2/lib/argon2-template-64.h
vendored
Normal file
@@ -0,0 +1,193 @@
|
|||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "core.h"
|
||||||
|
|
||||||
|
#define MASK_32 UINT64_C(0xFFFFFFFF)
|
||||||
|
|
||||||
|
#define F(x, y) ((x) + (y) + 2 * ((x) & MASK_32) * ((y) & MASK_32))
|
||||||
|
|
||||||
|
#define G(a, b, c, d) \
|
||||||
|
do { \
|
||||||
|
a = F(a, b); \
|
||||||
|
d = rotr64(d ^ a, 32); \
|
||||||
|
c = F(c, d); \
|
||||||
|
b = rotr64(b ^ c, 24); \
|
||||||
|
a = F(a, b); \
|
||||||
|
d = rotr64(d ^ a, 16); \
|
||||||
|
c = F(c, d); \
|
||||||
|
b = rotr64(b ^ c, 63); \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
#define BLAKE2_ROUND_NOMSG(v0, v1, v2, v3, v4, v5, v6, v7, \
|
||||||
|
v8, v9, v10, v11, v12, v13, v14, v15) \
|
||||||
|
do { \
|
||||||
|
G(v0, v4, v8, v12); \
|
||||||
|
G(v1, v5, v9, v13); \
|
||||||
|
G(v2, v6, v10, v14); \
|
||||||
|
G(v3, v7, v11, v15); \
|
||||||
|
G(v0, v5, v10, v15); \
|
||||||
|
G(v1, v6, v11, v12); \
|
||||||
|
G(v2, v7, v8, v13); \
|
||||||
|
G(v3, v4, v9, v14); \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
#define BLAKE2_ROUND_NOMSG1(v) \
|
||||||
|
BLAKE2_ROUND_NOMSG( \
|
||||||
|
(v)[ 0], (v)[ 1], (v)[ 2], (v)[ 3], \
|
||||||
|
(v)[ 4], (v)[ 5], (v)[ 6], (v)[ 7], \
|
||||||
|
(v)[ 8], (v)[ 9], (v)[10], (v)[11], \
|
||||||
|
(v)[12], (v)[13], (v)[14], (v)[15])
|
||||||
|
|
||||||
|
#define BLAKE2_ROUND_NOMSG2(v) \
|
||||||
|
BLAKE2_ROUND_NOMSG( \
|
||||||
|
(v)[ 0], (v)[ 1], (v)[ 16], (v)[ 17], \
|
||||||
|
(v)[ 32], (v)[ 33], (v)[ 48], (v)[ 49], \
|
||||||
|
(v)[ 64], (v)[ 65], (v)[ 80], (v)[ 81], \
|
||||||
|
(v)[ 96], (v)[ 97], (v)[112], (v)[113])
|
||||||
|
|
||||||
|
static void fill_block(const block *prev_block, const block *ref_block,
|
||||||
|
block *next_block, int with_xor)
|
||||||
|
{
|
||||||
|
block blockR, block_tmp;
|
||||||
|
|
||||||
|
copy_block(&blockR, ref_block);
|
||||||
|
xor_block(&blockR, prev_block);
|
||||||
|
copy_block(&block_tmp, &blockR);
|
||||||
|
if (with_xor) {
|
||||||
|
xor_block(&block_tmp, next_block);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Apply Blake2 on columns of 64-bit words: (0,1,...,15) , then
|
||||||
|
(16,17,..31)... finally (112,113,...127) */
|
||||||
|
BLAKE2_ROUND_NOMSG1(blockR.v + 0 * 16);
|
||||||
|
BLAKE2_ROUND_NOMSG1(blockR.v + 1 * 16);
|
||||||
|
BLAKE2_ROUND_NOMSG1(blockR.v + 2 * 16);
|
||||||
|
BLAKE2_ROUND_NOMSG1(blockR.v + 3 * 16);
|
||||||
|
BLAKE2_ROUND_NOMSG1(blockR.v + 4 * 16);
|
||||||
|
BLAKE2_ROUND_NOMSG1(blockR.v + 5 * 16);
|
||||||
|
BLAKE2_ROUND_NOMSG1(blockR.v + 6 * 16);
|
||||||
|
BLAKE2_ROUND_NOMSG1(blockR.v + 7 * 16);
|
||||||
|
|
||||||
|
/* Apply Blake2 on rows of 64-bit words: (0,1,16,17,...112,113), then
|
||||||
|
(2,3,18,19,...,114,115).. finally (14,15,30,31,...,126,127) */
|
||||||
|
BLAKE2_ROUND_NOMSG2(blockR.v + 0 * 2);
|
||||||
|
BLAKE2_ROUND_NOMSG2(blockR.v + 1 * 2);
|
||||||
|
BLAKE2_ROUND_NOMSG2(blockR.v + 2 * 2);
|
||||||
|
BLAKE2_ROUND_NOMSG2(blockR.v + 3 * 2);
|
||||||
|
BLAKE2_ROUND_NOMSG2(blockR.v + 4 * 2);
|
||||||
|
BLAKE2_ROUND_NOMSG2(blockR.v + 5 * 2);
|
||||||
|
BLAKE2_ROUND_NOMSG2(blockR.v + 6 * 2);
|
||||||
|
BLAKE2_ROUND_NOMSG2(blockR.v + 7 * 2);
|
||||||
|
|
||||||
|
copy_block(next_block, &block_tmp);
|
||||||
|
xor_block(next_block, &blockR);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void next_addresses(block *address_block, block *input_block,
|
||||||
|
const block *zero_block)
|
||||||
|
{
|
||||||
|
input_block->v[6]++;
|
||||||
|
fill_block(zero_block, input_block, address_block, 0);
|
||||||
|
fill_block(zero_block, address_block, address_block, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void fill_segment_64(const argon2_instance_t *instance,
|
||||||
|
argon2_position_t position)
|
||||||
|
{
|
||||||
|
block *ref_block, *curr_block, *prev_block;
|
||||||
|
block address_block, input_block, zero_block;
|
||||||
|
uint64_t pseudo_rand, ref_index, ref_lane;
|
||||||
|
uint32_t prev_offset, curr_offset;
|
||||||
|
uint32_t starting_index, i;
|
||||||
|
int data_independent_addressing;
|
||||||
|
|
||||||
|
if (instance == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
data_independent_addressing = (instance->type == Argon2_i) ||
|
||||||
|
(instance->type == Argon2_id && (position.pass == 0) &&
|
||||||
|
(position.slice < ARGON2_SYNC_POINTS / 2));
|
||||||
|
|
||||||
|
if (data_independent_addressing) {
|
||||||
|
init_block_value(&zero_block, 0);
|
||||||
|
init_block_value(&input_block, 0);
|
||||||
|
|
||||||
|
input_block.v[0] = position.pass;
|
||||||
|
input_block.v[1] = position.lane;
|
||||||
|
input_block.v[2] = position.slice;
|
||||||
|
input_block.v[3] = instance->memory_blocks;
|
||||||
|
input_block.v[4] = instance->passes;
|
||||||
|
input_block.v[5] = instance->type;
|
||||||
|
}
|
||||||
|
|
||||||
|
starting_index = 0;
|
||||||
|
|
||||||
|
if ((0 == position.pass) && (0 == position.slice)) {
|
||||||
|
starting_index = 2; /* we have already generated the first two blocks */
|
||||||
|
|
||||||
|
/* Don't forget to generate the first block of addresses: */
|
||||||
|
if (data_independent_addressing) {
|
||||||
|
next_addresses(&address_block, &input_block, &zero_block);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Offset of the current block */
|
||||||
|
curr_offset = position.lane * instance->lane_length +
|
||||||
|
position.slice * instance->segment_length + starting_index;
|
||||||
|
|
||||||
|
if (0 == curr_offset % instance->lane_length) {
|
||||||
|
/* Last block in this lane */
|
||||||
|
prev_offset = curr_offset + instance->lane_length - 1;
|
||||||
|
} else {
|
||||||
|
/* Previous block */
|
||||||
|
prev_offset = curr_offset - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = starting_index; i < instance->segment_length;
|
||||||
|
++i, ++curr_offset, ++prev_offset) {
|
||||||
|
/*1.1 Rotating prev_offset if needed */
|
||||||
|
if (curr_offset % instance->lane_length == 1) {
|
||||||
|
prev_offset = curr_offset - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 1.2 Computing the index of the reference block */
|
||||||
|
/* 1.2.1 Taking pseudo-random value from the previous block */
|
||||||
|
if (data_independent_addressing) {
|
||||||
|
if (i % ARGON2_ADDRESSES_IN_BLOCK == 0) {
|
||||||
|
next_addresses(&address_block, &input_block, &zero_block);
|
||||||
|
}
|
||||||
|
pseudo_rand = address_block.v[i % ARGON2_ADDRESSES_IN_BLOCK];
|
||||||
|
} else {
|
||||||
|
pseudo_rand = instance->memory[prev_offset].v[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 1.2.2 Computing the lane of the reference block */
|
||||||
|
ref_lane = ((pseudo_rand >> 32)) % instance->lanes;
|
||||||
|
|
||||||
|
if ((position.pass == 0) && (position.slice == 0)) {
|
||||||
|
/* Can not reference other lanes yet */
|
||||||
|
ref_lane = position.lane;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 1.2.3 Computing the number of possible reference block within the
|
||||||
|
* lane.
|
||||||
|
*/
|
||||||
|
position.index = i;
|
||||||
|
ref_index = index_alpha(instance, &position, pseudo_rand & 0xFFFFFFFF,
|
||||||
|
ref_lane == position.lane);
|
||||||
|
|
||||||
|
/* 2 Creating a new block */
|
||||||
|
ref_block =
|
||||||
|
instance->memory + instance->lane_length * ref_lane + ref_index;
|
||||||
|
curr_block = instance->memory + curr_offset;
|
||||||
|
prev_block = instance->memory + prev_offset;
|
||||||
|
|
||||||
|
/* version 1.2.1 and earlier: overwrite, not XOR */
|
||||||
|
if (0 == position.pass || ARGON2_VERSION_10 == instance->version) {
|
||||||
|
fill_block(prev_block, ref_block, curr_block, 0);
|
||||||
|
} else {
|
||||||
|
fill_block(prev_block, ref_block, curr_block, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
504
src/3rdparty/argon2/lib/argon2.c
vendored
Normal file
504
src/3rdparty/argon2/lib/argon2.c
vendored
Normal file
@@ -0,0 +1,504 @@
|
|||||||
|
/*
|
||||||
|
* Argon2 source code package
|
||||||
|
*
|
||||||
|
* Written by Daniel Dinu and Dmitry Khovratovich, 2015
|
||||||
|
*
|
||||||
|
* This work is licensed under a Creative Commons CC0 1.0 License/Waiver.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the CC0 Public Domain Dedication along
|
||||||
|
* with
|
||||||
|
* this software. If not, see
|
||||||
|
* <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "argon2.h"
|
||||||
|
#include "encoding.h"
|
||||||
|
#include "core.h"
|
||||||
|
|
||||||
|
const char *argon2_type2string(argon2_type type, int uppercase) {
|
||||||
|
switch (type) {
|
||||||
|
case Argon2_d:
|
||||||
|
return uppercase ? "Argon2d" : "argon2d";
|
||||||
|
case Argon2_i:
|
||||||
|
return uppercase ? "Argon2i" : "argon2i";
|
||||||
|
case Argon2_id:
|
||||||
|
return uppercase ? "Argon2id" : "argon2id";
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void argon2_compute_memory_blocks(uint32_t *memory_blocks,
|
||||||
|
uint32_t *segment_length,
|
||||||
|
uint32_t m_cost, uint32_t lanes)
|
||||||
|
{
|
||||||
|
/* Minimum memory_blocks = 8L blocks, where L is the number of lanes */
|
||||||
|
*memory_blocks = m_cost;
|
||||||
|
if (*memory_blocks < 2 * ARGON2_SYNC_POINTS * lanes) {
|
||||||
|
*memory_blocks = 2 * ARGON2_SYNC_POINTS * lanes;
|
||||||
|
}
|
||||||
|
|
||||||
|
*segment_length = *memory_blocks / (lanes * ARGON2_SYNC_POINTS);
|
||||||
|
/* Ensure that all segments have equal length */
|
||||||
|
*memory_blocks = *segment_length * (lanes * ARGON2_SYNC_POINTS);
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t argon2_memory_size(uint32_t m_cost, uint32_t parallelism) {
|
||||||
|
uint32_t memory_blocks, segment_length;
|
||||||
|
argon2_compute_memory_blocks(&memory_blocks, &segment_length, m_cost,
|
||||||
|
parallelism);
|
||||||
|
return memory_blocks * ARGON2_BLOCK_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
int argon2_ctx_mem(argon2_context *context, argon2_type type, void *memory,
|
||||||
|
size_t memory_size) {
|
||||||
|
/* 1. Validate all inputs */
|
||||||
|
int result = validate_inputs(context);
|
||||||
|
uint32_t memory_blocks, segment_length;
|
||||||
|
argon2_instance_t instance;
|
||||||
|
|
||||||
|
if (ARGON2_OK != result) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Argon2_d != type && Argon2_i != type && Argon2_id != type) {
|
||||||
|
return ARGON2_INCORRECT_TYPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 2. Align memory size */
|
||||||
|
argon2_compute_memory_blocks(&memory_blocks, &segment_length,
|
||||||
|
context->m_cost, context->lanes);
|
||||||
|
|
||||||
|
/* check for sufficient memory size: */
|
||||||
|
if (memory != NULL && (memory_size % ARGON2_BLOCK_SIZE != 0 ||
|
||||||
|
memory_size / ARGON2_BLOCK_SIZE < memory_blocks)) {
|
||||||
|
return ARGON2_MEMORY_ALLOCATION_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
instance.version = context->version;
|
||||||
|
instance.memory = (block *)memory;
|
||||||
|
instance.passes = context->t_cost;
|
||||||
|
instance.memory_blocks = memory_blocks;
|
||||||
|
instance.segment_length = segment_length;
|
||||||
|
instance.lane_length = segment_length * ARGON2_SYNC_POINTS;
|
||||||
|
instance.lanes = context->lanes;
|
||||||
|
instance.threads = context->threads;
|
||||||
|
instance.type = type;
|
||||||
|
instance.print_internals = !!(context->flags & ARGON2_FLAG_GENKAT);
|
||||||
|
instance.keep_memory = memory != NULL;
|
||||||
|
|
||||||
|
if (instance.threads > instance.lanes) {
|
||||||
|
instance.threads = instance.lanes;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 3. Initialization: Hashing inputs, allocating memory, filling first
|
||||||
|
* blocks
|
||||||
|
*/
|
||||||
|
result = initialize(&instance, context);
|
||||||
|
|
||||||
|
if (ARGON2_OK != result) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 4. Filling memory */
|
||||||
|
result = fill_memory_blocks(&instance);
|
||||||
|
|
||||||
|
if (ARGON2_OK != result) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
/* 5. Finalization */
|
||||||
|
finalize(context, &instance);
|
||||||
|
|
||||||
|
return ARGON2_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
int argon2_ctx(argon2_context *context, argon2_type type) {
|
||||||
|
return argon2_ctx_mem(context, type, NULL, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int argon2_hash(const uint32_t t_cost, const uint32_t m_cost,
|
||||||
|
const uint32_t parallelism, const void *pwd,
|
||||||
|
const size_t pwdlen, const void *salt, const size_t saltlen,
|
||||||
|
void *hash, const size_t hashlen, char *encoded,
|
||||||
|
const size_t encodedlen, argon2_type type,
|
||||||
|
const uint32_t version){
|
||||||
|
|
||||||
|
argon2_context context;
|
||||||
|
int result;
|
||||||
|
uint8_t *out;
|
||||||
|
|
||||||
|
if (pwdlen > ARGON2_MAX_PWD_LENGTH) {
|
||||||
|
return ARGON2_PWD_TOO_LONG;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (saltlen > ARGON2_MAX_SALT_LENGTH) {
|
||||||
|
return ARGON2_SALT_TOO_LONG;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hashlen > ARGON2_MAX_OUTLEN) {
|
||||||
|
return ARGON2_OUTPUT_TOO_LONG;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hashlen < ARGON2_MIN_OUTLEN) {
|
||||||
|
return ARGON2_OUTPUT_TOO_SHORT;
|
||||||
|
}
|
||||||
|
|
||||||
|
out = malloc(hashlen);
|
||||||
|
if (!out) {
|
||||||
|
return ARGON2_MEMORY_ALLOCATION_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
context.out = (uint8_t *)out;
|
||||||
|
context.outlen = (uint32_t)hashlen;
|
||||||
|
context.pwd = CONST_CAST(uint8_t *)pwd;
|
||||||
|
context.pwdlen = (uint32_t)pwdlen;
|
||||||
|
context.salt = CONST_CAST(uint8_t *)salt;
|
||||||
|
context.saltlen = (uint32_t)saltlen;
|
||||||
|
context.secret = NULL;
|
||||||
|
context.secretlen = 0;
|
||||||
|
context.ad = NULL;
|
||||||
|
context.adlen = 0;
|
||||||
|
context.t_cost = t_cost;
|
||||||
|
context.m_cost = m_cost;
|
||||||
|
context.lanes = parallelism;
|
||||||
|
context.threads = parallelism;
|
||||||
|
context.allocate_cbk = NULL;
|
||||||
|
context.free_cbk = NULL;
|
||||||
|
context.flags = ARGON2_DEFAULT_FLAGS;
|
||||||
|
context.version = version;
|
||||||
|
|
||||||
|
result = argon2_ctx(&context, type);
|
||||||
|
|
||||||
|
if (result != ARGON2_OK) {
|
||||||
|
clear_internal_memory(out, hashlen);
|
||||||
|
free(out);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* if raw hash requested, write it */
|
||||||
|
if (hash) {
|
||||||
|
memcpy(hash, out, hashlen);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* if encoding requested, write it */
|
||||||
|
if (encoded && encodedlen) {
|
||||||
|
if (encode_string(encoded, encodedlen, &context, type) != ARGON2_OK) {
|
||||||
|
clear_internal_memory(out, hashlen); /* wipe buffers if error */
|
||||||
|
clear_internal_memory(encoded, encodedlen);
|
||||||
|
free(out);
|
||||||
|
return ARGON2_ENCODING_FAIL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
clear_internal_memory(out, hashlen);
|
||||||
|
free(out);
|
||||||
|
|
||||||
|
return ARGON2_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
int argon2i_hash_encoded(const uint32_t t_cost, const uint32_t m_cost,
|
||||||
|
const uint32_t parallelism, const void *pwd,
|
||||||
|
const size_t pwdlen, const void *salt,
|
||||||
|
const size_t saltlen, const size_t hashlen,
|
||||||
|
char *encoded, const size_t encodedlen) {
|
||||||
|
|
||||||
|
return argon2_hash(t_cost, m_cost, parallelism, pwd, pwdlen, salt, saltlen,
|
||||||
|
NULL, hashlen, encoded, encodedlen, Argon2_i,
|
||||||
|
ARGON2_VERSION_NUMBER);
|
||||||
|
}
|
||||||
|
|
||||||
|
int argon2i_hash_raw(const uint32_t t_cost, const uint32_t m_cost,
|
||||||
|
const uint32_t parallelism, const void *pwd,
|
||||||
|
const size_t pwdlen, const void *salt,
|
||||||
|
const size_t saltlen, void *hash, const size_t hashlen) {
|
||||||
|
|
||||||
|
return argon2_hash(t_cost, m_cost, parallelism, pwd, pwdlen, salt, saltlen,
|
||||||
|
hash, hashlen, NULL, 0, Argon2_i, ARGON2_VERSION_NUMBER);
|
||||||
|
}
|
||||||
|
|
||||||
|
int argon2d_hash_encoded(const uint32_t t_cost, const uint32_t m_cost,
|
||||||
|
const uint32_t parallelism, const void *pwd,
|
||||||
|
const size_t pwdlen, const void *salt,
|
||||||
|
const size_t saltlen, const size_t hashlen,
|
||||||
|
char *encoded, const size_t encodedlen) {
|
||||||
|
|
||||||
|
return argon2_hash(t_cost, m_cost, parallelism, pwd, pwdlen, salt, saltlen,
|
||||||
|
NULL, hashlen, encoded, encodedlen, Argon2_d,
|
||||||
|
ARGON2_VERSION_NUMBER);
|
||||||
|
}
|
||||||
|
|
||||||
|
int argon2d_hash_raw(const uint32_t t_cost, const uint32_t m_cost,
|
||||||
|
const uint32_t parallelism, const void *pwd,
|
||||||
|
const size_t pwdlen, const void *salt,
|
||||||
|
const size_t saltlen, void *hash, const size_t hashlen) {
|
||||||
|
|
||||||
|
return argon2_hash(t_cost, m_cost, parallelism, pwd, pwdlen, salt, saltlen,
|
||||||
|
hash, hashlen, NULL, 0, Argon2_d, ARGON2_VERSION_NUMBER);
|
||||||
|
}
|
||||||
|
|
||||||
|
int argon2id_hash_encoded(const uint32_t t_cost, const uint32_t m_cost,
|
||||||
|
const uint32_t parallelism, const void *pwd,
|
||||||
|
const size_t pwdlen, const void *salt,
|
||||||
|
const size_t saltlen, const size_t hashlen,
|
||||||
|
char *encoded, const size_t encodedlen) {
|
||||||
|
|
||||||
|
return argon2_hash(t_cost, m_cost, parallelism, pwd, pwdlen, salt, saltlen,
|
||||||
|
NULL, hashlen, encoded, encodedlen, Argon2_id,
|
||||||
|
ARGON2_VERSION_NUMBER);
|
||||||
|
}
|
||||||
|
|
||||||
|
int argon2id_hash_raw(const uint32_t t_cost, const uint32_t m_cost,
|
||||||
|
const uint32_t parallelism, const void *pwd,
|
||||||
|
const size_t pwdlen, const void *salt,
|
||||||
|
const size_t saltlen, void *hash, const size_t hashlen) {
|
||||||
|
return argon2_hash(t_cost, m_cost, parallelism, pwd, pwdlen, salt, saltlen,
|
||||||
|
hash, hashlen, NULL, 0, Argon2_id,
|
||||||
|
ARGON2_VERSION_NUMBER);
|
||||||
|
}
|
||||||
|
|
||||||
|
int argon2id_hash_raw_ex(const uint32_t t_cost, const uint32_t m_cost,
|
||||||
|
const uint32_t parallelism, const void *pwd,
|
||||||
|
const size_t pwdlen, const void *salt,
|
||||||
|
const size_t saltlen, void *hash, const size_t hashlen, void *memory) {
|
||||||
|
argon2_context context;
|
||||||
|
|
||||||
|
context.out = (uint8_t *)hash;
|
||||||
|
context.outlen = (uint32_t)hashlen;
|
||||||
|
context.pwd = CONST_CAST(uint8_t *)pwd;
|
||||||
|
context.pwdlen = (uint32_t)pwdlen;
|
||||||
|
context.salt = CONST_CAST(uint8_t *)salt;
|
||||||
|
context.saltlen = (uint32_t)saltlen;
|
||||||
|
context.secret = NULL;
|
||||||
|
context.secretlen = 0;
|
||||||
|
context.ad = NULL;
|
||||||
|
context.adlen = 0;
|
||||||
|
context.t_cost = t_cost;
|
||||||
|
context.m_cost = m_cost;
|
||||||
|
context.lanes = parallelism;
|
||||||
|
context.threads = parallelism;
|
||||||
|
context.allocate_cbk = NULL;
|
||||||
|
context.free_cbk = NULL;
|
||||||
|
context.flags = ARGON2_DEFAULT_FLAGS;
|
||||||
|
context.version = ARGON2_VERSION_NUMBER;
|
||||||
|
|
||||||
|
return argon2_ctx_mem(&context, Argon2_id, memory, m_cost * 1024);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int argon2_compare(const uint8_t *b1, const uint8_t *b2, size_t len) {
|
||||||
|
size_t i;
|
||||||
|
uint8_t d = 0U;
|
||||||
|
|
||||||
|
for (i = 0U; i < len; i++) {
|
||||||
|
d |= b1[i] ^ b2[i];
|
||||||
|
}
|
||||||
|
return (int)((1 & ((d - 1) >> 8)) - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int argon2_verify(const char *encoded, const void *pwd, const size_t pwdlen,
|
||||||
|
argon2_type type) {
|
||||||
|
|
||||||
|
argon2_context ctx;
|
||||||
|
uint8_t *desired_result = NULL;
|
||||||
|
|
||||||
|
int ret = ARGON2_OK;
|
||||||
|
|
||||||
|
size_t encoded_len;
|
||||||
|
uint32_t max_field_len;
|
||||||
|
|
||||||
|
if (pwdlen > ARGON2_MAX_PWD_LENGTH) {
|
||||||
|
return ARGON2_PWD_TOO_LONG;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (encoded == NULL) {
|
||||||
|
return ARGON2_DECODING_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
encoded_len = strlen(encoded);
|
||||||
|
if (encoded_len > UINT32_MAX) {
|
||||||
|
return ARGON2_DECODING_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* No field can be longer than the encoded length */
|
||||||
|
max_field_len = (uint32_t)encoded_len;
|
||||||
|
|
||||||
|
ctx.saltlen = max_field_len;
|
||||||
|
ctx.outlen = max_field_len;
|
||||||
|
|
||||||
|
ctx.salt = malloc(ctx.saltlen);
|
||||||
|
ctx.out = malloc(ctx.outlen);
|
||||||
|
if (!ctx.salt || !ctx.out) {
|
||||||
|
ret = ARGON2_MEMORY_ALLOCATION_ERROR;
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.pwd = (uint8_t *)pwd;
|
||||||
|
ctx.pwdlen = (uint32_t)pwdlen;
|
||||||
|
|
||||||
|
ret = decode_string(&ctx, encoded, type);
|
||||||
|
if (ret != ARGON2_OK) {
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set aside the desired result, and get a new buffer. */
|
||||||
|
desired_result = ctx.out;
|
||||||
|
ctx.out = malloc(ctx.outlen);
|
||||||
|
if (!ctx.out) {
|
||||||
|
ret = ARGON2_MEMORY_ALLOCATION_ERROR;
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = argon2_verify_ctx(&ctx, (char *)desired_result, type);
|
||||||
|
if (ret != ARGON2_OK) {
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
fail:
|
||||||
|
free(ctx.salt);
|
||||||
|
free(ctx.out);
|
||||||
|
free(desired_result);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int argon2i_verify(const char *encoded, const void *pwd, const size_t pwdlen) {
|
||||||
|
|
||||||
|
return argon2_verify(encoded, pwd, pwdlen, Argon2_i);
|
||||||
|
}
|
||||||
|
|
||||||
|
int argon2d_verify(const char *encoded, const void *pwd, const size_t pwdlen) {
|
||||||
|
|
||||||
|
return argon2_verify(encoded, pwd, pwdlen, Argon2_d);
|
||||||
|
}
|
||||||
|
|
||||||
|
int argon2id_verify(const char *encoded, const void *pwd, const size_t pwdlen) {
|
||||||
|
|
||||||
|
return argon2_verify(encoded, pwd, pwdlen, Argon2_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
int argon2d_ctx(argon2_context *context) {
|
||||||
|
return argon2_ctx(context, Argon2_d);
|
||||||
|
}
|
||||||
|
|
||||||
|
int argon2i_ctx(argon2_context *context) {
|
||||||
|
return argon2_ctx(context, Argon2_i);
|
||||||
|
}
|
||||||
|
|
||||||
|
int argon2id_ctx(argon2_context *context) {
|
||||||
|
return argon2_ctx(context, Argon2_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
int argon2_verify_ctx(argon2_context *context, const char *hash,
|
||||||
|
argon2_type type) {
|
||||||
|
int ret = argon2_ctx(context, type);
|
||||||
|
if (ret != ARGON2_OK) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argon2_compare((uint8_t *)hash, context->out, context->outlen)) {
|
||||||
|
return ARGON2_VERIFY_MISMATCH;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ARGON2_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
int argon2d_verify_ctx(argon2_context *context, const char *hash) {
|
||||||
|
return argon2_verify_ctx(context, hash, Argon2_d);
|
||||||
|
}
|
||||||
|
|
||||||
|
int argon2i_verify_ctx(argon2_context *context, const char *hash) {
|
||||||
|
return argon2_verify_ctx(context, hash, Argon2_i);
|
||||||
|
}
|
||||||
|
|
||||||
|
int argon2id_verify_ctx(argon2_context *context, const char *hash) {
|
||||||
|
return argon2_verify_ctx(context, hash, Argon2_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *argon2_error_message(int error_code) {
|
||||||
|
switch (error_code) {
|
||||||
|
case ARGON2_OK:
|
||||||
|
return "OK";
|
||||||
|
case ARGON2_OUTPUT_PTR_NULL:
|
||||||
|
return "Output pointer is NULL";
|
||||||
|
case ARGON2_OUTPUT_TOO_SHORT:
|
||||||
|
return "Output is too short";
|
||||||
|
case ARGON2_OUTPUT_TOO_LONG:
|
||||||
|
return "Output is too long";
|
||||||
|
case ARGON2_PWD_TOO_SHORT:
|
||||||
|
return "Password is too short";
|
||||||
|
case ARGON2_PWD_TOO_LONG:
|
||||||
|
return "Password is too long";
|
||||||
|
case ARGON2_SALT_TOO_SHORT:
|
||||||
|
return "Salt is too short";
|
||||||
|
case ARGON2_SALT_TOO_LONG:
|
||||||
|
return "Salt is too long";
|
||||||
|
case ARGON2_AD_TOO_SHORT:
|
||||||
|
return "Associated data is too short";
|
||||||
|
case ARGON2_AD_TOO_LONG:
|
||||||
|
return "Associated data is too long";
|
||||||
|
case ARGON2_SECRET_TOO_SHORT:
|
||||||
|
return "Secret is too short";
|
||||||
|
case ARGON2_SECRET_TOO_LONG:
|
||||||
|
return "Secret is too long";
|
||||||
|
case ARGON2_TIME_TOO_SMALL:
|
||||||
|
return "Time cost is too small";
|
||||||
|
case ARGON2_TIME_TOO_LARGE:
|
||||||
|
return "Time cost is too large";
|
||||||
|
case ARGON2_MEMORY_TOO_LITTLE:
|
||||||
|
return "Memory cost is too small";
|
||||||
|
case ARGON2_MEMORY_TOO_MUCH:
|
||||||
|
return "Memory cost is too large";
|
||||||
|
case ARGON2_LANES_TOO_FEW:
|
||||||
|
return "Too few lanes";
|
||||||
|
case ARGON2_LANES_TOO_MANY:
|
||||||
|
return "Too many lanes";
|
||||||
|
case ARGON2_PWD_PTR_MISMATCH:
|
||||||
|
return "Password pointer is NULL, but password length is not 0";
|
||||||
|
case ARGON2_SALT_PTR_MISMATCH:
|
||||||
|
return "Salt pointer is NULL, but salt length is not 0";
|
||||||
|
case ARGON2_SECRET_PTR_MISMATCH:
|
||||||
|
return "Secret pointer is NULL, but secret length is not 0";
|
||||||
|
case ARGON2_AD_PTR_MISMATCH:
|
||||||
|
return "Associated data pointer is NULL, but ad length is not 0";
|
||||||
|
case ARGON2_MEMORY_ALLOCATION_ERROR:
|
||||||
|
return "Memory allocation error";
|
||||||
|
case ARGON2_FREE_MEMORY_CBK_NULL:
|
||||||
|
return "The free memory callback is NULL";
|
||||||
|
case ARGON2_ALLOCATE_MEMORY_CBK_NULL:
|
||||||
|
return "The allocate memory callback is NULL";
|
||||||
|
case ARGON2_INCORRECT_PARAMETER:
|
||||||
|
return "Argon2_Context context is NULL";
|
||||||
|
case ARGON2_INCORRECT_TYPE:
|
||||||
|
return "There is no such version of Argon2";
|
||||||
|
case ARGON2_OUT_PTR_MISMATCH:
|
||||||
|
return "Output pointer mismatch";
|
||||||
|
case ARGON2_THREADS_TOO_FEW:
|
||||||
|
return "Not enough threads";
|
||||||
|
case ARGON2_THREADS_TOO_MANY:
|
||||||
|
return "Too many threads";
|
||||||
|
case ARGON2_MISSING_ARGS:
|
||||||
|
return "Missing arguments";
|
||||||
|
case ARGON2_ENCODING_FAIL:
|
||||||
|
return "Encoding failed";
|
||||||
|
case ARGON2_DECODING_FAIL:
|
||||||
|
return "Decoding failed";
|
||||||
|
case ARGON2_THREAD_FAIL:
|
||||||
|
return "Threading failure";
|
||||||
|
case ARGON2_DECODING_LENGTH_FAIL:
|
||||||
|
return "Some of encoded parameters are too long or too short";
|
||||||
|
case ARGON2_VERIFY_MISMATCH:
|
||||||
|
return "The password does not match the supplied hash";
|
||||||
|
default:
|
||||||
|
return "Unknown error code";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t argon2_encodedlen(uint32_t t_cost, uint32_t m_cost, uint32_t parallelism,
|
||||||
|
uint32_t saltlen, uint32_t hashlen, argon2_type type) {
|
||||||
|
return strlen("$$v=$m=,t=,p=$$") + strlen(argon2_type2string(type, 0)) +
|
||||||
|
numlen(t_cost) + numlen(m_cost) + numlen(parallelism) +
|
||||||
|
b64len(saltlen) + b64len(hashlen) + numlen(ARGON2_VERSION_NUMBER) +
|
||||||
|
1;
|
||||||
|
}
|
||||||
90
src/3rdparty/argon2/lib/blake2/blake2-impl.h
vendored
Normal file
90
src/3rdparty/argon2/lib/blake2/blake2-impl.h
vendored
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
#ifndef ARGON2_BLAKE2_IMPL_H
|
||||||
|
#define ARGON2_BLAKE2_IMPL_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
/* Argon2 Team - Begin Code */
|
||||||
|
/*
|
||||||
|
Not an exhaustive list, but should cover the majority of modern platforms
|
||||||
|
Additionally, the code will always be correct---this is only a performance
|
||||||
|
tweak.
|
||||||
|
*/
|
||||||
|
#if (defined(__BYTE_ORDER__) && \
|
||||||
|
(__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)) || \
|
||||||
|
defined(__LITTLE_ENDIAN__) || defined(__ARMEL__) || defined(__MIPSEL__) || \
|
||||||
|
defined(__AARCH64EL__) || defined(__amd64__) || defined(__i386__) || \
|
||||||
|
defined(_M_IX86) || defined(_M_X64) || defined(_M_AMD64) || \
|
||||||
|
defined(_M_ARM)
|
||||||
|
#define NATIVE_LITTLE_ENDIAN
|
||||||
|
#endif
|
||||||
|
/* Argon2 Team - End Code */
|
||||||
|
|
||||||
|
static inline uint32_t load32(const void *src) {
|
||||||
|
#if defined(NATIVE_LITTLE_ENDIAN)
|
||||||
|
return *(const uint32_t *)src;
|
||||||
|
#else
|
||||||
|
const uint8_t *p = (const uint8_t *)src;
|
||||||
|
uint32_t w = *p++;
|
||||||
|
w |= (uint32_t)(*p++) << 8;
|
||||||
|
w |= (uint32_t)(*p++) << 16;
|
||||||
|
w |= (uint32_t)(*p++) << 24;
|
||||||
|
return w;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline uint64_t load64(const void *src) {
|
||||||
|
#if defined(NATIVE_LITTLE_ENDIAN)
|
||||||
|
return *(const uint64_t *)src;
|
||||||
|
#else
|
||||||
|
const uint8_t *p = (const uint8_t *)src;
|
||||||
|
uint64_t w = *p++;
|
||||||
|
w |= (uint64_t)(*p++) << 8;
|
||||||
|
w |= (uint64_t)(*p++) << 16;
|
||||||
|
w |= (uint64_t)(*p++) << 24;
|
||||||
|
w |= (uint64_t)(*p++) << 32;
|
||||||
|
w |= (uint64_t)(*p++) << 40;
|
||||||
|
w |= (uint64_t)(*p++) << 48;
|
||||||
|
w |= (uint64_t)(*p++) << 56;
|
||||||
|
return w;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void store32(void *dst, uint32_t w) {
|
||||||
|
#if defined(NATIVE_LITTLE_ENDIAN)
|
||||||
|
*(uint32_t *)dst = w;
|
||||||
|
#else
|
||||||
|
uint8_t *p = (uint8_t *)dst;
|
||||||
|
*p++ = (uint8_t)w;
|
||||||
|
w >>= 8;
|
||||||
|
*p++ = (uint8_t)w;
|
||||||
|
w >>= 8;
|
||||||
|
*p++ = (uint8_t)w;
|
||||||
|
w >>= 8;
|
||||||
|
*p++ = (uint8_t)w;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void store64(void *dst, uint64_t w) {
|
||||||
|
#if defined(NATIVE_LITTLE_ENDIAN)
|
||||||
|
*(uint64_t *)dst = w;
|
||||||
|
#else
|
||||||
|
uint8_t *p = (uint8_t *)dst;
|
||||||
|
*p++ = (uint8_t)w;
|
||||||
|
w >>= 8;
|
||||||
|
*p++ = (uint8_t)w;
|
||||||
|
w >>= 8;
|
||||||
|
*p++ = (uint8_t)w;
|
||||||
|
w >>= 8;
|
||||||
|
*p++ = (uint8_t)w;
|
||||||
|
w >>= 8;
|
||||||
|
*p++ = (uint8_t)w;
|
||||||
|
w >>= 8;
|
||||||
|
*p++ = (uint8_t)w;
|
||||||
|
w >>= 8;
|
||||||
|
*p++ = (uint8_t)w;
|
||||||
|
w >>= 8;
|
||||||
|
*p++ = (uint8_t)w;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // ARGON2_BLAKE2_IMPL_H
|
||||||
225
src/3rdparty/argon2/lib/blake2/blake2.c
vendored
Normal file
225
src/3rdparty/argon2/lib/blake2/blake2.c
vendored
Normal file
@@ -0,0 +1,225 @@
|
|||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "blake2/blake2.h"
|
||||||
|
#include "blake2/blake2-impl.h"
|
||||||
|
|
||||||
|
#include "core.h"
|
||||||
|
|
||||||
|
static const uint64_t blake2b_IV[8] = {
|
||||||
|
UINT64_C(0x6a09e667f3bcc908), UINT64_C(0xbb67ae8584caa73b),
|
||||||
|
UINT64_C(0x3c6ef372fe94f82b), UINT64_C(0xa54ff53a5f1d36f1),
|
||||||
|
UINT64_C(0x510e527fade682d1), UINT64_C(0x9b05688c2b3e6c1f),
|
||||||
|
UINT64_C(0x1f83d9abfb41bd6b), UINT64_C(0x5be0cd19137e2179)
|
||||||
|
};
|
||||||
|
|
||||||
|
#define rotr64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
|
||||||
|
|
||||||
|
static const unsigned int blake2b_sigma[12][16] = {
|
||||||
|
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},
|
||||||
|
{14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3},
|
||||||
|
{11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4},
|
||||||
|
{7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8},
|
||||||
|
{9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13},
|
||||||
|
{2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9},
|
||||||
|
{12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11},
|
||||||
|
{13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10},
|
||||||
|
{6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5},
|
||||||
|
{10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0},
|
||||||
|
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},
|
||||||
|
{14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3},
|
||||||
|
};
|
||||||
|
|
||||||
|
#define G(m, r, i, a, b, c, d) \
|
||||||
|
do { \
|
||||||
|
a = a + b + m[blake2b_sigma[r][2 * i + 0]]; \
|
||||||
|
d = rotr64(d ^ a, 32); \
|
||||||
|
c = c + d; \
|
||||||
|
b = rotr64(b ^ c, 24); \
|
||||||
|
a = a + b + m[blake2b_sigma[r][2 * i + 1]]; \
|
||||||
|
d = rotr64(d ^ a, 16); \
|
||||||
|
c = c + d; \
|
||||||
|
b = rotr64(b ^ c, 63); \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
#define ROUND(m, v, r) \
|
||||||
|
do { \
|
||||||
|
G(m, r, 0, v[0], v[4], v[ 8], v[12]); \
|
||||||
|
G(m, r, 1, v[1], v[5], v[ 9], v[13]); \
|
||||||
|
G(m, r, 2, v[2], v[6], v[10], v[14]); \
|
||||||
|
G(m, r, 3, v[3], v[7], v[11], v[15]); \
|
||||||
|
G(m, r, 4, v[0], v[5], v[10], v[15]); \
|
||||||
|
G(m, r, 5, v[1], v[6], v[11], v[12]); \
|
||||||
|
G(m, r, 6, v[2], v[7], v[ 8], v[13]); \
|
||||||
|
G(m, r, 7, v[3], v[4], v[ 9], v[14]); \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
void blake2b_compress(blake2b_state *S, const void *block, uint64_t f0)
|
||||||
|
{
|
||||||
|
uint64_t m[16];
|
||||||
|
uint64_t v[16];
|
||||||
|
|
||||||
|
m[ 0] = load64((const uint64_t *)block + 0);
|
||||||
|
m[ 1] = load64((const uint64_t *)block + 1);
|
||||||
|
m[ 2] = load64((const uint64_t *)block + 2);
|
||||||
|
m[ 3] = load64((const uint64_t *)block + 3);
|
||||||
|
m[ 4] = load64((const uint64_t *)block + 4);
|
||||||
|
m[ 5] = load64((const uint64_t *)block + 5);
|
||||||
|
m[ 6] = load64((const uint64_t *)block + 6);
|
||||||
|
m[ 7] = load64((const uint64_t *)block + 7);
|
||||||
|
m[ 8] = load64((const uint64_t *)block + 8);
|
||||||
|
m[ 9] = load64((const uint64_t *)block + 9);
|
||||||
|
m[10] = load64((const uint64_t *)block + 10);
|
||||||
|
m[11] = load64((const uint64_t *)block + 11);
|
||||||
|
m[12] = load64((const uint64_t *)block + 12);
|
||||||
|
m[13] = load64((const uint64_t *)block + 13);
|
||||||
|
m[14] = load64((const uint64_t *)block + 14);
|
||||||
|
m[15] = load64((const uint64_t *)block + 15);
|
||||||
|
|
||||||
|
v[ 0] = S->h[0];
|
||||||
|
v[ 1] = S->h[1];
|
||||||
|
v[ 2] = S->h[2];
|
||||||
|
v[ 3] = S->h[3];
|
||||||
|
v[ 4] = S->h[4];
|
||||||
|
v[ 5] = S->h[5];
|
||||||
|
v[ 6] = S->h[6];
|
||||||
|
v[ 7] = S->h[7];
|
||||||
|
v[ 8] = blake2b_IV[0];
|
||||||
|
v[ 9] = blake2b_IV[1];
|
||||||
|
v[10] = blake2b_IV[2];
|
||||||
|
v[11] = blake2b_IV[3];
|
||||||
|
v[12] = blake2b_IV[4] ^ S->t[0];
|
||||||
|
v[13] = blake2b_IV[5] ^ S->t[1];
|
||||||
|
v[14] = blake2b_IV[6] ^ f0;
|
||||||
|
v[15] = blake2b_IV[7];
|
||||||
|
|
||||||
|
ROUND(m, v, 0);
|
||||||
|
ROUND(m, v, 1);
|
||||||
|
ROUND(m, v, 2);
|
||||||
|
ROUND(m, v, 3);
|
||||||
|
ROUND(m, v, 4);
|
||||||
|
ROUND(m, v, 5);
|
||||||
|
ROUND(m, v, 6);
|
||||||
|
ROUND(m, v, 7);
|
||||||
|
ROUND(m, v, 8);
|
||||||
|
ROUND(m, v, 9);
|
||||||
|
ROUND(m, v, 10);
|
||||||
|
ROUND(m, v, 11);
|
||||||
|
|
||||||
|
S->h[0] ^= v[0] ^ v[ 8];
|
||||||
|
S->h[1] ^= v[1] ^ v[ 9];
|
||||||
|
S->h[2] ^= v[2] ^ v[10];
|
||||||
|
S->h[3] ^= v[3] ^ v[11];
|
||||||
|
S->h[4] ^= v[4] ^ v[12];
|
||||||
|
S->h[5] ^= v[5] ^ v[13];
|
||||||
|
S->h[6] ^= v[6] ^ v[14];
|
||||||
|
S->h[7] ^= v[7] ^ v[15];
|
||||||
|
}
|
||||||
|
|
||||||
|
static void blake2b_increment_counter(blake2b_state *S, uint64_t inc)
|
||||||
|
{
|
||||||
|
S->t[0] += inc;
|
||||||
|
S->t[1] += (S->t[0] < inc);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void blake2b_init_state(blake2b_state *S)
|
||||||
|
{
|
||||||
|
memcpy(S->h, blake2b_IV, sizeof(S->h));
|
||||||
|
S->t[1] = S->t[0] = 0;
|
||||||
|
S->buflen = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void blake2b_init(blake2b_state *S, size_t outlen)
|
||||||
|
{
|
||||||
|
blake2b_init_state(S);
|
||||||
|
/* XOR initial state with param block: */
|
||||||
|
S->h[0] ^= (uint64_t)outlen | (UINT64_C(1) << 16) | (UINT64_C(1) << 24);
|
||||||
|
}
|
||||||
|
|
||||||
|
void blake2b_update(blake2b_state *S, const void *in, size_t inlen)
|
||||||
|
{
|
||||||
|
const uint8_t *pin = (const uint8_t *)in;
|
||||||
|
|
||||||
|
if (S->buflen + inlen > BLAKE2B_BLOCKBYTES) {
|
||||||
|
size_t left = S->buflen;
|
||||||
|
size_t fill = BLAKE2B_BLOCKBYTES - left;
|
||||||
|
memcpy(&S->buf[left], pin, fill);
|
||||||
|
blake2b_increment_counter(S, BLAKE2B_BLOCKBYTES);
|
||||||
|
blake2b_compress(S, S->buf, 0);
|
||||||
|
S->buflen = 0;
|
||||||
|
inlen -= fill;
|
||||||
|
pin += fill;
|
||||||
|
/* Avoid buffer copies when possible */
|
||||||
|
while (inlen > BLAKE2B_BLOCKBYTES) {
|
||||||
|
blake2b_increment_counter(S, BLAKE2B_BLOCKBYTES);
|
||||||
|
blake2b_compress(S, pin, 0);
|
||||||
|
inlen -= BLAKE2B_BLOCKBYTES;
|
||||||
|
pin += BLAKE2B_BLOCKBYTES;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
memcpy(&S->buf[S->buflen], pin, inlen);
|
||||||
|
S->buflen += inlen;
|
||||||
|
}
|
||||||
|
|
||||||
|
void blake2b_final(blake2b_state *S, void *out, size_t outlen)
|
||||||
|
{
|
||||||
|
uint8_t buffer[BLAKE2B_OUTBYTES] = {0};
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
blake2b_increment_counter(S, S->buflen);
|
||||||
|
memset(&S->buf[S->buflen], 0, BLAKE2B_BLOCKBYTES - S->buflen); /* Padding */
|
||||||
|
blake2b_compress(S, S->buf, UINT64_C(0xFFFFFFFFFFFFFFFF));
|
||||||
|
|
||||||
|
for (i = 0; i < 8; ++i) { /* Output full hash to temp buffer */
|
||||||
|
store64(buffer + i * sizeof(uint64_t), S->h[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(out, buffer, outlen);
|
||||||
|
clear_internal_memory(buffer, sizeof(buffer));
|
||||||
|
clear_internal_memory(S->buf, sizeof(S->buf));
|
||||||
|
clear_internal_memory(S->h, sizeof(S->h));
|
||||||
|
}
|
||||||
|
|
||||||
|
void blake2b_long(void *out, size_t outlen, const void *in, size_t inlen)
|
||||||
|
{
|
||||||
|
uint8_t *pout = (uint8_t *)out;
|
||||||
|
blake2b_state blake_state;
|
||||||
|
uint8_t outlen_bytes[sizeof(uint32_t)] = {0};
|
||||||
|
|
||||||
|
store32(outlen_bytes, (uint32_t)outlen);
|
||||||
|
if (outlen <= BLAKE2B_OUTBYTES) {
|
||||||
|
blake2b_init(&blake_state, outlen);
|
||||||
|
blake2b_update(&blake_state, outlen_bytes, sizeof(outlen_bytes));
|
||||||
|
blake2b_update(&blake_state, in, inlen);
|
||||||
|
blake2b_final(&blake_state, pout, outlen);
|
||||||
|
} else {
|
||||||
|
uint32_t toproduce;
|
||||||
|
uint8_t out_buffer[BLAKE2B_OUTBYTES];
|
||||||
|
|
||||||
|
blake2b_init(&blake_state, BLAKE2B_OUTBYTES);
|
||||||
|
blake2b_update(&blake_state, outlen_bytes, sizeof(outlen_bytes));
|
||||||
|
blake2b_update(&blake_state, in, inlen);
|
||||||
|
blake2b_final(&blake_state, out_buffer, BLAKE2B_OUTBYTES);
|
||||||
|
|
||||||
|
memcpy(pout, out_buffer, BLAKE2B_OUTBYTES / 2);
|
||||||
|
pout += BLAKE2B_OUTBYTES / 2;
|
||||||
|
toproduce = (uint32_t)outlen - BLAKE2B_OUTBYTES / 2;
|
||||||
|
|
||||||
|
while (toproduce > BLAKE2B_OUTBYTES) {
|
||||||
|
blake2b_init(&blake_state, BLAKE2B_OUTBYTES);
|
||||||
|
blake2b_update(&blake_state, out_buffer, BLAKE2B_OUTBYTES);
|
||||||
|
blake2b_final(&blake_state, out_buffer, BLAKE2B_OUTBYTES);
|
||||||
|
|
||||||
|
memcpy(pout, out_buffer, BLAKE2B_OUTBYTES / 2);
|
||||||
|
pout += BLAKE2B_OUTBYTES / 2;
|
||||||
|
toproduce -= BLAKE2B_OUTBYTES / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
blake2b_init(&blake_state, toproduce);
|
||||||
|
blake2b_update(&blake_state, out_buffer, BLAKE2B_OUTBYTES);
|
||||||
|
blake2b_final(&blake_state, out_buffer, toproduce);
|
||||||
|
|
||||||
|
memcpy(pout, out_buffer, toproduce);
|
||||||
|
|
||||||
|
clear_internal_memory(out_buffer, sizeof(out_buffer));
|
||||||
|
}
|
||||||
|
}
|
||||||
30
src/3rdparty/argon2/lib/blake2/blake2.h
vendored
Normal file
30
src/3rdparty/argon2/lib/blake2/blake2.h
vendored
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
#ifndef ARGON2_BLAKE2_H
|
||||||
|
#define ARGON2_BLAKE2_H
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
enum blake2b_constant {
|
||||||
|
BLAKE2B_BLOCKBYTES = 128,
|
||||||
|
BLAKE2B_OUTBYTES = 64,
|
||||||
|
BLAKE2B_KEYBYTES = 64,
|
||||||
|
BLAKE2B_SALTBYTES = 16,
|
||||||
|
BLAKE2B_PERSONALBYTES = 16
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct __blake2b_state {
|
||||||
|
uint64_t h[8];
|
||||||
|
uint64_t t[2];
|
||||||
|
uint8_t buf[BLAKE2B_BLOCKBYTES];
|
||||||
|
size_t buflen;
|
||||||
|
} blake2b_state;
|
||||||
|
|
||||||
|
/* Streaming API */
|
||||||
|
void blake2b_init(blake2b_state *S, size_t outlen);
|
||||||
|
void blake2b_update(blake2b_state *S, const void *in, size_t inlen);
|
||||||
|
void blake2b_final(blake2b_state *S, void *out, size_t outlen);
|
||||||
|
|
||||||
|
void blake2b_long(void *out, size_t outlen, const void *in, size_t inlen);
|
||||||
|
|
||||||
|
#endif // ARGON2_BLAKE2_H
|
||||||
|
|
||||||
539
src/3rdparty/argon2/lib/core.c
vendored
Normal file
539
src/3rdparty/argon2/lib/core.c
vendored
Normal file
@@ -0,0 +1,539 @@
|
|||||||
|
/*
|
||||||
|
* Argon2 source code package
|
||||||
|
*
|
||||||
|
* Written by Daniel Dinu and Dmitry Khovratovich, 2015
|
||||||
|
*
|
||||||
|
* This work is licensed under a Creative Commons CC0 1.0 License/Waiver.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the CC0 Public Domain Dedication along
|
||||||
|
* with
|
||||||
|
* this software. If not, see
|
||||||
|
* <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*For memory wiping*/
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#include <windows.h>
|
||||||
|
#include <winbase.h> /* For SecureZeroMemory */
|
||||||
|
#endif
|
||||||
|
#if defined __STDC_LIB_EXT1__
|
||||||
|
#define __STDC_WANT_LIB_EXT1__ 1
|
||||||
|
#endif
|
||||||
|
#define VC_GE_2005(version) (version >= 1400)
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "core.h"
|
||||||
|
#include "blake2/blake2.h"
|
||||||
|
#include "blake2/blake2-impl.h"
|
||||||
|
|
||||||
|
#include "genkat.h"
|
||||||
|
|
||||||
|
#if defined(__clang__)
|
||||||
|
#if __has_attribute(optnone)
|
||||||
|
#define NOT_OPTIMIZED __attribute__((optnone))
|
||||||
|
#endif
|
||||||
|
#elif defined(__GNUC__)
|
||||||
|
#define GCC_VERSION \
|
||||||
|
(__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
|
||||||
|
#if GCC_VERSION >= 40400
|
||||||
|
#define NOT_OPTIMIZED __attribute__((optimize("O0")))
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#ifndef NOT_OPTIMIZED
|
||||||
|
#define NOT_OPTIMIZED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/***************Instance and Position constructors**********/
|
||||||
|
void init_block_value(block *b, uint8_t in) { memset(b->v, in, sizeof(b->v)); }
|
||||||
|
|
||||||
|
void copy_block(block *dst, const block *src) {
|
||||||
|
memcpy(dst->v, src->v, sizeof(uint64_t) * ARGON2_QWORDS_IN_BLOCK);
|
||||||
|
}
|
||||||
|
|
||||||
|
void xor_block(block *dst, const block *src) {
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < ARGON2_QWORDS_IN_BLOCK; ++i) {
|
||||||
|
dst->v[i] ^= src->v[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void load_block(block *dst, const void *input) {
|
||||||
|
unsigned i;
|
||||||
|
for (i = 0; i < ARGON2_QWORDS_IN_BLOCK; ++i) {
|
||||||
|
dst->v[i] = load64((const uint8_t *)input + i * sizeof(dst->v[i]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void store_block(void *output, const block *src) {
|
||||||
|
unsigned i;
|
||||||
|
for (i = 0; i < ARGON2_QWORDS_IN_BLOCK; ++i) {
|
||||||
|
store64((uint8_t *)output + i * sizeof(src->v[i]), src->v[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/***************Memory functions*****************/
|
||||||
|
|
||||||
|
int allocate_memory(const argon2_context *context,
|
||||||
|
argon2_instance_t *instance) {
|
||||||
|
size_t blocks = instance->memory_blocks;
|
||||||
|
size_t memory_size = blocks * ARGON2_BLOCK_SIZE;
|
||||||
|
|
||||||
|
/* 0. Check for memory supplied by user: */
|
||||||
|
/* NOTE: Sufficient memory size is already checked in argon2_ctx_mem() */
|
||||||
|
if (instance->memory != NULL) {
|
||||||
|
return ARGON2_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 1. Check for multiplication overflow */
|
||||||
|
if (blocks != 0 && memory_size / ARGON2_BLOCK_SIZE != blocks) {
|
||||||
|
return ARGON2_MEMORY_ALLOCATION_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 2. Try to allocate with appropriate allocator */
|
||||||
|
if (context->allocate_cbk) {
|
||||||
|
(context->allocate_cbk)((uint8_t **)&instance->memory, memory_size);
|
||||||
|
} else {
|
||||||
|
instance->memory = malloc(memory_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (instance->memory == NULL) {
|
||||||
|
return ARGON2_MEMORY_ALLOCATION_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ARGON2_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
void free_memory(const argon2_context *context,
|
||||||
|
const argon2_instance_t *instance) {
|
||||||
|
size_t memory_size = instance->memory_blocks * ARGON2_BLOCK_SIZE;
|
||||||
|
|
||||||
|
clear_internal_memory(instance->memory, memory_size);
|
||||||
|
|
||||||
|
if (instance->keep_memory) {
|
||||||
|
/* user-supplied memory -- do not free */
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (context->free_cbk) {
|
||||||
|
(context->free_cbk)((uint8_t *)instance->memory, memory_size);
|
||||||
|
} else {
|
||||||
|
free(instance->memory);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void NOT_OPTIMIZED secure_wipe_memory(void *v, size_t n) {
|
||||||
|
#if defined(_MSC_VER) && VC_GE_2005(_MSC_VER)
|
||||||
|
SecureZeroMemory(v, n);
|
||||||
|
#elif defined memset_s
|
||||||
|
memset_s(v, n, 0, n);
|
||||||
|
#elif defined(__OpenBSD__)
|
||||||
|
explicit_bzero(v, n);
|
||||||
|
#else
|
||||||
|
static void *(*const volatile memset_sec)(void *, int, size_t) = &memset;
|
||||||
|
memset_sec(v, 0, n);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Memory clear flag defaults to true. */
|
||||||
|
int FLAG_clear_internal_memory = 0;
|
||||||
|
void clear_internal_memory(void *v, size_t n) {
|
||||||
|
if (FLAG_clear_internal_memory && v) {
|
||||||
|
secure_wipe_memory(v, n);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void finalize(const argon2_context *context, argon2_instance_t *instance) {
|
||||||
|
if (context != NULL && instance != NULL) {
|
||||||
|
block blockhash;
|
||||||
|
uint32_t l;
|
||||||
|
|
||||||
|
copy_block(&blockhash, instance->memory + instance->lane_length - 1);
|
||||||
|
|
||||||
|
/* XOR the last blocks */
|
||||||
|
for (l = 1; l < instance->lanes; ++l) {
|
||||||
|
uint32_t last_block_in_lane =
|
||||||
|
l * instance->lane_length + (instance->lane_length - 1);
|
||||||
|
xor_block(&blockhash, instance->memory + last_block_in_lane);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hash the result */
|
||||||
|
{
|
||||||
|
uint8_t blockhash_bytes[ARGON2_BLOCK_SIZE];
|
||||||
|
store_block(blockhash_bytes, &blockhash);
|
||||||
|
blake2b_long(context->out, context->outlen, blockhash_bytes,
|
||||||
|
ARGON2_BLOCK_SIZE);
|
||||||
|
/* clear blockhash and blockhash_bytes */
|
||||||
|
clear_internal_memory(blockhash.v, ARGON2_BLOCK_SIZE);
|
||||||
|
clear_internal_memory(blockhash_bytes, ARGON2_BLOCK_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (instance->print_internals) {
|
||||||
|
print_tag(context->out, context->outlen);
|
||||||
|
}
|
||||||
|
|
||||||
|
free_memory(context, instance);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t index_alpha(const argon2_instance_t *instance,
|
||||||
|
const argon2_position_t *position, uint32_t pseudo_rand,
|
||||||
|
int same_lane) {
|
||||||
|
/*
|
||||||
|
* Pass 0:
|
||||||
|
* This lane : all already finished segments plus already constructed
|
||||||
|
* blocks in this segment
|
||||||
|
* Other lanes : all already finished segments
|
||||||
|
* Pass 1+:
|
||||||
|
* This lane : (SYNC_POINTS - 1) last segments plus already constructed
|
||||||
|
* blocks in this segment
|
||||||
|
* Other lanes : (SYNC_POINTS - 1) last segments
|
||||||
|
*/
|
||||||
|
uint32_t reference_area_size;
|
||||||
|
uint64_t relative_position;
|
||||||
|
uint32_t start_position, absolute_position;
|
||||||
|
|
||||||
|
if (0 == position->pass) {
|
||||||
|
/* First pass */
|
||||||
|
if (0 == position->slice) {
|
||||||
|
/* First slice */
|
||||||
|
reference_area_size =
|
||||||
|
position->index - 1; /* all but the previous */
|
||||||
|
} else {
|
||||||
|
if (same_lane) {
|
||||||
|
/* The same lane => add current segment */
|
||||||
|
reference_area_size =
|
||||||
|
position->slice * instance->segment_length +
|
||||||
|
position->index - 1;
|
||||||
|
} else {
|
||||||
|
reference_area_size =
|
||||||
|
position->slice * instance->segment_length +
|
||||||
|
((position->index == 0) ? (-1) : 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* Second pass */
|
||||||
|
if (same_lane) {
|
||||||
|
reference_area_size = instance->lane_length -
|
||||||
|
instance->segment_length + position->index -
|
||||||
|
1;
|
||||||
|
} else {
|
||||||
|
reference_area_size = instance->lane_length -
|
||||||
|
instance->segment_length +
|
||||||
|
((position->index == 0) ? (-1) : 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 1.2.4. Mapping pseudo_rand to 0..<reference_area_size-1> and produce
|
||||||
|
* relative position */
|
||||||
|
relative_position = pseudo_rand;
|
||||||
|
relative_position = relative_position * relative_position >> 32;
|
||||||
|
relative_position = reference_area_size - 1 -
|
||||||
|
(reference_area_size * relative_position >> 32);
|
||||||
|
|
||||||
|
/* 1.2.5 Computing starting position */
|
||||||
|
start_position = 0;
|
||||||
|
|
||||||
|
if (0 != position->pass) {
|
||||||
|
start_position = (position->slice == ARGON2_SYNC_POINTS - 1)
|
||||||
|
? 0
|
||||||
|
: (position->slice + 1) * instance->segment_length;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 1.2.6. Computing absolute position */
|
||||||
|
absolute_position = (start_position + relative_position) %
|
||||||
|
instance->lane_length; /* absolute position */
|
||||||
|
return absolute_position;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Single-threaded version for p=1 case */
|
||||||
|
static int fill_memory_blocks_st(argon2_instance_t *instance) {
|
||||||
|
uint32_t r, s, l;
|
||||||
|
|
||||||
|
for (r = 0; r < instance->passes; ++r) {
|
||||||
|
for (s = 0; s < ARGON2_SYNC_POINTS; ++s) {
|
||||||
|
for (l = 0; l < instance->lanes; ++l) {
|
||||||
|
argon2_position_t position = { r, l, (uint8_t)s, 0 };
|
||||||
|
fill_segment(instance, position);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (instance->print_internals) {
|
||||||
|
internal_kat(instance, r); /* Print all memory blocks */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ARGON2_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
int fill_memory_blocks(argon2_instance_t *instance) {
|
||||||
|
if (instance == NULL || instance->lanes == 0) {
|
||||||
|
return ARGON2_INCORRECT_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
return fill_memory_blocks_st(instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
int validate_inputs(const argon2_context *context) {
|
||||||
|
if (NULL == context) {
|
||||||
|
return ARGON2_INCORRECT_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NULL == context->out) {
|
||||||
|
return ARGON2_OUTPUT_PTR_NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Validate output length */
|
||||||
|
if (ARGON2_MIN_OUTLEN > context->outlen) {
|
||||||
|
return ARGON2_OUTPUT_TOO_SHORT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ARGON2_MAX_OUTLEN < context->outlen) {
|
||||||
|
return ARGON2_OUTPUT_TOO_LONG;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Validate password (required param) */
|
||||||
|
if (NULL == context->pwd) {
|
||||||
|
if (0 != context->pwdlen) {
|
||||||
|
return ARGON2_PWD_PTR_MISMATCH;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ARGON2_MIN_PWD_LENGTH > context->pwdlen) {
|
||||||
|
return ARGON2_PWD_TOO_SHORT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ARGON2_MAX_PWD_LENGTH < context->pwdlen) {
|
||||||
|
return ARGON2_PWD_TOO_LONG;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Validate salt (required param) */
|
||||||
|
if (NULL == context->salt) {
|
||||||
|
if (0 != context->saltlen) {
|
||||||
|
return ARGON2_SALT_PTR_MISMATCH;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ARGON2_MIN_SALT_LENGTH > context->saltlen) {
|
||||||
|
return ARGON2_SALT_TOO_SHORT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ARGON2_MAX_SALT_LENGTH < context->saltlen) {
|
||||||
|
return ARGON2_SALT_TOO_LONG;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Validate secret (optional param) */
|
||||||
|
if (NULL == context->secret) {
|
||||||
|
if (0 != context->secretlen) {
|
||||||
|
return ARGON2_SECRET_PTR_MISMATCH;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (ARGON2_MIN_SECRET > context->secretlen) {
|
||||||
|
return ARGON2_SECRET_TOO_SHORT;
|
||||||
|
}
|
||||||
|
if (ARGON2_MAX_SECRET < context->secretlen) {
|
||||||
|
return ARGON2_SECRET_TOO_LONG;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Validate associated data (optional param) */
|
||||||
|
if (NULL == context->ad) {
|
||||||
|
if (0 != context->adlen) {
|
||||||
|
return ARGON2_AD_PTR_MISMATCH;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (ARGON2_MIN_AD_LENGTH > context->adlen) {
|
||||||
|
return ARGON2_AD_TOO_SHORT;
|
||||||
|
}
|
||||||
|
if (ARGON2_MAX_AD_LENGTH < context->adlen) {
|
||||||
|
return ARGON2_AD_TOO_LONG;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Validate memory cost */
|
||||||
|
if (ARGON2_MIN_MEMORY > context->m_cost) {
|
||||||
|
return ARGON2_MEMORY_TOO_LITTLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ARGON2_MAX_MEMORY < context->m_cost) {
|
||||||
|
return ARGON2_MEMORY_TOO_MUCH;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (context->m_cost < 8 * context->lanes) {
|
||||||
|
return ARGON2_MEMORY_TOO_LITTLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Validate time cost */
|
||||||
|
if (ARGON2_MIN_TIME > context->t_cost) {
|
||||||
|
return ARGON2_TIME_TOO_SMALL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ARGON2_MAX_TIME < context->t_cost) {
|
||||||
|
return ARGON2_TIME_TOO_LARGE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Validate lanes */
|
||||||
|
if (ARGON2_MIN_LANES > context->lanes) {
|
||||||
|
return ARGON2_LANES_TOO_FEW;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ARGON2_MAX_LANES < context->lanes) {
|
||||||
|
return ARGON2_LANES_TOO_MANY;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Validate threads */
|
||||||
|
if (ARGON2_MIN_THREADS > context->threads) {
|
||||||
|
return ARGON2_THREADS_TOO_FEW;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ARGON2_MAX_THREADS < context->threads) {
|
||||||
|
return ARGON2_THREADS_TOO_MANY;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NULL != context->allocate_cbk && NULL == context->free_cbk) {
|
||||||
|
return ARGON2_FREE_MEMORY_CBK_NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NULL == context->allocate_cbk && NULL != context->free_cbk) {
|
||||||
|
return ARGON2_ALLOCATE_MEMORY_CBK_NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ARGON2_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
void fill_first_blocks(uint8_t *blockhash, const argon2_instance_t *instance) {
|
||||||
|
uint32_t l;
|
||||||
|
/* Make the first and second block in each lane as G(H0||0||i) or
|
||||||
|
G(H0||1||i) */
|
||||||
|
uint8_t blockhash_bytes[ARGON2_BLOCK_SIZE];
|
||||||
|
for (l = 0; l < instance->lanes; ++l) {
|
||||||
|
|
||||||
|
store32(blockhash + ARGON2_PREHASH_DIGEST_LENGTH, 0);
|
||||||
|
store32(blockhash + ARGON2_PREHASH_DIGEST_LENGTH + 4, l);
|
||||||
|
blake2b_long(blockhash_bytes, ARGON2_BLOCK_SIZE, blockhash,
|
||||||
|
ARGON2_PREHASH_SEED_LENGTH);
|
||||||
|
load_block(&instance->memory[l * instance->lane_length + 0],
|
||||||
|
blockhash_bytes);
|
||||||
|
|
||||||
|
store32(blockhash + ARGON2_PREHASH_DIGEST_LENGTH, 1);
|
||||||
|
blake2b_long(blockhash_bytes, ARGON2_BLOCK_SIZE, blockhash,
|
||||||
|
ARGON2_PREHASH_SEED_LENGTH);
|
||||||
|
load_block(&instance->memory[l * instance->lane_length + 1],
|
||||||
|
blockhash_bytes);
|
||||||
|
}
|
||||||
|
clear_internal_memory(blockhash_bytes, ARGON2_BLOCK_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void initial_hash(uint8_t *blockhash, argon2_context *context,
|
||||||
|
argon2_type type) {
|
||||||
|
blake2b_state BlakeHash;
|
||||||
|
uint8_t value[sizeof(uint32_t)];
|
||||||
|
|
||||||
|
if (NULL == context || NULL == blockhash) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
blake2b_init(&BlakeHash, ARGON2_PREHASH_DIGEST_LENGTH);
|
||||||
|
|
||||||
|
store32(&value, context->lanes);
|
||||||
|
blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value));
|
||||||
|
|
||||||
|
store32(&value, context->outlen);
|
||||||
|
blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value));
|
||||||
|
|
||||||
|
store32(&value, context->m_cost);
|
||||||
|
blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value));
|
||||||
|
|
||||||
|
store32(&value, context->t_cost);
|
||||||
|
blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value));
|
||||||
|
|
||||||
|
store32(&value, context->version);
|
||||||
|
blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value));
|
||||||
|
|
||||||
|
store32(&value, (uint32_t)type);
|
||||||
|
blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value));
|
||||||
|
|
||||||
|
store32(&value, context->pwdlen);
|
||||||
|
blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value));
|
||||||
|
|
||||||
|
if (context->pwd != NULL) {
|
||||||
|
blake2b_update(&BlakeHash, (const uint8_t *)context->pwd,
|
||||||
|
context->pwdlen);
|
||||||
|
|
||||||
|
if (context->flags & ARGON2_FLAG_CLEAR_PASSWORD) {
|
||||||
|
secure_wipe_memory(context->pwd, context->pwdlen);
|
||||||
|
context->pwdlen = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
store32(&value, context->saltlen);
|
||||||
|
blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value));
|
||||||
|
|
||||||
|
if (context->salt != NULL) {
|
||||||
|
blake2b_update(&BlakeHash, (const uint8_t *)context->salt,
|
||||||
|
context->saltlen);
|
||||||
|
}
|
||||||
|
|
||||||
|
store32(&value, context->secretlen);
|
||||||
|
blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value));
|
||||||
|
|
||||||
|
if (context->secret != NULL) {
|
||||||
|
blake2b_update(&BlakeHash, (const uint8_t *)context->secret,
|
||||||
|
context->secretlen);
|
||||||
|
|
||||||
|
if (context->flags & ARGON2_FLAG_CLEAR_SECRET) {
|
||||||
|
secure_wipe_memory(context->secret, context->secretlen);
|
||||||
|
context->secretlen = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
store32(&value, context->adlen);
|
||||||
|
blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value));
|
||||||
|
|
||||||
|
if (context->ad != NULL) {
|
||||||
|
blake2b_update(&BlakeHash, (const uint8_t *)context->ad,
|
||||||
|
context->adlen);
|
||||||
|
}
|
||||||
|
|
||||||
|
blake2b_final(&BlakeHash, blockhash, ARGON2_PREHASH_DIGEST_LENGTH);
|
||||||
|
}
|
||||||
|
|
||||||
|
int initialize(argon2_instance_t *instance, argon2_context *context) {
|
||||||
|
uint8_t blockhash[ARGON2_PREHASH_SEED_LENGTH];
|
||||||
|
int result = ARGON2_OK;
|
||||||
|
|
||||||
|
if (instance == NULL || context == NULL)
|
||||||
|
return ARGON2_INCORRECT_PARAMETER;
|
||||||
|
instance->context_ptr = context;
|
||||||
|
|
||||||
|
/* 1. Memory allocation */
|
||||||
|
|
||||||
|
result = allocate_memory(context, instance);
|
||||||
|
if (result != ARGON2_OK) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 2. Initial hashing */
|
||||||
|
/* H_0 + 8 extra bytes to produce the first blocks */
|
||||||
|
/* uint8_t blockhash[ARGON2_PREHASH_SEED_LENGTH]; */
|
||||||
|
/* Hashing all inputs */
|
||||||
|
initial_hash(blockhash, context, instance->type);
|
||||||
|
/* Zeroing 8 extra bytes */
|
||||||
|
clear_internal_memory(blockhash + ARGON2_PREHASH_DIGEST_LENGTH,
|
||||||
|
ARGON2_PREHASH_SEED_LENGTH -
|
||||||
|
ARGON2_PREHASH_DIGEST_LENGTH);
|
||||||
|
|
||||||
|
if (instance->print_internals) {
|
||||||
|
initial_kat(blockhash, context, instance->type);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 3. Creating first blocks, we always have at least two blocks in a slice
|
||||||
|
*/
|
||||||
|
fill_first_blocks(blockhash, instance);
|
||||||
|
/* Clearing the hash */
|
||||||
|
clear_internal_memory(blockhash, ARGON2_PREHASH_SEED_LENGTH);
|
||||||
|
|
||||||
|
return ARGON2_OK;
|
||||||
|
}
|
||||||
226
src/3rdparty/argon2/lib/core.h
vendored
Normal file
226
src/3rdparty/argon2/lib/core.h
vendored
Normal file
@@ -0,0 +1,226 @@
|
|||||||
|
/*
|
||||||
|
* Argon2 source code package
|
||||||
|
*
|
||||||
|
* Written by Daniel Dinu and Dmitry Khovratovich, 2015
|
||||||
|
*
|
||||||
|
* This work is licensed under a Creative Commons CC0 1.0 License/Waiver.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the CC0 Public Domain Dedication along
|
||||||
|
* with
|
||||||
|
* this software. If not, see
|
||||||
|
* <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef ARGON2_CORE_H
|
||||||
|
#define ARGON2_CORE_H
|
||||||
|
|
||||||
|
#include "argon2.h"
|
||||||
|
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
#define ALIGN(n) __declspec(align(16))
|
||||||
|
#elif defined(__GNUC__) || defined(__clang)
|
||||||
|
#define ALIGN(x) __attribute__((__aligned__(x)))
|
||||||
|
#else
|
||||||
|
#define ALIGN(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define CONST_CAST(x) (x)(uintptr_t)
|
||||||
|
|
||||||
|
/**********************Argon2 internal constants*******************************/
|
||||||
|
|
||||||
|
enum argon2_core_constants {
|
||||||
|
/* Memory block size in bytes */
|
||||||
|
ARGON2_BLOCK_SIZE = 1024,
|
||||||
|
ARGON2_QWORDS_IN_BLOCK = ARGON2_BLOCK_SIZE / 8,
|
||||||
|
ARGON2_OWORDS_IN_BLOCK = ARGON2_BLOCK_SIZE / 16,
|
||||||
|
|
||||||
|
/* Number of pseudo-random values generated by one call to Blake in Argon2i
|
||||||
|
to
|
||||||
|
generate reference block positions */
|
||||||
|
ARGON2_ADDRESSES_IN_BLOCK = 128,
|
||||||
|
|
||||||
|
/* Pre-hashing digest length and its extension*/
|
||||||
|
ARGON2_PREHASH_DIGEST_LENGTH = 64,
|
||||||
|
ARGON2_PREHASH_SEED_LENGTH = 72
|
||||||
|
};
|
||||||
|
|
||||||
|
/*************************Argon2 internal data types***********************/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Structure for the (1KB) memory block implemented as 128 64-bit words.
|
||||||
|
* Memory blocks can be copied, XORed. Internal words can be accessed by [] (no
|
||||||
|
* bounds checking).
|
||||||
|
*/
|
||||||
|
typedef struct block_ { uint64_t v[ARGON2_QWORDS_IN_BLOCK]; } block;
|
||||||
|
|
||||||
|
/*****************Functions that work with the block******************/
|
||||||
|
|
||||||
|
/* Initialize each byte of the block with @in */
|
||||||
|
void init_block_value(block *b, uint8_t in);
|
||||||
|
|
||||||
|
/* Copy block @src to block @dst */
|
||||||
|
void copy_block(block *dst, const block *src);
|
||||||
|
|
||||||
|
/* XOR @src onto @dst bytewise */
|
||||||
|
void xor_block(block *dst, const block *src);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Argon2 instance: memory pointer, number of passes, amount of memory, type,
|
||||||
|
* and derived values.
|
||||||
|
* Used to evaluate the number and location of blocks to construct in each
|
||||||
|
* thread
|
||||||
|
*/
|
||||||
|
typedef struct Argon2_instance_t {
|
||||||
|
block *memory; /* Memory pointer */
|
||||||
|
uint32_t version;
|
||||||
|
uint32_t passes; /* Number of passes */
|
||||||
|
uint32_t memory_blocks; /* Number of blocks in memory */
|
||||||
|
uint32_t segment_length;
|
||||||
|
uint32_t lane_length;
|
||||||
|
uint32_t lanes;
|
||||||
|
uint32_t threads;
|
||||||
|
argon2_type type;
|
||||||
|
int print_internals; /* whether to print the memory blocks */
|
||||||
|
int keep_memory;
|
||||||
|
argon2_context *context_ptr; /* points back to original context */
|
||||||
|
} argon2_instance_t;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Argon2 position: where we construct the block right now. Used to distribute
|
||||||
|
* work between threads.
|
||||||
|
*/
|
||||||
|
typedef struct Argon2_position_t {
|
||||||
|
uint32_t pass;
|
||||||
|
uint32_t lane;
|
||||||
|
uint8_t slice;
|
||||||
|
uint32_t index;
|
||||||
|
} argon2_position_t;
|
||||||
|
|
||||||
|
/*Struct that holds the inputs for thread handling FillSegment*/
|
||||||
|
typedef struct Argon2_thread_data {
|
||||||
|
argon2_instance_t *instance_ptr;
|
||||||
|
argon2_position_t pos;
|
||||||
|
} argon2_thread_data;
|
||||||
|
|
||||||
|
/*************************Argon2 core functions********************************/
|
||||||
|
|
||||||
|
/* Allocates memory to the given pointer, uses the appropriate allocator as
|
||||||
|
* specified in the context. Total allocated memory is num*size.
|
||||||
|
* @param context argon2_context which specifies the allocator
|
||||||
|
* @param instance the Argon2 instance
|
||||||
|
* @return ARGON2_OK if memory is allocated successfully
|
||||||
|
*/
|
||||||
|
int allocate_memory(const argon2_context *context,
|
||||||
|
argon2_instance_t *instance);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Frees memory at the given pointer, uses the appropriate deallocator as
|
||||||
|
* specified in the context. Also cleans the memory using clear_internal_memory.
|
||||||
|
* @param context argon2_context which specifies the deallocator
|
||||||
|
* @param instance the Argon2 instance
|
||||||
|
*/
|
||||||
|
void free_memory(const argon2_context *context,
|
||||||
|
const argon2_instance_t *instance);
|
||||||
|
|
||||||
|
/* Function that securely cleans the memory. This ignores any flags set
|
||||||
|
* regarding clearing memory. Usually one just calls clear_internal_memory.
|
||||||
|
* @param mem Pointer to the memory
|
||||||
|
* @param s Memory size in bytes
|
||||||
|
*/
|
||||||
|
void secure_wipe_memory(void *v, size_t n);
|
||||||
|
|
||||||
|
/* Function that securely clears the memory if FLAG_clear_internal_memory is
|
||||||
|
* set. If the flag isn't set, this function does nothing.
|
||||||
|
* @param mem Pointer to the memory
|
||||||
|
* @param s Memory size in bytes
|
||||||
|
*/
|
||||||
|
ARGON2_PUBLIC void clear_internal_memory(void *v, size_t n);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Computes absolute position of reference block in the lane following a skewed
|
||||||
|
* distribution and using a pseudo-random value as input
|
||||||
|
* @param instance Pointer to the current instance
|
||||||
|
* @param position Pointer to the current position
|
||||||
|
* @param pseudo_rand 32-bit pseudo-random value used to determine the position
|
||||||
|
* @param same_lane Indicates if the block will be taken from the current lane.
|
||||||
|
* If so we can reference the current segment
|
||||||
|
* @pre All pointers must be valid
|
||||||
|
*/
|
||||||
|
uint32_t index_alpha(const argon2_instance_t *instance,
|
||||||
|
const argon2_position_t *position, uint32_t pseudo_rand,
|
||||||
|
int same_lane);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Function that validates all inputs against predefined restrictions and return
|
||||||
|
* an error code
|
||||||
|
* @param context Pointer to current Argon2 context
|
||||||
|
* @return ARGON2_OK if everything is all right, otherwise one of error codes
|
||||||
|
* (all defined in <argon2.h>
|
||||||
|
*/
|
||||||
|
int validate_inputs(const argon2_context *context);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Hashes all the inputs into @a blockhash[PREHASH_DIGEST_LENGTH], clears
|
||||||
|
* password and secret if needed
|
||||||
|
* @param context Pointer to the Argon2 internal structure containing memory
|
||||||
|
* pointer, and parameters for time and space requirements.
|
||||||
|
* @param blockhash Buffer for pre-hashing digest
|
||||||
|
* @param type Argon2 type
|
||||||
|
* @pre @a blockhash must have at least @a PREHASH_DIGEST_LENGTH bytes
|
||||||
|
* allocated
|
||||||
|
*/
|
||||||
|
void initial_hash(uint8_t *blockhash, argon2_context *context,
|
||||||
|
argon2_type type);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Function creates first 2 blocks per lane
|
||||||
|
* @param instance Pointer to the current instance
|
||||||
|
* @param blockhash Pointer to the pre-hashing digest
|
||||||
|
* @pre blockhash must point to @a PREHASH_SEED_LENGTH allocated values
|
||||||
|
*/
|
||||||
|
void fill_first_blocks(uint8_t *blockhash, const argon2_instance_t *instance);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Function allocates memory, hashes the inputs with Blake, and creates first
|
||||||
|
* two blocks. Returns the pointer to the main memory with 2 blocks per lane
|
||||||
|
* initialized
|
||||||
|
* @param context Pointer to the Argon2 internal structure containing memory
|
||||||
|
* pointer, and parameters for time and space requirements.
|
||||||
|
* @param instance Current Argon2 instance
|
||||||
|
* @return Zero if successful, -1 if memory failed to allocate. @context->state
|
||||||
|
* will be modified if successful.
|
||||||
|
*/
|
||||||
|
int initialize(argon2_instance_t *instance, argon2_context *context);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* XORing the last block of each lane, hashing it, making the tag. Deallocates
|
||||||
|
* the memory.
|
||||||
|
* @param context Pointer to current Argon2 context (use only the out parameters
|
||||||
|
* from it)
|
||||||
|
* @param instance Pointer to current instance of Argon2
|
||||||
|
* @pre instance->state must point to necessary amount of memory
|
||||||
|
* @pre context->out must point to outlen bytes of memory
|
||||||
|
* @pre if context->free_cbk is not NULL, it should point to a function that
|
||||||
|
* deallocates memory
|
||||||
|
*/
|
||||||
|
void finalize(const argon2_context *context, argon2_instance_t *instance);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Function that fills the segment using previous segments also from other
|
||||||
|
* threads
|
||||||
|
* @param instance Pointer to the current instance
|
||||||
|
* @param position Current position
|
||||||
|
* @pre all block pointers must be valid
|
||||||
|
*/
|
||||||
|
void fill_segment(const argon2_instance_t *instance,
|
||||||
|
argon2_position_t position);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Function that fills the entire memory t_cost times based on the first two
|
||||||
|
* blocks in each lane
|
||||||
|
* @param instance Pointer to the current instance
|
||||||
|
* @return ARGON2_OK if successful, @context->state
|
||||||
|
*/
|
||||||
|
int fill_memory_blocks(argon2_instance_t *instance);
|
||||||
|
|
||||||
|
#endif
|
||||||
432
src/3rdparty/argon2/lib/encoding.c
vendored
Normal file
432
src/3rdparty/argon2/lib/encoding.c
vendored
Normal file
@@ -0,0 +1,432 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#include "encoding.h"
|
||||||
|
#include "core.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Example code for a decoder and encoder of "hash strings", with Argon2
|
||||||
|
* parameters.
|
||||||
|
*
|
||||||
|
* This code comprises three sections:
|
||||||
|
*
|
||||||
|
* -- The first section contains generic Base64 encoding and decoding
|
||||||
|
* functions. It is conceptually applicable to any hash function
|
||||||
|
* implementation that uses Base64 to encode and decode parameters,
|
||||||
|
* salts and outputs. It could be made into a library, provided that
|
||||||
|
* the relevant functions are made public (non-static) and be given
|
||||||
|
* reasonable names to avoid collisions with other functions.
|
||||||
|
*
|
||||||
|
* -- The second section is specific to Argon2. It encodes and decodes
|
||||||
|
* the parameters, salts and outputs. It does not compute the hash
|
||||||
|
* itself.
|
||||||
|
*
|
||||||
|
* The code was originally written by Thomas Pornin <pornin@bolet.org>,
|
||||||
|
* to whom comments and remarks may be sent. It is released under what
|
||||||
|
* should amount to Public Domain or its closest equivalent; the
|
||||||
|
* following mantra is supposed to incarnate that fact with all the
|
||||||
|
* proper legal rituals:
|
||||||
|
*
|
||||||
|
* ---------------------------------------------------------------------
|
||||||
|
* This file is provided under the terms of Creative Commons CC0 1.0
|
||||||
|
* Public Domain Dedication. To the extent possible under law, the
|
||||||
|
* author (Thomas Pornin) has waived all copyright and related or
|
||||||
|
* neighboring rights to this file. This work is published from: Canada.
|
||||||
|
* ---------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* Copyright (c) 2015 Thomas Pornin
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* ==================================================================== */
|
||||||
|
/*
|
||||||
|
* Common code; could be shared between different hash functions.
|
||||||
|
*
|
||||||
|
* Note: the Base64 functions below assume that uppercase letters (resp.
|
||||||
|
* lowercase letters) have consecutive numerical codes, that fit on 8
|
||||||
|
* bits. All modern systems use ASCII-compatible charsets, where these
|
||||||
|
* properties are true. If you are stuck with a dinosaur of a system
|
||||||
|
* that still defaults to EBCDIC then you already have much bigger
|
||||||
|
* interoperability issues to deal with.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Some macros for constant-time comparisons. These work over values in
|
||||||
|
* the 0..255 range. Returned value is 0x00 on "false", 0xFF on "true".
|
||||||
|
*/
|
||||||
|
#define EQ(x, y) ((((0U - ((unsigned)(x) ^ (unsigned)(y))) >> 8) & 0xFF) ^ 0xFF)
|
||||||
|
#define GT(x, y) ((((unsigned)(y) - (unsigned)(x)) >> 8) & 0xFF)
|
||||||
|
#define GE(x, y) (GT(y, x) ^ 0xFF)
|
||||||
|
#define LT(x, y) GT(y, x)
|
||||||
|
#define LE(x, y) GE(y, x)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Convert value x (0..63) to corresponding Base64 character.
|
||||||
|
*/
|
||||||
|
static int b64_byte_to_char(unsigned x) {
|
||||||
|
return (LT(x, 26) & (x + 'A')) |
|
||||||
|
(GE(x, 26) & LT(x, 52) & (x + ('a' - 26))) |
|
||||||
|
(GE(x, 52) & LT(x, 62) & (x + ('0' - 52))) | (EQ(x, 62) & '+') |
|
||||||
|
(EQ(x, 63) & '/');
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Convert character c to the corresponding 6-bit value. If character c
|
||||||
|
* is not a Base64 character, then 0xFF (255) is returned.
|
||||||
|
*/
|
||||||
|
static unsigned b64_char_to_byte(int c) {
|
||||||
|
unsigned x;
|
||||||
|
|
||||||
|
x = (GE(c, 'A') & LE(c, 'Z') & (c - 'A')) |
|
||||||
|
(GE(c, 'a') & LE(c, 'z') & (c - ('a' - 26))) |
|
||||||
|
(GE(c, '0') & LE(c, '9') & (c - ('0' - 52))) | (EQ(c, '+') & 62) |
|
||||||
|
(EQ(c, '/') & 63);
|
||||||
|
return x | (EQ(x, 0) & (EQ(c, 'A') ^ 0xFF));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Convert some bytes to Base64. 'dst_len' is the length (in characters)
|
||||||
|
* of the output buffer 'dst'; if that buffer is not large enough to
|
||||||
|
* receive the result (including the terminating 0), then (size_t)-1
|
||||||
|
* is returned. Otherwise, the zero-terminated Base64 string is written
|
||||||
|
* in the buffer, and the output length (counted WITHOUT the terminating
|
||||||
|
* zero) is returned.
|
||||||
|
*/
|
||||||
|
static size_t to_base64(char *dst, size_t dst_len, const void *src,
|
||||||
|
size_t src_len) {
|
||||||
|
size_t olen;
|
||||||
|
const unsigned char *buf;
|
||||||
|
unsigned acc, acc_len;
|
||||||
|
|
||||||
|
olen = (src_len / 3) << 2;
|
||||||
|
switch (src_len % 3) {
|
||||||
|
case 2:
|
||||||
|
olen++;
|
||||||
|
/* fall through */
|
||||||
|
case 1:
|
||||||
|
olen += 2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (dst_len <= olen) {
|
||||||
|
return (size_t)-1;
|
||||||
|
}
|
||||||
|
acc = 0;
|
||||||
|
acc_len = 0;
|
||||||
|
buf = (const unsigned char *)src;
|
||||||
|
while (src_len-- > 0) {
|
||||||
|
acc = (acc << 8) + (*buf++);
|
||||||
|
acc_len += 8;
|
||||||
|
while (acc_len >= 6) {
|
||||||
|
acc_len -= 6;
|
||||||
|
*dst++ = (char)b64_byte_to_char((acc >> acc_len) & 0x3F);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (acc_len > 0) {
|
||||||
|
*dst++ = (char)b64_byte_to_char((acc << (6 - acc_len)) & 0x3F);
|
||||||
|
}
|
||||||
|
*dst++ = 0;
|
||||||
|
return olen;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Decode Base64 chars into bytes. The '*dst_len' value must initially
|
||||||
|
* contain the length of the output buffer '*dst'; when the decoding
|
||||||
|
* ends, the actual number of decoded bytes is written back in
|
||||||
|
* '*dst_len'.
|
||||||
|
*
|
||||||
|
* Decoding stops when a non-Base64 character is encountered, or when
|
||||||
|
* the output buffer capacity is exceeded. If an error occurred (output
|
||||||
|
* buffer is too small, invalid last characters leading to unprocessed
|
||||||
|
* buffered bits), then NULL is returned; otherwise, the returned value
|
||||||
|
* points to the first non-Base64 character in the source stream, which
|
||||||
|
* may be the terminating zero.
|
||||||
|
*/
|
||||||
|
static const char *from_base64(void *dst, size_t *dst_len, const char *src) {
|
||||||
|
size_t len;
|
||||||
|
unsigned char *buf;
|
||||||
|
unsigned acc, acc_len;
|
||||||
|
|
||||||
|
buf = (unsigned char *)dst;
|
||||||
|
len = 0;
|
||||||
|
acc = 0;
|
||||||
|
acc_len = 0;
|
||||||
|
for (;;) {
|
||||||
|
unsigned d;
|
||||||
|
|
||||||
|
d = b64_char_to_byte(*src);
|
||||||
|
if (d == 0xFF) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
src++;
|
||||||
|
acc = (acc << 6) + d;
|
||||||
|
acc_len += 6;
|
||||||
|
if (acc_len >= 8) {
|
||||||
|
acc_len -= 8;
|
||||||
|
if ((len++) >= *dst_len) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
*buf++ = (acc >> acc_len) & 0xFF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the input length is equal to 1 modulo 4 (which is
|
||||||
|
* invalid), then there will remain 6 unprocessed bits;
|
||||||
|
* otherwise, only 0, 2 or 4 bits are buffered. The buffered
|
||||||
|
* bits must also all be zero.
|
||||||
|
*/
|
||||||
|
if (acc_len > 4 || (acc & (((unsigned)1 << acc_len) - 1)) != 0) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
*dst_len = len;
|
||||||
|
return src;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Decode decimal integer from 'str'; the value is written in '*v'.
|
||||||
|
* Returned value is a pointer to the next non-decimal character in the
|
||||||
|
* string. If there is no digit at all, or the value encoding is not
|
||||||
|
* minimal (extra leading zeros), or the value does not fit in an
|
||||||
|
* 'unsigned long', then NULL is returned.
|
||||||
|
*/
|
||||||
|
static const char *decode_decimal(const char *str, unsigned long *v) {
|
||||||
|
const char *orig;
|
||||||
|
unsigned long acc;
|
||||||
|
|
||||||
|
acc = 0;
|
||||||
|
for (orig = str;; str++) {
|
||||||
|
int c;
|
||||||
|
|
||||||
|
c = *str;
|
||||||
|
if (c < '0' || c > '9') {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
c -= '0';
|
||||||
|
if (acc > (ULONG_MAX / 10)) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
acc *= 10;
|
||||||
|
if ((unsigned long)c > (ULONG_MAX - acc)) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
acc += (unsigned long)c;
|
||||||
|
}
|
||||||
|
if (str == orig || (*orig == '0' && str != (orig + 1))) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
*v = acc;
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ==================================================================== */
|
||||||
|
/*
|
||||||
|
* Code specific to Argon2.
|
||||||
|
*
|
||||||
|
* The code below applies the following format:
|
||||||
|
*
|
||||||
|
* $argon2<T>[$v=<num>]$m=<num>,t=<num>,p=<num>$<bin>$<bin>
|
||||||
|
*
|
||||||
|
* where <T> is either 'd', 'id', or 'i', <num> is a decimal integer (positive,
|
||||||
|
* fits in an 'unsigned long'), and <bin> is Base64-encoded data (no '=' padding
|
||||||
|
* characters, no newline or whitespace).
|
||||||
|
*
|
||||||
|
* The last two binary chunks (encoded in Base64) are, in that order,
|
||||||
|
* the salt and the output. Both are required. The binary salt length and the
|
||||||
|
* output length must be in the allowed ranges defined in argon2.h.
|
||||||
|
*
|
||||||
|
* The ctx struct must contain buffers large enough to hold the salt and pwd
|
||||||
|
* when it is fed into decode_string.
|
||||||
|
*/
|
||||||
|
|
||||||
|
int decode_string(argon2_context *ctx, const char *str, argon2_type type) {
|
||||||
|
|
||||||
|
/* check for prefix */
|
||||||
|
#define CC(prefix) \
|
||||||
|
do { \
|
||||||
|
size_t cc_len = strlen(prefix); \
|
||||||
|
if (strncmp(str, prefix, cc_len) != 0) { \
|
||||||
|
return ARGON2_DECODING_FAIL; \
|
||||||
|
} \
|
||||||
|
str += cc_len; \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
/* optional prefix checking with supplied code */
|
||||||
|
#define CC_opt(prefix, code) \
|
||||||
|
do { \
|
||||||
|
size_t cc_len = strlen(prefix); \
|
||||||
|
if (strncmp(str, prefix, cc_len) == 0) { \
|
||||||
|
str += cc_len; \
|
||||||
|
{ code; } \
|
||||||
|
} \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
/* Decoding prefix into uint32_t decimal */
|
||||||
|
#define DECIMAL_U32(x) \
|
||||||
|
do { \
|
||||||
|
unsigned long dec_x; \
|
||||||
|
str = decode_decimal(str, &dec_x); \
|
||||||
|
if (str == NULL || dec_x > UINT32_MAX) { \
|
||||||
|
return ARGON2_DECODING_FAIL; \
|
||||||
|
} \
|
||||||
|
(x) = (uint32_t)dec_x; \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
/* Decoding base64 into a binary buffer */
|
||||||
|
#define BIN(buf, max_len, len) \
|
||||||
|
do { \
|
||||||
|
size_t bin_len = (max_len); \
|
||||||
|
str = from_base64(buf, &bin_len, str); \
|
||||||
|
if (str == NULL || bin_len > UINT32_MAX) { \
|
||||||
|
return ARGON2_DECODING_FAIL; \
|
||||||
|
} \
|
||||||
|
(len) = (uint32_t)bin_len; \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
size_t maxsaltlen = ctx->saltlen;
|
||||||
|
size_t maxoutlen = ctx->outlen;
|
||||||
|
int validation_result;
|
||||||
|
const char* type_string;
|
||||||
|
|
||||||
|
/* We should start with the argon2_type we are using */
|
||||||
|
type_string = argon2_type2string(type, 0);
|
||||||
|
if (!type_string) {
|
||||||
|
return ARGON2_INCORRECT_TYPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
CC("$");
|
||||||
|
CC(type_string);
|
||||||
|
|
||||||
|
/* Reading the version number if the default is suppressed */
|
||||||
|
ctx->version = ARGON2_VERSION_10;
|
||||||
|
CC_opt("$v=", DECIMAL_U32(ctx->version));
|
||||||
|
|
||||||
|
CC("$m=");
|
||||||
|
DECIMAL_U32(ctx->m_cost);
|
||||||
|
CC(",t=");
|
||||||
|
DECIMAL_U32(ctx->t_cost);
|
||||||
|
CC(",p=");
|
||||||
|
DECIMAL_U32(ctx->lanes);
|
||||||
|
ctx->threads = ctx->lanes;
|
||||||
|
|
||||||
|
CC("$");
|
||||||
|
BIN(ctx->salt, maxsaltlen, ctx->saltlen);
|
||||||
|
CC("$");
|
||||||
|
BIN(ctx->out, maxoutlen, ctx->outlen);
|
||||||
|
|
||||||
|
/* The rest of the fields get the default values */
|
||||||
|
ctx->secret = NULL;
|
||||||
|
ctx->secretlen = 0;
|
||||||
|
ctx->ad = NULL;
|
||||||
|
ctx->adlen = 0;
|
||||||
|
ctx->allocate_cbk = NULL;
|
||||||
|
ctx->free_cbk = NULL;
|
||||||
|
ctx->flags = ARGON2_DEFAULT_FLAGS;
|
||||||
|
|
||||||
|
/* On return, must have valid context */
|
||||||
|
validation_result = validate_inputs(ctx);
|
||||||
|
if (validation_result != ARGON2_OK) {
|
||||||
|
return validation_result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Can't have any additional characters */
|
||||||
|
if (*str == 0) {
|
||||||
|
return ARGON2_OK;
|
||||||
|
} else {
|
||||||
|
return ARGON2_DECODING_FAIL;
|
||||||
|
}
|
||||||
|
#undef CC
|
||||||
|
#undef CC_opt
|
||||||
|
#undef DECIMAL_U32
|
||||||
|
#undef BIN
|
||||||
|
}
|
||||||
|
|
||||||
|
int encode_string(char *dst, size_t dst_len, argon2_context *ctx,
|
||||||
|
argon2_type type) {
|
||||||
|
#define SS(str) \
|
||||||
|
do { \
|
||||||
|
size_t pp_len = strlen(str); \
|
||||||
|
if (pp_len >= dst_len) { \
|
||||||
|
return ARGON2_ENCODING_FAIL; \
|
||||||
|
} \
|
||||||
|
memcpy(dst, str, pp_len + 1); \
|
||||||
|
dst += pp_len; \
|
||||||
|
dst_len -= pp_len; \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
#define SX(x) \
|
||||||
|
do { \
|
||||||
|
char tmp[30]; \
|
||||||
|
sprintf(tmp, "%lu", (unsigned long)(x)); \
|
||||||
|
SS(tmp); \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
#define SB(buf, len) \
|
||||||
|
do { \
|
||||||
|
size_t sb_len = to_base64(dst, dst_len, buf, len); \
|
||||||
|
if (sb_len == (size_t)-1) { \
|
||||||
|
return ARGON2_ENCODING_FAIL; \
|
||||||
|
} \
|
||||||
|
dst += sb_len; \
|
||||||
|
dst_len -= sb_len; \
|
||||||
|
} while ((void)0, 0)
|
||||||
|
|
||||||
|
const char* type_string = argon2_type2string(type, 0);
|
||||||
|
int validation_result = validate_inputs(ctx);
|
||||||
|
|
||||||
|
if (!type_string) {
|
||||||
|
return ARGON2_ENCODING_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (validation_result != ARGON2_OK) {
|
||||||
|
return validation_result;
|
||||||
|
}
|
||||||
|
|
||||||
|
SS("$");
|
||||||
|
SS(type_string);
|
||||||
|
|
||||||
|
SS("$v=");
|
||||||
|
SX(ctx->version);
|
||||||
|
|
||||||
|
SS("$m=");
|
||||||
|
SX(ctx->m_cost);
|
||||||
|
SS(",t=");
|
||||||
|
SX(ctx->t_cost);
|
||||||
|
SS(",p=");
|
||||||
|
SX(ctx->lanes);
|
||||||
|
|
||||||
|
SS("$");
|
||||||
|
SB(ctx->salt, ctx->saltlen);
|
||||||
|
|
||||||
|
SS("$");
|
||||||
|
SB(ctx->out, ctx->outlen);
|
||||||
|
return ARGON2_OK;
|
||||||
|
|
||||||
|
#undef SS
|
||||||
|
#undef SX
|
||||||
|
#undef SB
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t b64len(uint32_t len) {
|
||||||
|
size_t olen = ((size_t)len / 3) << 2;
|
||||||
|
|
||||||
|
switch (len % 3) {
|
||||||
|
case 2:
|
||||||
|
olen++;
|
||||||
|
/* fall through */
|
||||||
|
case 1:
|
||||||
|
olen += 2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return olen;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t numlen(uint32_t num) {
|
||||||
|
size_t len = 1;
|
||||||
|
while (num >= 10) {
|
||||||
|
++len;
|
||||||
|
num = num / 10;
|
||||||
|
}
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
40
src/3rdparty/argon2/lib/encoding.h
vendored
Normal file
40
src/3rdparty/argon2/lib/encoding.h
vendored
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
#ifndef ENCODING_H
|
||||||
|
#define ENCODING_H
|
||||||
|
#include "argon2.h"
|
||||||
|
|
||||||
|
#define ARGON2_MAX_DECODED_LANES UINT32_C(255)
|
||||||
|
#define ARGON2_MIN_DECODED_SALT_LEN UINT32_C(8)
|
||||||
|
#define ARGON2_MIN_DECODED_OUT_LEN UINT32_C(12)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* encode an Argon2 hash string into the provided buffer. 'dst_len'
|
||||||
|
* contains the size, in characters, of the 'dst' buffer; if 'dst_len'
|
||||||
|
* is less than the number of required characters (including the
|
||||||
|
* terminating 0), then this function returns ARGON2_ENCODING_ERROR.
|
||||||
|
*
|
||||||
|
* on success, ARGON2_OK is returned.
|
||||||
|
*/
|
||||||
|
int encode_string(char *dst, size_t dst_len, argon2_context *ctx,
|
||||||
|
argon2_type type);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Decodes an Argon2 hash string into the provided structure 'ctx'.
|
||||||
|
* The only fields that must be set prior to this call are ctx.saltlen and
|
||||||
|
* ctx.outlen (which must be the maximal salt and out length values that are
|
||||||
|
* allowed), ctx.salt and ctx.out (which must be buffers of the specified
|
||||||
|
* length), and ctx.pwd and ctx.pwdlen which must hold a valid password.
|
||||||
|
*
|
||||||
|
* Invalid input string causes an error. On success, the ctx is valid and all
|
||||||
|
* fields have been initialized.
|
||||||
|
*
|
||||||
|
* Returned value is ARGON2_OK on success, other ARGON2_ codes on error.
|
||||||
|
*/
|
||||||
|
int decode_string(argon2_context *ctx, const char *str, argon2_type type);
|
||||||
|
|
||||||
|
/* Returns the length of the encoded byte stream with length len */
|
||||||
|
size_t b64len(uint32_t len);
|
||||||
|
|
||||||
|
/* Returns the length of the encoded number num */
|
||||||
|
size_t numlen(uint32_t num);
|
||||||
|
|
||||||
|
#endif
|
||||||
117
src/3rdparty/argon2/lib/genkat.c
vendored
Normal file
117
src/3rdparty/argon2/lib/genkat.c
vendored
Normal file
@@ -0,0 +1,117 @@
|
|||||||
|
/*
|
||||||
|
* Argon2 source code package
|
||||||
|
*
|
||||||
|
* Written by Daniel Dinu and Dmitry Khovratovich, 2015
|
||||||
|
*
|
||||||
|
* This work is licensed under a Creative Commons CC0 1.0 License/Waiver.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the CC0 Public Domain Dedication along
|
||||||
|
* with
|
||||||
|
* this software. If not, see
|
||||||
|
* <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "genkat.h"
|
||||||
|
|
||||||
|
void initial_kat(const uint8_t *blockhash, const argon2_context *context,
|
||||||
|
argon2_type type) {
|
||||||
|
unsigned i;
|
||||||
|
|
||||||
|
if (blockhash != NULL && context != NULL) {
|
||||||
|
printf("=======================================\n");
|
||||||
|
|
||||||
|
printf("%s version number %d\n", argon2_type2string(type, 1),
|
||||||
|
context->version);
|
||||||
|
|
||||||
|
printf("=======================================\n");
|
||||||
|
|
||||||
|
|
||||||
|
printf("Memory: %u KiB, Iterations: %u, Parallelism: %u lanes, Tag "
|
||||||
|
"length: %u bytes\n",
|
||||||
|
context->m_cost, context->t_cost, context->lanes,
|
||||||
|
context->outlen);
|
||||||
|
|
||||||
|
printf("Password[%u]: ", context->pwdlen);
|
||||||
|
|
||||||
|
if (context->flags & ARGON2_FLAG_CLEAR_PASSWORD) {
|
||||||
|
printf("CLEARED\n");
|
||||||
|
} else {
|
||||||
|
for (i = 0; i < context->pwdlen; ++i) {
|
||||||
|
printf("%2.2x ", ((unsigned char *)context->pwd)[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("Salt[%u]: ", context->saltlen);
|
||||||
|
|
||||||
|
for (i = 0; i < context->saltlen; ++i) {
|
||||||
|
printf("%2.2x ", ((unsigned char *)context->salt)[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
printf("Secret[%u]: ", context->secretlen);
|
||||||
|
|
||||||
|
if (context->flags & ARGON2_FLAG_CLEAR_SECRET) {
|
||||||
|
printf("CLEARED\n");
|
||||||
|
} else {
|
||||||
|
for (i = 0; i < context->secretlen; ++i) {
|
||||||
|
printf("%2.2x ", ((unsigned char *)context->secret)[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("Associated data[%u]: ", context->adlen);
|
||||||
|
|
||||||
|
for (i = 0; i < context->adlen; ++i) {
|
||||||
|
printf("%2.2x ", ((unsigned char *)context->ad)[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
printf("Pre-hashing digest: ");
|
||||||
|
|
||||||
|
for (i = 0; i < ARGON2_PREHASH_DIGEST_LENGTH; ++i) {
|
||||||
|
printf("%2.2x ", ((unsigned char *)blockhash)[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void print_tag(const void *out, uint32_t outlen) {
|
||||||
|
unsigned i;
|
||||||
|
if (out != NULL) {
|
||||||
|
printf("Tag: ");
|
||||||
|
|
||||||
|
for (i = 0; i < outlen; ++i) {
|
||||||
|
printf("%2.2x ", ((uint8_t *)out)[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void internal_kat(const argon2_instance_t *instance, uint32_t pass) {
|
||||||
|
|
||||||
|
if (instance != NULL) {
|
||||||
|
uint32_t i, j;
|
||||||
|
printf("\n After pass %u:\n", pass);
|
||||||
|
|
||||||
|
for (i = 0; i < instance->memory_blocks; ++i) {
|
||||||
|
uint32_t how_many_words =
|
||||||
|
(instance->memory_blocks > ARGON2_QWORDS_IN_BLOCK)
|
||||||
|
? 1
|
||||||
|
: ARGON2_QWORDS_IN_BLOCK;
|
||||||
|
|
||||||
|
for (j = 0; j < how_many_words; ++j)
|
||||||
|
printf("Block %.4u [%3u]: %016" PRIx64 "\n", i, j,
|
||||||
|
instance->memory[i].v[j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
47
src/3rdparty/argon2/lib/genkat.h
vendored
Normal file
47
src/3rdparty/argon2/lib/genkat.h
vendored
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
/*
|
||||||
|
* Argon2 source code package
|
||||||
|
*
|
||||||
|
* Written by Daniel Dinu and Dmitry Khovratovich, 2015
|
||||||
|
*
|
||||||
|
* This work is licensed under a Creative Commons CC0 1.0 License/Waiver.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the CC0 Public Domain Dedication along
|
||||||
|
* with
|
||||||
|
* this software. If not, see
|
||||||
|
* <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef ARGON2_KAT_H
|
||||||
|
#define ARGON2_KAT_H
|
||||||
|
|
||||||
|
#include "core.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initial KAT function that prints the inputs to the file
|
||||||
|
* @param blockhash Array that contains pre-hashing digest
|
||||||
|
* @param context Holds inputs
|
||||||
|
* @param type Argon2 type
|
||||||
|
* @pre blockhash must point to INPUT_INITIAL_HASH_LENGTH bytes
|
||||||
|
* @pre context member pointers must point to allocated memory of size according
|
||||||
|
* to the length values
|
||||||
|
*/
|
||||||
|
void initial_kat(const uint8_t *blockhash, const argon2_context *context,
|
||||||
|
argon2_type type);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Function that prints the output tag
|
||||||
|
* @param out output array pointer
|
||||||
|
* @param outlen digest length
|
||||||
|
* @pre out must point to @a outlen bytes
|
||||||
|
**/
|
||||||
|
void print_tag(const void *out, uint32_t outlen);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Function that prints the internal state at given moment
|
||||||
|
* @param instance pointer to the current instance
|
||||||
|
* @param pass current pass number
|
||||||
|
* @pre instance must have necessary memory allocated
|
||||||
|
**/
|
||||||
|
void internal_kat(const argon2_instance_t *instance, uint32_t pass);
|
||||||
|
|
||||||
|
#endif
|
||||||
115
src/3rdparty/argon2/lib/impl-select.c
vendored
Normal file
115
src/3rdparty/argon2/lib/impl-select.c
vendored
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
#include <time.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "impl-select.h"
|
||||||
|
|
||||||
|
#include "argon2.h"
|
||||||
|
|
||||||
|
#define BENCH_SAMPLES 1024
|
||||||
|
#define BENCH_MEM_BLOCKS 512
|
||||||
|
|
||||||
|
static argon2_impl selected_argon_impl = {
|
||||||
|
"default", NULL, fill_segment_default
|
||||||
|
};
|
||||||
|
|
||||||
|
/* the benchmark routine is not thread-safe, so we can use a global var here: */
|
||||||
|
static block memory[BENCH_MEM_BLOCKS];
|
||||||
|
|
||||||
|
static uint64_t benchmark_impl(const argon2_impl *impl) {
|
||||||
|
clock_t time;
|
||||||
|
unsigned int i;
|
||||||
|
uint64_t bench;
|
||||||
|
argon2_instance_t instance;
|
||||||
|
argon2_position_t pos;
|
||||||
|
|
||||||
|
memset(memory, 0, sizeof(memory));
|
||||||
|
|
||||||
|
instance.version = ARGON2_VERSION_NUMBER;
|
||||||
|
instance.memory = memory;
|
||||||
|
instance.passes = 1;
|
||||||
|
instance.memory_blocks = BENCH_MEM_BLOCKS;
|
||||||
|
instance.segment_length = BENCH_MEM_BLOCKS / ARGON2_SYNC_POINTS;
|
||||||
|
instance.lane_length = instance.segment_length * ARGON2_SYNC_POINTS;
|
||||||
|
instance.lanes = 1;
|
||||||
|
instance.threads = 1;
|
||||||
|
instance.type = Argon2_i;
|
||||||
|
|
||||||
|
pos.lane = 0;
|
||||||
|
pos.pass = 0;
|
||||||
|
pos.slice = 0;
|
||||||
|
pos.index = 0;
|
||||||
|
|
||||||
|
/* warm-up cache: */
|
||||||
|
impl->fill_segment(&instance, pos);
|
||||||
|
|
||||||
|
/* OK, now measure: */
|
||||||
|
bench = 0;
|
||||||
|
time = clock();
|
||||||
|
for (i = 0; i < BENCH_SAMPLES; i++) {
|
||||||
|
impl->fill_segment(&instance, pos);
|
||||||
|
}
|
||||||
|
time = clock() - time;
|
||||||
|
bench = (uint64_t)time;
|
||||||
|
return bench;
|
||||||
|
}
|
||||||
|
|
||||||
|
void argon2_select_impl()
|
||||||
|
{
|
||||||
|
argon2_impl_list impls;
|
||||||
|
unsigned int i;
|
||||||
|
const argon2_impl *best_impl = NULL;
|
||||||
|
uint64_t best_bench = UINT_MAX;
|
||||||
|
|
||||||
|
argon2_get_impl_list(&impls);
|
||||||
|
|
||||||
|
for (i = 0; i < impls.count; i++) {
|
||||||
|
const argon2_impl *impl = &impls.entries[i];
|
||||||
|
uint64_t bench;
|
||||||
|
|
||||||
|
if (impl->check != NULL && !impl->check()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
bench = benchmark_impl(impl);
|
||||||
|
|
||||||
|
if (bench < best_bench) {
|
||||||
|
best_bench = bench;
|
||||||
|
best_impl = impl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (best_impl != NULL) {
|
||||||
|
selected_argon_impl = *best_impl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void fill_segment(const argon2_instance_t *instance, argon2_position_t position)
|
||||||
|
{
|
||||||
|
selected_argon_impl.fill_segment(instance, position);
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *argon2_get_impl_name()
|
||||||
|
{
|
||||||
|
return selected_argon_impl.name;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int argon2_select_impl_by_name(const char *name)
|
||||||
|
{
|
||||||
|
argon2_impl_list impls;
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
argon2_get_impl_list(&impls);
|
||||||
|
|
||||||
|
for (i = 0; i < impls.count; i++) {
|
||||||
|
const argon2_impl *impl = &impls.entries[i];
|
||||||
|
|
||||||
|
if (strcmp(impl->name, name) == 0) {
|
||||||
|
selected_argon_impl = *impl;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
23
src/3rdparty/argon2/lib/impl-select.h
vendored
Normal file
23
src/3rdparty/argon2/lib/impl-select.h
vendored
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
#ifndef ARGON2_IMPL_SELECT_H
|
||||||
|
#define ARGON2_IMPL_SELECT_H
|
||||||
|
|
||||||
|
#include "core.h"
|
||||||
|
|
||||||
|
typedef struct Argon2_impl {
|
||||||
|
const char *name;
|
||||||
|
int (*check)(void);
|
||||||
|
void (*fill_segment)(const argon2_instance_t *instance,
|
||||||
|
argon2_position_t position);
|
||||||
|
} argon2_impl;
|
||||||
|
|
||||||
|
typedef struct Argon2_impl_list {
|
||||||
|
const argon2_impl *entries;
|
||||||
|
size_t count;
|
||||||
|
} argon2_impl_list;
|
||||||
|
|
||||||
|
void argon2_get_impl_list(argon2_impl_list *list);
|
||||||
|
void fill_segment_default(const argon2_instance_t *instance,
|
||||||
|
argon2_position_t position);
|
||||||
|
|
||||||
|
#endif // ARGON2_IMPL_SELECT_H
|
||||||
|
|
||||||
17
src/3rdparty/rapidjson/allocators.h
vendored
17
src/3rdparty/rapidjson/allocators.h
vendored
@@ -52,6 +52,19 @@ concept Allocator {
|
|||||||
\endcode
|
\endcode
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*! \def RAPIDJSON_ALLOCATOR_DEFAULT_CHUNK_CAPACITY
|
||||||
|
\ingroup RAPIDJSON_CONFIG
|
||||||
|
\brief User-defined kDefaultChunkCapacity definition.
|
||||||
|
|
||||||
|
User can define this as any \c size that is a power of 2.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef RAPIDJSON_ALLOCATOR_DEFAULT_CHUNK_CAPACITY
|
||||||
|
#define RAPIDJSON_ALLOCATOR_DEFAULT_CHUNK_CAPACITY (64 * 1024)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// CrtAllocator
|
// CrtAllocator
|
||||||
|
|
||||||
@@ -236,7 +249,7 @@ private:
|
|||||||
*/
|
*/
|
||||||
bool AddChunk(size_t capacity) {
|
bool AddChunk(size_t capacity) {
|
||||||
if (!baseAllocator_)
|
if (!baseAllocator_)
|
||||||
ownBaseAllocator_ = baseAllocator_ = RAPIDJSON_NEW(BaseAllocator());
|
ownBaseAllocator_ = baseAllocator_ = RAPIDJSON_NEW(BaseAllocator)();
|
||||||
if (ChunkHeader* chunk = reinterpret_cast<ChunkHeader*>(baseAllocator_->Malloc(RAPIDJSON_ALIGN(sizeof(ChunkHeader)) + capacity))) {
|
if (ChunkHeader* chunk = reinterpret_cast<ChunkHeader*>(baseAllocator_->Malloc(RAPIDJSON_ALIGN(sizeof(ChunkHeader)) + capacity))) {
|
||||||
chunk->capacity = capacity;
|
chunk->capacity = capacity;
|
||||||
chunk->size = 0;
|
chunk->size = 0;
|
||||||
@@ -248,7 +261,7 @@ private:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const int kDefaultChunkCapacity = 64 * 1024; //!< Default chunk capacity.
|
static const int kDefaultChunkCapacity = RAPIDJSON_ALLOCATOR_DEFAULT_CHUNK_CAPACITY; //!< Default chunk capacity.
|
||||||
|
|
||||||
//! Chunk header for perpending to each chunk.
|
//! Chunk header for perpending to each chunk.
|
||||||
/*! Chunks are stored as a singly linked list.
|
/*! Chunks are stored as a singly linked list.
|
||||||
|
|||||||
78
src/3rdparty/rapidjson/cursorstreamwrapper.h
vendored
Normal file
78
src/3rdparty/rapidjson/cursorstreamwrapper.h
vendored
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
// Tencent is pleased to support the open source community by making RapidJSON available.
|
||||||
|
//
|
||||||
|
// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the MIT License (the "License"); you may not use this file except
|
||||||
|
// in compliance with the License. You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://opensource.org/licenses/MIT
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software distributed
|
||||||
|
// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||||||
|
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
||||||
|
// specific language governing permissions and limitations under the License.
|
||||||
|
|
||||||
|
#ifndef RAPIDJSON_CURSORSTREAMWRAPPER_H_
|
||||||
|
#define RAPIDJSON_CURSORSTREAMWRAPPER_H_
|
||||||
|
|
||||||
|
#include "stream.h"
|
||||||
|
|
||||||
|
#if defined(__GNUC__)
|
||||||
|
RAPIDJSON_DIAG_PUSH
|
||||||
|
RAPIDJSON_DIAG_OFF(effc++)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_MSC_VER) && _MSC_VER <= 1800
|
||||||
|
RAPIDJSON_DIAG_PUSH
|
||||||
|
RAPIDJSON_DIAG_OFF(4702) // unreachable code
|
||||||
|
RAPIDJSON_DIAG_OFF(4512) // assignment operator could not be generated
|
||||||
|
#endif
|
||||||
|
|
||||||
|
RAPIDJSON_NAMESPACE_BEGIN
|
||||||
|
|
||||||
|
|
||||||
|
//! Cursor stream wrapper for counting line and column number if error exists.
|
||||||
|
/*!
|
||||||
|
\tparam InputStream Any stream that implements Stream Concept
|
||||||
|
*/
|
||||||
|
template <typename InputStream, typename Encoding = UTF8<> >
|
||||||
|
class CursorStreamWrapper : public GenericStreamWrapper<InputStream, Encoding> {
|
||||||
|
public:
|
||||||
|
typedef typename Encoding::Ch Ch;
|
||||||
|
|
||||||
|
CursorStreamWrapper(InputStream& is):
|
||||||
|
GenericStreamWrapper<InputStream, Encoding>(is), line_(1), col_(0) {}
|
||||||
|
|
||||||
|
// counting line and column number
|
||||||
|
Ch Take() {
|
||||||
|
Ch ch = this->is_.Take();
|
||||||
|
if(ch == '\n') {
|
||||||
|
line_ ++;
|
||||||
|
col_ = 0;
|
||||||
|
} else {
|
||||||
|
col_ ++;
|
||||||
|
}
|
||||||
|
return ch;
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Get the error line number, if error exists.
|
||||||
|
size_t GetLine() const { return line_; }
|
||||||
|
//! Get the error column number, if error exists.
|
||||||
|
size_t GetColumn() const { return col_; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
size_t line_; //!< Current Line
|
||||||
|
size_t col_; //!< Current Column
|
||||||
|
};
|
||||||
|
|
||||||
|
#if defined(_MSC_VER) && _MSC_VER <= 1800
|
||||||
|
RAPIDJSON_DIAG_POP
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__GNUC__)
|
||||||
|
RAPIDJSON_DIAG_POP
|
||||||
|
#endif
|
||||||
|
|
||||||
|
RAPIDJSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#endif // RAPIDJSON_CURSORSTREAMWRAPPER_H_
|
||||||
265
src/3rdparty/rapidjson/document.h
vendored
265
src/3rdparty/rapidjson/document.h
vendored
@@ -26,26 +26,21 @@
|
|||||||
#include <limits>
|
#include <limits>
|
||||||
|
|
||||||
RAPIDJSON_DIAG_PUSH
|
RAPIDJSON_DIAG_PUSH
|
||||||
#ifdef _MSC_VER
|
|
||||||
RAPIDJSON_DIAG_OFF(4127) // conditional expression is constant
|
|
||||||
RAPIDJSON_DIAG_OFF(4244) // conversion from kXxxFlags to 'uint16_t', possible loss of data
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __clang__
|
#ifdef __clang__
|
||||||
RAPIDJSON_DIAG_OFF(padded)
|
RAPIDJSON_DIAG_OFF(padded)
|
||||||
RAPIDJSON_DIAG_OFF(switch-enum)
|
RAPIDJSON_DIAG_OFF(switch-enum)
|
||||||
RAPIDJSON_DIAG_OFF(c++98-compat)
|
RAPIDJSON_DIAG_OFF(c++98-compat)
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
RAPIDJSON_DIAG_OFF(4127) // conditional expression is constant
|
||||||
|
RAPIDJSON_DIAG_OFF(4244) // conversion from kXxxFlags to 'uint16_t', possible loss of data
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
RAPIDJSON_DIAG_OFF(effc++)
|
RAPIDJSON_DIAG_OFF(effc++)
|
||||||
#if __GNUC__ >= 6
|
|
||||||
RAPIDJSON_DIAG_OFF(terminate) // ignore throwing RAPIDJSON_ASSERT in RAPIDJSON_NOEXCEPT functions
|
|
||||||
#endif
|
|
||||||
#endif // __GNUC__
|
#endif // __GNUC__
|
||||||
|
|
||||||
#ifndef RAPIDJSON_NOMEMBERITERATORCLASS
|
#ifndef RAPIDJSON_NOMEMBERITERATORCLASS
|
||||||
#include <iterator> // std::iterator, std::random_access_iterator_tag
|
#include <iterator> // std::random_access_iterator_tag
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if RAPIDJSON_HAS_CXX11_RVALUE_REFS
|
#if RAPIDJSON_HAS_CXX11_RVALUE_REFS
|
||||||
@@ -71,6 +66,12 @@ template <typename Encoding, typename Allocator>
|
|||||||
struct GenericMember {
|
struct GenericMember {
|
||||||
GenericValue<Encoding, Allocator> name; //!< name of member (must be a string)
|
GenericValue<Encoding, Allocator> name; //!< name of member (must be a string)
|
||||||
GenericValue<Encoding, Allocator> value; //!< value of member.
|
GenericValue<Encoding, Allocator> value; //!< value of member.
|
||||||
|
|
||||||
|
// swap() for std::sort() and other potential use in STL.
|
||||||
|
friend inline void swap(GenericMember& a, GenericMember& b) RAPIDJSON_NOEXCEPT {
|
||||||
|
a.name.Swap(b.name);
|
||||||
|
a.value.Swap(b.value);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
@@ -98,16 +99,13 @@ struct GenericMember {
|
|||||||
\see GenericMember, GenericValue::MemberIterator, GenericValue::ConstMemberIterator
|
\see GenericMember, GenericValue::MemberIterator, GenericValue::ConstMemberIterator
|
||||||
*/
|
*/
|
||||||
template <bool Const, typename Encoding, typename Allocator>
|
template <bool Const, typename Encoding, typename Allocator>
|
||||||
class GenericMemberIterator
|
class GenericMemberIterator {
|
||||||
: public std::iterator<std::random_access_iterator_tag
|
|
||||||
, typename internal::MaybeAddConst<Const,GenericMember<Encoding,Allocator> >::Type> {
|
|
||||||
|
|
||||||
friend class GenericValue<Encoding,Allocator>;
|
friend class GenericValue<Encoding,Allocator>;
|
||||||
template <bool, typename, typename> friend class GenericMemberIterator;
|
template <bool, typename, typename> friend class GenericMemberIterator;
|
||||||
|
|
||||||
typedef GenericMember<Encoding,Allocator> PlainType;
|
typedef GenericMember<Encoding,Allocator> PlainType;
|
||||||
typedef typename internal::MaybeAddConst<Const,PlainType>::Type ValueType;
|
typedef typename internal::MaybeAddConst<Const,PlainType>::Type ValueType;
|
||||||
typedef std::iterator<std::random_access_iterator_tag,ValueType> BaseType;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
//! Iterator type itself
|
//! Iterator type itself
|
||||||
@@ -117,12 +115,21 @@ public:
|
|||||||
//! Non-constant iterator type
|
//! Non-constant iterator type
|
||||||
typedef GenericMemberIterator<false,Encoding,Allocator> NonConstIterator;
|
typedef GenericMemberIterator<false,Encoding,Allocator> NonConstIterator;
|
||||||
|
|
||||||
|
/** \name std::iterator_traits support */
|
||||||
|
//@{
|
||||||
|
typedef ValueType value_type;
|
||||||
|
typedef ValueType * pointer;
|
||||||
|
typedef ValueType & reference;
|
||||||
|
typedef std::ptrdiff_t difference_type;
|
||||||
|
typedef std::random_access_iterator_tag iterator_category;
|
||||||
|
//@}
|
||||||
|
|
||||||
//! Pointer to (const) GenericMember
|
//! Pointer to (const) GenericMember
|
||||||
typedef typename BaseType::pointer Pointer;
|
typedef pointer Pointer;
|
||||||
//! Reference to (const) GenericMember
|
//! Reference to (const) GenericMember
|
||||||
typedef typename BaseType::reference Reference;
|
typedef reference Reference;
|
||||||
//! Signed integer type (e.g. \c ptrdiff_t)
|
//! Signed integer type (e.g. \c ptrdiff_t)
|
||||||
typedef typename BaseType::difference_type DifferenceType;
|
typedef difference_type DifferenceType;
|
||||||
|
|
||||||
//! Default constructor (singular value)
|
//! Default constructor (singular value)
|
||||||
/*! Creates an iterator pointing to no element.
|
/*! Creates an iterator pointing to no element.
|
||||||
@@ -198,17 +205,17 @@ private:
|
|||||||
// class-based member iterator implementation disabled, use plain pointers
|
// class-based member iterator implementation disabled, use plain pointers
|
||||||
|
|
||||||
template <bool Const, typename Encoding, typename Allocator>
|
template <bool Const, typename Encoding, typename Allocator>
|
||||||
struct GenericMemberIterator;
|
class GenericMemberIterator;
|
||||||
|
|
||||||
//! non-const GenericMemberIterator
|
//! non-const GenericMemberIterator
|
||||||
template <typename Encoding, typename Allocator>
|
template <typename Encoding, typename Allocator>
|
||||||
struct GenericMemberIterator<false,Encoding,Allocator> {
|
class GenericMemberIterator<false,Encoding,Allocator> {
|
||||||
//! use plain pointer as iterator type
|
//! use plain pointer as iterator type
|
||||||
typedef GenericMember<Encoding,Allocator>* Iterator;
|
typedef GenericMember<Encoding,Allocator>* Iterator;
|
||||||
};
|
};
|
||||||
//! const GenericMemberIterator
|
//! const GenericMemberIterator
|
||||||
template <typename Encoding, typename Allocator>
|
template <typename Encoding, typename Allocator>
|
||||||
struct GenericMemberIterator<true,Encoding,Allocator> {
|
class GenericMemberIterator<true,Encoding,Allocator> {
|
||||||
//! use plain const pointer as iterator type
|
//! use plain const pointer as iterator type
|
||||||
typedef const GenericMember<Encoding,Allocator>* Iterator;
|
typedef const GenericMember<Encoding,Allocator>* Iterator;
|
||||||
};
|
};
|
||||||
@@ -300,7 +307,7 @@ struct GenericStringRef {
|
|||||||
*/
|
*/
|
||||||
#endif
|
#endif
|
||||||
explicit GenericStringRef(const CharType* str)
|
explicit GenericStringRef(const CharType* str)
|
||||||
: s(str), length(internal::StrLen(str)){ RAPIDJSON_ASSERT(s != 0); }
|
: s(str), length(NotNullStrLen(str)) {}
|
||||||
|
|
||||||
//! Create constant string reference from pointer and length
|
//! Create constant string reference from pointer and length
|
||||||
#ifndef __clang__ // -Wdocumentation
|
#ifndef __clang__ // -Wdocumentation
|
||||||
@@ -312,12 +319,10 @@ struct GenericStringRef {
|
|||||||
*/
|
*/
|
||||||
#endif
|
#endif
|
||||||
GenericStringRef(const CharType* str, SizeType len)
|
GenericStringRef(const CharType* str, SizeType len)
|
||||||
: s(str), length(len) { RAPIDJSON_ASSERT(s != 0); }
|
: s(RAPIDJSON_LIKELY(str) ? str : emptyString), length(len) { RAPIDJSON_ASSERT(str != 0 || len == 0u); }
|
||||||
|
|
||||||
GenericStringRef(const GenericStringRef& rhs) : s(rhs.s), length(rhs.length) {}
|
GenericStringRef(const GenericStringRef& rhs) : s(rhs.s), length(rhs.length) {}
|
||||||
|
|
||||||
GenericStringRef& operator=(const GenericStringRef& rhs) { s = rhs.s; length = rhs.length; }
|
|
||||||
|
|
||||||
//! implicit conversion to plain CharType pointer
|
//! implicit conversion to plain CharType pointer
|
||||||
operator const Ch *() const { return s; }
|
operator const Ch *() const { return s; }
|
||||||
|
|
||||||
@@ -325,11 +330,24 @@ struct GenericStringRef {
|
|||||||
const SizeType length; //!< length of the string (excluding the trailing NULL terminator)
|
const SizeType length; //!< length of the string (excluding the trailing NULL terminator)
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
SizeType NotNullStrLen(const CharType* str) {
|
||||||
|
RAPIDJSON_ASSERT(str != 0);
|
||||||
|
return internal::StrLen(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Empty string - used when passing in a NULL pointer
|
||||||
|
static const Ch emptyString[];
|
||||||
|
|
||||||
//! Disallow construction from non-const array
|
//! Disallow construction from non-const array
|
||||||
template<SizeType N>
|
template<SizeType N>
|
||||||
GenericStringRef(CharType (&str)[N]) /* = delete */;
|
GenericStringRef(CharType (&str)[N]) /* = delete */;
|
||||||
|
//! Copy assignment operator not permitted - immutable type
|
||||||
|
GenericStringRef& operator=(const GenericStringRef& rhs) /* = delete */;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template<typename CharType>
|
||||||
|
const CharType GenericStringRef<CharType>::emptyString[] = { CharType() };
|
||||||
|
|
||||||
//! Mark a character pointer as constant string
|
//! Mark a character pointer as constant string
|
||||||
/*! Mark a plain character pointer as a "string literal". This function
|
/*! Mark a plain character pointer as a "string literal". This function
|
||||||
can be used to avoid copying a character string to be referenced as a
|
can be used to avoid copying a character string to be referenced as a
|
||||||
@@ -344,7 +362,7 @@ private:
|
|||||||
*/
|
*/
|
||||||
template<typename CharType>
|
template<typename CharType>
|
||||||
inline GenericStringRef<CharType> StringRef(const CharType* str) {
|
inline GenericStringRef<CharType> StringRef(const CharType* str) {
|
||||||
return GenericStringRef<CharType>(str, internal::StrLen(str));
|
return GenericStringRef<CharType>(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Mark a character pointer as constant string
|
//! Mark a character pointer as constant string
|
||||||
@@ -434,6 +452,26 @@ struct TypeHelper<ValueType, unsigned> {
|
|||||||
static ValueType& Set(ValueType& v, unsigned data, typename ValueType::AllocatorType&) { return v.SetUint(data); }
|
static ValueType& Set(ValueType& v, unsigned data, typename ValueType::AllocatorType&) { return v.SetUint(data); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
RAPIDJSON_STATIC_ASSERT(sizeof(long) == sizeof(int));
|
||||||
|
template<typename ValueType>
|
||||||
|
struct TypeHelper<ValueType, long> {
|
||||||
|
static bool Is(const ValueType& v) { return v.IsInt(); }
|
||||||
|
static long Get(const ValueType& v) { return v.GetInt(); }
|
||||||
|
static ValueType& Set(ValueType& v, long data) { return v.SetInt(data); }
|
||||||
|
static ValueType& Set(ValueType& v, long data, typename ValueType::AllocatorType&) { return v.SetInt(data); }
|
||||||
|
};
|
||||||
|
|
||||||
|
RAPIDJSON_STATIC_ASSERT(sizeof(unsigned long) == sizeof(unsigned));
|
||||||
|
template<typename ValueType>
|
||||||
|
struct TypeHelper<ValueType, unsigned long> {
|
||||||
|
static bool Is(const ValueType& v) { return v.IsUint(); }
|
||||||
|
static unsigned long Get(const ValueType& v) { return v.GetUint(); }
|
||||||
|
static ValueType& Set(ValueType& v, unsigned long data) { return v.SetUint(data); }
|
||||||
|
static ValueType& Set(ValueType& v, unsigned long data, typename ValueType::AllocatorType&) { return v.SetUint(data); }
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
template<typename ValueType>
|
template<typename ValueType>
|
||||||
struct TypeHelper<ValueType, int64_t> {
|
struct TypeHelper<ValueType, int64_t> {
|
||||||
static bool Is(const ValueType& v) { return v.IsInt64(); }
|
static bool Is(const ValueType& v) { return v.IsInt64(); }
|
||||||
@@ -507,7 +545,7 @@ struct TypeHelper<ValueType, typename ValueType::Object> {
|
|||||||
static bool Is(const ValueType& v) { return v.IsObject(); }
|
static bool Is(const ValueType& v) { return v.IsObject(); }
|
||||||
static ObjectType Get(ValueType& v) { return v.GetObject(); }
|
static ObjectType Get(ValueType& v) { return v.GetObject(); }
|
||||||
static ValueType& Set(ValueType& v, ObjectType data) { return v = data; }
|
static ValueType& Set(ValueType& v, ObjectType data) { return v = data; }
|
||||||
static ValueType& Set(ValueType& v, ObjectType data, typename ValueType::AllocatorType&) { v = data; }
|
static ValueType& Set(ValueType& v, ObjectType data, typename ValueType::AllocatorType&) { return v = data; }
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename ValueType>
|
template<typename ValueType>
|
||||||
@@ -590,11 +628,11 @@ public:
|
|||||||
\note Default content for number is zero.
|
\note Default content for number is zero.
|
||||||
*/
|
*/
|
||||||
explicit GenericValue(Type type) RAPIDJSON_NOEXCEPT : data_() {
|
explicit GenericValue(Type type) RAPIDJSON_NOEXCEPT : data_() {
|
||||||
static const uint16_t defaultFlags[7] = {
|
static const uint16_t defaultFlags[] = {
|
||||||
kNullFlag, kFalseFlag, kTrueFlag, kObjectFlag, kArrayFlag, kShortStringFlag,
|
kNullFlag, kFalseFlag, kTrueFlag, kObjectFlag, kArrayFlag, kShortStringFlag,
|
||||||
kNumberAnyFlag
|
kNumberAnyFlag
|
||||||
};
|
};
|
||||||
RAPIDJSON_ASSERT(type <= kNumberType);
|
RAPIDJSON_NOEXCEPT_ASSERT(type >= kNullType && type <= kNumberType);
|
||||||
data_.f.flags = defaultFlags[type];
|
data_.f.flags = defaultFlags[type];
|
||||||
|
|
||||||
// Use ShortString to store empty string.
|
// Use ShortString to store empty string.
|
||||||
@@ -607,10 +645,50 @@ public:
|
|||||||
\tparam SourceAllocator allocator of \c rhs
|
\tparam SourceAllocator allocator of \c rhs
|
||||||
\param rhs Value to copy from (read-only)
|
\param rhs Value to copy from (read-only)
|
||||||
\param allocator Allocator for allocating copied elements and buffers. Commonly use GenericDocument::GetAllocator().
|
\param allocator Allocator for allocating copied elements and buffers. Commonly use GenericDocument::GetAllocator().
|
||||||
|
\param copyConstStrings Force copying of constant strings (e.g. referencing an in-situ buffer)
|
||||||
\see CopyFrom()
|
\see CopyFrom()
|
||||||
*/
|
*/
|
||||||
template< typename SourceAllocator >
|
template <typename SourceAllocator>
|
||||||
GenericValue(const GenericValue<Encoding, SourceAllocator>& rhs, Allocator & allocator);
|
GenericValue(const GenericValue<Encoding,SourceAllocator>& rhs, Allocator& allocator, bool copyConstStrings = false) {
|
||||||
|
switch (rhs.GetType()) {
|
||||||
|
case kObjectType: {
|
||||||
|
SizeType count = rhs.data_.o.size;
|
||||||
|
Member* lm = reinterpret_cast<Member*>(allocator.Malloc(count * sizeof(Member)));
|
||||||
|
const typename GenericValue<Encoding,SourceAllocator>::Member* rm = rhs.GetMembersPointer();
|
||||||
|
for (SizeType i = 0; i < count; i++) {
|
||||||
|
new (&lm[i].name) GenericValue(rm[i].name, allocator, copyConstStrings);
|
||||||
|
new (&lm[i].value) GenericValue(rm[i].value, allocator, copyConstStrings);
|
||||||
|
}
|
||||||
|
data_.f.flags = kObjectFlag;
|
||||||
|
data_.o.size = data_.o.capacity = count;
|
||||||
|
SetMembersPointer(lm);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case kArrayType: {
|
||||||
|
SizeType count = rhs.data_.a.size;
|
||||||
|
GenericValue* le = reinterpret_cast<GenericValue*>(allocator.Malloc(count * sizeof(GenericValue)));
|
||||||
|
const GenericValue<Encoding,SourceAllocator>* re = rhs.GetElementsPointer();
|
||||||
|
for (SizeType i = 0; i < count; i++)
|
||||||
|
new (&le[i]) GenericValue(re[i], allocator, copyConstStrings);
|
||||||
|
data_.f.flags = kArrayFlag;
|
||||||
|
data_.a.size = data_.a.capacity = count;
|
||||||
|
SetElementsPointer(le);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case kStringType:
|
||||||
|
if (rhs.data_.f.flags == kConstStringFlag && !copyConstStrings) {
|
||||||
|
data_.f.flags = rhs.data_.f.flags;
|
||||||
|
data_ = *reinterpret_cast<const Data*>(&rhs.data_);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
SetStringRaw(StringRef(rhs.GetString(), rhs.GetStringLength()), allocator);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
data_.f.flags = rhs.data_.f.flags;
|
||||||
|
data_ = *reinterpret_cast<const Data*>(&rhs.data_);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//! Constructor for boolean value.
|
//! Constructor for boolean value.
|
||||||
/*! \param b Boolean value
|
/*! \param b Boolean value
|
||||||
@@ -672,6 +750,9 @@ public:
|
|||||||
//! Constructor for double value.
|
//! Constructor for double value.
|
||||||
explicit GenericValue(double d) RAPIDJSON_NOEXCEPT : data_() { data_.n.d = d; data_.f.flags = kNumberDoubleFlag; }
|
explicit GenericValue(double d) RAPIDJSON_NOEXCEPT : data_() { data_.n.d = d; data_.f.flags = kNumberDoubleFlag; }
|
||||||
|
|
||||||
|
//! Constructor for float value.
|
||||||
|
explicit GenericValue(float f) RAPIDJSON_NOEXCEPT : data_() { data_.n.d = static_cast<double>(f); data_.f.flags = kNumberDoubleFlag; }
|
||||||
|
|
||||||
//! Constructor for constant string (i.e. do not make a copy of string)
|
//! Constructor for constant string (i.e. do not make a copy of string)
|
||||||
GenericValue(const Ch* s, SizeType length) RAPIDJSON_NOEXCEPT : data_() { SetStringRaw(StringRef(s, length)); }
|
GenericValue(const Ch* s, SizeType length) RAPIDJSON_NOEXCEPT : data_() { SetStringRaw(StringRef(s, length)); }
|
||||||
|
|
||||||
@@ -753,9 +834,10 @@ public:
|
|||||||
/*! \param rhs Source of the assignment. It will become a null value after assignment.
|
/*! \param rhs Source of the assignment. It will become a null value after assignment.
|
||||||
*/
|
*/
|
||||||
GenericValue& operator=(GenericValue& rhs) RAPIDJSON_NOEXCEPT {
|
GenericValue& operator=(GenericValue& rhs) RAPIDJSON_NOEXCEPT {
|
||||||
RAPIDJSON_ASSERT(this != &rhs);
|
if (RAPIDJSON_LIKELY(this != &rhs)) {
|
||||||
this->~GenericValue();
|
this->~GenericValue();
|
||||||
RawAssign(rhs);
|
RawAssign(rhs);
|
||||||
|
}
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -800,12 +882,13 @@ public:
|
|||||||
\tparam SourceAllocator Allocator type of \c rhs
|
\tparam SourceAllocator Allocator type of \c rhs
|
||||||
\param rhs Value to copy from (read-only)
|
\param rhs Value to copy from (read-only)
|
||||||
\param allocator Allocator to use for copying
|
\param allocator Allocator to use for copying
|
||||||
|
\param copyConstStrings Force copying of constant strings (e.g. referencing an in-situ buffer)
|
||||||
*/
|
*/
|
||||||
template <typename SourceAllocator>
|
template <typename SourceAllocator>
|
||||||
GenericValue& CopyFrom(const GenericValue<Encoding, SourceAllocator>& rhs, Allocator& allocator) {
|
GenericValue& CopyFrom(const GenericValue<Encoding, SourceAllocator>& rhs, Allocator& allocator, bool copyConstStrings = false) {
|
||||||
RAPIDJSON_ASSERT(static_cast<void*>(this) != static_cast<void const*>(&rhs));
|
RAPIDJSON_ASSERT(static_cast<void*>(this) != static_cast<void const*>(&rhs));
|
||||||
this->~GenericValue();
|
this->~GenericValue();
|
||||||
new (this) GenericValue(rhs, allocator);
|
new (this) GenericValue(rhs, allocator, copyConstStrings);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -846,7 +929,7 @@ public:
|
|||||||
//! Equal-to operator
|
//! Equal-to operator
|
||||||
/*!
|
/*!
|
||||||
\note If an object contains duplicated named member, comparing equality with any object is always \c false.
|
\note If an object contains duplicated named member, comparing equality with any object is always \c false.
|
||||||
\note Linear time complexity (number of all values in the subtree and total lengths of all strings).
|
\note Complexity is quadratic in Object's member number and linear for the rest (number of all values in the subtree and total lengths of all strings).
|
||||||
*/
|
*/
|
||||||
template <typename SourceAllocator>
|
template <typename SourceAllocator>
|
||||||
bool operator==(const GenericValue<Encoding, SourceAllocator>& rhs) const {
|
bool operator==(const GenericValue<Encoding, SourceAllocator>& rhs) const {
|
||||||
@@ -955,14 +1038,14 @@ public:
|
|||||||
uint64_t u = GetUint64();
|
uint64_t u = GetUint64();
|
||||||
volatile double d = static_cast<double>(u);
|
volatile double d = static_cast<double>(u);
|
||||||
return (d >= 0.0)
|
return (d >= 0.0)
|
||||||
&& (d < static_cast<double>(std::numeric_limits<uint64_t>::max()))
|
&& (d < static_cast<double>((std::numeric_limits<uint64_t>::max)()))
|
||||||
&& (u == static_cast<uint64_t>(d));
|
&& (u == static_cast<uint64_t>(d));
|
||||||
}
|
}
|
||||||
if (IsInt64()) {
|
if (IsInt64()) {
|
||||||
int64_t i = GetInt64();
|
int64_t i = GetInt64();
|
||||||
volatile double d = static_cast<double>(i);
|
volatile double d = static_cast<double>(i);
|
||||||
return (d >= static_cast<double>(std::numeric_limits<int64_t>::min()))
|
return (d >= static_cast<double>((std::numeric_limits<int64_t>::min)()))
|
||||||
&& (d < static_cast<double>(std::numeric_limits<int64_t>::max()))
|
&& (d < static_cast<double>((std::numeric_limits<int64_t>::max)()))
|
||||||
&& (i == static_cast<int64_t>(d));
|
&& (i == static_cast<int64_t>(d));
|
||||||
}
|
}
|
||||||
return true; // double, int, uint are always lossless
|
return true; // double, int, uint are always lossless
|
||||||
@@ -979,8 +1062,8 @@ public:
|
|||||||
bool IsLosslessFloat() const {
|
bool IsLosslessFloat() const {
|
||||||
if (!IsNumber()) return false;
|
if (!IsNumber()) return false;
|
||||||
double a = GetDouble();
|
double a = GetDouble();
|
||||||
if (a < static_cast<double>(-std::numeric_limits<float>::max())
|
if (a < static_cast<double>(-(std::numeric_limits<float>::max)())
|
||||||
|| a > static_cast<double>(std::numeric_limits<float>::max()))
|
|| a > static_cast<double>((std::numeric_limits<float>::max)()))
|
||||||
return false;
|
return false;
|
||||||
double b = static_cast<double>(static_cast<float>(a));
|
double b = static_cast<double>(static_cast<float>(a));
|
||||||
return a >= b && a <= b; // Prevent -Wfloat-equal
|
return a >= b && a <= b; // Prevent -Wfloat-equal
|
||||||
@@ -1015,6 +1098,9 @@ public:
|
|||||||
//! Get the number of members in the object.
|
//! Get the number of members in the object.
|
||||||
SizeType MemberCount() const { RAPIDJSON_ASSERT(IsObject()); return data_.o.size; }
|
SizeType MemberCount() const { RAPIDJSON_ASSERT(IsObject()); return data_.o.size; }
|
||||||
|
|
||||||
|
//! Get the capacity of object.
|
||||||
|
SizeType MemberCapacity() const { RAPIDJSON_ASSERT(IsObject()); return data_.o.capacity; }
|
||||||
|
|
||||||
//! Check whether the object is empty.
|
//! Check whether the object is empty.
|
||||||
bool ObjectEmpty() const { RAPIDJSON_ASSERT(IsObject()); return data_.o.size == 0; }
|
bool ObjectEmpty() const { RAPIDJSON_ASSERT(IsObject()); return data_.o.size == 0; }
|
||||||
|
|
||||||
@@ -1083,6 +1169,21 @@ public:
|
|||||||
/*! \pre IsObject() == true */
|
/*! \pre IsObject() == true */
|
||||||
MemberIterator MemberEnd() { RAPIDJSON_ASSERT(IsObject()); return MemberIterator(GetMembersPointer() + data_.o.size); }
|
MemberIterator MemberEnd() { RAPIDJSON_ASSERT(IsObject()); return MemberIterator(GetMembersPointer() + data_.o.size); }
|
||||||
|
|
||||||
|
//! Request the object to have enough capacity to store members.
|
||||||
|
/*! \param newCapacity The capacity that the object at least need to have.
|
||||||
|
\param allocator Allocator for reallocating memory. It must be the same one as used before. Commonly use GenericDocument::GetAllocator().
|
||||||
|
\return The value itself for fluent API.
|
||||||
|
\note Linear time complexity.
|
||||||
|
*/
|
||||||
|
GenericValue& MemberReserve(SizeType newCapacity, Allocator &allocator) {
|
||||||
|
RAPIDJSON_ASSERT(IsObject());
|
||||||
|
if (newCapacity > data_.o.capacity) {
|
||||||
|
SetMembersPointer(reinterpret_cast<Member*>(allocator.Realloc(GetMembersPointer(), data_.o.capacity * sizeof(Member), newCapacity * sizeof(Member))));
|
||||||
|
data_.o.capacity = newCapacity;
|
||||||
|
}
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
//! Check whether a member exists in the object.
|
//! Check whether a member exists in the object.
|
||||||
/*!
|
/*!
|
||||||
\param name Member name to be searched.
|
\param name Member name to be searched.
|
||||||
@@ -1188,17 +1289,8 @@ public:
|
|||||||
RAPIDJSON_ASSERT(name.IsString());
|
RAPIDJSON_ASSERT(name.IsString());
|
||||||
|
|
||||||
ObjectData& o = data_.o;
|
ObjectData& o = data_.o;
|
||||||
if (o.size >= o.capacity) {
|
if (o.size >= o.capacity)
|
||||||
if (o.capacity == 0) {
|
MemberReserve(o.capacity == 0 ? kDefaultObjectCapacity : (o.capacity + (o.capacity + 1) / 2), allocator);
|
||||||
o.capacity = kDefaultObjectCapacity;
|
|
||||||
SetMembersPointer(reinterpret_cast<Member*>(allocator.Malloc(o.capacity * sizeof(Member))));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
SizeType oldCapacity = o.capacity;
|
|
||||||
o.capacity += (oldCapacity + 1) / 2; // grow by factor 1.5
|
|
||||||
SetMembersPointer(reinterpret_cast<Member*>(allocator.Realloc(GetMembersPointer(), oldCapacity * sizeof(Member), o.capacity * sizeof(Member))));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Member* members = GetMembersPointer();
|
Member* members = GetMembersPointer();
|
||||||
members[o.size].name.RawAssign(name);
|
members[o.size].name.RawAssign(name);
|
||||||
members[o.size].value.RawAssign(value);
|
members[o.size].value.RawAssign(value);
|
||||||
@@ -1425,7 +1517,7 @@ public:
|
|||||||
MemberIterator pos = MemberBegin() + (first - MemberBegin());
|
MemberIterator pos = MemberBegin() + (first - MemberBegin());
|
||||||
for (MemberIterator itr = pos; itr != last; ++itr)
|
for (MemberIterator itr = pos; itr != last; ++itr)
|
||||||
itr->~Member();
|
itr->~Member();
|
||||||
std::memmove(&*pos, &*last, static_cast<size_t>(MemberEnd() - last) * sizeof(Member));
|
std::memmove(static_cast<void*>(&*pos), &*last, static_cast<size_t>(MemberEnd() - last) * sizeof(Member));
|
||||||
data_.o.size -= static_cast<SizeType>(last - first);
|
data_.o.size -= static_cast<SizeType>(last - first);
|
||||||
return pos;
|
return pos;
|
||||||
}
|
}
|
||||||
@@ -1628,8 +1720,8 @@ public:
|
|||||||
RAPIDJSON_ASSERT(last <= End());
|
RAPIDJSON_ASSERT(last <= End());
|
||||||
ValueIterator pos = Begin() + (first - Begin());
|
ValueIterator pos = Begin() + (first - Begin());
|
||||||
for (ValueIterator itr = pos; itr != last; ++itr)
|
for (ValueIterator itr = pos; itr != last; ++itr)
|
||||||
itr->~GenericValue();
|
itr->~GenericValue();
|
||||||
std::memmove(pos, last, static_cast<size_t>(End() - last) * sizeof(GenericValue));
|
std::memmove(static_cast<void*>(pos), last, static_cast<size_t>(End() - last) * sizeof(GenericValue));
|
||||||
data_.a.size -= static_cast<SizeType>(last - first);
|
data_.a.size -= static_cast<SizeType>(last - first);
|
||||||
return pos;
|
return pos;
|
||||||
}
|
}
|
||||||
@@ -1671,7 +1763,7 @@ public:
|
|||||||
GenericValue& SetInt64(int64_t i64) { this->~GenericValue(); new (this) GenericValue(i64); return *this; }
|
GenericValue& SetInt64(int64_t i64) { this->~GenericValue(); new (this) GenericValue(i64); return *this; }
|
||||||
GenericValue& SetUint64(uint64_t u64) { this->~GenericValue(); new (this) GenericValue(u64); return *this; }
|
GenericValue& SetUint64(uint64_t u64) { this->~GenericValue(); new (this) GenericValue(u64); return *this; }
|
||||||
GenericValue& SetDouble(double d) { this->~GenericValue(); new (this) GenericValue(d); return *this; }
|
GenericValue& SetDouble(double d) { this->~GenericValue(); new (this) GenericValue(d); return *this; }
|
||||||
GenericValue& SetFloat(float f) { this->~GenericValue(); new (this) GenericValue(f); return *this; }
|
GenericValue& SetFloat(float f) { this->~GenericValue(); new (this) GenericValue(static_cast<double>(f)); return *this; }
|
||||||
|
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
@@ -1710,7 +1802,7 @@ public:
|
|||||||
\return The value itself for fluent API.
|
\return The value itself for fluent API.
|
||||||
\post IsString() == true && GetString() != s && strcmp(GetString(),s) == 0 && GetStringLength() == length
|
\post IsString() == true && GetString() != s && strcmp(GetString(),s) == 0 && GetStringLength() == length
|
||||||
*/
|
*/
|
||||||
GenericValue& SetString(const Ch* s, SizeType length, Allocator& allocator) { this->~GenericValue(); SetStringRaw(StringRef(s, length), allocator); return *this; }
|
GenericValue& SetString(const Ch* s, SizeType length, Allocator& allocator) { return SetString(StringRef(s, length), allocator); }
|
||||||
|
|
||||||
//! Set this value as a string by copying from source string.
|
//! Set this value as a string by copying from source string.
|
||||||
/*! \param s source string.
|
/*! \param s source string.
|
||||||
@@ -1718,7 +1810,15 @@ public:
|
|||||||
\return The value itself for fluent API.
|
\return The value itself for fluent API.
|
||||||
\post IsString() == true && GetString() != s && strcmp(GetString(),s) == 0 && GetStringLength() == length
|
\post IsString() == true && GetString() != s && strcmp(GetString(),s) == 0 && GetStringLength() == length
|
||||||
*/
|
*/
|
||||||
GenericValue& SetString(const Ch* s, Allocator& allocator) { return SetString(s, internal::StrLen(s), allocator); }
|
GenericValue& SetString(const Ch* s, Allocator& allocator) { return SetString(StringRef(s), allocator); }
|
||||||
|
|
||||||
|
//! Set this value as a string by copying from source string.
|
||||||
|
/*! \param s source string reference
|
||||||
|
\param allocator Allocator for allocating copied buffer. Commonly use GenericDocument::GetAllocator().
|
||||||
|
\return The value itself for fluent API.
|
||||||
|
\post IsString() == true && GetString() != s.s && strcmp(GetString(),s) == 0 && GetStringLength() == length
|
||||||
|
*/
|
||||||
|
GenericValue& SetString(StringRefType s, Allocator& allocator) { this->~GenericValue(); SetStringRaw(s, allocator); return *this; }
|
||||||
|
|
||||||
#if RAPIDJSON_HAS_STDSTRING
|
#if RAPIDJSON_HAS_STDSTRING
|
||||||
//! Set this value as a string by copying from source string.
|
//! Set this value as a string by copying from source string.
|
||||||
@@ -1728,7 +1828,7 @@ public:
|
|||||||
\post IsString() == true && GetString() != s.data() && strcmp(GetString(),s.data() == 0 && GetStringLength() == s.size()
|
\post IsString() == true && GetString() != s.data() && strcmp(GetString(),s.data() == 0 && GetStringLength() == s.size()
|
||||||
\note Requires the definition of the preprocessor symbol \ref RAPIDJSON_HAS_STDSTRING.
|
\note Requires the definition of the preprocessor symbol \ref RAPIDJSON_HAS_STDSTRING.
|
||||||
*/
|
*/
|
||||||
GenericValue& SetString(const std::basic_string<Ch>& s, Allocator& allocator) { return SetString(s.data(), SizeType(s.size()), allocator); }
|
GenericValue& SetString(const std::basic_string<Ch>& s, Allocator& allocator) { return SetString(StringRef(s), allocator); }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//@}
|
//@}
|
||||||
@@ -1936,7 +2036,7 @@ private:
|
|||||||
if (count) {
|
if (count) {
|
||||||
GenericValue* e = static_cast<GenericValue*>(allocator.Malloc(count * sizeof(GenericValue)));
|
GenericValue* e = static_cast<GenericValue*>(allocator.Malloc(count * sizeof(GenericValue)));
|
||||||
SetElementsPointer(e);
|
SetElementsPointer(e);
|
||||||
std::memcpy(e, values, count * sizeof(GenericValue));
|
std::memcpy(static_cast<void*>(e), values, count * sizeof(GenericValue));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
SetElementsPointer(0);
|
SetElementsPointer(0);
|
||||||
@@ -1949,7 +2049,7 @@ private:
|
|||||||
if (count) {
|
if (count) {
|
||||||
Member* m = static_cast<Member*>(allocator.Malloc(count * sizeof(Member)));
|
Member* m = static_cast<Member*>(allocator.Malloc(count * sizeof(Member)));
|
||||||
SetMembersPointer(m);
|
SetMembersPointer(m);
|
||||||
std::memcpy(m, members, count * sizeof(Member));
|
std::memcpy(static_cast<void*>(m), members, count * sizeof(Member));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
SetMembersPointer(0);
|
SetMembersPointer(0);
|
||||||
@@ -2038,7 +2138,7 @@ public:
|
|||||||
GenericValue<Encoding, Allocator>(type), allocator_(allocator), ownAllocator_(0), stack_(stackAllocator, stackCapacity), parseResult_()
|
GenericValue<Encoding, Allocator>(type), allocator_(allocator), ownAllocator_(0), stack_(stackAllocator, stackCapacity), parseResult_()
|
||||||
{
|
{
|
||||||
if (!allocator_)
|
if (!allocator_)
|
||||||
ownAllocator_ = allocator_ = RAPIDJSON_NEW(Allocator());
|
ownAllocator_ = allocator_ = RAPIDJSON_NEW(Allocator)();
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Constructor
|
//! Constructor
|
||||||
@@ -2051,7 +2151,7 @@ public:
|
|||||||
allocator_(allocator), ownAllocator_(0), stack_(stackAllocator, stackCapacity), parseResult_()
|
allocator_(allocator), ownAllocator_(0), stack_(stackAllocator, stackCapacity), parseResult_()
|
||||||
{
|
{
|
||||||
if (!allocator_)
|
if (!allocator_)
|
||||||
ownAllocator_ = allocator_ = RAPIDJSON_NEW(Allocator());
|
ownAllocator_ = allocator_ = RAPIDJSON_NEW(Allocator)();
|
||||||
}
|
}
|
||||||
|
|
||||||
#if RAPIDJSON_HAS_CXX11_RVALUE_REFS
|
#if RAPIDJSON_HAS_CXX11_RVALUE_REFS
|
||||||
@@ -2112,6 +2212,10 @@ public:
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Allow Swap with ValueType.
|
||||||
|
// Refer to Effective C++ 3rd Edition/Item 33: Avoid hiding inherited names.
|
||||||
|
using ValueType::Swap;
|
||||||
|
|
||||||
//! free-standing swap function helper
|
//! free-standing swap function helper
|
||||||
/*!
|
/*!
|
||||||
Helper function to enable support for common swap implementation pattern based on \c std::swap:
|
Helper function to enable support for common swap implementation pattern based on \c std::swap:
|
||||||
@@ -2243,7 +2347,7 @@ public:
|
|||||||
template <unsigned parseFlags, typename SourceEncoding>
|
template <unsigned parseFlags, typename SourceEncoding>
|
||||||
GenericDocument& Parse(const typename SourceEncoding::Ch* str, size_t length) {
|
GenericDocument& Parse(const typename SourceEncoding::Ch* str, size_t length) {
|
||||||
RAPIDJSON_ASSERT(!(parseFlags & kParseInsituFlag));
|
RAPIDJSON_ASSERT(!(parseFlags & kParseInsituFlag));
|
||||||
MemoryStream ms(static_cast<const char*>(str), length * sizeof(typename SourceEncoding::Ch));
|
MemoryStream ms(reinterpret_cast<const char*>(str), length * sizeof(typename SourceEncoding::Ch));
|
||||||
EncodedInputStream<SourceEncoding, MemoryStream> is(ms);
|
EncodedInputStream<SourceEncoding, MemoryStream> is(ms);
|
||||||
ParseStream<parseFlags, SourceEncoding>(is);
|
ParseStream<parseFlags, SourceEncoding>(is);
|
||||||
return *this;
|
return *this;
|
||||||
@@ -2280,7 +2384,7 @@ public:
|
|||||||
//!@name Handling parse errors
|
//!@name Handling parse errors
|
||||||
//!@{
|
//!@{
|
||||||
|
|
||||||
//! Whether a parse error has occured in the last parsing.
|
//! Whether a parse error has occurred in the last parsing.
|
||||||
bool HasParseError() const { return parseResult_.IsError(); }
|
bool HasParseError() const { return parseResult_.IsError(); }
|
||||||
|
|
||||||
//! Get the \ref ParseErrorCode of last parsing.
|
//! Get the \ref ParseErrorCode of last parsing.
|
||||||
@@ -2401,35 +2505,6 @@ private:
|
|||||||
//! GenericDocument with UTF8 encoding
|
//! GenericDocument with UTF8 encoding
|
||||||
typedef GenericDocument<UTF8<> > Document;
|
typedef GenericDocument<UTF8<> > Document;
|
||||||
|
|
||||||
// defined here due to the dependency on GenericDocument
|
|
||||||
template <typename Encoding, typename Allocator>
|
|
||||||
template <typename SourceAllocator>
|
|
||||||
inline
|
|
||||||
GenericValue<Encoding,Allocator>::GenericValue(const GenericValue<Encoding,SourceAllocator>& rhs, Allocator& allocator)
|
|
||||||
{
|
|
||||||
switch (rhs.GetType()) {
|
|
||||||
case kObjectType:
|
|
||||||
case kArrayType: { // perform deep copy via SAX Handler
|
|
||||||
GenericDocument<Encoding,Allocator> d(&allocator);
|
|
||||||
rhs.Accept(d);
|
|
||||||
RawAssign(*d.stack_.template Pop<GenericValue>(1));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case kStringType:
|
|
||||||
if (rhs.data_.f.flags == kConstStringFlag) {
|
|
||||||
data_.f.flags = rhs.data_.f.flags;
|
|
||||||
data_ = *reinterpret_cast<const Data*>(&rhs.data_);
|
|
||||||
} else {
|
|
||||||
SetStringRaw(StringRef(rhs.GetString(), rhs.GetStringLength()), allocator);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
data_.f.flags = rhs.data_.f.flags;
|
|
||||||
data_ = *reinterpret_cast<const Data*>(&rhs.data_);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Helper class for accessing Value of array type.
|
//! Helper class for accessing Value of array type.
|
||||||
/*!
|
/*!
|
||||||
Instance of this helper class is obtained by \c GenericValue::GetArray().
|
Instance of this helper class is obtained by \c GenericValue::GetArray().
|
||||||
@@ -2510,6 +2585,7 @@ public:
|
|||||||
~GenericObject() {}
|
~GenericObject() {}
|
||||||
|
|
||||||
SizeType MemberCount() const { return value_.MemberCount(); }
|
SizeType MemberCount() const { return value_.MemberCount(); }
|
||||||
|
SizeType MemberCapacity() const { return value_.MemberCapacity(); }
|
||||||
bool ObjectEmpty() const { return value_.ObjectEmpty(); }
|
bool ObjectEmpty() const { return value_.ObjectEmpty(); }
|
||||||
template <typename T> ValueType& operator[](T* name) const { return value_[name]; }
|
template <typename T> ValueType& operator[](T* name) const { return value_[name]; }
|
||||||
template <typename SourceAllocator> ValueType& operator[](const GenericValue<EncodingType, SourceAllocator>& name) const { return value_[name]; }
|
template <typename SourceAllocator> ValueType& operator[](const GenericValue<EncodingType, SourceAllocator>& name) const { return value_[name]; }
|
||||||
@@ -2518,6 +2594,7 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
MemberIterator MemberBegin() const { return value_.MemberBegin(); }
|
MemberIterator MemberBegin() const { return value_.MemberBegin(); }
|
||||||
MemberIterator MemberEnd() const { return value_.MemberEnd(); }
|
MemberIterator MemberEnd() const { return value_.MemberEnd(); }
|
||||||
|
GenericObject MemberReserve(SizeType newCapacity, AllocatorType &allocator) const { value_.MemberReserve(newCapacity, allocator); return *this; }
|
||||||
bool HasMember(const Ch* name) const { return value_.HasMember(name); }
|
bool HasMember(const Ch* name) const { return value_.HasMember(name); }
|
||||||
#if RAPIDJSON_HAS_STDSTRING
|
#if RAPIDJSON_HAS_STDSTRING
|
||||||
bool HasMember(const std::basic_string<Ch>& name) const { return value_.HasMember(name); }
|
bool HasMember(const std::basic_string<Ch>& name) const { return value_.HasMember(name); }
|
||||||
@@ -2543,7 +2620,7 @@ public:
|
|||||||
GenericObject AddMember(StringRefType name, ValueType& value, AllocatorType& allocator) const { value_.AddMember(name, value, allocator); return *this; }
|
GenericObject AddMember(StringRefType name, ValueType& value, AllocatorType& allocator) const { value_.AddMember(name, value, allocator); return *this; }
|
||||||
GenericObject AddMember(StringRefType name, StringRefType value, AllocatorType& allocator) const { value_.AddMember(name, value, allocator); return *this; }
|
GenericObject AddMember(StringRefType name, StringRefType value, AllocatorType& allocator) const { value_.AddMember(name, value, allocator); return *this; }
|
||||||
template <typename T> RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr<internal::IsPointer<T>, internal::IsGenericValue<T> >), (GenericObject)) AddMember(StringRefType name, T value, AllocatorType& allocator) const { value_.AddMember(name, value, allocator); return *this; }
|
template <typename T> RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr<internal::IsPointer<T>, internal::IsGenericValue<T> >), (GenericObject)) AddMember(StringRefType name, T value, AllocatorType& allocator) const { value_.AddMember(name, value, allocator); return *this; }
|
||||||
void RemoveAllMembers() { return value_.RemoveAllMembers(); }
|
void RemoveAllMembers() { value_.RemoveAllMembers(); }
|
||||||
bool RemoveMember(const Ch* name) const { return value_.RemoveMember(name); }
|
bool RemoveMember(const Ch* name) const { return value_.RemoveMember(name); }
|
||||||
#if RAPIDJSON_HAS_STDSTRING
|
#if RAPIDJSON_HAS_STDSTRING
|
||||||
bool RemoveMember(const std::basic_string<Ch>& name) const { return value_.RemoveMember(name); }
|
bool RemoveMember(const std::basic_string<Ch>& name) const { return value_.RemoveMember(name); }
|
||||||
|
|||||||
2
src/3rdparty/rapidjson/encodedstream.h
vendored
2
src/3rdparty/rapidjson/encodedstream.h
vendored
@@ -200,7 +200,7 @@ private:
|
|||||||
// xx xx xx xx UTF-8
|
// xx xx xx xx UTF-8
|
||||||
|
|
||||||
if (!hasBOM_) {
|
if (!hasBOM_) {
|
||||||
unsigned pattern = (c[0] ? 1 : 0) | (c[1] ? 2 : 0) | (c[2] ? 4 : 0) | (c[3] ? 8 : 0);
|
int pattern = (c[0] ? 1 : 0) | (c[1] ? 2 : 0) | (c[2] ? 4 : 0) | (c[3] ? 8 : 0);
|
||||||
switch (pattern) {
|
switch (pattern) {
|
||||||
case 0x08: type_ = kUTF32BE; break;
|
case 0x08: type_ = kUTF32BE; break;
|
||||||
case 0x0A: type_ = kUTF16BE; break;
|
case 0x0A: type_ = kUTF16BE; break;
|
||||||
|
|||||||
86
src/3rdparty/rapidjson/encodings.h
vendored
86
src/3rdparty/rapidjson/encodings.h
vendored
@@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
#include "rapidjson.h"
|
#include "rapidjson.h"
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#if defined(_MSC_VER) && !defined(__clang__)
|
||||||
RAPIDJSON_DIAG_PUSH
|
RAPIDJSON_DIAG_PUSH
|
||||||
RAPIDJSON_DIAG_OFF(4244) // conversion from 'type1' to 'type2', possible loss of data
|
RAPIDJSON_DIAG_OFF(4244) // conversion from 'type1' to 'type2', possible loss of data
|
||||||
RAPIDJSON_DIAG_OFF(4702) // unreachable code
|
RAPIDJSON_DIAG_OFF(4702) // unreachable code
|
||||||
@@ -144,9 +144,9 @@ struct UTF8 {
|
|||||||
|
|
||||||
template <typename InputStream>
|
template <typename InputStream>
|
||||||
static bool Decode(InputStream& is, unsigned* codepoint) {
|
static bool Decode(InputStream& is, unsigned* codepoint) {
|
||||||
#define COPY() c = is.Take(); *codepoint = (*codepoint << 6) | (static_cast<unsigned char>(c) & 0x3Fu)
|
#define RAPIDJSON_COPY() c = is.Take(); *codepoint = (*codepoint << 6) | (static_cast<unsigned char>(c) & 0x3Fu)
|
||||||
#define TRANS(mask) result &= ((GetRange(static_cast<unsigned char>(c)) & mask) != 0)
|
#define RAPIDJSON_TRANS(mask) result &= ((GetRange(static_cast<unsigned char>(c)) & mask) != 0)
|
||||||
#define TAIL() COPY(); TRANS(0x70)
|
#define RAPIDJSON_TAIL() RAPIDJSON_COPY(); RAPIDJSON_TRANS(0x70)
|
||||||
typename InputStream::Ch c = is.Take();
|
typename InputStream::Ch c = is.Take();
|
||||||
if (!(c & 0x80)) {
|
if (!(c & 0x80)) {
|
||||||
*codepoint = static_cast<unsigned char>(c);
|
*codepoint = static_cast<unsigned char>(c);
|
||||||
@@ -157,48 +157,48 @@ struct UTF8 {
|
|||||||
if (type >= 32) {
|
if (type >= 32) {
|
||||||
*codepoint = 0;
|
*codepoint = 0;
|
||||||
} else {
|
} else {
|
||||||
*codepoint = (0xFF >> type) & static_cast<unsigned char>(c);
|
*codepoint = (0xFFu >> type) & static_cast<unsigned char>(c);
|
||||||
}
|
}
|
||||||
bool result = true;
|
bool result = true;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 2: TAIL(); return result;
|
case 2: RAPIDJSON_TAIL(); return result;
|
||||||
case 3: TAIL(); TAIL(); return result;
|
case 3: RAPIDJSON_TAIL(); RAPIDJSON_TAIL(); return result;
|
||||||
case 4: COPY(); TRANS(0x50); TAIL(); return result;
|
case 4: RAPIDJSON_COPY(); RAPIDJSON_TRANS(0x50); RAPIDJSON_TAIL(); return result;
|
||||||
case 5: COPY(); TRANS(0x10); TAIL(); TAIL(); return result;
|
case 5: RAPIDJSON_COPY(); RAPIDJSON_TRANS(0x10); RAPIDJSON_TAIL(); RAPIDJSON_TAIL(); return result;
|
||||||
case 6: TAIL(); TAIL(); TAIL(); return result;
|
case 6: RAPIDJSON_TAIL(); RAPIDJSON_TAIL(); RAPIDJSON_TAIL(); return result;
|
||||||
case 10: COPY(); TRANS(0x20); TAIL(); return result;
|
case 10: RAPIDJSON_COPY(); RAPIDJSON_TRANS(0x20); RAPIDJSON_TAIL(); return result;
|
||||||
case 11: COPY(); TRANS(0x60); TAIL(); TAIL(); return result;
|
case 11: RAPIDJSON_COPY(); RAPIDJSON_TRANS(0x60); RAPIDJSON_TAIL(); RAPIDJSON_TAIL(); return result;
|
||||||
default: return false;
|
default: return false;
|
||||||
}
|
}
|
||||||
#undef COPY
|
#undef RAPIDJSON_COPY
|
||||||
#undef TRANS
|
#undef RAPIDJSON_TRANS
|
||||||
#undef TAIL
|
#undef RAPIDJSON_TAIL
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename InputStream, typename OutputStream>
|
template <typename InputStream, typename OutputStream>
|
||||||
static bool Validate(InputStream& is, OutputStream& os) {
|
static bool Validate(InputStream& is, OutputStream& os) {
|
||||||
#define COPY() os.Put(c = is.Take())
|
#define RAPIDJSON_COPY() os.Put(c = is.Take())
|
||||||
#define TRANS(mask) result &= ((GetRange(static_cast<unsigned char>(c)) & mask) != 0)
|
#define RAPIDJSON_TRANS(mask) result &= ((GetRange(static_cast<unsigned char>(c)) & mask) != 0)
|
||||||
#define TAIL() COPY(); TRANS(0x70)
|
#define RAPIDJSON_TAIL() RAPIDJSON_COPY(); RAPIDJSON_TRANS(0x70)
|
||||||
Ch c;
|
Ch c;
|
||||||
COPY();
|
RAPIDJSON_COPY();
|
||||||
if (!(c & 0x80))
|
if (!(c & 0x80))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
bool result = true;
|
bool result = true;
|
||||||
switch (GetRange(static_cast<unsigned char>(c))) {
|
switch (GetRange(static_cast<unsigned char>(c))) {
|
||||||
case 2: TAIL(); return result;
|
case 2: RAPIDJSON_TAIL(); return result;
|
||||||
case 3: TAIL(); TAIL(); return result;
|
case 3: RAPIDJSON_TAIL(); RAPIDJSON_TAIL(); return result;
|
||||||
case 4: COPY(); TRANS(0x50); TAIL(); return result;
|
case 4: RAPIDJSON_COPY(); RAPIDJSON_TRANS(0x50); RAPIDJSON_TAIL(); return result;
|
||||||
case 5: COPY(); TRANS(0x10); TAIL(); TAIL(); return result;
|
case 5: RAPIDJSON_COPY(); RAPIDJSON_TRANS(0x10); RAPIDJSON_TAIL(); RAPIDJSON_TAIL(); return result;
|
||||||
case 6: TAIL(); TAIL(); TAIL(); return result;
|
case 6: RAPIDJSON_TAIL(); RAPIDJSON_TAIL(); RAPIDJSON_TAIL(); return result;
|
||||||
case 10: COPY(); TRANS(0x20); TAIL(); return result;
|
case 10: RAPIDJSON_COPY(); RAPIDJSON_TRANS(0x20); RAPIDJSON_TAIL(); return result;
|
||||||
case 11: COPY(); TRANS(0x60); TAIL(); TAIL(); return result;
|
case 11: RAPIDJSON_COPY(); RAPIDJSON_TRANS(0x60); RAPIDJSON_TAIL(); RAPIDJSON_TAIL(); return result;
|
||||||
default: return false;
|
default: return false;
|
||||||
}
|
}
|
||||||
#undef COPY
|
#undef RAPIDJSON_COPY
|
||||||
#undef TRANS
|
#undef RAPIDJSON_TRANS
|
||||||
#undef TAIL
|
#undef RAPIDJSON_TAIL
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned char GetRange(unsigned char c) {
|
static unsigned char GetRange(unsigned char c) {
|
||||||
@@ -283,7 +283,7 @@ struct UTF16 {
|
|||||||
RAPIDJSON_ASSERT(codepoint <= 0x10FFFF);
|
RAPIDJSON_ASSERT(codepoint <= 0x10FFFF);
|
||||||
unsigned v = codepoint - 0x10000;
|
unsigned v = codepoint - 0x10000;
|
||||||
os.Put(static_cast<typename OutputStream::Ch>((v >> 10) | 0xD800));
|
os.Put(static_cast<typename OutputStream::Ch>((v >> 10) | 0xD800));
|
||||||
os.Put((v & 0x3FF) | 0xDC00);
|
os.Put(static_cast<typename OutputStream::Ch>((v & 0x3FF) | 0xDC00));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -299,7 +299,7 @@ struct UTF16 {
|
|||||||
RAPIDJSON_ASSERT(codepoint <= 0x10FFFF);
|
RAPIDJSON_ASSERT(codepoint <= 0x10FFFF);
|
||||||
unsigned v = codepoint - 0x10000;
|
unsigned v = codepoint - 0x10000;
|
||||||
PutUnsafe(os, static_cast<typename OutputStream::Ch>((v >> 10) | 0xD800));
|
PutUnsafe(os, static_cast<typename OutputStream::Ch>((v >> 10) | 0xD800));
|
||||||
PutUnsafe(os, (v & 0x3FF) | 0xDC00);
|
PutUnsafe(os, static_cast<typename OutputStream::Ch>((v & 0x3FF) | 0xDC00));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -384,7 +384,7 @@ struct UTF16BE : UTF16<CharType> {
|
|||||||
static CharType Take(InputByteStream& is) {
|
static CharType Take(InputByteStream& is) {
|
||||||
RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1);
|
RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1);
|
||||||
unsigned c = static_cast<unsigned>(static_cast<uint8_t>(is.Take())) << 8;
|
unsigned c = static_cast<unsigned>(static_cast<uint8_t>(is.Take())) << 8;
|
||||||
c |= static_cast<uint8_t>(is.Take());
|
c |= static_cast<unsigned>(static_cast<uint8_t>(is.Take()));
|
||||||
return static_cast<CharType>(c);
|
return static_cast<CharType>(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -620,28 +620,28 @@ struct AutoUTF {
|
|||||||
#define RAPIDJSON_ENCODINGS_FUNC(x) UTF8<Ch>::x, UTF16LE<Ch>::x, UTF16BE<Ch>::x, UTF32LE<Ch>::x, UTF32BE<Ch>::x
|
#define RAPIDJSON_ENCODINGS_FUNC(x) UTF8<Ch>::x, UTF16LE<Ch>::x, UTF16BE<Ch>::x, UTF32LE<Ch>::x, UTF32BE<Ch>::x
|
||||||
|
|
||||||
template<typename OutputStream>
|
template<typename OutputStream>
|
||||||
RAPIDJSON_FORCEINLINE static void Encode(OutputStream& os, unsigned codepoint) {
|
static RAPIDJSON_FORCEINLINE void Encode(OutputStream& os, unsigned codepoint) {
|
||||||
typedef void (*EncodeFunc)(OutputStream&, unsigned);
|
typedef void (*EncodeFunc)(OutputStream&, unsigned);
|
||||||
static const EncodeFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(Encode) };
|
static const EncodeFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(Encode) };
|
||||||
(*f[os.GetType()])(os, codepoint);
|
(*f[os.GetType()])(os, codepoint);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename OutputStream>
|
template<typename OutputStream>
|
||||||
RAPIDJSON_FORCEINLINE static void EncodeUnsafe(OutputStream& os, unsigned codepoint) {
|
static RAPIDJSON_FORCEINLINE void EncodeUnsafe(OutputStream& os, unsigned codepoint) {
|
||||||
typedef void (*EncodeFunc)(OutputStream&, unsigned);
|
typedef void (*EncodeFunc)(OutputStream&, unsigned);
|
||||||
static const EncodeFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(EncodeUnsafe) };
|
static const EncodeFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(EncodeUnsafe) };
|
||||||
(*f[os.GetType()])(os, codepoint);
|
(*f[os.GetType()])(os, codepoint);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename InputStream>
|
template <typename InputStream>
|
||||||
RAPIDJSON_FORCEINLINE static bool Decode(InputStream& is, unsigned* codepoint) {
|
static RAPIDJSON_FORCEINLINE bool Decode(InputStream& is, unsigned* codepoint) {
|
||||||
typedef bool (*DecodeFunc)(InputStream&, unsigned*);
|
typedef bool (*DecodeFunc)(InputStream&, unsigned*);
|
||||||
static const DecodeFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(Decode) };
|
static const DecodeFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(Decode) };
|
||||||
return (*f[is.GetType()])(is, codepoint);
|
return (*f[is.GetType()])(is, codepoint);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename InputStream, typename OutputStream>
|
template <typename InputStream, typename OutputStream>
|
||||||
RAPIDJSON_FORCEINLINE static bool Validate(InputStream& is, OutputStream& os) {
|
static RAPIDJSON_FORCEINLINE bool Validate(InputStream& is, OutputStream& os) {
|
||||||
typedef bool (*ValidateFunc)(InputStream&, OutputStream&);
|
typedef bool (*ValidateFunc)(InputStream&, OutputStream&);
|
||||||
static const ValidateFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(Validate) };
|
static const ValidateFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(Validate) };
|
||||||
return (*f[is.GetType()])(is, os);
|
return (*f[is.GetType()])(is, os);
|
||||||
@@ -658,7 +658,7 @@ template<typename SourceEncoding, typename TargetEncoding>
|
|||||||
struct Transcoder {
|
struct Transcoder {
|
||||||
//! Take one Unicode codepoint from source encoding, convert it to target encoding and put it to the output stream.
|
//! Take one Unicode codepoint from source encoding, convert it to target encoding and put it to the output stream.
|
||||||
template<typename InputStream, typename OutputStream>
|
template<typename InputStream, typename OutputStream>
|
||||||
RAPIDJSON_FORCEINLINE static bool Transcode(InputStream& is, OutputStream& os) {
|
static RAPIDJSON_FORCEINLINE bool Transcode(InputStream& is, OutputStream& os) {
|
||||||
unsigned codepoint;
|
unsigned codepoint;
|
||||||
if (!SourceEncoding::Decode(is, &codepoint))
|
if (!SourceEncoding::Decode(is, &codepoint))
|
||||||
return false;
|
return false;
|
||||||
@@ -667,7 +667,7 @@ struct Transcoder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<typename InputStream, typename OutputStream>
|
template<typename InputStream, typename OutputStream>
|
||||||
RAPIDJSON_FORCEINLINE static bool TranscodeUnsafe(InputStream& is, OutputStream& os) {
|
static RAPIDJSON_FORCEINLINE bool TranscodeUnsafe(InputStream& is, OutputStream& os) {
|
||||||
unsigned codepoint;
|
unsigned codepoint;
|
||||||
if (!SourceEncoding::Decode(is, &codepoint))
|
if (!SourceEncoding::Decode(is, &codepoint))
|
||||||
return false;
|
return false;
|
||||||
@@ -677,7 +677,7 @@ struct Transcoder {
|
|||||||
|
|
||||||
//! Validate one Unicode codepoint from an encoded stream.
|
//! Validate one Unicode codepoint from an encoded stream.
|
||||||
template<typename InputStream, typename OutputStream>
|
template<typename InputStream, typename OutputStream>
|
||||||
RAPIDJSON_FORCEINLINE static bool Validate(InputStream& is, OutputStream& os) {
|
static RAPIDJSON_FORCEINLINE bool Validate(InputStream& is, OutputStream& os) {
|
||||||
return Transcode(is, os); // Since source/target encoding is different, must transcode.
|
return Transcode(is, os); // Since source/target encoding is different, must transcode.
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -690,26 +690,26 @@ inline void PutUnsafe(Stream& stream, typename Stream::Ch c);
|
|||||||
template<typename Encoding>
|
template<typename Encoding>
|
||||||
struct Transcoder<Encoding, Encoding> {
|
struct Transcoder<Encoding, Encoding> {
|
||||||
template<typename InputStream, typename OutputStream>
|
template<typename InputStream, typename OutputStream>
|
||||||
RAPIDJSON_FORCEINLINE static bool Transcode(InputStream& is, OutputStream& os) {
|
static RAPIDJSON_FORCEINLINE bool Transcode(InputStream& is, OutputStream& os) {
|
||||||
os.Put(is.Take()); // Just copy one code unit. This semantic is different from primary template class.
|
os.Put(is.Take()); // Just copy one code unit. This semantic is different from primary template class.
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename InputStream, typename OutputStream>
|
template<typename InputStream, typename OutputStream>
|
||||||
RAPIDJSON_FORCEINLINE static bool TranscodeUnsafe(InputStream& is, OutputStream& os) {
|
static RAPIDJSON_FORCEINLINE bool TranscodeUnsafe(InputStream& is, OutputStream& os) {
|
||||||
PutUnsafe(os, is.Take()); // Just copy one code unit. This semantic is different from primary template class.
|
PutUnsafe(os, is.Take()); // Just copy one code unit. This semantic is different from primary template class.
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename InputStream, typename OutputStream>
|
template<typename InputStream, typename OutputStream>
|
||||||
RAPIDJSON_FORCEINLINE static bool Validate(InputStream& is, OutputStream& os) {
|
static RAPIDJSON_FORCEINLINE bool Validate(InputStream& is, OutputStream& os) {
|
||||||
return Encoding::Validate(is, os); // source/target encoding are the same
|
return Encoding::Validate(is, os); // source/target encoding are the same
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
RAPIDJSON_NAMESPACE_END
|
RAPIDJSON_NAMESPACE_END
|
||||||
|
|
||||||
#if defined(__GNUC__) || defined(_MSC_VER)
|
#if defined(__GNUC__) || (defined(_MSC_VER) && !defined(__clang__))
|
||||||
RAPIDJSON_DIAG_POP
|
RAPIDJSON_DIAG_POP
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
10
src/3rdparty/rapidjson/error/error.h
vendored
10
src/3rdparty/rapidjson/error/error.h
vendored
@@ -104,6 +104,8 @@ enum ParseErrorCode {
|
|||||||
\see GenericReader::Parse, GenericDocument::Parse
|
\see GenericReader::Parse, GenericDocument::Parse
|
||||||
*/
|
*/
|
||||||
struct ParseResult {
|
struct ParseResult {
|
||||||
|
//!! Unspecified boolean type
|
||||||
|
typedef bool (ParseResult::*BooleanType)() const;
|
||||||
public:
|
public:
|
||||||
//! Default constructor, no error.
|
//! Default constructor, no error.
|
||||||
ParseResult() : code_(kParseErrorNone), offset_(0) {}
|
ParseResult() : code_(kParseErrorNone), offset_(0) {}
|
||||||
@@ -115,8 +117,8 @@ public:
|
|||||||
//! Get the error offset, if \ref IsError(), 0 otherwise.
|
//! Get the error offset, if \ref IsError(), 0 otherwise.
|
||||||
size_t Offset() const { return offset_; }
|
size_t Offset() const { return offset_; }
|
||||||
|
|
||||||
//! Conversion to \c bool, returns \c true, iff !\ref IsError().
|
//! Explicit conversion to \c bool, returns \c true, iff !\ref IsError().
|
||||||
operator bool() const { return !IsError(); }
|
operator BooleanType() const { return !IsError() ? &ParseResult::IsError : NULL; }
|
||||||
//! Whether the result is an error.
|
//! Whether the result is an error.
|
||||||
bool IsError() const { return code_ != kParseErrorNone; }
|
bool IsError() const { return code_ != kParseErrorNone; }
|
||||||
|
|
||||||
@@ -124,6 +126,10 @@ public:
|
|||||||
bool operator==(ParseErrorCode code) const { return code_ == code; }
|
bool operator==(ParseErrorCode code) const { return code_ == code; }
|
||||||
friend bool operator==(ParseErrorCode code, const ParseResult & err) { return code == err.code_; }
|
friend bool operator==(ParseErrorCode code, const ParseResult & err) { return code == err.code_; }
|
||||||
|
|
||||||
|
bool operator!=(const ParseResult& that) const { return !(*this == that); }
|
||||||
|
bool operator!=(ParseErrorCode code) const { return !(*this == code); }
|
||||||
|
friend bool operator!=(ParseErrorCode code, const ParseResult & err) { return err != code; }
|
||||||
|
|
||||||
//! Reset error code.
|
//! Reset error code.
|
||||||
void Clear() { Set(kParseErrorNone); }
|
void Clear() { Set(kParseErrorNone); }
|
||||||
//! Update error code and offset.
|
//! Update error code and offset.
|
||||||
|
|||||||
4
src/3rdparty/rapidjson/filereadstream.h
vendored
4
src/3rdparty/rapidjson/filereadstream.h
vendored
@@ -59,7 +59,7 @@ public:
|
|||||||
|
|
||||||
// For encoding detection only.
|
// For encoding detection only.
|
||||||
const Ch* Peek4() const {
|
const Ch* Peek4() const {
|
||||||
return (current_ + 4 <= bufferLast_) ? current_ : 0;
|
return (current_ + 4 - !eof_ <= bufferLast_) ? current_ : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -68,7 +68,7 @@ private:
|
|||||||
++current_;
|
++current_;
|
||||||
else if (!eof_) {
|
else if (!eof_) {
|
||||||
count_ += readCount_;
|
count_ += readCount_;
|
||||||
readCount_ = fread(buffer_, 1, bufferSize_, fp_);
|
readCount_ = std::fread(buffer_, 1, bufferSize_, fp_);
|
||||||
bufferLast_ = buffer_ + readCount_ - 1;
|
bufferLast_ = buffer_ + readCount_ - 1;
|
||||||
current_ = buffer_;
|
current_ = buffer_;
|
||||||
|
|
||||||
|
|||||||
4
src/3rdparty/rapidjson/filewritestream.h
vendored
4
src/3rdparty/rapidjson/filewritestream.h
vendored
@@ -25,7 +25,7 @@ RAPIDJSON_DIAG_OFF(unreachable-code)
|
|||||||
|
|
||||||
RAPIDJSON_NAMESPACE_BEGIN
|
RAPIDJSON_NAMESPACE_BEGIN
|
||||||
|
|
||||||
//! Wrapper of C file stream for input using fread().
|
//! Wrapper of C file stream for output using fwrite().
|
||||||
/*!
|
/*!
|
||||||
\note implements Stream concept
|
\note implements Stream concept
|
||||||
*/
|
*/
|
||||||
@@ -62,7 +62,7 @@ public:
|
|||||||
|
|
||||||
void Flush() {
|
void Flush() {
|
||||||
if (current_ != buffer_) {
|
if (current_ != buffer_) {
|
||||||
size_t result = fwrite(buffer_, 1, static_cast<size_t>(current_ - buffer_), fp_);
|
size_t result = std::fwrite(buffer_, 1, static_cast<size_t>(current_ - buffer_), fp_);
|
||||||
if (result < static_cast<size_t>(current_ - buffer_)) {
|
if (result < static_cast<size_t>(current_ - buffer_)) {
|
||||||
// failure deliberately ignored at this time
|
// failure deliberately ignored at this time
|
||||||
// added to avoid warn_unused_result build errors
|
// added to avoid warn_unused_result build errors
|
||||||
|
|||||||
4
src/3rdparty/rapidjson/internal/biginteger.h
vendored
4
src/3rdparty/rapidjson/internal/biginteger.h
vendored
@@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
#include "../rapidjson.h"
|
#include "../rapidjson.h"
|
||||||
|
|
||||||
#if defined(_MSC_VER) && defined(_M_AMD64)
|
#if defined(_MSC_VER) && !__INTEL_COMPILER && defined(_M_AMD64)
|
||||||
#include <intrin.h> // for _umul128
|
#include <intrin.h> // for _umul128
|
||||||
#pragma intrinsic(_umul128)
|
#pragma intrinsic(_umul128)
|
||||||
#endif
|
#endif
|
||||||
@@ -133,7 +133,7 @@ public:
|
|||||||
RAPIDJSON_ASSERT(count_ + offset <= kCapacity);
|
RAPIDJSON_ASSERT(count_ + offset <= kCapacity);
|
||||||
|
|
||||||
if (interShift == 0) {
|
if (interShift == 0) {
|
||||||
std::memmove(&digits_[count_ - 1 + offset], &digits_[count_ - 1], count_ * sizeof(Type));
|
std::memmove(digits_ + offset, digits_, count_ * sizeof(Type));
|
||||||
count_ += offset;
|
count_ += offset;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
37
src/3rdparty/rapidjson/internal/diyfp.h
vendored
37
src/3rdparty/rapidjson/internal/diyfp.h
vendored
@@ -1,5 +1,5 @@
|
|||||||
// Tencent is pleased to support the open source community by making RapidJSON available.
|
// Tencent is pleased to support the open source community by making RapidJSON available.
|
||||||
//
|
//
|
||||||
// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
|
// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
|
||||||
//
|
//
|
||||||
// Licensed under the MIT License (the "License"); you may not use this file except
|
// Licensed under the MIT License (the "License"); you may not use this file except
|
||||||
@@ -7,9 +7,9 @@
|
|||||||
//
|
//
|
||||||
// http://opensource.org/licenses/MIT
|
// http://opensource.org/licenses/MIT
|
||||||
//
|
//
|
||||||
// Unless required by applicable law or agreed to in writing, software distributed
|
// Unless required by applicable law or agreed to in writing, software distributed
|
||||||
// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||||||
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
||||||
// specific language governing permissions and limitations under the License.
|
// specific language governing permissions and limitations under the License.
|
||||||
|
|
||||||
// This is a C++ header-only implementation of Grisu2 algorithm from the publication:
|
// This is a C++ header-only implementation of Grisu2 algorithm from the publication:
|
||||||
@@ -20,8 +20,9 @@
|
|||||||
#define RAPIDJSON_DIYFP_H_
|
#define RAPIDJSON_DIYFP_H_
|
||||||
|
|
||||||
#include "../rapidjson.h"
|
#include "../rapidjson.h"
|
||||||
|
#include <limits>
|
||||||
|
|
||||||
#if defined(_MSC_VER) && defined(_M_AMD64)
|
#if defined(_MSC_VER) && defined(_M_AMD64) && !defined(__INTEL_COMPILER)
|
||||||
#include <intrin.h>
|
#include <intrin.h>
|
||||||
#pragma intrinsic(_BitScanReverse64)
|
#pragma intrinsic(_BitScanReverse64)
|
||||||
#pragma intrinsic(_umul128)
|
#pragma intrinsic(_umul128)
|
||||||
@@ -56,7 +57,7 @@ struct DiyFp {
|
|||||||
if (biased_e != 0) {
|
if (biased_e != 0) {
|
||||||
f = significand + kDpHiddenBit;
|
f = significand + kDpHiddenBit;
|
||||||
e = biased_e - kDpExponentBias;
|
e = biased_e - kDpExponentBias;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
f = significand;
|
f = significand;
|
||||||
e = kDpMinExponent + 1;
|
e = kDpMinExponent + 1;
|
||||||
@@ -99,6 +100,7 @@ struct DiyFp {
|
|||||||
}
|
}
|
||||||
|
|
||||||
DiyFp Normalize() const {
|
DiyFp Normalize() const {
|
||||||
|
RAPIDJSON_ASSERT(f != 0); // https://stackoverflow.com/a/26809183/291737
|
||||||
#if defined(_MSC_VER) && defined(_M_AMD64)
|
#if defined(_MSC_VER) && defined(_M_AMD64)
|
||||||
unsigned long index;
|
unsigned long index;
|
||||||
_BitScanReverse64(&index, f);
|
_BitScanReverse64(&index, f);
|
||||||
@@ -141,7 +143,16 @@ struct DiyFp {
|
|||||||
double d;
|
double d;
|
||||||
uint64_t u64;
|
uint64_t u64;
|
||||||
}u;
|
}u;
|
||||||
const uint64_t be = (e == kDpDenormalExponent && (f & kDpHiddenBit) == 0) ? 0 :
|
RAPIDJSON_ASSERT(f <= kDpHiddenBit + kDpSignificandMask);
|
||||||
|
if (e < kDpDenormalExponent) {
|
||||||
|
// Underflow.
|
||||||
|
return 0.0;
|
||||||
|
}
|
||||||
|
if (e >= kDpMaxExponent) {
|
||||||
|
// Overflow.
|
||||||
|
return std::numeric_limits<double>::infinity();
|
||||||
|
}
|
||||||
|
const uint64_t be = (e == kDpDenormalExponent && (f & kDpHiddenBit) == 0) ? 0 :
|
||||||
static_cast<uint64_t>(e + kDpExponentBias);
|
static_cast<uint64_t>(e + kDpExponentBias);
|
||||||
u.u64 = (f & kDpSignificandMask) | (be << kDpSignificandSize);
|
u.u64 = (f & kDpSignificandMask) | (be << kDpSignificandSize);
|
||||||
return u.d;
|
return u.d;
|
||||||
@@ -220,9 +231,10 @@ inline DiyFp GetCachedPowerByIndex(size_t index) {
|
|||||||
641, 667, 694, 720, 747, 774, 800, 827, 853, 880,
|
641, 667, 694, 720, 747, 774, 800, 827, 853, 880,
|
||||||
907, 933, 960, 986, 1013, 1039, 1066
|
907, 933, 960, 986, 1013, 1039, 1066
|
||||||
};
|
};
|
||||||
|
RAPIDJSON_ASSERT(index < 87);
|
||||||
return DiyFp(kCachedPowers_F[index], kCachedPowers_E[index]);
|
return DiyFp(kCachedPowers_F[index], kCachedPowers_E[index]);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline DiyFp GetCachedPower(int e, int* K) {
|
inline DiyFp GetCachedPower(int e, int* K) {
|
||||||
|
|
||||||
//int k = static_cast<int>(ceil((-61 - e) * 0.30102999566398114)) + 374;
|
//int k = static_cast<int>(ceil((-61 - e) * 0.30102999566398114)) + 374;
|
||||||
@@ -238,10 +250,11 @@ inline DiyFp GetCachedPower(int e, int* K) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
inline DiyFp GetCachedPower10(int exp, int *outExp) {
|
inline DiyFp GetCachedPower10(int exp, int *outExp) {
|
||||||
unsigned index = (static_cast<unsigned>(exp) + 348u) / 8u;
|
RAPIDJSON_ASSERT(exp >= -348);
|
||||||
*outExp = -348 + static_cast<int>(index) * 8;
|
unsigned index = static_cast<unsigned>(exp + 348) / 8u;
|
||||||
return GetCachedPowerByIndex(index);
|
*outExp = -348 + static_cast<int>(index) * 8;
|
||||||
}
|
return GetCachedPowerByIndex(index);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
RAPIDJSON_DIAG_POP
|
RAPIDJSON_DIAG_POP
|
||||||
|
|||||||
8
src/3rdparty/rapidjson/internal/dtoa.h
vendored
8
src/3rdparty/rapidjson/internal/dtoa.h
vendored
@@ -41,7 +41,7 @@ inline void GrisuRound(char* buffer, int len, uint64_t delta, uint64_t rest, uin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inline unsigned CountDecimalDigit32(uint32_t n) {
|
inline int CountDecimalDigit32(uint32_t n) {
|
||||||
// Simple pure C++ implementation was faster than __builtin_clz version in this situation.
|
// Simple pure C++ implementation was faster than __builtin_clz version in this situation.
|
||||||
if (n < 10) return 1;
|
if (n < 10) return 1;
|
||||||
if (n < 100) return 2;
|
if (n < 100) return 2;
|
||||||
@@ -63,7 +63,7 @@ inline void DigitGen(const DiyFp& W, const DiyFp& Mp, uint64_t delta, char* buff
|
|||||||
const DiyFp wp_w = Mp - W;
|
const DiyFp wp_w = Mp - W;
|
||||||
uint32_t p1 = static_cast<uint32_t>(Mp.f >> -one.e);
|
uint32_t p1 = static_cast<uint32_t>(Mp.f >> -one.e);
|
||||||
uint64_t p2 = Mp.f & (one.f - 1);
|
uint64_t p2 = Mp.f & (one.f - 1);
|
||||||
unsigned kappa = CountDecimalDigit32(p1); // kappa in [0, 9]
|
int kappa = CountDecimalDigit32(p1); // kappa in [0, 9]
|
||||||
*len = 0;
|
*len = 0;
|
||||||
|
|
||||||
while (kappa > 0) {
|
while (kappa > 0) {
|
||||||
@@ -102,8 +102,8 @@ inline void DigitGen(const DiyFp& W, const DiyFp& Mp, uint64_t delta, char* buff
|
|||||||
kappa--;
|
kappa--;
|
||||||
if (p2 < delta) {
|
if (p2 < delta) {
|
||||||
*K += kappa;
|
*K += kappa;
|
||||||
int index = -static_cast<int>(kappa);
|
int index = -kappa;
|
||||||
GrisuRound(buffer, *len, delta, p2, one.f, wp_w.f * (index < 9 ? kPow10[-static_cast<int>(kappa)] : 0));
|
GrisuRound(buffer, *len, delta, p2, one.f, wp_w.f * (index < 9 ? kPow10[index] : 0));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
4
src/3rdparty/rapidjson/internal/ieee754.h
vendored
4
src/3rdparty/rapidjson/internal/ieee754.h
vendored
@@ -48,13 +48,13 @@ public:
|
|||||||
int IntegerExponent() const { return (IsNormal() ? Exponent() : kDenormalExponent) - kSignificandSize; }
|
int IntegerExponent() const { return (IsNormal() ? Exponent() : kDenormalExponent) - kSignificandSize; }
|
||||||
uint64_t ToBias() const { return (u_ & kSignMask) ? ~u_ + 1 : u_ | kSignMask; }
|
uint64_t ToBias() const { return (u_ & kSignMask) ? ~u_ + 1 : u_ | kSignMask; }
|
||||||
|
|
||||||
static unsigned EffectiveSignificandSize(int order) {
|
static int EffectiveSignificandSize(int order) {
|
||||||
if (order >= -1021)
|
if (order >= -1021)
|
||||||
return 53;
|
return 53;
|
||||||
else if (order <= -1074)
|
else if (order <= -1074)
|
||||||
return 0;
|
return 0;
|
||||||
else
|
else
|
||||||
return static_cast<unsigned>(order) + 1074;
|
return order + 1074;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
82
src/3rdparty/rapidjson/internal/itoa.h
vendored
82
src/3rdparty/rapidjson/internal/itoa.h
vendored
@@ -1,5 +1,5 @@
|
|||||||
// Tencent is pleased to support the open source community by making RapidJSON available.
|
// Tencent is pleased to support the open source community by making RapidJSON available.
|
||||||
//
|
//
|
||||||
// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
|
// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
|
||||||
//
|
//
|
||||||
// Licensed under the MIT License (the "License"); you may not use this file except
|
// Licensed under the MIT License (the "License"); you may not use this file except
|
||||||
@@ -7,9 +7,9 @@
|
|||||||
//
|
//
|
||||||
// http://opensource.org/licenses/MIT
|
// http://opensource.org/licenses/MIT
|
||||||
//
|
//
|
||||||
// Unless required by applicable law or agreed to in writing, software distributed
|
// Unless required by applicable law or agreed to in writing, software distributed
|
||||||
// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||||||
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
||||||
// specific language governing permissions and limitations under the License.
|
// specific language governing permissions and limitations under the License.
|
||||||
|
|
||||||
#ifndef RAPIDJSON_ITOA_
|
#ifndef RAPIDJSON_ITOA_
|
||||||
@@ -37,12 +37,14 @@ inline const char* GetDigitsLut() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
inline char* u32toa(uint32_t value, char* buffer) {
|
inline char* u32toa(uint32_t value, char* buffer) {
|
||||||
|
RAPIDJSON_ASSERT(buffer != 0);
|
||||||
|
|
||||||
const char* cDigitsLut = GetDigitsLut();
|
const char* cDigitsLut = GetDigitsLut();
|
||||||
|
|
||||||
if (value < 10000) {
|
if (value < 10000) {
|
||||||
const uint32_t d1 = (value / 100) << 1;
|
const uint32_t d1 = (value / 100) << 1;
|
||||||
const uint32_t d2 = (value % 100) << 1;
|
const uint32_t d2 = (value % 100) << 1;
|
||||||
|
|
||||||
if (value >= 1000)
|
if (value >= 1000)
|
||||||
*buffer++ = cDigitsLut[d1];
|
*buffer++ = cDigitsLut[d1];
|
||||||
if (value >= 100)
|
if (value >= 100)
|
||||||
@@ -55,13 +57,13 @@ inline char* u32toa(uint32_t value, char* buffer) {
|
|||||||
// value = bbbbcccc
|
// value = bbbbcccc
|
||||||
const uint32_t b = value / 10000;
|
const uint32_t b = value / 10000;
|
||||||
const uint32_t c = value % 10000;
|
const uint32_t c = value % 10000;
|
||||||
|
|
||||||
const uint32_t d1 = (b / 100) << 1;
|
const uint32_t d1 = (b / 100) << 1;
|
||||||
const uint32_t d2 = (b % 100) << 1;
|
const uint32_t d2 = (b % 100) << 1;
|
||||||
|
|
||||||
const uint32_t d3 = (c / 100) << 1;
|
const uint32_t d3 = (c / 100) << 1;
|
||||||
const uint32_t d4 = (c % 100) << 1;
|
const uint32_t d4 = (c % 100) << 1;
|
||||||
|
|
||||||
if (value >= 10000000)
|
if (value >= 10000000)
|
||||||
*buffer++ = cDigitsLut[d1];
|
*buffer++ = cDigitsLut[d1];
|
||||||
if (value >= 1000000)
|
if (value >= 1000000)
|
||||||
@@ -69,7 +71,7 @@ inline char* u32toa(uint32_t value, char* buffer) {
|
|||||||
if (value >= 100000)
|
if (value >= 100000)
|
||||||
*buffer++ = cDigitsLut[d2];
|
*buffer++ = cDigitsLut[d2];
|
||||||
*buffer++ = cDigitsLut[d2 + 1];
|
*buffer++ = cDigitsLut[d2 + 1];
|
||||||
|
|
||||||
*buffer++ = cDigitsLut[d3];
|
*buffer++ = cDigitsLut[d3];
|
||||||
*buffer++ = cDigitsLut[d3 + 1];
|
*buffer++ = cDigitsLut[d3 + 1];
|
||||||
*buffer++ = cDigitsLut[d4];
|
*buffer++ = cDigitsLut[d4];
|
||||||
@@ -77,10 +79,10 @@ inline char* u32toa(uint32_t value, char* buffer) {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// value = aabbbbcccc in decimal
|
// value = aabbbbcccc in decimal
|
||||||
|
|
||||||
const uint32_t a = value / 100000000; // 1 to 42
|
const uint32_t a = value / 100000000; // 1 to 42
|
||||||
value %= 100000000;
|
value %= 100000000;
|
||||||
|
|
||||||
if (a >= 10) {
|
if (a >= 10) {
|
||||||
const unsigned i = a << 1;
|
const unsigned i = a << 1;
|
||||||
*buffer++ = cDigitsLut[i];
|
*buffer++ = cDigitsLut[i];
|
||||||
@@ -91,13 +93,13 @@ inline char* u32toa(uint32_t value, char* buffer) {
|
|||||||
|
|
||||||
const uint32_t b = value / 10000; // 0 to 9999
|
const uint32_t b = value / 10000; // 0 to 9999
|
||||||
const uint32_t c = value % 10000; // 0 to 9999
|
const uint32_t c = value % 10000; // 0 to 9999
|
||||||
|
|
||||||
const uint32_t d1 = (b / 100) << 1;
|
const uint32_t d1 = (b / 100) << 1;
|
||||||
const uint32_t d2 = (b % 100) << 1;
|
const uint32_t d2 = (b % 100) << 1;
|
||||||
|
|
||||||
const uint32_t d3 = (c / 100) << 1;
|
const uint32_t d3 = (c / 100) << 1;
|
||||||
const uint32_t d4 = (c % 100) << 1;
|
const uint32_t d4 = (c % 100) << 1;
|
||||||
|
|
||||||
*buffer++ = cDigitsLut[d1];
|
*buffer++ = cDigitsLut[d1];
|
||||||
*buffer++ = cDigitsLut[d1 + 1];
|
*buffer++ = cDigitsLut[d1 + 1];
|
||||||
*buffer++ = cDigitsLut[d2];
|
*buffer++ = cDigitsLut[d2];
|
||||||
@@ -111,6 +113,7 @@ inline char* u32toa(uint32_t value, char* buffer) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
inline char* i32toa(int32_t value, char* buffer) {
|
inline char* i32toa(int32_t value, char* buffer) {
|
||||||
|
RAPIDJSON_ASSERT(buffer != 0);
|
||||||
uint32_t u = static_cast<uint32_t>(value);
|
uint32_t u = static_cast<uint32_t>(value);
|
||||||
if (value < 0) {
|
if (value < 0) {
|
||||||
*buffer++ = '-';
|
*buffer++ = '-';
|
||||||
@@ -121,6 +124,7 @@ inline char* i32toa(int32_t value, char* buffer) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
inline char* u64toa(uint64_t value, char* buffer) {
|
inline char* u64toa(uint64_t value, char* buffer) {
|
||||||
|
RAPIDJSON_ASSERT(buffer != 0);
|
||||||
const char* cDigitsLut = GetDigitsLut();
|
const char* cDigitsLut = GetDigitsLut();
|
||||||
const uint64_t kTen8 = 100000000;
|
const uint64_t kTen8 = 100000000;
|
||||||
const uint64_t kTen9 = kTen8 * 10;
|
const uint64_t kTen9 = kTen8 * 10;
|
||||||
@@ -131,13 +135,13 @@ inline char* u64toa(uint64_t value, char* buffer) {
|
|||||||
const uint64_t kTen14 = kTen8 * 1000000;
|
const uint64_t kTen14 = kTen8 * 1000000;
|
||||||
const uint64_t kTen15 = kTen8 * 10000000;
|
const uint64_t kTen15 = kTen8 * 10000000;
|
||||||
const uint64_t kTen16 = kTen8 * kTen8;
|
const uint64_t kTen16 = kTen8 * kTen8;
|
||||||
|
|
||||||
if (value < kTen8) {
|
if (value < kTen8) {
|
||||||
uint32_t v = static_cast<uint32_t>(value);
|
uint32_t v = static_cast<uint32_t>(value);
|
||||||
if (v < 10000) {
|
if (v < 10000) {
|
||||||
const uint32_t d1 = (v / 100) << 1;
|
const uint32_t d1 = (v / 100) << 1;
|
||||||
const uint32_t d2 = (v % 100) << 1;
|
const uint32_t d2 = (v % 100) << 1;
|
||||||
|
|
||||||
if (v >= 1000)
|
if (v >= 1000)
|
||||||
*buffer++ = cDigitsLut[d1];
|
*buffer++ = cDigitsLut[d1];
|
||||||
if (v >= 100)
|
if (v >= 100)
|
||||||
@@ -150,13 +154,13 @@ inline char* u64toa(uint64_t value, char* buffer) {
|
|||||||
// value = bbbbcccc
|
// value = bbbbcccc
|
||||||
const uint32_t b = v / 10000;
|
const uint32_t b = v / 10000;
|
||||||
const uint32_t c = v % 10000;
|
const uint32_t c = v % 10000;
|
||||||
|
|
||||||
const uint32_t d1 = (b / 100) << 1;
|
const uint32_t d1 = (b / 100) << 1;
|
||||||
const uint32_t d2 = (b % 100) << 1;
|
const uint32_t d2 = (b % 100) << 1;
|
||||||
|
|
||||||
const uint32_t d3 = (c / 100) << 1;
|
const uint32_t d3 = (c / 100) << 1;
|
||||||
const uint32_t d4 = (c % 100) << 1;
|
const uint32_t d4 = (c % 100) << 1;
|
||||||
|
|
||||||
if (value >= 10000000)
|
if (value >= 10000000)
|
||||||
*buffer++ = cDigitsLut[d1];
|
*buffer++ = cDigitsLut[d1];
|
||||||
if (value >= 1000000)
|
if (value >= 1000000)
|
||||||
@@ -164,7 +168,7 @@ inline char* u64toa(uint64_t value, char* buffer) {
|
|||||||
if (value >= 100000)
|
if (value >= 100000)
|
||||||
*buffer++ = cDigitsLut[d2];
|
*buffer++ = cDigitsLut[d2];
|
||||||
*buffer++ = cDigitsLut[d2 + 1];
|
*buffer++ = cDigitsLut[d2 + 1];
|
||||||
|
|
||||||
*buffer++ = cDigitsLut[d3];
|
*buffer++ = cDigitsLut[d3];
|
||||||
*buffer++ = cDigitsLut[d3 + 1];
|
*buffer++ = cDigitsLut[d3 + 1];
|
||||||
*buffer++ = cDigitsLut[d4];
|
*buffer++ = cDigitsLut[d4];
|
||||||
@@ -174,22 +178,22 @@ inline char* u64toa(uint64_t value, char* buffer) {
|
|||||||
else if (value < kTen16) {
|
else if (value < kTen16) {
|
||||||
const uint32_t v0 = static_cast<uint32_t>(value / kTen8);
|
const uint32_t v0 = static_cast<uint32_t>(value / kTen8);
|
||||||
const uint32_t v1 = static_cast<uint32_t>(value % kTen8);
|
const uint32_t v1 = static_cast<uint32_t>(value % kTen8);
|
||||||
|
|
||||||
const uint32_t b0 = v0 / 10000;
|
const uint32_t b0 = v0 / 10000;
|
||||||
const uint32_t c0 = v0 % 10000;
|
const uint32_t c0 = v0 % 10000;
|
||||||
|
|
||||||
const uint32_t d1 = (b0 / 100) << 1;
|
const uint32_t d1 = (b0 / 100) << 1;
|
||||||
const uint32_t d2 = (b0 % 100) << 1;
|
const uint32_t d2 = (b0 % 100) << 1;
|
||||||
|
|
||||||
const uint32_t d3 = (c0 / 100) << 1;
|
const uint32_t d3 = (c0 / 100) << 1;
|
||||||
const uint32_t d4 = (c0 % 100) << 1;
|
const uint32_t d4 = (c0 % 100) << 1;
|
||||||
|
|
||||||
const uint32_t b1 = v1 / 10000;
|
const uint32_t b1 = v1 / 10000;
|
||||||
const uint32_t c1 = v1 % 10000;
|
const uint32_t c1 = v1 % 10000;
|
||||||
|
|
||||||
const uint32_t d5 = (b1 / 100) << 1;
|
const uint32_t d5 = (b1 / 100) << 1;
|
||||||
const uint32_t d6 = (b1 % 100) << 1;
|
const uint32_t d6 = (b1 % 100) << 1;
|
||||||
|
|
||||||
const uint32_t d7 = (c1 / 100) << 1;
|
const uint32_t d7 = (c1 / 100) << 1;
|
||||||
const uint32_t d8 = (c1 % 100) << 1;
|
const uint32_t d8 = (c1 % 100) << 1;
|
||||||
|
|
||||||
@@ -207,9 +211,8 @@ inline char* u64toa(uint64_t value, char* buffer) {
|
|||||||
*buffer++ = cDigitsLut[d3 + 1];
|
*buffer++ = cDigitsLut[d3 + 1];
|
||||||
if (value >= kTen9)
|
if (value >= kTen9)
|
||||||
*buffer++ = cDigitsLut[d4];
|
*buffer++ = cDigitsLut[d4];
|
||||||
if (value >= kTen8)
|
|
||||||
*buffer++ = cDigitsLut[d4 + 1];
|
*buffer++ = cDigitsLut[d4 + 1];
|
||||||
|
|
||||||
*buffer++ = cDigitsLut[d5];
|
*buffer++ = cDigitsLut[d5];
|
||||||
*buffer++ = cDigitsLut[d5 + 1];
|
*buffer++ = cDigitsLut[d5 + 1];
|
||||||
*buffer++ = cDigitsLut[d6];
|
*buffer++ = cDigitsLut[d6];
|
||||||
@@ -222,7 +225,7 @@ inline char* u64toa(uint64_t value, char* buffer) {
|
|||||||
else {
|
else {
|
||||||
const uint32_t a = static_cast<uint32_t>(value / kTen16); // 1 to 1844
|
const uint32_t a = static_cast<uint32_t>(value / kTen16); // 1 to 1844
|
||||||
value %= kTen16;
|
value %= kTen16;
|
||||||
|
|
||||||
if (a < 10)
|
if (a < 10)
|
||||||
*buffer++ = static_cast<char>('0' + static_cast<char>(a));
|
*buffer++ = static_cast<char>('0' + static_cast<char>(a));
|
||||||
else if (a < 100) {
|
else if (a < 100) {
|
||||||
@@ -232,7 +235,7 @@ inline char* u64toa(uint64_t value, char* buffer) {
|
|||||||
}
|
}
|
||||||
else if (a < 1000) {
|
else if (a < 1000) {
|
||||||
*buffer++ = static_cast<char>('0' + static_cast<char>(a / 100));
|
*buffer++ = static_cast<char>('0' + static_cast<char>(a / 100));
|
||||||
|
|
||||||
const uint32_t i = (a % 100) << 1;
|
const uint32_t i = (a % 100) << 1;
|
||||||
*buffer++ = cDigitsLut[i];
|
*buffer++ = cDigitsLut[i];
|
||||||
*buffer++ = cDigitsLut[i + 1];
|
*buffer++ = cDigitsLut[i + 1];
|
||||||
@@ -245,28 +248,28 @@ inline char* u64toa(uint64_t value, char* buffer) {
|
|||||||
*buffer++ = cDigitsLut[j];
|
*buffer++ = cDigitsLut[j];
|
||||||
*buffer++ = cDigitsLut[j + 1];
|
*buffer++ = cDigitsLut[j + 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
const uint32_t v0 = static_cast<uint32_t>(value / kTen8);
|
const uint32_t v0 = static_cast<uint32_t>(value / kTen8);
|
||||||
const uint32_t v1 = static_cast<uint32_t>(value % kTen8);
|
const uint32_t v1 = static_cast<uint32_t>(value % kTen8);
|
||||||
|
|
||||||
const uint32_t b0 = v0 / 10000;
|
const uint32_t b0 = v0 / 10000;
|
||||||
const uint32_t c0 = v0 % 10000;
|
const uint32_t c0 = v0 % 10000;
|
||||||
|
|
||||||
const uint32_t d1 = (b0 / 100) << 1;
|
const uint32_t d1 = (b0 / 100) << 1;
|
||||||
const uint32_t d2 = (b0 % 100) << 1;
|
const uint32_t d2 = (b0 % 100) << 1;
|
||||||
|
|
||||||
const uint32_t d3 = (c0 / 100) << 1;
|
const uint32_t d3 = (c0 / 100) << 1;
|
||||||
const uint32_t d4 = (c0 % 100) << 1;
|
const uint32_t d4 = (c0 % 100) << 1;
|
||||||
|
|
||||||
const uint32_t b1 = v1 / 10000;
|
const uint32_t b1 = v1 / 10000;
|
||||||
const uint32_t c1 = v1 % 10000;
|
const uint32_t c1 = v1 % 10000;
|
||||||
|
|
||||||
const uint32_t d5 = (b1 / 100) << 1;
|
const uint32_t d5 = (b1 / 100) << 1;
|
||||||
const uint32_t d6 = (b1 % 100) << 1;
|
const uint32_t d6 = (b1 % 100) << 1;
|
||||||
|
|
||||||
const uint32_t d7 = (c1 / 100) << 1;
|
const uint32_t d7 = (c1 / 100) << 1;
|
||||||
const uint32_t d8 = (c1 % 100) << 1;
|
const uint32_t d8 = (c1 % 100) << 1;
|
||||||
|
|
||||||
*buffer++ = cDigitsLut[d1];
|
*buffer++ = cDigitsLut[d1];
|
||||||
*buffer++ = cDigitsLut[d1 + 1];
|
*buffer++ = cDigitsLut[d1 + 1];
|
||||||
*buffer++ = cDigitsLut[d2];
|
*buffer++ = cDigitsLut[d2];
|
||||||
@@ -284,11 +287,12 @@ inline char* u64toa(uint64_t value, char* buffer) {
|
|||||||
*buffer++ = cDigitsLut[d8];
|
*buffer++ = cDigitsLut[d8];
|
||||||
*buffer++ = cDigitsLut[d8 + 1];
|
*buffer++ = cDigitsLut[d8 + 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline char* i64toa(int64_t value, char* buffer) {
|
inline char* i64toa(int64_t value, char* buffer) {
|
||||||
|
RAPIDJSON_ASSERT(buffer != 0);
|
||||||
uint64_t u = static_cast<uint64_t>(value);
|
uint64_t u = static_cast<uint64_t>(value);
|
||||||
if (value < 0) {
|
if (value < 0) {
|
||||||
*buffer++ = '-';
|
*buffer++ = '-';
|
||||||
|
|||||||
9
src/3rdparty/rapidjson/internal/meta.h
vendored
9
src/3rdparty/rapidjson/internal/meta.h
vendored
@@ -21,7 +21,8 @@
|
|||||||
RAPIDJSON_DIAG_PUSH
|
RAPIDJSON_DIAG_PUSH
|
||||||
RAPIDJSON_DIAG_OFF(effc++)
|
RAPIDJSON_DIAG_OFF(effc++)
|
||||||
#endif
|
#endif
|
||||||
#if defined(_MSC_VER)
|
|
||||||
|
#if defined(_MSC_VER) && !defined(__clang__)
|
||||||
RAPIDJSON_DIAG_PUSH
|
RAPIDJSON_DIAG_PUSH
|
||||||
RAPIDJSON_DIAG_OFF(6334)
|
RAPIDJSON_DIAG_OFF(6334)
|
||||||
#endif
|
#endif
|
||||||
@@ -174,7 +175,11 @@ template <typename T> struct RemoveSfinaeTag<SfinaeTag&(*)(T)> { typedef T Type;
|
|||||||
RAPIDJSON_NAMESPACE_END
|
RAPIDJSON_NAMESPACE_END
|
||||||
//@endcond
|
//@endcond
|
||||||
|
|
||||||
#if defined(__GNUC__) || defined(_MSC_VER)
|
#if defined(_MSC_VER) && !defined(__clang__)
|
||||||
|
RAPIDJSON_DIAG_POP
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
RAPIDJSON_DIAG_POP
|
RAPIDJSON_DIAG_POP
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
319
src/3rdparty/rapidjson/internal/regex.h
vendored
319
src/3rdparty/rapidjson/internal/regex.h
vendored
@@ -24,16 +24,17 @@ RAPIDJSON_DIAG_PUSH
|
|||||||
RAPIDJSON_DIAG_OFF(padded)
|
RAPIDJSON_DIAG_OFF(padded)
|
||||||
RAPIDJSON_DIAG_OFF(switch-enum)
|
RAPIDJSON_DIAG_OFF(switch-enum)
|
||||||
RAPIDJSON_DIAG_OFF(implicit-fallthrough)
|
RAPIDJSON_DIAG_OFF(implicit-fallthrough)
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
RAPIDJSON_DIAG_PUSH
|
||||||
|
RAPIDJSON_DIAG_OFF(4512) // assignment operator could not be generated
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
RAPIDJSON_DIAG_PUSH
|
RAPIDJSON_DIAG_PUSH
|
||||||
RAPIDJSON_DIAG_OFF(effc++)
|
RAPIDJSON_DIAG_OFF(effc++)
|
||||||
|
#if __GNUC__ >= 7
|
||||||
|
RAPIDJSON_DIAG_OFF(implicit-fallthrough)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
RAPIDJSON_DIAG_PUSH
|
|
||||||
RAPIDJSON_DIAG_OFF(4512) // assignment operator could not be generated
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef RAPIDJSON_REGEX_VERBOSE
|
#ifndef RAPIDJSON_REGEX_VERBOSE
|
||||||
@@ -43,12 +44,40 @@ RAPIDJSON_DIAG_OFF(4512) // assignment operator could not be generated
|
|||||||
RAPIDJSON_NAMESPACE_BEGIN
|
RAPIDJSON_NAMESPACE_BEGIN
|
||||||
namespace internal {
|
namespace internal {
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// DecodedStream
|
||||||
|
|
||||||
|
template <typename SourceStream, typename Encoding>
|
||||||
|
class DecodedStream {
|
||||||
|
public:
|
||||||
|
DecodedStream(SourceStream& ss) : ss_(ss), codepoint_() { Decode(); }
|
||||||
|
unsigned Peek() { return codepoint_; }
|
||||||
|
unsigned Take() {
|
||||||
|
unsigned c = codepoint_;
|
||||||
|
if (c) // No further decoding when '\0'
|
||||||
|
Decode();
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
void Decode() {
|
||||||
|
if (!Encoding::Decode(ss_, &codepoint_))
|
||||||
|
codepoint_ = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
SourceStream& ss_;
|
||||||
|
unsigned codepoint_;
|
||||||
|
};
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// GenericRegex
|
// GenericRegex
|
||||||
|
|
||||||
static const SizeType kRegexInvalidState = ~SizeType(0); //!< Represents an invalid index in GenericRegex::State::out, out1
|
static const SizeType kRegexInvalidState = ~SizeType(0); //!< Represents an invalid index in GenericRegex::State::out, out1
|
||||||
static const SizeType kRegexInvalidRange = ~SizeType(0);
|
static const SizeType kRegexInvalidRange = ~SizeType(0);
|
||||||
|
|
||||||
|
template <typename Encoding, typename Allocator>
|
||||||
|
class GenericRegexSearch;
|
||||||
|
|
||||||
//! Regular expression engine with subset of ECMAscript grammar.
|
//! Regular expression engine with subset of ECMAscript grammar.
|
||||||
/*!
|
/*!
|
||||||
Supported regular expression syntax:
|
Supported regular expression syntax:
|
||||||
@@ -84,45 +113,29 @@ static const SizeType kRegexInvalidRange = ~SizeType(0);
|
|||||||
template <typename Encoding, typename Allocator = CrtAllocator>
|
template <typename Encoding, typename Allocator = CrtAllocator>
|
||||||
class GenericRegex {
|
class GenericRegex {
|
||||||
public:
|
public:
|
||||||
|
typedef Encoding EncodingType;
|
||||||
typedef typename Encoding::Ch Ch;
|
typedef typename Encoding::Ch Ch;
|
||||||
|
template <typename, typename> friend class GenericRegexSearch;
|
||||||
|
|
||||||
GenericRegex(const Ch* source, Allocator* allocator = 0) :
|
GenericRegex(const Ch* source, Allocator* allocator = 0) :
|
||||||
states_(allocator, 256), ranges_(allocator, 256), root_(kRegexInvalidState), stateCount_(), rangeCount_(),
|
ownAllocator_(allocator ? 0 : RAPIDJSON_NEW(Allocator)()), allocator_(allocator ? allocator : ownAllocator_),
|
||||||
stateSet_(), state0_(allocator, 0), state1_(allocator, 0), anchorBegin_(), anchorEnd_()
|
states_(allocator_, 256), ranges_(allocator_, 256), root_(kRegexInvalidState), stateCount_(), rangeCount_(),
|
||||||
|
anchorBegin_(), anchorEnd_()
|
||||||
{
|
{
|
||||||
GenericStringStream<Encoding> ss(source);
|
GenericStringStream<Encoding> ss(source);
|
||||||
DecodedStream<GenericStringStream<Encoding> > ds(ss);
|
DecodedStream<GenericStringStream<Encoding>, Encoding> ds(ss);
|
||||||
Parse(ds);
|
Parse(ds);
|
||||||
}
|
}
|
||||||
|
|
||||||
~GenericRegex() {
|
~GenericRegex()
|
||||||
Allocator::Free(stateSet_);
|
{
|
||||||
|
RAPIDJSON_DELETE(ownAllocator_);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IsValid() const {
|
bool IsValid() const {
|
||||||
return root_ != kRegexInvalidState;
|
return root_ != kRegexInvalidState;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename InputStream>
|
|
||||||
bool Match(InputStream& is) const {
|
|
||||||
return SearchWithAnchoring(is, true, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Match(const Ch* s) const {
|
|
||||||
GenericStringStream<Encoding> is(s);
|
|
||||||
return Match(is);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename InputStream>
|
|
||||||
bool Search(InputStream& is) const {
|
|
||||||
return SearchWithAnchoring(is, anchorBegin_, anchorEnd_);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Search(const Ch* s) const {
|
|
||||||
GenericStringStream<Encoding> is(s);
|
|
||||||
return Search(is);
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
enum Operator {
|
enum Operator {
|
||||||
kZeroOrOne,
|
kZeroOrOne,
|
||||||
@@ -157,28 +170,6 @@ private:
|
|||||||
SizeType minIndex;
|
SizeType minIndex;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename SourceStream>
|
|
||||||
class DecodedStream {
|
|
||||||
public:
|
|
||||||
DecodedStream(SourceStream& ss) : ss_(ss), codepoint_() { Decode(); }
|
|
||||||
unsigned Peek() { return codepoint_; }
|
|
||||||
unsigned Take() {
|
|
||||||
unsigned c = codepoint_;
|
|
||||||
if (c) // No further decoding when '\0'
|
|
||||||
Decode();
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
void Decode() {
|
|
||||||
if (!Encoding::Decode(ss_, &codepoint_))
|
|
||||||
codepoint_ = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
SourceStream& ss_;
|
|
||||||
unsigned codepoint_;
|
|
||||||
};
|
|
||||||
|
|
||||||
State& GetState(SizeType index) {
|
State& GetState(SizeType index) {
|
||||||
RAPIDJSON_ASSERT(index < stateCount_);
|
RAPIDJSON_ASSERT(index < stateCount_);
|
||||||
return states_.template Bottom<State>()[index];
|
return states_.template Bottom<State>()[index];
|
||||||
@@ -200,11 +191,10 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename InputStream>
|
template <typename InputStream>
|
||||||
void Parse(DecodedStream<InputStream>& ds) {
|
void Parse(DecodedStream<InputStream, Encoding>& ds) {
|
||||||
Allocator allocator;
|
Stack<Allocator> operandStack(allocator_, 256); // Frag
|
||||||
Stack<Allocator> operandStack(&allocator, 256); // Frag
|
Stack<Allocator> operatorStack(allocator_, 256); // Operator
|
||||||
Stack<Allocator> operatorStack(&allocator, 256); // Operator
|
Stack<Allocator> atomCountStack(allocator_, 256); // unsigned (Atom per parenthesis)
|
||||||
Stack<Allocator> atomCountStack(&allocator, 256); // unsigned (Atom per parenthesis)
|
|
||||||
|
|
||||||
*atomCountStack.template Push<unsigned>() = 0;
|
*atomCountStack.template Push<unsigned>() = 0;
|
||||||
|
|
||||||
@@ -327,14 +317,6 @@ private:
|
|||||||
printf("\n");
|
printf("\n");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// Preallocate buffer for SearchWithAnchoring()
|
|
||||||
RAPIDJSON_ASSERT(stateSet_ == 0);
|
|
||||||
if (stateCount_ > 0) {
|
|
||||||
stateSet_ = static_cast<unsigned*>(states_.GetAllocator().Malloc(GetStateSetSize()));
|
|
||||||
state0_.template Reserve<SizeType>(stateCount_);
|
|
||||||
state1_.template Reserve<SizeType>(stateCount_);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SizeType NewState(SizeType out, SizeType out1, unsigned codepoint) {
|
SizeType NewState(SizeType out, SizeType out1, unsigned codepoint) {
|
||||||
@@ -413,8 +395,7 @@ private:
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
default:
|
case kOneOrMore:
|
||||||
RAPIDJSON_ASSERT(op == kOneOrMore);
|
|
||||||
if (operandStack.GetSize() >= sizeof(Frag)) {
|
if (operandStack.GetSize() >= sizeof(Frag)) {
|
||||||
Frag e = *operandStack.template Pop<Frag>(1);
|
Frag e = *operandStack.template Pop<Frag>(1);
|
||||||
SizeType s = NewState(kRegexInvalidState, e.start, 0);
|
SizeType s = NewState(kRegexInvalidState, e.start, 0);
|
||||||
@@ -423,6 +404,10 @@ private:
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
default:
|
||||||
|
// syntax error (e.g. unclosed kLeftParenthesis)
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -483,7 +468,7 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename InputStream>
|
template <typename InputStream>
|
||||||
bool ParseUnsigned(DecodedStream<InputStream>& ds, unsigned* u) {
|
bool ParseUnsigned(DecodedStream<InputStream, Encoding>& ds, unsigned* u) {
|
||||||
unsigned r = 0;
|
unsigned r = 0;
|
||||||
if (ds.Peek() < '0' || ds.Peek() > '9')
|
if (ds.Peek() < '0' || ds.Peek() > '9')
|
||||||
return false;
|
return false;
|
||||||
@@ -497,7 +482,7 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename InputStream>
|
template <typename InputStream>
|
||||||
bool ParseRange(DecodedStream<InputStream>& ds, SizeType* range) {
|
bool ParseRange(DecodedStream<InputStream, Encoding>& ds, SizeType* range) {
|
||||||
bool isBegin = true;
|
bool isBegin = true;
|
||||||
bool negate = false;
|
bool negate = false;
|
||||||
int step = 0;
|
int step = 0;
|
||||||
@@ -575,7 +560,7 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename InputStream>
|
template <typename InputStream>
|
||||||
bool CharacterEscape(DecodedStream<InputStream>& ds, unsigned* escapedCodepoint) {
|
bool CharacterEscape(DecodedStream<InputStream, Encoding>& ds, unsigned* escapedCodepoint) {
|
||||||
unsigned codepoint;
|
unsigned codepoint;
|
||||||
switch (codepoint = ds.Take()) {
|
switch (codepoint = ds.Take()) {
|
||||||
case '^':
|
case '^':
|
||||||
@@ -603,72 +588,8 @@ private:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename InputStream>
|
Allocator* ownAllocator_;
|
||||||
bool SearchWithAnchoring(InputStream& is, bool anchorBegin, bool anchorEnd) const {
|
Allocator* allocator_;
|
||||||
RAPIDJSON_ASSERT(IsValid());
|
|
||||||
DecodedStream<InputStream> ds(is);
|
|
||||||
|
|
||||||
state0_.Clear();
|
|
||||||
Stack<Allocator> *current = &state0_, *next = &state1_;
|
|
||||||
const size_t stateSetSize = GetStateSetSize();
|
|
||||||
std::memset(stateSet_, 0, stateSetSize);
|
|
||||||
|
|
||||||
bool matched = AddState(*current, root_);
|
|
||||||
unsigned codepoint;
|
|
||||||
while (!current->Empty() && (codepoint = ds.Take()) != 0) {
|
|
||||||
std::memset(stateSet_, 0, stateSetSize);
|
|
||||||
next->Clear();
|
|
||||||
matched = false;
|
|
||||||
for (const SizeType* s = current->template Bottom<SizeType>(); s != current->template End<SizeType>(); ++s) {
|
|
||||||
const State& sr = GetState(*s);
|
|
||||||
if (sr.codepoint == codepoint ||
|
|
||||||
sr.codepoint == kAnyCharacterClass ||
|
|
||||||
(sr.codepoint == kRangeCharacterClass && MatchRange(sr.rangeStart, codepoint)))
|
|
||||||
{
|
|
||||||
matched = AddState(*next, sr.out) || matched;
|
|
||||||
if (!anchorEnd && matched)
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (!anchorBegin)
|
|
||||||
AddState(*next, root_);
|
|
||||||
}
|
|
||||||
internal::Swap(current, next);
|
|
||||||
}
|
|
||||||
|
|
||||||
return matched;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t GetStateSetSize() const {
|
|
||||||
return (stateCount_ + 31) / 32 * 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return whether the added states is a match state
|
|
||||||
bool AddState(Stack<Allocator>& l, SizeType index) const {
|
|
||||||
RAPIDJSON_ASSERT(index != kRegexInvalidState);
|
|
||||||
|
|
||||||
const State& s = GetState(index);
|
|
||||||
if (s.out1 != kRegexInvalidState) { // Split
|
|
||||||
bool matched = AddState(l, s.out);
|
|
||||||
return AddState(l, s.out1) || matched;
|
|
||||||
}
|
|
||||||
else if (!(stateSet_[index >> 5] & (1 << (index & 31)))) {
|
|
||||||
stateSet_[index >> 5] |= (1 << (index & 31));
|
|
||||||
*l.template PushUnsafe<SizeType>() = index;
|
|
||||||
}
|
|
||||||
return s.out == kRegexInvalidState; // by using PushUnsafe() above, we can ensure s is not validated due to reallocation.
|
|
||||||
}
|
|
||||||
|
|
||||||
bool MatchRange(SizeType rangeIndex, unsigned codepoint) const {
|
|
||||||
bool yes = (GetRange(rangeIndex).start & kRangeNegationFlag) == 0;
|
|
||||||
while (rangeIndex != kRegexInvalidRange) {
|
|
||||||
const Range& r = GetRange(rangeIndex);
|
|
||||||
if (codepoint >= (r.start & ~kRangeNegationFlag) && codepoint <= r.end)
|
|
||||||
return yes;
|
|
||||||
rangeIndex = r.next;
|
|
||||||
}
|
|
||||||
return !yes;
|
|
||||||
}
|
|
||||||
|
|
||||||
Stack<Allocator> states_;
|
Stack<Allocator> states_;
|
||||||
Stack<Allocator> ranges_;
|
Stack<Allocator> ranges_;
|
||||||
SizeType root_;
|
SizeType root_;
|
||||||
@@ -678,23 +599,141 @@ private:
|
|||||||
static const unsigned kInfinityQuantifier = ~0u;
|
static const unsigned kInfinityQuantifier = ~0u;
|
||||||
|
|
||||||
// For SearchWithAnchoring()
|
// For SearchWithAnchoring()
|
||||||
uint32_t* stateSet_; // allocated by states_.GetAllocator()
|
|
||||||
mutable Stack<Allocator> state0_;
|
|
||||||
mutable Stack<Allocator> state1_;
|
|
||||||
bool anchorBegin_;
|
bool anchorBegin_;
|
||||||
bool anchorEnd_;
|
bool anchorEnd_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <typename RegexType, typename Allocator = CrtAllocator>
|
||||||
|
class GenericRegexSearch {
|
||||||
|
public:
|
||||||
|
typedef typename RegexType::EncodingType Encoding;
|
||||||
|
typedef typename Encoding::Ch Ch;
|
||||||
|
|
||||||
|
GenericRegexSearch(const RegexType& regex, Allocator* allocator = 0) :
|
||||||
|
regex_(regex), allocator_(allocator), ownAllocator_(0),
|
||||||
|
state0_(allocator, 0), state1_(allocator, 0), stateSet_()
|
||||||
|
{
|
||||||
|
RAPIDJSON_ASSERT(regex_.IsValid());
|
||||||
|
if (!allocator_)
|
||||||
|
ownAllocator_ = allocator_ = RAPIDJSON_NEW(Allocator)();
|
||||||
|
stateSet_ = static_cast<unsigned*>(allocator_->Malloc(GetStateSetSize()));
|
||||||
|
state0_.template Reserve<SizeType>(regex_.stateCount_);
|
||||||
|
state1_.template Reserve<SizeType>(regex_.stateCount_);
|
||||||
|
}
|
||||||
|
|
||||||
|
~GenericRegexSearch() {
|
||||||
|
Allocator::Free(stateSet_);
|
||||||
|
RAPIDJSON_DELETE(ownAllocator_);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename InputStream>
|
||||||
|
bool Match(InputStream& is) {
|
||||||
|
return SearchWithAnchoring(is, true, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Match(const Ch* s) {
|
||||||
|
GenericStringStream<Encoding> is(s);
|
||||||
|
return Match(is);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename InputStream>
|
||||||
|
bool Search(InputStream& is) {
|
||||||
|
return SearchWithAnchoring(is, regex_.anchorBegin_, regex_.anchorEnd_);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Search(const Ch* s) {
|
||||||
|
GenericStringStream<Encoding> is(s);
|
||||||
|
return Search(is);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
typedef typename RegexType::State State;
|
||||||
|
typedef typename RegexType::Range Range;
|
||||||
|
|
||||||
|
template <typename InputStream>
|
||||||
|
bool SearchWithAnchoring(InputStream& is, bool anchorBegin, bool anchorEnd) {
|
||||||
|
DecodedStream<InputStream, Encoding> ds(is);
|
||||||
|
|
||||||
|
state0_.Clear();
|
||||||
|
Stack<Allocator> *current = &state0_, *next = &state1_;
|
||||||
|
const size_t stateSetSize = GetStateSetSize();
|
||||||
|
std::memset(stateSet_, 0, stateSetSize);
|
||||||
|
|
||||||
|
bool matched = AddState(*current, regex_.root_);
|
||||||
|
unsigned codepoint;
|
||||||
|
while (!current->Empty() && (codepoint = ds.Take()) != 0) {
|
||||||
|
std::memset(stateSet_, 0, stateSetSize);
|
||||||
|
next->Clear();
|
||||||
|
matched = false;
|
||||||
|
for (const SizeType* s = current->template Bottom<SizeType>(); s != current->template End<SizeType>(); ++s) {
|
||||||
|
const State& sr = regex_.GetState(*s);
|
||||||
|
if (sr.codepoint == codepoint ||
|
||||||
|
sr.codepoint == RegexType::kAnyCharacterClass ||
|
||||||
|
(sr.codepoint == RegexType::kRangeCharacterClass && MatchRange(sr.rangeStart, codepoint)))
|
||||||
|
{
|
||||||
|
matched = AddState(*next, sr.out) || matched;
|
||||||
|
if (!anchorEnd && matched)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (!anchorBegin)
|
||||||
|
AddState(*next, regex_.root_);
|
||||||
|
}
|
||||||
|
internal::Swap(current, next);
|
||||||
|
}
|
||||||
|
|
||||||
|
return matched;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t GetStateSetSize() const {
|
||||||
|
return (regex_.stateCount_ + 31) / 32 * 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return whether the added states is a match state
|
||||||
|
bool AddState(Stack<Allocator>& l, SizeType index) {
|
||||||
|
RAPIDJSON_ASSERT(index != kRegexInvalidState);
|
||||||
|
|
||||||
|
const State& s = regex_.GetState(index);
|
||||||
|
if (s.out1 != kRegexInvalidState) { // Split
|
||||||
|
bool matched = AddState(l, s.out);
|
||||||
|
return AddState(l, s.out1) || matched;
|
||||||
|
}
|
||||||
|
else if (!(stateSet_[index >> 5] & (1u << (index & 31)))) {
|
||||||
|
stateSet_[index >> 5] |= (1u << (index & 31));
|
||||||
|
*l.template PushUnsafe<SizeType>() = index;
|
||||||
|
}
|
||||||
|
return s.out == kRegexInvalidState; // by using PushUnsafe() above, we can ensure s is not validated due to reallocation.
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MatchRange(SizeType rangeIndex, unsigned codepoint) const {
|
||||||
|
bool yes = (regex_.GetRange(rangeIndex).start & RegexType::kRangeNegationFlag) == 0;
|
||||||
|
while (rangeIndex != kRegexInvalidRange) {
|
||||||
|
const Range& r = regex_.GetRange(rangeIndex);
|
||||||
|
if (codepoint >= (r.start & ~RegexType::kRangeNegationFlag) && codepoint <= r.end)
|
||||||
|
return yes;
|
||||||
|
rangeIndex = r.next;
|
||||||
|
}
|
||||||
|
return !yes;
|
||||||
|
}
|
||||||
|
|
||||||
|
const RegexType& regex_;
|
||||||
|
Allocator* allocator_;
|
||||||
|
Allocator* ownAllocator_;
|
||||||
|
Stack<Allocator> state0_;
|
||||||
|
Stack<Allocator> state1_;
|
||||||
|
uint32_t* stateSet_;
|
||||||
|
};
|
||||||
|
|
||||||
typedef GenericRegex<UTF8<> > Regex;
|
typedef GenericRegex<UTF8<> > Regex;
|
||||||
|
typedef GenericRegexSearch<Regex> RegexSearch;
|
||||||
|
|
||||||
} // namespace internal
|
} // namespace internal
|
||||||
RAPIDJSON_NAMESPACE_END
|
RAPIDJSON_NAMESPACE_END
|
||||||
|
|
||||||
#ifdef __clang__
|
#ifdef __GNUC__
|
||||||
RAPIDJSON_DIAG_POP
|
RAPIDJSON_DIAG_POP
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#if defined(__clang__) || defined(_MSC_VER)
|
||||||
RAPIDJSON_DIAG_POP
|
RAPIDJSON_DIAG_POP
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
10
src/3rdparty/rapidjson/internal/stack.h
vendored
10
src/3rdparty/rapidjson/internal/stack.h
vendored
@@ -17,6 +17,7 @@
|
|||||||
|
|
||||||
#include "../allocators.h"
|
#include "../allocators.h"
|
||||||
#include "swap.h"
|
#include "swap.h"
|
||||||
|
#include <cstddef>
|
||||||
|
|
||||||
#if defined(__clang__)
|
#if defined(__clang__)
|
||||||
RAPIDJSON_DIAG_PUSH
|
RAPIDJSON_DIAG_PUSH
|
||||||
@@ -100,7 +101,7 @@ public:
|
|||||||
void ShrinkToFit() {
|
void ShrinkToFit() {
|
||||||
if (Empty()) {
|
if (Empty()) {
|
||||||
// If the stack is empty, completely deallocate the memory.
|
// If the stack is empty, completely deallocate the memory.
|
||||||
Allocator::Free(stack_);
|
Allocator::Free(stack_); // NOLINT (+clang-analyzer-unix.Malloc)
|
||||||
stack_ = 0;
|
stack_ = 0;
|
||||||
stackTop_ = 0;
|
stackTop_ = 0;
|
||||||
stackEnd_ = 0;
|
stackEnd_ = 0;
|
||||||
@@ -114,7 +115,7 @@ public:
|
|||||||
template<typename T>
|
template<typename T>
|
||||||
RAPIDJSON_FORCEINLINE void Reserve(size_t count = 1) {
|
RAPIDJSON_FORCEINLINE void Reserve(size_t count = 1) {
|
||||||
// Expand the stack if needed
|
// Expand the stack if needed
|
||||||
if (RAPIDJSON_UNLIKELY(stackTop_ + sizeof(T) * count > stackEnd_))
|
if (RAPIDJSON_UNLIKELY(static_cast<std::ptrdiff_t>(sizeof(T) * count) > (stackEnd_ - stackTop_)))
|
||||||
Expand<T>(count);
|
Expand<T>(count);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,7 +127,8 @@ public:
|
|||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
RAPIDJSON_FORCEINLINE T* PushUnsafe(size_t count = 1) {
|
RAPIDJSON_FORCEINLINE T* PushUnsafe(size_t count = 1) {
|
||||||
RAPIDJSON_ASSERT(stackTop_ + sizeof(T) * count <= stackEnd_);
|
RAPIDJSON_ASSERT(stackTop_);
|
||||||
|
RAPIDJSON_ASSERT(static_cast<std::ptrdiff_t>(sizeof(T) * count) <= (stackEnd_ - stackTop_));
|
||||||
T* ret = reinterpret_cast<T*>(stackTop_);
|
T* ret = reinterpret_cast<T*>(stackTop_);
|
||||||
stackTop_ += sizeof(T) * count;
|
stackTop_ += sizeof(T) * count;
|
||||||
return ret;
|
return ret;
|
||||||
@@ -183,7 +185,7 @@ private:
|
|||||||
size_t newCapacity;
|
size_t newCapacity;
|
||||||
if (stack_ == 0) {
|
if (stack_ == 0) {
|
||||||
if (!allocator_)
|
if (!allocator_)
|
||||||
ownAllocator_ = allocator_ = RAPIDJSON_NEW(Allocator());
|
ownAllocator_ = allocator_ = RAPIDJSON_NEW(Allocator)();
|
||||||
newCapacity = initialCapacity_;
|
newCapacity = initialCapacity_;
|
||||||
} else {
|
} else {
|
||||||
newCapacity = GetCapacity();
|
newCapacity = GetCapacity();
|
||||||
|
|||||||
14
src/3rdparty/rapidjson/internal/strfunc.h
vendored
14
src/3rdparty/rapidjson/internal/strfunc.h
vendored
@@ -16,6 +16,7 @@
|
|||||||
#define RAPIDJSON_INTERNAL_STRFUNC_H_
|
#define RAPIDJSON_INTERNAL_STRFUNC_H_
|
||||||
|
|
||||||
#include "../stream.h"
|
#include "../stream.h"
|
||||||
|
#include <cwchar>
|
||||||
|
|
||||||
RAPIDJSON_NAMESPACE_BEGIN
|
RAPIDJSON_NAMESPACE_BEGIN
|
||||||
namespace internal {
|
namespace internal {
|
||||||
@@ -28,14 +29,27 @@ namespace internal {
|
|||||||
*/
|
*/
|
||||||
template <typename Ch>
|
template <typename Ch>
|
||||||
inline SizeType StrLen(const Ch* s) {
|
inline SizeType StrLen(const Ch* s) {
|
||||||
|
RAPIDJSON_ASSERT(s != 0);
|
||||||
const Ch* p = s;
|
const Ch* p = s;
|
||||||
while (*p) ++p;
|
while (*p) ++p;
|
||||||
return SizeType(p - s);
|
return SizeType(p - s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <>
|
||||||
|
inline SizeType StrLen(const char* s) {
|
||||||
|
return SizeType(std::strlen(s));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <>
|
||||||
|
inline SizeType StrLen(const wchar_t* s) {
|
||||||
|
return SizeType(std::wcslen(s));
|
||||||
|
}
|
||||||
|
|
||||||
//! Returns number of code points in a encoded string.
|
//! Returns number of code points in a encoded string.
|
||||||
template<typename Encoding>
|
template<typename Encoding>
|
||||||
bool CountStringCodePoint(const typename Encoding::Ch* s, SizeType length, SizeType* outCount) {
|
bool CountStringCodePoint(const typename Encoding::Ch* s, SizeType length, SizeType* outCount) {
|
||||||
|
RAPIDJSON_ASSERT(s != 0);
|
||||||
|
RAPIDJSON_ASSERT(outCount != 0);
|
||||||
GenericStringStream<Encoding> is(s);
|
GenericStringStream<Encoding> is(s);
|
||||||
const typename Encoding::Ch* end = s + length;
|
const typename Encoding::Ch* end = s + length;
|
||||||
SizeType count = 0;
|
SizeType count = 0;
|
||||||
|
|||||||
111
src/3rdparty/rapidjson/internal/strtod.h
vendored
111
src/3rdparty/rapidjson/internal/strtod.h
vendored
@@ -19,6 +19,8 @@
|
|||||||
#include "biginteger.h"
|
#include "biginteger.h"
|
||||||
#include "diyfp.h"
|
#include "diyfp.h"
|
||||||
#include "pow10.h"
|
#include "pow10.h"
|
||||||
|
#include <climits>
|
||||||
|
#include <limits>
|
||||||
|
|
||||||
RAPIDJSON_NAMESPACE_BEGIN
|
RAPIDJSON_NAMESPACE_BEGIN
|
||||||
namespace internal {
|
namespace internal {
|
||||||
@@ -126,46 +128,46 @@ inline bool StrtodFast(double d, int p, double* result) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Compute an approximation and see if it is within 1/2 ULP
|
// Compute an approximation and see if it is within 1/2 ULP
|
||||||
inline bool StrtodDiyFp(const char* decimals, size_t length, size_t decimalPosition, int exp, double* result) {
|
inline bool StrtodDiyFp(const char* decimals, int dLen, int dExp, double* result) {
|
||||||
uint64_t significand = 0;
|
uint64_t significand = 0;
|
||||||
size_t i = 0; // 2^64 - 1 = 18446744073709551615, 1844674407370955161 = 0x1999999999999999
|
int i = 0; // 2^64 - 1 = 18446744073709551615, 1844674407370955161 = 0x1999999999999999
|
||||||
for (; i < length; i++) {
|
for (; i < dLen; i++) {
|
||||||
if (significand > RAPIDJSON_UINT64_C2(0x19999999, 0x99999999) ||
|
if (significand > RAPIDJSON_UINT64_C2(0x19999999, 0x99999999) ||
|
||||||
(significand == RAPIDJSON_UINT64_C2(0x19999999, 0x99999999) && decimals[i] > '5'))
|
(significand == RAPIDJSON_UINT64_C2(0x19999999, 0x99999999) && decimals[i] > '5'))
|
||||||
break;
|
break;
|
||||||
significand = significand * 10u + static_cast<unsigned>(decimals[i] - '0');
|
significand = significand * 10u + static_cast<unsigned>(decimals[i] - '0');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i < length && decimals[i] >= '5') // Rounding
|
if (i < dLen && decimals[i] >= '5') // Rounding
|
||||||
significand++;
|
significand++;
|
||||||
|
|
||||||
size_t remaining = length - i;
|
int remaining = dLen - i;
|
||||||
const unsigned kUlpShift = 3;
|
const int kUlpShift = 3;
|
||||||
const unsigned kUlp = 1 << kUlpShift;
|
const int kUlp = 1 << kUlpShift;
|
||||||
int64_t error = (remaining == 0) ? 0 : kUlp / 2;
|
int64_t error = (remaining == 0) ? 0 : kUlp / 2;
|
||||||
|
|
||||||
DiyFp v(significand, 0);
|
DiyFp v(significand, 0);
|
||||||
v = v.Normalize();
|
v = v.Normalize();
|
||||||
error <<= -v.e;
|
error <<= -v.e;
|
||||||
|
|
||||||
const int dExp = static_cast<int>(decimalPosition) - static_cast<int>(i) + exp;
|
dExp += remaining;
|
||||||
|
|
||||||
int actualExp;
|
int actualExp;
|
||||||
DiyFp cachedPower = GetCachedPower10(dExp, &actualExp);
|
DiyFp cachedPower = GetCachedPower10(dExp, &actualExp);
|
||||||
if (actualExp != dExp) {
|
if (actualExp != dExp) {
|
||||||
static const DiyFp kPow10[] = {
|
static const DiyFp kPow10[] = {
|
||||||
DiyFp(RAPIDJSON_UINT64_C2(0xa0000000, 00000000), -60), // 10^1
|
DiyFp(RAPIDJSON_UINT64_C2(0xa0000000, 0x00000000), -60), // 10^1
|
||||||
DiyFp(RAPIDJSON_UINT64_C2(0xc8000000, 00000000), -57), // 10^2
|
DiyFp(RAPIDJSON_UINT64_C2(0xc8000000, 0x00000000), -57), // 10^2
|
||||||
DiyFp(RAPIDJSON_UINT64_C2(0xfa000000, 00000000), -54), // 10^3
|
DiyFp(RAPIDJSON_UINT64_C2(0xfa000000, 0x00000000), -54), // 10^3
|
||||||
DiyFp(RAPIDJSON_UINT64_C2(0x9c400000, 00000000), -50), // 10^4
|
DiyFp(RAPIDJSON_UINT64_C2(0x9c400000, 0x00000000), -50), // 10^4
|
||||||
DiyFp(RAPIDJSON_UINT64_C2(0xc3500000, 00000000), -47), // 10^5
|
DiyFp(RAPIDJSON_UINT64_C2(0xc3500000, 0x00000000), -47), // 10^5
|
||||||
DiyFp(RAPIDJSON_UINT64_C2(0xf4240000, 00000000), -44), // 10^6
|
DiyFp(RAPIDJSON_UINT64_C2(0xf4240000, 0x00000000), -44), // 10^6
|
||||||
DiyFp(RAPIDJSON_UINT64_C2(0x98968000, 00000000), -40) // 10^7
|
DiyFp(RAPIDJSON_UINT64_C2(0x98968000, 0x00000000), -40) // 10^7
|
||||||
};
|
};
|
||||||
int adjustment = dExp - actualExp - 1;
|
int adjustment = dExp - actualExp;
|
||||||
RAPIDJSON_ASSERT(adjustment >= 0 && adjustment < 7);
|
RAPIDJSON_ASSERT(adjustment >= 1 && adjustment < 8);
|
||||||
v = v * kPow10[adjustment];
|
v = v * kPow10[adjustment - 1];
|
||||||
if (length + static_cast<unsigned>(adjustment)> 19u) // has more digits than decimal digits in 64-bit
|
if (dLen + adjustment > 19) // has more digits than decimal digits in 64-bit
|
||||||
error += kUlp / 2;
|
error += kUlp / 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -177,17 +179,17 @@ inline bool StrtodDiyFp(const char* decimals, size_t length, size_t decimalPosit
|
|||||||
v = v.Normalize();
|
v = v.Normalize();
|
||||||
error <<= oldExp - v.e;
|
error <<= oldExp - v.e;
|
||||||
|
|
||||||
const unsigned effectiveSignificandSize = Double::EffectiveSignificandSize(64 + v.e);
|
const int effectiveSignificandSize = Double::EffectiveSignificandSize(64 + v.e);
|
||||||
unsigned precisionSize = 64 - effectiveSignificandSize;
|
int precisionSize = 64 - effectiveSignificandSize;
|
||||||
if (precisionSize + kUlpShift >= 64) {
|
if (precisionSize + kUlpShift >= 64) {
|
||||||
unsigned scaleExp = (precisionSize + kUlpShift) - 63;
|
int scaleExp = (precisionSize + kUlpShift) - 63;
|
||||||
v.f >>= scaleExp;
|
v.f >>= scaleExp;
|
||||||
v.e += scaleExp;
|
v.e += scaleExp;
|
||||||
error = (error >> scaleExp) + 1 + static_cast<int>(kUlp);
|
error = (error >> scaleExp) + 1 + kUlp;
|
||||||
precisionSize -= scaleExp;
|
precisionSize -= scaleExp;
|
||||||
}
|
}
|
||||||
|
|
||||||
DiyFp rounded(v.f >> precisionSize, v.e + static_cast<int>(precisionSize));
|
DiyFp rounded(v.f >> precisionSize, v.e + precisionSize);
|
||||||
const uint64_t precisionBits = (v.f & ((uint64_t(1) << precisionSize) - 1)) * kUlp;
|
const uint64_t precisionBits = (v.f & ((uint64_t(1) << precisionSize) - 1)) * kUlp;
|
||||||
const uint64_t halfWay = (uint64_t(1) << (precisionSize - 1)) * kUlp;
|
const uint64_t halfWay = (uint64_t(1) << (precisionSize - 1)) * kUlp;
|
||||||
if (precisionBits >= halfWay + static_cast<unsigned>(error)) {
|
if (precisionBits >= halfWay + static_cast<unsigned>(error)) {
|
||||||
@@ -203,9 +205,9 @@ inline bool StrtodDiyFp(const char* decimals, size_t length, size_t decimalPosit
|
|||||||
return halfWay - static_cast<unsigned>(error) >= precisionBits || precisionBits >= halfWay + static_cast<unsigned>(error);
|
return halfWay - static_cast<unsigned>(error) >= precisionBits || precisionBits >= halfWay + static_cast<unsigned>(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline double StrtodBigInteger(double approx, const char* decimals, size_t length, size_t decimalPosition, int exp) {
|
inline double StrtodBigInteger(double approx, const char* decimals, int dLen, int dExp) {
|
||||||
const BigInteger dInt(decimals, length);
|
RAPIDJSON_ASSERT(dLen >= 0);
|
||||||
const int dExp = static_cast<int>(decimalPosition) - static_cast<int>(length) + exp;
|
const BigInteger dInt(decimals, static_cast<unsigned>(dLen));
|
||||||
Double a(approx);
|
Double a(approx);
|
||||||
int cmp = CheckWithinHalfULP(a.Value(), dInt, dExp);
|
int cmp = CheckWithinHalfULP(a.Value(), dInt, dExp);
|
||||||
if (cmp < 0)
|
if (cmp < 0)
|
||||||
@@ -225,42 +227,61 @@ inline double StrtodFullPrecision(double d, int p, const char* decimals, size_t
|
|||||||
RAPIDJSON_ASSERT(d >= 0.0);
|
RAPIDJSON_ASSERT(d >= 0.0);
|
||||||
RAPIDJSON_ASSERT(length >= 1);
|
RAPIDJSON_ASSERT(length >= 1);
|
||||||
|
|
||||||
double result;
|
double result = 0.0;
|
||||||
if (StrtodFast(d, p, &result))
|
if (StrtodFast(d, p, &result))
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
|
RAPIDJSON_ASSERT(length <= INT_MAX);
|
||||||
|
int dLen = static_cast<int>(length);
|
||||||
|
|
||||||
|
RAPIDJSON_ASSERT(length >= decimalPosition);
|
||||||
|
RAPIDJSON_ASSERT(length - decimalPosition <= INT_MAX);
|
||||||
|
int dExpAdjust = static_cast<int>(length - decimalPosition);
|
||||||
|
|
||||||
|
RAPIDJSON_ASSERT(exp >= INT_MIN + dExpAdjust);
|
||||||
|
int dExp = exp - dExpAdjust;
|
||||||
|
|
||||||
|
// Make sure length+dExp does not overflow
|
||||||
|
RAPIDJSON_ASSERT(dExp <= INT_MAX - dLen);
|
||||||
|
|
||||||
// Trim leading zeros
|
// Trim leading zeros
|
||||||
while (*decimals == '0' && length > 1) {
|
while (dLen > 0 && *decimals == '0') {
|
||||||
length--;
|
dLen--;
|
||||||
decimals++;
|
decimals++;
|
||||||
decimalPosition--;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Trim trailing zeros
|
// Trim trailing zeros
|
||||||
while (decimals[length - 1] == '0' && length > 1) {
|
while (dLen > 0 && decimals[dLen - 1] == '0') {
|
||||||
length--;
|
dLen--;
|
||||||
decimalPosition--;
|
dExp++;
|
||||||
exp++;
|
}
|
||||||
|
|
||||||
|
if (dLen == 0) { // Buffer only contains zeros.
|
||||||
|
return 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Trim right-most digits
|
// Trim right-most digits
|
||||||
const int kMaxDecimalDigit = 780;
|
const int kMaxDecimalDigit = 767 + 1;
|
||||||
if (static_cast<int>(length) > kMaxDecimalDigit) {
|
if (dLen > kMaxDecimalDigit) {
|
||||||
int delta = (static_cast<int>(length) - kMaxDecimalDigit);
|
dExp += dLen - kMaxDecimalDigit;
|
||||||
exp += delta;
|
dLen = kMaxDecimalDigit;
|
||||||
decimalPosition -= static_cast<unsigned>(delta);
|
|
||||||
length = kMaxDecimalDigit;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// If too small, underflow to zero
|
// If too small, underflow to zero.
|
||||||
if (int(length) + exp < -324)
|
// Any x <= 10^-324 is interpreted as zero.
|
||||||
|
if (dLen + dExp <= -324)
|
||||||
return 0.0;
|
return 0.0;
|
||||||
|
|
||||||
if (StrtodDiyFp(decimals, length, decimalPosition, exp, &result))
|
// If too large, overflow to infinity.
|
||||||
|
// Any x >= 10^309 is interpreted as +infinity.
|
||||||
|
if (dLen + dExp > 309)
|
||||||
|
return std::numeric_limits<double>::infinity();
|
||||||
|
|
||||||
|
if (StrtodDiyFp(decimals, dLen, dExp, &result))
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
// Use approximation from StrtodDiyFp and make adjustment with BigInteger comparison
|
// Use approximation from StrtodDiyFp and make adjustment with BigInteger comparison
|
||||||
return StrtodBigInteger(result, decimals, length, decimalPosition, exp);
|
return StrtodBigInteger(result, decimals, dLen, dExp);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace internal
|
} // namespace internal
|
||||||
|
|||||||
87
src/3rdparty/rapidjson/istreamwrapper.h
vendored
87
src/3rdparty/rapidjson/istreamwrapper.h
vendored
@@ -17,13 +17,12 @@
|
|||||||
|
|
||||||
#include "stream.h"
|
#include "stream.h"
|
||||||
#include <iosfwd>
|
#include <iosfwd>
|
||||||
|
#include <ios>
|
||||||
|
|
||||||
#ifdef __clang__
|
#ifdef __clang__
|
||||||
RAPIDJSON_DIAG_PUSH
|
RAPIDJSON_DIAG_PUSH
|
||||||
RAPIDJSON_DIAG_OFF(padded)
|
RAPIDJSON_DIAG_OFF(padded)
|
||||||
#endif
|
#elif defined(_MSC_VER)
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
RAPIDJSON_DIAG_PUSH
|
RAPIDJSON_DIAG_PUSH
|
||||||
RAPIDJSON_DIAG_OFF(4351) // new behavior: elements of array 'array' will be default initialized
|
RAPIDJSON_DIAG_OFF(4351) // new behavior: elements of array 'array' will be default initialized
|
||||||
#endif
|
#endif
|
||||||
@@ -50,57 +49,71 @@ template <typename StreamType>
|
|||||||
class BasicIStreamWrapper {
|
class BasicIStreamWrapper {
|
||||||
public:
|
public:
|
||||||
typedef typename StreamType::char_type Ch;
|
typedef typename StreamType::char_type Ch;
|
||||||
BasicIStreamWrapper(StreamType& stream) : stream_(stream), count_(), peekBuffer_() {}
|
|
||||||
|
|
||||||
Ch Peek() const {
|
//! Constructor.
|
||||||
typename StreamType::int_type c = stream_.peek();
|
/*!
|
||||||
return RAPIDJSON_LIKELY(c != StreamType::traits_type::eof()) ? static_cast<Ch>(c) : '\0';
|
\param stream stream opened for read.
|
||||||
|
*/
|
||||||
|
BasicIStreamWrapper(StreamType &stream) : stream_(stream), buffer_(peekBuffer_), bufferSize_(4), bufferLast_(0), current_(buffer_), readCount_(0), count_(0), eof_(false) {
|
||||||
|
Read();
|
||||||
}
|
}
|
||||||
|
|
||||||
Ch Take() {
|
//! Constructor.
|
||||||
typename StreamType::int_type c = stream_.get();
|
/*!
|
||||||
if (RAPIDJSON_LIKELY(c != StreamType::traits_type::eof())) {
|
\param stream stream opened for read.
|
||||||
count_++;
|
\param buffer user-supplied buffer.
|
||||||
return static_cast<Ch>(c);
|
\param bufferSize size of buffer in bytes. Must >=4 bytes.
|
||||||
}
|
*/
|
||||||
else
|
BasicIStreamWrapper(StreamType &stream, char* buffer, size_t bufferSize) : stream_(stream), buffer_(buffer), bufferSize_(bufferSize), bufferLast_(0), current_(buffer_), readCount_(0), count_(0), eof_(false) {
|
||||||
return '\0';
|
RAPIDJSON_ASSERT(bufferSize >= 4);
|
||||||
|
Read();
|
||||||
}
|
}
|
||||||
|
|
||||||
// tellg() may return -1 when failed. So we count by ourself.
|
Ch Peek() const { return *current_; }
|
||||||
size_t Tell() const { return count_; }
|
Ch Take() { Ch c = *current_; Read(); return c; }
|
||||||
|
size_t Tell() const { return count_ + static_cast<size_t>(current_ - buffer_); }
|
||||||
|
|
||||||
Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; }
|
// Not implemented
|
||||||
void Put(Ch) { RAPIDJSON_ASSERT(false); }
|
void Put(Ch) { RAPIDJSON_ASSERT(false); }
|
||||||
void Flush() { RAPIDJSON_ASSERT(false); }
|
void Flush() { RAPIDJSON_ASSERT(false); }
|
||||||
|
Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; }
|
||||||
size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; }
|
size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; }
|
||||||
|
|
||||||
// For encoding detection only.
|
// For encoding detection only.
|
||||||
const Ch* Peek4() const {
|
const Ch* Peek4() const {
|
||||||
RAPIDJSON_ASSERT(sizeof(Ch) == 1); // Only usable for byte stream.
|
return (current_ + 4 - !eof_ <= bufferLast_) ? current_ : 0;
|
||||||
int i;
|
|
||||||
bool hasError = false;
|
|
||||||
for (i = 0; i < 4; ++i) {
|
|
||||||
typename StreamType::int_type c = stream_.get();
|
|
||||||
if (c == StreamType::traits_type::eof()) {
|
|
||||||
hasError = true;
|
|
||||||
stream_.clear();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
peekBuffer_[i] = static_cast<Ch>(c);
|
|
||||||
}
|
|
||||||
for (--i; i >= 0; --i)
|
|
||||||
stream_.putback(peekBuffer_[i]);
|
|
||||||
return !hasError ? peekBuffer_ : 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
BasicIStreamWrapper();
|
||||||
BasicIStreamWrapper(const BasicIStreamWrapper&);
|
BasicIStreamWrapper(const BasicIStreamWrapper&);
|
||||||
BasicIStreamWrapper& operator=(const BasicIStreamWrapper&);
|
BasicIStreamWrapper& operator=(const BasicIStreamWrapper&);
|
||||||
|
|
||||||
StreamType& stream_;
|
void Read() {
|
||||||
size_t count_; //!< Number of characters read. Note:
|
if (current_ < bufferLast_)
|
||||||
mutable Ch peekBuffer_[4];
|
++current_;
|
||||||
|
else if (!eof_) {
|
||||||
|
count_ += readCount_;
|
||||||
|
readCount_ = bufferSize_;
|
||||||
|
bufferLast_ = buffer_ + readCount_ - 1;
|
||||||
|
current_ = buffer_;
|
||||||
|
|
||||||
|
if (!stream_.read(buffer_, static_cast<std::streamsize>(bufferSize_))) {
|
||||||
|
readCount_ = static_cast<size_t>(stream_.gcount());
|
||||||
|
*(bufferLast_ = buffer_ + readCount_) = '\0';
|
||||||
|
eof_ = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
StreamType &stream_;
|
||||||
|
Ch peekBuffer_[4], *buffer_;
|
||||||
|
size_t bufferSize_;
|
||||||
|
Ch *bufferLast_;
|
||||||
|
Ch *current_;
|
||||||
|
size_t readCount_;
|
||||||
|
size_t count_; //!< Number of characters read
|
||||||
|
bool eof_;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef BasicIStreamWrapper<std::istream> IStreamWrapper;
|
typedef BasicIStreamWrapper<std::istream> IStreamWrapper;
|
||||||
|
|||||||
57
src/3rdparty/rapidjson/license.txt
vendored
Normal file
57
src/3rdparty/rapidjson/license.txt
vendored
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
Tencent is pleased to support the open source community by making RapidJSON available.
|
||||||
|
|
||||||
|
Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
|
||||||
|
|
||||||
|
If you have downloaded a copy of the RapidJSON binary from Tencent, please note that the RapidJSON binary is licensed under the MIT License.
|
||||||
|
If you have downloaded a copy of the RapidJSON source code from Tencent, please note that RapidJSON source code is licensed under the MIT License, except for the third-party components listed below which are subject to different license terms. Your integration of RapidJSON into your own projects may require compliance with the MIT License, as well as the other licenses applicable to the third-party components included within RapidJSON. To avoid the problematic JSON license in your own projects, it's sufficient to exclude the bin/jsonchecker/ directory, as it's the only code under the JSON license.
|
||||||
|
A copy of the MIT License is included in this file.
|
||||||
|
|
||||||
|
Other dependencies and licenses:
|
||||||
|
|
||||||
|
Open Source Software Licensed Under the BSD License:
|
||||||
|
--------------------------------------------------------------------
|
||||||
|
|
||||||
|
The msinttypes r29
|
||||||
|
Copyright (c) 2006-2013 Alexander Chemeris
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||||
|
* Neither the name of copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
Open Source Software Licensed Under the JSON License:
|
||||||
|
--------------------------------------------------------------------
|
||||||
|
|
||||||
|
json.org
|
||||||
|
Copyright (c) 2002 JSON.org
|
||||||
|
All Rights Reserved.
|
||||||
|
|
||||||
|
JSON_checker
|
||||||
|
Copyright (c) 2002 JSON.org
|
||||||
|
All Rights Reserved.
|
||||||
|
|
||||||
|
|
||||||
|
Terms of the JSON License:
|
||||||
|
---------------------------------------------------
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
The Software shall be used for Good, not Evil.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
|
Terms of the MIT License:
|
||||||
|
--------------------------------------------------------------------
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
92
src/3rdparty/rapidjson/pointer.h
vendored
92
src/3rdparty/rapidjson/pointer.h
vendored
@@ -21,9 +21,7 @@
|
|||||||
#ifdef __clang__
|
#ifdef __clang__
|
||||||
RAPIDJSON_DIAG_PUSH
|
RAPIDJSON_DIAG_PUSH
|
||||||
RAPIDJSON_DIAG_OFF(switch-enum)
|
RAPIDJSON_DIAG_OFF(switch-enum)
|
||||||
#endif
|
#elif defined(_MSC_VER)
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
RAPIDJSON_DIAG_PUSH
|
RAPIDJSON_DIAG_PUSH
|
||||||
RAPIDJSON_DIAG_OFF(4512) // assignment operator could not be generated
|
RAPIDJSON_DIAG_OFF(4512) // assignment operator could not be generated
|
||||||
#endif
|
#endif
|
||||||
@@ -165,7 +163,12 @@ public:
|
|||||||
GenericPointer(const Token* tokens, size_t tokenCount) : allocator_(), ownAllocator_(), nameBuffer_(), tokens_(const_cast<Token*>(tokens)), tokenCount_(tokenCount), parseErrorOffset_(), parseErrorCode_(kPointerParseErrorNone) {}
|
GenericPointer(const Token* tokens, size_t tokenCount) : allocator_(), ownAllocator_(), nameBuffer_(), tokens_(const_cast<Token*>(tokens)), tokenCount_(tokenCount), parseErrorOffset_(), parseErrorCode_(kPointerParseErrorNone) {}
|
||||||
|
|
||||||
//! Copy constructor.
|
//! Copy constructor.
|
||||||
GenericPointer(const GenericPointer& rhs, Allocator* allocator = 0) : allocator_(allocator), ownAllocator_(), nameBuffer_(), tokens_(), tokenCount_(), parseErrorOffset_(), parseErrorCode_(kPointerParseErrorNone) {
|
GenericPointer(const GenericPointer& rhs) : allocator_(rhs.allocator_), ownAllocator_(), nameBuffer_(), tokens_(), tokenCount_(), parseErrorOffset_(), parseErrorCode_(kPointerParseErrorNone) {
|
||||||
|
*this = rhs;
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Copy constructor.
|
||||||
|
GenericPointer(const GenericPointer& rhs, Allocator* allocator) : allocator_(allocator), ownAllocator_(), nameBuffer_(), tokens_(), tokenCount_(), parseErrorOffset_(), parseErrorCode_(kPointerParseErrorNone) {
|
||||||
*this = rhs;
|
*this = rhs;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -197,6 +200,36 @@ public:
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! Swap the content of this pointer with an other.
|
||||||
|
/*!
|
||||||
|
\param other The pointer to swap with.
|
||||||
|
\note Constant complexity.
|
||||||
|
*/
|
||||||
|
GenericPointer& Swap(GenericPointer& other) RAPIDJSON_NOEXCEPT {
|
||||||
|
internal::Swap(allocator_, other.allocator_);
|
||||||
|
internal::Swap(ownAllocator_, other.ownAllocator_);
|
||||||
|
internal::Swap(nameBuffer_, other.nameBuffer_);
|
||||||
|
internal::Swap(tokens_, other.tokens_);
|
||||||
|
internal::Swap(tokenCount_, other.tokenCount_);
|
||||||
|
internal::Swap(parseErrorOffset_, other.parseErrorOffset_);
|
||||||
|
internal::Swap(parseErrorCode_, other.parseErrorCode_);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
//! free-standing swap function helper
|
||||||
|
/*!
|
||||||
|
Helper function to enable support for common swap implementation pattern based on \c std::swap:
|
||||||
|
\code
|
||||||
|
void swap(MyClass& a, MyClass& b) {
|
||||||
|
using std::swap;
|
||||||
|
swap(a.pointer, b.pointer);
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
\endcode
|
||||||
|
\see Swap()
|
||||||
|
*/
|
||||||
|
friend inline void swap(GenericPointer& a, GenericPointer& b) RAPIDJSON_NOEXCEPT { a.Swap(b); }
|
||||||
|
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
//!@name Append token
|
//!@name Append token
|
||||||
@@ -240,7 +273,7 @@ public:
|
|||||||
template <typename T>
|
template <typename T>
|
||||||
RAPIDJSON_DISABLEIF_RETURN((internal::NotExpr<internal::IsSame<typename internal::RemoveConst<T>::Type, Ch> >), (GenericPointer))
|
RAPIDJSON_DISABLEIF_RETURN((internal::NotExpr<internal::IsSame<typename internal::RemoveConst<T>::Type, Ch> >), (GenericPointer))
|
||||||
Append(T* name, Allocator* allocator = 0) const {
|
Append(T* name, Allocator* allocator = 0) const {
|
||||||
return Append(name, StrLen(name), allocator);
|
return Append(name, internal::StrLen(name), allocator);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if RAPIDJSON_HAS_STDSTRING
|
#if RAPIDJSON_HAS_STDSTRING
|
||||||
@@ -274,7 +307,7 @@ public:
|
|||||||
else {
|
else {
|
||||||
Ch name[21];
|
Ch name[21];
|
||||||
for (size_t i = 0; i <= length; i++)
|
for (size_t i = 0; i <= length; i++)
|
||||||
name[i] = buffer[i];
|
name[i] = static_cast<Ch>(buffer[i]);
|
||||||
Token token = { name, length, index };
|
Token token = { name, length, index };
|
||||||
return Append(token, allocator);
|
return Append(token, allocator);
|
||||||
}
|
}
|
||||||
@@ -353,6 +386,33 @@ public:
|
|||||||
*/
|
*/
|
||||||
bool operator!=(const GenericPointer& rhs) const { return !(*this == rhs); }
|
bool operator!=(const GenericPointer& rhs) const { return !(*this == rhs); }
|
||||||
|
|
||||||
|
//! Less than operator.
|
||||||
|
/*!
|
||||||
|
\note Invalid pointers are always greater than valid ones.
|
||||||
|
*/
|
||||||
|
bool operator<(const GenericPointer& rhs) const {
|
||||||
|
if (!IsValid())
|
||||||
|
return false;
|
||||||
|
if (!rhs.IsValid())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (tokenCount_ != rhs.tokenCount_)
|
||||||
|
return tokenCount_ < rhs.tokenCount_;
|
||||||
|
|
||||||
|
for (size_t i = 0; i < tokenCount_; i++) {
|
||||||
|
if (tokens_[i].index != rhs.tokens_[i].index)
|
||||||
|
return tokens_[i].index < rhs.tokens_[i].index;
|
||||||
|
|
||||||
|
if (tokens_[i].length != rhs.tokens_[i].length)
|
||||||
|
return tokens_[i].length < rhs.tokens_[i].length;
|
||||||
|
|
||||||
|
if (int cmp = std::memcmp(tokens_[i].name, rhs.tokens_[i].name, sizeof(Ch) * tokens_[i].length))
|
||||||
|
return cmp < 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
//!@name Stringify
|
//!@name Stringify
|
||||||
@@ -532,14 +592,14 @@ public:
|
|||||||
*/
|
*/
|
||||||
ValueType& GetWithDefault(ValueType& root, const ValueType& defaultValue, typename ValueType::AllocatorType& allocator) const {
|
ValueType& GetWithDefault(ValueType& root, const ValueType& defaultValue, typename ValueType::AllocatorType& allocator) const {
|
||||||
bool alreadyExist;
|
bool alreadyExist;
|
||||||
Value& v = Create(root, allocator, &alreadyExist);
|
ValueType& v = Create(root, allocator, &alreadyExist);
|
||||||
return alreadyExist ? v : v.CopyFrom(defaultValue, allocator);
|
return alreadyExist ? v : v.CopyFrom(defaultValue, allocator);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Query a value in a subtree with default null-terminated string.
|
//! Query a value in a subtree with default null-terminated string.
|
||||||
ValueType& GetWithDefault(ValueType& root, const Ch* defaultValue, typename ValueType::AllocatorType& allocator) const {
|
ValueType& GetWithDefault(ValueType& root, const Ch* defaultValue, typename ValueType::AllocatorType& allocator) const {
|
||||||
bool alreadyExist;
|
bool alreadyExist;
|
||||||
Value& v = Create(root, allocator, &alreadyExist);
|
ValueType& v = Create(root, allocator, &alreadyExist);
|
||||||
return alreadyExist ? v : v.SetString(defaultValue, allocator);
|
return alreadyExist ? v : v.SetString(defaultValue, allocator);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -547,7 +607,7 @@ public:
|
|||||||
//! Query a value in a subtree with default std::basic_string.
|
//! Query a value in a subtree with default std::basic_string.
|
||||||
ValueType& GetWithDefault(ValueType& root, const std::basic_string<Ch>& defaultValue, typename ValueType::AllocatorType& allocator) const {
|
ValueType& GetWithDefault(ValueType& root, const std::basic_string<Ch>& defaultValue, typename ValueType::AllocatorType& allocator) const {
|
||||||
bool alreadyExist;
|
bool alreadyExist;
|
||||||
Value& v = Create(root, allocator, &alreadyExist);
|
ValueType& v = Create(root, allocator, &alreadyExist);
|
||||||
return alreadyExist ? v : v.SetString(defaultValue, allocator);
|
return alreadyExist ? v : v.SetString(defaultValue, allocator);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -758,7 +818,7 @@ private:
|
|||||||
*/
|
*/
|
||||||
Ch* CopyFromRaw(const GenericPointer& rhs, size_t extraToken = 0, size_t extraNameBufferSize = 0) {
|
Ch* CopyFromRaw(const GenericPointer& rhs, size_t extraToken = 0, size_t extraNameBufferSize = 0) {
|
||||||
if (!allocator_) // allocator is independently owned.
|
if (!allocator_) // allocator is independently owned.
|
||||||
ownAllocator_ = allocator_ = RAPIDJSON_NEW(Allocator());
|
ownAllocator_ = allocator_ = RAPIDJSON_NEW(Allocator)();
|
||||||
|
|
||||||
size_t nameBufferSize = rhs.tokenCount_; // null terminators for tokens
|
size_t nameBufferSize = rhs.tokenCount_; // null terminators for tokens
|
||||||
for (Token *t = rhs.tokens_; t != rhs.tokens_ + rhs.tokenCount_; ++t)
|
for (Token *t = rhs.tokens_; t != rhs.tokens_ + rhs.tokenCount_; ++t)
|
||||||
@@ -806,7 +866,7 @@ private:
|
|||||||
|
|
||||||
// Create own allocator if user did not supply.
|
// Create own allocator if user did not supply.
|
||||||
if (!allocator_)
|
if (!allocator_)
|
||||||
ownAllocator_ = allocator_ = RAPIDJSON_NEW(Allocator());
|
ownAllocator_ = allocator_ = RAPIDJSON_NEW(Allocator)();
|
||||||
|
|
||||||
// Count number of '/' as tokenCount
|
// Count number of '/' as tokenCount
|
||||||
tokenCount_ = 0;
|
tokenCount_ = 0;
|
||||||
@@ -1029,8 +1089,8 @@ private:
|
|||||||
unsigned char u = static_cast<unsigned char>(c);
|
unsigned char u = static_cast<unsigned char>(c);
|
||||||
static const char hexDigits[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
|
static const char hexDigits[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
|
||||||
os_.Put('%');
|
os_.Put('%');
|
||||||
os_.Put(hexDigits[u >> 4]);
|
os_.Put(static_cast<typename OutputStream::Ch>(hexDigits[u >> 4]));
|
||||||
os_.Put(hexDigits[u & 15]);
|
os_.Put(static_cast<typename OutputStream::Ch>(hexDigits[u & 15]));
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
OutputStream& os_;
|
OutputStream& os_;
|
||||||
@@ -1347,11 +1407,7 @@ bool EraseValueByPointer(T& root, const CharType(&source)[N]) {
|
|||||||
|
|
||||||
RAPIDJSON_NAMESPACE_END
|
RAPIDJSON_NAMESPACE_END
|
||||||
|
|
||||||
#ifdef __clang__
|
#if defined(__clang__) || defined(_MSC_VER)
|
||||||
RAPIDJSON_DIAG_POP
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
RAPIDJSON_DIAG_POP
|
RAPIDJSON_DIAG_POP
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
72
src/3rdparty/rapidjson/prettywriter.h
vendored
72
src/3rdparty/rapidjson/prettywriter.h
vendored
@@ -22,6 +22,11 @@ RAPIDJSON_DIAG_PUSH
|
|||||||
RAPIDJSON_DIAG_OFF(effc++)
|
RAPIDJSON_DIAG_OFF(effc++)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(__clang__)
|
||||||
|
RAPIDJSON_DIAG_PUSH
|
||||||
|
RAPIDJSON_DIAG_OFF(c++98-compat)
|
||||||
|
#endif
|
||||||
|
|
||||||
RAPIDJSON_NAMESPACE_BEGIN
|
RAPIDJSON_NAMESPACE_BEGIN
|
||||||
|
|
||||||
//! Combination of PrettyWriter format flags.
|
//! Combination of PrettyWriter format flags.
|
||||||
@@ -34,7 +39,7 @@ enum PrettyFormatOptions {
|
|||||||
|
|
||||||
//! Writer with indentation and spacing.
|
//! Writer with indentation and spacing.
|
||||||
/*!
|
/*!
|
||||||
\tparam OutputStream Type of ouptut os.
|
\tparam OutputStream Type of output os.
|
||||||
\tparam SourceEncoding Encoding of source string.
|
\tparam SourceEncoding Encoding of source string.
|
||||||
\tparam TargetEncoding Encoding of output stream.
|
\tparam TargetEncoding Encoding of output stream.
|
||||||
\tparam StackAllocator Type of allocator for allocating memory of stack.
|
\tparam StackAllocator Type of allocator for allocating memory of stack.
|
||||||
@@ -42,7 +47,7 @@ enum PrettyFormatOptions {
|
|||||||
template<typename OutputStream, typename SourceEncoding = UTF8<>, typename TargetEncoding = UTF8<>, typename StackAllocator = CrtAllocator, unsigned writeFlags = kWriteDefaultFlags>
|
template<typename OutputStream, typename SourceEncoding = UTF8<>, typename TargetEncoding = UTF8<>, typename StackAllocator = CrtAllocator, unsigned writeFlags = kWriteDefaultFlags>
|
||||||
class PrettyWriter : public Writer<OutputStream, SourceEncoding, TargetEncoding, StackAllocator, writeFlags> {
|
class PrettyWriter : public Writer<OutputStream, SourceEncoding, TargetEncoding, StackAllocator, writeFlags> {
|
||||||
public:
|
public:
|
||||||
typedef Writer<OutputStream, SourceEncoding, TargetEncoding, StackAllocator> Base;
|
typedef Writer<OutputStream, SourceEncoding, TargetEncoding, StackAllocator, writeFlags> Base;
|
||||||
typedef typename Base::Ch Ch;
|
typedef typename Base::Ch Ch;
|
||||||
|
|
||||||
//! Constructor
|
//! Constructor
|
||||||
@@ -57,6 +62,11 @@ public:
|
|||||||
explicit PrettyWriter(StackAllocator* allocator = 0, size_t levelDepth = Base::kDefaultLevelDepth) :
|
explicit PrettyWriter(StackAllocator* allocator = 0, size_t levelDepth = Base::kDefaultLevelDepth) :
|
||||||
Base(allocator, levelDepth), indentChar_(' '), indentCharCount_(4) {}
|
Base(allocator, levelDepth), indentChar_(' '), indentCharCount_(4) {}
|
||||||
|
|
||||||
|
#if RAPIDJSON_HAS_CXX11_RVALUE_REFS
|
||||||
|
PrettyWriter(PrettyWriter&& rhs) :
|
||||||
|
Base(std::forward<PrettyWriter>(rhs)), indentChar_(rhs.indentChar_), indentCharCount_(rhs.indentCharCount_), formatOptions_(rhs.formatOptions_) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
//! Set custom indentation.
|
//! Set custom indentation.
|
||||||
/*! \param indentChar Character for indentation. Must be whitespace character (' ', '\\t', '\\n', '\\r').
|
/*! \param indentChar Character for indentation. Must be whitespace character (' ', '\\t', '\\n', '\\r').
|
||||||
\param indentCharCount Number of indent characters for each indentation level.
|
\param indentCharCount Number of indent characters for each indentation level.
|
||||||
@@ -82,24 +92,26 @@ public:
|
|||||||
*/
|
*/
|
||||||
//@{
|
//@{
|
||||||
|
|
||||||
bool Null() { PrettyPrefix(kNullType); return Base::WriteNull(); }
|
bool Null() { PrettyPrefix(kNullType); return Base::EndValue(Base::WriteNull()); }
|
||||||
bool Bool(bool b) { PrettyPrefix(b ? kTrueType : kFalseType); return Base::WriteBool(b); }
|
bool Bool(bool b) { PrettyPrefix(b ? kTrueType : kFalseType); return Base::EndValue(Base::WriteBool(b)); }
|
||||||
bool Int(int i) { PrettyPrefix(kNumberType); return Base::WriteInt(i); }
|
bool Int(int i) { PrettyPrefix(kNumberType); return Base::EndValue(Base::WriteInt(i)); }
|
||||||
bool Uint(unsigned u) { PrettyPrefix(kNumberType); return Base::WriteUint(u); }
|
bool Uint(unsigned u) { PrettyPrefix(kNumberType); return Base::EndValue(Base::WriteUint(u)); }
|
||||||
bool Int64(int64_t i64) { PrettyPrefix(kNumberType); return Base::WriteInt64(i64); }
|
bool Int64(int64_t i64) { PrettyPrefix(kNumberType); return Base::EndValue(Base::WriteInt64(i64)); }
|
||||||
bool Uint64(uint64_t u64) { PrettyPrefix(kNumberType); return Base::WriteUint64(u64); }
|
bool Uint64(uint64_t u64) { PrettyPrefix(kNumberType); return Base::EndValue(Base::WriteUint64(u64)); }
|
||||||
bool Double(double d) { PrettyPrefix(kNumberType); return Base::WriteDouble(d); }
|
bool Double(double d) { PrettyPrefix(kNumberType); return Base::EndValue(Base::WriteDouble(d)); }
|
||||||
|
|
||||||
bool RawNumber(const Ch* str, SizeType length, bool copy = false) {
|
bool RawNumber(const Ch* str, SizeType length, bool copy = false) {
|
||||||
|
RAPIDJSON_ASSERT(str != 0);
|
||||||
(void)copy;
|
(void)copy;
|
||||||
PrettyPrefix(kNumberType);
|
PrettyPrefix(kNumberType);
|
||||||
return Base::WriteString(str, length);
|
return Base::EndValue(Base::WriteString(str, length));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool String(const Ch* str, SizeType length, bool copy = false) {
|
bool String(const Ch* str, SizeType length, bool copy = false) {
|
||||||
|
RAPIDJSON_ASSERT(str != 0);
|
||||||
(void)copy;
|
(void)copy;
|
||||||
PrettyPrefix(kStringType);
|
PrettyPrefix(kStringType);
|
||||||
return Base::WriteString(str, length);
|
return Base::EndValue(Base::WriteString(str, length));
|
||||||
}
|
}
|
||||||
|
|
||||||
#if RAPIDJSON_HAS_STDSTRING
|
#if RAPIDJSON_HAS_STDSTRING
|
||||||
@@ -124,19 +136,21 @@ public:
|
|||||||
|
|
||||||
bool EndObject(SizeType memberCount = 0) {
|
bool EndObject(SizeType memberCount = 0) {
|
||||||
(void)memberCount;
|
(void)memberCount;
|
||||||
RAPIDJSON_ASSERT(Base::level_stack_.GetSize() >= sizeof(typename Base::Level));
|
RAPIDJSON_ASSERT(Base::level_stack_.GetSize() >= sizeof(typename Base::Level)); // not inside an Object
|
||||||
RAPIDJSON_ASSERT(!Base::level_stack_.template Top<typename Base::Level>()->inArray);
|
RAPIDJSON_ASSERT(!Base::level_stack_.template Top<typename Base::Level>()->inArray); // currently inside an Array, not Object
|
||||||
|
RAPIDJSON_ASSERT(0 == Base::level_stack_.template Top<typename Base::Level>()->valueCount % 2); // Object has a Key without a Value
|
||||||
|
|
||||||
bool empty = Base::level_stack_.template Pop<typename Base::Level>(1)->valueCount == 0;
|
bool empty = Base::level_stack_.template Pop<typename Base::Level>(1)->valueCount == 0;
|
||||||
|
|
||||||
if (!empty) {
|
if (!empty) {
|
||||||
Base::os_->Put('\n');
|
Base::os_->Put('\n');
|
||||||
WriteIndent();
|
WriteIndent();
|
||||||
}
|
}
|
||||||
bool ret = Base::WriteEndObject();
|
bool ret = Base::EndValue(Base::WriteEndObject());
|
||||||
(void)ret;
|
(void)ret;
|
||||||
RAPIDJSON_ASSERT(ret == true);
|
RAPIDJSON_ASSERT(ret == true);
|
||||||
if (Base::level_stack_.Empty()) // end of json text
|
if (Base::level_stack_.Empty()) // end of json text
|
||||||
Base::os_->Flush();
|
Base::Flush();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -150,17 +164,18 @@ public:
|
|||||||
(void)memberCount;
|
(void)memberCount;
|
||||||
RAPIDJSON_ASSERT(Base::level_stack_.GetSize() >= sizeof(typename Base::Level));
|
RAPIDJSON_ASSERT(Base::level_stack_.GetSize() >= sizeof(typename Base::Level));
|
||||||
RAPIDJSON_ASSERT(Base::level_stack_.template Top<typename Base::Level>()->inArray);
|
RAPIDJSON_ASSERT(Base::level_stack_.template Top<typename Base::Level>()->inArray);
|
||||||
bool empty = Base::level_stack_.template Pop<typename Base::Level>(1)->valueCount == 0;
|
typename Base::Level* level = Base::level_stack_.template Pop<typename Base::Level>(1);
|
||||||
|
bool empty = level->valueCount == 0;
|
||||||
|
|
||||||
if (!empty && !(formatOptions_ & kFormatSingleLineArray)) {
|
if (!empty && !level->inLine) {
|
||||||
Base::os_->Put('\n');
|
Base::os_->Put('\n');
|
||||||
WriteIndent();
|
WriteIndent();
|
||||||
}
|
}
|
||||||
bool ret = Base::WriteEndArray();
|
bool ret = Base::EndValue(Base::WriteEndArray());
|
||||||
(void)ret;
|
(void)ret;
|
||||||
RAPIDJSON_ASSERT(ret == true);
|
RAPIDJSON_ASSERT(ret == true);
|
||||||
if (Base::level_stack_.Empty()) // end of json text
|
if (Base::level_stack_.Empty()) // end of json text
|
||||||
Base::os_->Flush();
|
Base::Flush();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -184,7 +199,11 @@ public:
|
|||||||
\param type Type of the root of json.
|
\param type Type of the root of json.
|
||||||
\note When using PrettyWriter::RawValue(), the result json may not be indented correctly.
|
\note When using PrettyWriter::RawValue(), the result json may not be indented correctly.
|
||||||
*/
|
*/
|
||||||
bool RawValue(const Ch* json, size_t length, Type type) { PrettyPrefix(type); return Base::WriteRawValue(json, length); }
|
bool RawValue(const Ch* json, size_t length, Type type) {
|
||||||
|
RAPIDJSON_ASSERT(json != 0);
|
||||||
|
PrettyPrefix(type);
|
||||||
|
return Base::EndValue(Base::WriteRawValue(json, length));
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void PrettyPrefix(Type type) {
|
void PrettyPrefix(Type type) {
|
||||||
@@ -193,13 +212,16 @@ protected:
|
|||||||
typename Base::Level* level = Base::level_stack_.template Top<typename Base::Level>();
|
typename Base::Level* level = Base::level_stack_.template Top<typename Base::Level>();
|
||||||
|
|
||||||
if (level->inArray) {
|
if (level->inArray) {
|
||||||
|
level->inLine = (formatOptions_ & kFormatSingleLineArray) && type != kObjectType && type != kArrayType;
|
||||||
|
|
||||||
if (level->valueCount > 0) {
|
if (level->valueCount > 0) {
|
||||||
Base::os_->Put(','); // add comma if it is not the first element in array
|
Base::os_->Put(','); // add comma if it is not the first element in array
|
||||||
if (formatOptions_ & kFormatSingleLineArray)
|
if (level->inLine) {
|
||||||
Base::os_->Put(' ');
|
Base::os_->Put(' ');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(formatOptions_ & kFormatSingleLineArray)) {
|
if (!level->inLine) {
|
||||||
Base::os_->Put('\n');
|
Base::os_->Put('\n');
|
||||||
WriteIndent();
|
WriteIndent();
|
||||||
}
|
}
|
||||||
@@ -233,7 +255,7 @@ protected:
|
|||||||
|
|
||||||
void WriteIndent() {
|
void WriteIndent() {
|
||||||
size_t count = (Base::level_stack_.GetSize() / sizeof(typename Base::Level)) * indentCharCount_;
|
size_t count = (Base::level_stack_.GetSize() / sizeof(typename Base::Level)) * indentCharCount_;
|
||||||
PutN(*Base::os_, static_cast<typename TargetEncoding::Ch>(indentChar_), count);
|
PutN(*Base::os_, static_cast<typename OutputStream::Ch>(indentChar_), count);
|
||||||
}
|
}
|
||||||
|
|
||||||
Ch indentChar_;
|
Ch indentChar_;
|
||||||
@@ -248,6 +270,10 @@ private:
|
|||||||
|
|
||||||
RAPIDJSON_NAMESPACE_END
|
RAPIDJSON_NAMESPACE_END
|
||||||
|
|
||||||
|
#if defined(__clang__)
|
||||||
|
RAPIDJSON_DIAG_POP
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
RAPIDJSON_DIAG_POP
|
RAPIDJSON_DIAG_POP
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
110
src/3rdparty/rapidjson/rapidjson.h
vendored
110
src/3rdparty/rapidjson/rapidjson.h
vendored
@@ -26,7 +26,7 @@
|
|||||||
|
|
||||||
Some RapidJSON features are configurable to adapt the library to a wide
|
Some RapidJSON features are configurable to adapt the library to a wide
|
||||||
variety of platforms, environments and usage scenarios. Most of the
|
variety of platforms, environments and usage scenarios. Most of the
|
||||||
features can be configured in terms of overriden or predefined
|
features can be configured in terms of overridden or predefined
|
||||||
preprocessor macros at compile-time.
|
preprocessor macros at compile-time.
|
||||||
|
|
||||||
Some additional customization is available in the \ref RAPIDJSON_ERRORS APIs.
|
Some additional customization is available in the \ref RAPIDJSON_ERRORS APIs.
|
||||||
@@ -49,6 +49,11 @@
|
|||||||
// token stringification
|
// token stringification
|
||||||
#define RAPIDJSON_STRINGIFY(x) RAPIDJSON_DO_STRINGIFY(x)
|
#define RAPIDJSON_STRINGIFY(x) RAPIDJSON_DO_STRINGIFY(x)
|
||||||
#define RAPIDJSON_DO_STRINGIFY(x) #x
|
#define RAPIDJSON_DO_STRINGIFY(x) #x
|
||||||
|
|
||||||
|
// token concatenation
|
||||||
|
#define RAPIDJSON_JOIN(X, Y) RAPIDJSON_DO_JOIN(X, Y)
|
||||||
|
#define RAPIDJSON_DO_JOIN(X, Y) RAPIDJSON_DO_JOIN2(X, Y)
|
||||||
|
#define RAPIDJSON_DO_JOIN2(X, Y) X##Y
|
||||||
//!@endcond
|
//!@endcond
|
||||||
|
|
||||||
/*! \def RAPIDJSON_MAJOR_VERSION
|
/*! \def RAPIDJSON_MAJOR_VERSION
|
||||||
@@ -214,7 +219,7 @@
|
|||||||
# elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
|
# elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
|
||||||
# define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN
|
# define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN
|
||||||
# else
|
# else
|
||||||
# error Unknown machine endianess detected. User needs to define RAPIDJSON_ENDIAN.
|
# error Unknown machine endianness detected. User needs to define RAPIDJSON_ENDIAN.
|
||||||
# endif // __BYTE_ORDER__
|
# endif // __BYTE_ORDER__
|
||||||
// Detect with GLIBC's endian.h
|
// Detect with GLIBC's endian.h
|
||||||
# elif defined(__GLIBC__)
|
# elif defined(__GLIBC__)
|
||||||
@@ -224,7 +229,7 @@
|
|||||||
# elif (__BYTE_ORDER == __BIG_ENDIAN)
|
# elif (__BYTE_ORDER == __BIG_ENDIAN)
|
||||||
# define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN
|
# define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN
|
||||||
# else
|
# else
|
||||||
# error Unknown machine endianess detected. User needs to define RAPIDJSON_ENDIAN.
|
# error Unknown machine endianness detected. User needs to define RAPIDJSON_ENDIAN.
|
||||||
# endif // __GLIBC__
|
# endif // __GLIBC__
|
||||||
// Detect with _LITTLE_ENDIAN and _BIG_ENDIAN macro
|
// Detect with _LITTLE_ENDIAN and _BIG_ENDIAN macro
|
||||||
# elif defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN)
|
# elif defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN)
|
||||||
@@ -236,12 +241,12 @@
|
|||||||
# define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN
|
# define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN
|
||||||
# elif defined(__i386__) || defined(__alpha__) || defined(__ia64) || defined(__ia64__) || defined(_M_IX86) || defined(_M_IA64) || defined(_M_ALPHA) || defined(__amd64) || defined(__amd64__) || defined(_M_AMD64) || defined(__x86_64) || defined(__x86_64__) || defined(_M_X64) || defined(__bfin__)
|
# elif defined(__i386__) || defined(__alpha__) || defined(__ia64) || defined(__ia64__) || defined(_M_IX86) || defined(_M_IA64) || defined(_M_ALPHA) || defined(__amd64) || defined(__amd64__) || defined(_M_AMD64) || defined(__x86_64) || defined(__x86_64__) || defined(_M_X64) || defined(__bfin__)
|
||||||
# define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN
|
# define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN
|
||||||
# elif defined(_MSC_VER) && defined(_M_ARM)
|
# elif defined(_MSC_VER) && (defined(_M_ARM) || defined(_M_ARM64))
|
||||||
# define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN
|
# define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN
|
||||||
# elif defined(RAPIDJSON_DOXYGEN_RUNNING)
|
# elif defined(RAPIDJSON_DOXYGEN_RUNNING)
|
||||||
# define RAPIDJSON_ENDIAN
|
# define RAPIDJSON_ENDIAN
|
||||||
# else
|
# else
|
||||||
# error Unknown machine endianess detected. User needs to define RAPIDJSON_ENDIAN.
|
# error Unknown machine endianness detected. User needs to define RAPIDJSON_ENDIAN.
|
||||||
# endif
|
# endif
|
||||||
#endif // RAPIDJSON_ENDIAN
|
#endif // RAPIDJSON_ENDIAN
|
||||||
|
|
||||||
@@ -264,16 +269,11 @@
|
|||||||
/*! \ingroup RAPIDJSON_CONFIG
|
/*! \ingroup RAPIDJSON_CONFIG
|
||||||
\param x pointer to align
|
\param x pointer to align
|
||||||
|
|
||||||
Some machines require strict data alignment. Currently the default uses 4 bytes
|
Some machines require strict data alignment. The default is 8 bytes.
|
||||||
alignment on 32-bit platforms and 8 bytes alignment for 64-bit platforms.
|
|
||||||
User can customize by defining the RAPIDJSON_ALIGN function macro.
|
User can customize by defining the RAPIDJSON_ALIGN function macro.
|
||||||
*/
|
*/
|
||||||
#ifndef RAPIDJSON_ALIGN
|
#ifndef RAPIDJSON_ALIGN
|
||||||
#if RAPIDJSON_64BIT == 1
|
#define RAPIDJSON_ALIGN(x) (((x) + static_cast<size_t>(7u)) & ~static_cast<size_t>(7u))
|
||||||
#define RAPIDJSON_ALIGN(x) (((x) + static_cast<uint64_t>(7u)) & ~static_cast<uint64_t>(7u))
|
|
||||||
#else
|
|
||||||
#define RAPIDJSON_ALIGN(x) (((x) + 3u) & ~3u)
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
@@ -320,17 +320,17 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// RAPIDJSON_SSE2/RAPIDJSON_SSE42/RAPIDJSON_SIMD
|
// RAPIDJSON_SSE2/RAPIDJSON_SSE42/RAPIDJSON_NEON/RAPIDJSON_SIMD
|
||||||
|
|
||||||
/*! \def RAPIDJSON_SIMD
|
/*! \def RAPIDJSON_SIMD
|
||||||
\ingroup RAPIDJSON_CONFIG
|
\ingroup RAPIDJSON_CONFIG
|
||||||
\brief Enable SSE2/SSE4.2 optimization.
|
\brief Enable SSE2/SSE4.2/Neon optimization.
|
||||||
|
|
||||||
RapidJSON supports optimized implementations for some parsing operations
|
RapidJSON supports optimized implementations for some parsing operations
|
||||||
based on the SSE2 or SSE4.2 SIMD extensions on modern Intel-compatible
|
based on the SSE2, SSE4.2 or NEon SIMD extensions on modern Intel
|
||||||
processors.
|
or ARM compatible processors.
|
||||||
|
|
||||||
To enable these optimizations, two different symbols can be defined;
|
To enable these optimizations, three different symbols can be defined;
|
||||||
\code
|
\code
|
||||||
// Enable SSE2 optimization.
|
// Enable SSE2 optimization.
|
||||||
#define RAPIDJSON_SSE2
|
#define RAPIDJSON_SSE2
|
||||||
@@ -339,13 +339,17 @@
|
|||||||
#define RAPIDJSON_SSE42
|
#define RAPIDJSON_SSE42
|
||||||
\endcode
|
\endcode
|
||||||
|
|
||||||
\c RAPIDJSON_SSE42 takes precedence, if both are defined.
|
// Enable ARM Neon optimization.
|
||||||
|
#define RAPIDJSON_NEON
|
||||||
|
\endcode
|
||||||
|
|
||||||
|
\c RAPIDJSON_SSE42 takes precedence over SSE2, if both are defined.
|
||||||
|
|
||||||
If any of these symbols is defined, RapidJSON defines the macro
|
If any of these symbols is defined, RapidJSON defines the macro
|
||||||
\c RAPIDJSON_SIMD to indicate the availability of the optimized code.
|
\c RAPIDJSON_SIMD to indicate the availability of the optimized code.
|
||||||
*/
|
*/
|
||||||
#if defined(RAPIDJSON_SSE2) || defined(RAPIDJSON_SSE42) \
|
#if defined(RAPIDJSON_SSE2) || defined(RAPIDJSON_SSE42) \
|
||||||
|| defined(RAPIDJSON_DOXYGEN_RUNNING)
|
|| defined(RAPIDJSON_NEON) || defined(RAPIDJSON_DOXYGEN_RUNNING)
|
||||||
#define RAPIDJSON_SIMD
|
#define RAPIDJSON_SIMD
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -398,13 +402,22 @@ RAPIDJSON_NAMESPACE_END
|
|||||||
\ref RAPIDJSON_ERRORS APIs.
|
\ref RAPIDJSON_ERRORS APIs.
|
||||||
*/
|
*/
|
||||||
#ifndef RAPIDJSON_ASSERT
|
#ifndef RAPIDJSON_ASSERT
|
||||||
|
#include <cassert>
|
||||||
#define RAPIDJSON_ASSERT(x)
|
#define RAPIDJSON_ASSERT(x)
|
||||||
#endif // RAPIDJSON_ASSERT
|
#endif // RAPIDJSON_ASSERT
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// RAPIDJSON_STATIC_ASSERT
|
// RAPIDJSON_STATIC_ASSERT
|
||||||
|
|
||||||
// Adopt from boost
|
// Prefer C++11 static_assert, if available
|
||||||
|
#ifndef RAPIDJSON_STATIC_ASSERT
|
||||||
|
#if __cplusplus >= 201103L || ( defined(_MSC_VER) && _MSC_VER >= 1800 )
|
||||||
|
#define RAPIDJSON_STATIC_ASSERT(x) \
|
||||||
|
static_assert(x, RAPIDJSON_STRINGIFY(x))
|
||||||
|
#endif // C++11
|
||||||
|
#endif // RAPIDJSON_STATIC_ASSERT
|
||||||
|
|
||||||
|
// Adopt C++03 implementation from boost
|
||||||
#ifndef RAPIDJSON_STATIC_ASSERT
|
#ifndef RAPIDJSON_STATIC_ASSERT
|
||||||
#ifndef __clang__
|
#ifndef __clang__
|
||||||
//!@cond RAPIDJSON_HIDDEN_FROM_DOXYGEN
|
//!@cond RAPIDJSON_HIDDEN_FROM_DOXYGEN
|
||||||
@@ -412,14 +425,10 @@ RAPIDJSON_NAMESPACE_END
|
|||||||
RAPIDJSON_NAMESPACE_BEGIN
|
RAPIDJSON_NAMESPACE_BEGIN
|
||||||
template <bool x> struct STATIC_ASSERTION_FAILURE;
|
template <bool x> struct STATIC_ASSERTION_FAILURE;
|
||||||
template <> struct STATIC_ASSERTION_FAILURE<true> { enum { value = 1 }; };
|
template <> struct STATIC_ASSERTION_FAILURE<true> { enum { value = 1 }; };
|
||||||
template<int x> struct StaticAssertTest {};
|
template <size_t x> struct StaticAssertTest {};
|
||||||
RAPIDJSON_NAMESPACE_END
|
RAPIDJSON_NAMESPACE_END
|
||||||
|
|
||||||
#define RAPIDJSON_JOIN(X, Y) RAPIDJSON_DO_JOIN(X, Y)
|
#if defined(__GNUC__) || defined(__clang__)
|
||||||
#define RAPIDJSON_DO_JOIN(X, Y) RAPIDJSON_DO_JOIN2(X, Y)
|
|
||||||
#define RAPIDJSON_DO_JOIN2(X, Y) X##Y
|
|
||||||
|
|
||||||
#if defined(__GNUC__)
|
|
||||||
#define RAPIDJSON_STATIC_ASSERT_UNUSED_ATTRIBUTE __attribute__((unused))
|
#define RAPIDJSON_STATIC_ASSERT_UNUSED_ATTRIBUTE __attribute__((unused))
|
||||||
#else
|
#else
|
||||||
#define RAPIDJSON_STATIC_ASSERT_UNUSED_ATTRIBUTE
|
#define RAPIDJSON_STATIC_ASSERT_UNUSED_ATTRIBUTE
|
||||||
@@ -437,7 +446,7 @@ RAPIDJSON_NAMESPACE_END
|
|||||||
typedef ::RAPIDJSON_NAMESPACE::StaticAssertTest< \
|
typedef ::RAPIDJSON_NAMESPACE::StaticAssertTest< \
|
||||||
sizeof(::RAPIDJSON_NAMESPACE::STATIC_ASSERTION_FAILURE<bool(x) >)> \
|
sizeof(::RAPIDJSON_NAMESPACE::STATIC_ASSERTION_FAILURE<bool(x) >)> \
|
||||||
RAPIDJSON_JOIN(StaticAssertTypedef, __LINE__) RAPIDJSON_STATIC_ASSERT_UNUSED_ATTRIBUTE
|
RAPIDJSON_JOIN(StaticAssertTypedef, __LINE__) RAPIDJSON_STATIC_ASSERT_UNUSED_ATTRIBUTE
|
||||||
#endif
|
#endif // RAPIDJSON_STATIC_ASSERT
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// RAPIDJSON_LIKELY, RAPIDJSON_UNLIKELY
|
// RAPIDJSON_LIKELY, RAPIDJSON_UNLIKELY
|
||||||
@@ -529,13 +538,14 @@ RAPIDJSON_NAMESPACE_END
|
|||||||
#ifndef RAPIDJSON_HAS_CXX11_RVALUE_REFS
|
#ifndef RAPIDJSON_HAS_CXX11_RVALUE_REFS
|
||||||
#if defined(__clang__)
|
#if defined(__clang__)
|
||||||
#if __has_feature(cxx_rvalue_references) && \
|
#if __has_feature(cxx_rvalue_references) && \
|
||||||
(defined(_LIBCPP_VERSION) || defined(__GLIBCXX__) && __GLIBCXX__ >= 20080306)
|
(defined(_MSC_VER) || defined(_LIBCPP_VERSION) || defined(__GLIBCXX__) && __GLIBCXX__ >= 20080306)
|
||||||
#define RAPIDJSON_HAS_CXX11_RVALUE_REFS 1
|
#define RAPIDJSON_HAS_CXX11_RVALUE_REFS 1
|
||||||
#else
|
#else
|
||||||
#define RAPIDJSON_HAS_CXX11_RVALUE_REFS 0
|
#define RAPIDJSON_HAS_CXX11_RVALUE_REFS 0
|
||||||
#endif
|
#endif
|
||||||
#elif (defined(RAPIDJSON_GNUC) && (RAPIDJSON_GNUC >= RAPIDJSON_VERSION_CODE(4,3,0)) && defined(__GXX_EXPERIMENTAL_CXX0X__)) || \
|
#elif (defined(RAPIDJSON_GNUC) && (RAPIDJSON_GNUC >= RAPIDJSON_VERSION_CODE(4,3,0)) && defined(__GXX_EXPERIMENTAL_CXX0X__)) || \
|
||||||
(defined(_MSC_VER) && _MSC_VER >= 1600)
|
(defined(_MSC_VER) && _MSC_VER >= 1600) || \
|
||||||
|
(defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x5140 && defined(__GXX_EXPERIMENTAL_CXX0X__))
|
||||||
|
|
||||||
#define RAPIDJSON_HAS_CXX11_RVALUE_REFS 1
|
#define RAPIDJSON_HAS_CXX11_RVALUE_REFS 1
|
||||||
#else
|
#else
|
||||||
@@ -546,8 +556,9 @@ RAPIDJSON_NAMESPACE_END
|
|||||||
#ifndef RAPIDJSON_HAS_CXX11_NOEXCEPT
|
#ifndef RAPIDJSON_HAS_CXX11_NOEXCEPT
|
||||||
#if defined(__clang__)
|
#if defined(__clang__)
|
||||||
#define RAPIDJSON_HAS_CXX11_NOEXCEPT __has_feature(cxx_noexcept)
|
#define RAPIDJSON_HAS_CXX11_NOEXCEPT __has_feature(cxx_noexcept)
|
||||||
#elif (defined(RAPIDJSON_GNUC) && (RAPIDJSON_GNUC >= RAPIDJSON_VERSION_CODE(4,6,0)) && defined(__GXX_EXPERIMENTAL_CXX0X__))
|
#elif (defined(RAPIDJSON_GNUC) && (RAPIDJSON_GNUC >= RAPIDJSON_VERSION_CODE(4,6,0)) && defined(__GXX_EXPERIMENTAL_CXX0X__)) || \
|
||||||
// (defined(_MSC_VER) && _MSC_VER >= ????) // not yet supported
|
(defined(_MSC_VER) && _MSC_VER >= 1900) || \
|
||||||
|
(defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x5140 && defined(__GXX_EXPERIMENTAL_CXX0X__))
|
||||||
#define RAPIDJSON_HAS_CXX11_NOEXCEPT 1
|
#define RAPIDJSON_HAS_CXX11_NOEXCEPT 1
|
||||||
#else
|
#else
|
||||||
#define RAPIDJSON_HAS_CXX11_NOEXCEPT 0
|
#define RAPIDJSON_HAS_CXX11_NOEXCEPT 0
|
||||||
@@ -561,14 +572,19 @@ RAPIDJSON_NAMESPACE_END
|
|||||||
|
|
||||||
// no automatic detection, yet
|
// no automatic detection, yet
|
||||||
#ifndef RAPIDJSON_HAS_CXX11_TYPETRAITS
|
#ifndef RAPIDJSON_HAS_CXX11_TYPETRAITS
|
||||||
|
#if (defined(_MSC_VER) && _MSC_VER >= 1700)
|
||||||
|
#define RAPIDJSON_HAS_CXX11_TYPETRAITS 1
|
||||||
|
#else
|
||||||
#define RAPIDJSON_HAS_CXX11_TYPETRAITS 0
|
#define RAPIDJSON_HAS_CXX11_TYPETRAITS 0
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef RAPIDJSON_HAS_CXX11_RANGE_FOR
|
#ifndef RAPIDJSON_HAS_CXX11_RANGE_FOR
|
||||||
#if defined(__clang__)
|
#if defined(__clang__)
|
||||||
#define RAPIDJSON_HAS_CXX11_RANGE_FOR __has_feature(cxx_range_for)
|
#define RAPIDJSON_HAS_CXX11_RANGE_FOR __has_feature(cxx_range_for)
|
||||||
#elif (defined(RAPIDJSON_GNUC) && (RAPIDJSON_GNUC >= RAPIDJSON_VERSION_CODE(4,3,0)) && defined(__GXX_EXPERIMENTAL_CXX0X__)) || \
|
#elif (defined(RAPIDJSON_GNUC) && (RAPIDJSON_GNUC >= RAPIDJSON_VERSION_CODE(4,6,0)) && defined(__GXX_EXPERIMENTAL_CXX0X__)) || \
|
||||||
(defined(_MSC_VER) && _MSC_VER >= 1700)
|
(defined(_MSC_VER) && _MSC_VER >= 1700) || \
|
||||||
|
(defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x5140 && defined(__GXX_EXPERIMENTAL_CXX0X__))
|
||||||
#define RAPIDJSON_HAS_CXX11_RANGE_FOR 1
|
#define RAPIDJSON_HAS_CXX11_RANGE_FOR 1
|
||||||
#else
|
#else
|
||||||
#define RAPIDJSON_HAS_CXX11_RANGE_FOR 0
|
#define RAPIDJSON_HAS_CXX11_RANGE_FOR 0
|
||||||
@@ -577,12 +593,38 @@ RAPIDJSON_NAMESPACE_END
|
|||||||
|
|
||||||
//!@endcond
|
//!@endcond
|
||||||
|
|
||||||
|
//! Assertion (in non-throwing contexts).
|
||||||
|
/*! \ingroup RAPIDJSON_CONFIG
|
||||||
|
Some functions provide a \c noexcept guarantee, if the compiler supports it.
|
||||||
|
In these cases, the \ref RAPIDJSON_ASSERT macro cannot be overridden to
|
||||||
|
throw an exception. This macro adds a separate customization point for
|
||||||
|
such cases.
|
||||||
|
|
||||||
|
Defaults to C \c assert() (as \ref RAPIDJSON_ASSERT), if \c noexcept is
|
||||||
|
supported, and to \ref RAPIDJSON_ASSERT otherwise.
|
||||||
|
*/
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// RAPIDJSON_NOEXCEPT_ASSERT
|
||||||
|
|
||||||
|
#ifndef RAPIDJSON_NOEXCEPT_ASSERT
|
||||||
|
#ifdef RAPIDJSON_ASSERT_THROWS
|
||||||
|
#if RAPIDJSON_HAS_CXX11_NOEXCEPT
|
||||||
|
#define RAPIDJSON_NOEXCEPT_ASSERT(x)
|
||||||
|
#else
|
||||||
|
#define RAPIDJSON_NOEXCEPT_ASSERT(x) RAPIDJSON_ASSERT(x)
|
||||||
|
#endif // RAPIDJSON_HAS_CXX11_NOEXCEPT
|
||||||
|
#else
|
||||||
|
#define RAPIDJSON_NOEXCEPT_ASSERT(x) RAPIDJSON_ASSERT(x)
|
||||||
|
#endif // RAPIDJSON_ASSERT_THROWS
|
||||||
|
#endif // RAPIDJSON_NOEXCEPT_ASSERT
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// new/delete
|
// new/delete
|
||||||
|
|
||||||
#ifndef RAPIDJSON_NEW
|
#ifndef RAPIDJSON_NEW
|
||||||
///! customization point for global \c new
|
///! customization point for global \c new
|
||||||
#define RAPIDJSON_NEW(x) new x
|
#define RAPIDJSON_NEW(TypeName) new TypeName
|
||||||
#endif
|
#endif
|
||||||
#ifndef RAPIDJSON_DELETE
|
#ifndef RAPIDJSON_DELETE
|
||||||
///! customization point for global \c delete
|
///! customization point for global \c delete
|
||||||
|
|||||||
601
src/3rdparty/rapidjson/reader.h
vendored
601
src/3rdparty/rapidjson/reader.h
vendored
@@ -33,12 +33,8 @@
|
|||||||
#include <nmmintrin.h>
|
#include <nmmintrin.h>
|
||||||
#elif defined(RAPIDJSON_SSE2)
|
#elif defined(RAPIDJSON_SSE2)
|
||||||
#include <emmintrin.h>
|
#include <emmintrin.h>
|
||||||
#endif
|
#elif defined(RAPIDJSON_NEON)
|
||||||
|
#include <arm_neon.h>
|
||||||
#ifdef _MSC_VER
|
|
||||||
RAPIDJSON_DIAG_PUSH
|
|
||||||
RAPIDJSON_DIAG_OFF(4127) // conditional expression is constant
|
|
||||||
RAPIDJSON_DIAG_OFF(4702) // unreachable code
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __clang__
|
#ifdef __clang__
|
||||||
@@ -46,6 +42,10 @@ RAPIDJSON_DIAG_PUSH
|
|||||||
RAPIDJSON_DIAG_OFF(old-style-cast)
|
RAPIDJSON_DIAG_OFF(old-style-cast)
|
||||||
RAPIDJSON_DIAG_OFF(padded)
|
RAPIDJSON_DIAG_OFF(padded)
|
||||||
RAPIDJSON_DIAG_OFF(switch-enum)
|
RAPIDJSON_DIAG_OFF(switch-enum)
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
RAPIDJSON_DIAG_PUSH
|
||||||
|
RAPIDJSON_DIAG_OFF(4127) // conditional expression is constant
|
||||||
|
RAPIDJSON_DIAG_OFF(4702) // unreachable code
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
@@ -136,7 +136,7 @@ RAPIDJSON_NAMESPACE_BEGIN
|
|||||||
User can define this as any \c ParseFlag combinations.
|
User can define this as any \c ParseFlag combinations.
|
||||||
*/
|
*/
|
||||||
#ifndef RAPIDJSON_PARSE_DEFAULT_FLAGS
|
#ifndef RAPIDJSON_PARSE_DEFAULT_FLAGS
|
||||||
#define RAPIDJSON_PARSE_DEFAULT_FLAGS kParseCommentsFlag | kParseTrailingCommasFlag
|
#define RAPIDJSON_PARSE_DEFAULT_FLAGS kParseNoFlags
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//! Combination of parseFlags
|
//! Combination of parseFlags
|
||||||
@@ -299,16 +299,9 @@ inline const char *SkipWhitespace_SIMD(const char* p) {
|
|||||||
|
|
||||||
for (;; p += 16) {
|
for (;; p += 16) {
|
||||||
const __m128i s = _mm_load_si128(reinterpret_cast<const __m128i *>(p));
|
const __m128i s = _mm_load_si128(reinterpret_cast<const __m128i *>(p));
|
||||||
const int r = _mm_cvtsi128_si32(_mm_cmpistrm(w, s, _SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_BIT_MASK | _SIDD_NEGATIVE_POLARITY));
|
const int r = _mm_cmpistri(w, s, _SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_LEAST_SIGNIFICANT | _SIDD_NEGATIVE_POLARITY);
|
||||||
if (r != 0) { // some of characters is non-whitespace
|
if (r != 16) // some of characters is non-whitespace
|
||||||
#ifdef _MSC_VER // Find the index of first non-whitespace
|
return p + r;
|
||||||
unsigned long offset;
|
|
||||||
_BitScanForward(&offset, r);
|
|
||||||
return p + offset;
|
|
||||||
#else
|
|
||||||
return p + __builtin_ffs(r) - 1;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -325,16 +318,9 @@ inline const char *SkipWhitespace_SIMD(const char* p, const char* end) {
|
|||||||
|
|
||||||
for (; p <= end - 16; p += 16) {
|
for (; p <= end - 16; p += 16) {
|
||||||
const __m128i s = _mm_loadu_si128(reinterpret_cast<const __m128i *>(p));
|
const __m128i s = _mm_loadu_si128(reinterpret_cast<const __m128i *>(p));
|
||||||
const int r = _mm_cvtsi128_si32(_mm_cmpistrm(w, s, _SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_BIT_MASK | _SIDD_NEGATIVE_POLARITY));
|
const int r = _mm_cmpistri(w, s, _SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_LEAST_SIGNIFICANT | _SIDD_NEGATIVE_POLARITY);
|
||||||
if (r != 0) { // some of characters is non-whitespace
|
if (r != 16) // some of characters is non-whitespace
|
||||||
#ifdef _MSC_VER // Find the index of first non-whitespace
|
return p + r;
|
||||||
unsigned long offset;
|
|
||||||
_BitScanForward(&offset, r);
|
|
||||||
return p + offset;
|
|
||||||
#else
|
|
||||||
return p + __builtin_ffs(r) - 1;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return SkipWhitespace(p, end);
|
return SkipWhitespace(p, end);
|
||||||
@@ -425,7 +411,92 @@ inline const char *SkipWhitespace_SIMD(const char* p, const char* end) {
|
|||||||
return SkipWhitespace(p, end);
|
return SkipWhitespace(p, end);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // RAPIDJSON_SSE2
|
#elif defined(RAPIDJSON_NEON)
|
||||||
|
|
||||||
|
//! Skip whitespace with ARM Neon instructions, testing 16 8-byte characters at once.
|
||||||
|
inline const char *SkipWhitespace_SIMD(const char* p) {
|
||||||
|
// Fast return for single non-whitespace
|
||||||
|
if (*p == ' ' || *p == '\n' || *p == '\r' || *p == '\t')
|
||||||
|
++p;
|
||||||
|
else
|
||||||
|
return p;
|
||||||
|
|
||||||
|
// 16-byte align to the next boundary
|
||||||
|
const char* nextAligned = reinterpret_cast<const char*>((reinterpret_cast<size_t>(p) + 15) & static_cast<size_t>(~15));
|
||||||
|
while (p != nextAligned)
|
||||||
|
if (*p == ' ' || *p == '\n' || *p == '\r' || *p == '\t')
|
||||||
|
++p;
|
||||||
|
else
|
||||||
|
return p;
|
||||||
|
|
||||||
|
const uint8x16_t w0 = vmovq_n_u8(' ');
|
||||||
|
const uint8x16_t w1 = vmovq_n_u8('\n');
|
||||||
|
const uint8x16_t w2 = vmovq_n_u8('\r');
|
||||||
|
const uint8x16_t w3 = vmovq_n_u8('\t');
|
||||||
|
|
||||||
|
for (;; p += 16) {
|
||||||
|
const uint8x16_t s = vld1q_u8(reinterpret_cast<const uint8_t *>(p));
|
||||||
|
uint8x16_t x = vceqq_u8(s, w0);
|
||||||
|
x = vorrq_u8(x, vceqq_u8(s, w1));
|
||||||
|
x = vorrq_u8(x, vceqq_u8(s, w2));
|
||||||
|
x = vorrq_u8(x, vceqq_u8(s, w3));
|
||||||
|
|
||||||
|
x = vmvnq_u8(x); // Negate
|
||||||
|
x = vrev64q_u8(x); // Rev in 64
|
||||||
|
uint64_t low = vgetq_lane_u64(reinterpret_cast<uint64x2_t>(x), 0); // extract
|
||||||
|
uint64_t high = vgetq_lane_u64(reinterpret_cast<uint64x2_t>(x), 1); // extract
|
||||||
|
|
||||||
|
if (low == 0) {
|
||||||
|
if (high != 0) {
|
||||||
|
int lz =__builtin_clzll(high);;
|
||||||
|
return p + 8 + (lz >> 3);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
int lz = __builtin_clzll(low);;
|
||||||
|
return p + (lz >> 3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inline const char *SkipWhitespace_SIMD(const char* p, const char* end) {
|
||||||
|
// Fast return for single non-whitespace
|
||||||
|
if (p != end && (*p == ' ' || *p == '\n' || *p == '\r' || *p == '\t'))
|
||||||
|
++p;
|
||||||
|
else
|
||||||
|
return p;
|
||||||
|
|
||||||
|
const uint8x16_t w0 = vmovq_n_u8(' ');
|
||||||
|
const uint8x16_t w1 = vmovq_n_u8('\n');
|
||||||
|
const uint8x16_t w2 = vmovq_n_u8('\r');
|
||||||
|
const uint8x16_t w3 = vmovq_n_u8('\t');
|
||||||
|
|
||||||
|
for (; p <= end - 16; p += 16) {
|
||||||
|
const uint8x16_t s = vld1q_u8(reinterpret_cast<const uint8_t *>(p));
|
||||||
|
uint8x16_t x = vceqq_u8(s, w0);
|
||||||
|
x = vorrq_u8(x, vceqq_u8(s, w1));
|
||||||
|
x = vorrq_u8(x, vceqq_u8(s, w2));
|
||||||
|
x = vorrq_u8(x, vceqq_u8(s, w3));
|
||||||
|
|
||||||
|
x = vmvnq_u8(x); // Negate
|
||||||
|
x = vrev64q_u8(x); // Rev in 64
|
||||||
|
uint64_t low = vgetq_lane_u64(reinterpret_cast<uint64x2_t>(x), 0); // extract
|
||||||
|
uint64_t high = vgetq_lane_u64(reinterpret_cast<uint64x2_t>(x), 1); // extract
|
||||||
|
|
||||||
|
if (low == 0) {
|
||||||
|
if (high != 0) {
|
||||||
|
int lz = __builtin_clzll(high);
|
||||||
|
return p + 8 + (lz >> 3);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
int lz = __builtin_clzll(low);
|
||||||
|
return p + (lz >> 3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return SkipWhitespace(p, end);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // RAPIDJSON_NEON
|
||||||
|
|
||||||
#ifdef RAPIDJSON_SIMD
|
#ifdef RAPIDJSON_SIMD
|
||||||
//! Template function specialization for InsituStringStream
|
//! Template function specialization for InsituStringStream
|
||||||
@@ -471,7 +542,8 @@ public:
|
|||||||
/*! \param stackAllocator Optional allocator for allocating stack memory. (Only use for non-destructive parsing)
|
/*! \param stackAllocator Optional allocator for allocating stack memory. (Only use for non-destructive parsing)
|
||||||
\param stackCapacity stack capacity in bytes for storing a single decoded string. (Only use for non-destructive parsing)
|
\param stackCapacity stack capacity in bytes for storing a single decoded string. (Only use for non-destructive parsing)
|
||||||
*/
|
*/
|
||||||
GenericReader(StackAllocator* stackAllocator = 0, size_t stackCapacity = kDefaultStackCapacity) : stack_(stackAllocator, stackCapacity), parseResult_() {}
|
GenericReader(StackAllocator* stackAllocator = 0, size_t stackCapacity = kDefaultStackCapacity) :
|
||||||
|
stack_(stackAllocator, stackCapacity), parseResult_(), state_(IterativeParsingStartState) {}
|
||||||
|
|
||||||
//! Parse JSON text.
|
//! Parse JSON text.
|
||||||
/*! \tparam parseFlags Combination of \ref ParseFlag.
|
/*! \tparam parseFlags Combination of \ref ParseFlag.
|
||||||
@@ -527,7 +599,84 @@ public:
|
|||||||
return Parse<kParseDefaultFlags>(is, handler);
|
return Parse<kParseDefaultFlags>(is, handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Whether a parse error has occured in the last parsing.
|
//! Initialize JSON text token-by-token parsing
|
||||||
|
/*!
|
||||||
|
*/
|
||||||
|
void IterativeParseInit() {
|
||||||
|
parseResult_.Clear();
|
||||||
|
state_ = IterativeParsingStartState;
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Parse one token from JSON text
|
||||||
|
/*! \tparam InputStream Type of input stream, implementing Stream concept
|
||||||
|
\tparam Handler Type of handler, implementing Handler concept.
|
||||||
|
\param is Input stream to be parsed.
|
||||||
|
\param handler The handler to receive events.
|
||||||
|
\return Whether the parsing is successful.
|
||||||
|
*/
|
||||||
|
template <unsigned parseFlags, typename InputStream, typename Handler>
|
||||||
|
bool IterativeParseNext(InputStream& is, Handler& handler) {
|
||||||
|
while (RAPIDJSON_LIKELY(is.Peek() != '\0')) {
|
||||||
|
SkipWhitespaceAndComments<parseFlags>(is);
|
||||||
|
|
||||||
|
Token t = Tokenize(is.Peek());
|
||||||
|
IterativeParsingState n = Predict(state_, t);
|
||||||
|
IterativeParsingState d = Transit<parseFlags>(state_, t, n, is, handler);
|
||||||
|
|
||||||
|
// If we've finished or hit an error...
|
||||||
|
if (RAPIDJSON_UNLIKELY(IsIterativeParsingCompleteState(d))) {
|
||||||
|
// Report errors.
|
||||||
|
if (d == IterativeParsingErrorState) {
|
||||||
|
HandleError(state_, is);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Transition to the finish state.
|
||||||
|
RAPIDJSON_ASSERT(d == IterativeParsingFinishState);
|
||||||
|
state_ = d;
|
||||||
|
|
||||||
|
// If StopWhenDone is not set...
|
||||||
|
if (!(parseFlags & kParseStopWhenDoneFlag)) {
|
||||||
|
// ... and extra non-whitespace data is found...
|
||||||
|
SkipWhitespaceAndComments<parseFlags>(is);
|
||||||
|
if (is.Peek() != '\0') {
|
||||||
|
// ... this is considered an error.
|
||||||
|
HandleError(state_, is);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Success! We are done!
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Transition to the new state.
|
||||||
|
state_ = d;
|
||||||
|
|
||||||
|
// If we parsed anything other than a delimiter, we invoked the handler, so we can return true now.
|
||||||
|
if (!IsIterativeParsingDelimiterState(n))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// We reached the end of file.
|
||||||
|
stack_.Clear();
|
||||||
|
|
||||||
|
if (state_ != IterativeParsingFinishState) {
|
||||||
|
HandleError(state_, is);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Check if token-by-token parsing JSON text is complete
|
||||||
|
/*! \return Whether the JSON has been fully decoded.
|
||||||
|
*/
|
||||||
|
RAPIDJSON_FORCEINLINE bool IterativeParseComplete() const {
|
||||||
|
return IsIterativeParsingCompleteState(state_);
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Whether a parse error has occurred in the last parsing.
|
||||||
bool HasParseError() const { return parseResult_.IsError(); }
|
bool HasParseError() const { return parseResult_.IsError(); }
|
||||||
|
|
||||||
//! Get the \ref ParseErrorCode of last parsing.
|
//! Get the \ref ParseErrorCode of last parsing.
|
||||||
@@ -575,7 +724,7 @@ private:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (RAPIDJSON_LIKELY(Consume(is, '/')))
|
else if (RAPIDJSON_LIKELY(Consume(is, '/')))
|
||||||
while (is.Peek() != '\0' && is.Take() != '\n');
|
while (is.Peek() != '\0' && is.Take() != '\n') {}
|
||||||
else
|
else
|
||||||
RAPIDJSON_PARSE_ERROR(kParseErrorUnspecificSyntaxError, is.Tell());
|
RAPIDJSON_PARSE_ERROR(kParseErrorUnspecificSyntaxError, is.Tell());
|
||||||
|
|
||||||
@@ -750,7 +899,7 @@ private:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Helper function to parse four hexidecimal digits in \uXXXX in ParseString().
|
// Helper function to parse four hexadecimal digits in \uXXXX in ParseString().
|
||||||
template<typename InputStream>
|
template<typename InputStream>
|
||||||
unsigned ParseHex4(InputStream& is, size_t escapeOffset) {
|
unsigned ParseHex4(InputStream& is, size_t escapeOffset) {
|
||||||
unsigned codepoint = 0;
|
unsigned codepoint = 0;
|
||||||
@@ -857,7 +1006,7 @@ private:
|
|||||||
|
|
||||||
Ch c = is.Peek();
|
Ch c = is.Peek();
|
||||||
if (RAPIDJSON_UNLIKELY(c == '\\')) { // Escape
|
if (RAPIDJSON_UNLIKELY(c == '\\')) { // Escape
|
||||||
size_t escapeOffset = is.Tell(); // For invalid escaping, report the inital '\\' as error offset
|
size_t escapeOffset = is.Tell(); // For invalid escaping, report the initial '\\' as error offset
|
||||||
is.Take();
|
is.Take();
|
||||||
Ch e = is.Peek();
|
Ch e = is.Peek();
|
||||||
if ((sizeof(Ch) == 1 || unsigned(e) < 256) && RAPIDJSON_LIKELY(escape[static_cast<unsigned char>(e)])) {
|
if ((sizeof(Ch) == 1 || unsigned(e) < 256) && RAPIDJSON_LIKELY(escape[static_cast<unsigned char>(e)])) {
|
||||||
@@ -892,7 +1041,7 @@ private:
|
|||||||
if (c == '\0')
|
if (c == '\0')
|
||||||
RAPIDJSON_PARSE_ERROR(kParseErrorStringMissQuotationMark, is.Tell());
|
RAPIDJSON_PARSE_ERROR(kParseErrorStringMissQuotationMark, is.Tell());
|
||||||
else
|
else
|
||||||
RAPIDJSON_PARSE_ERROR(kParseErrorStringEscapeInvalid, is.Tell());
|
RAPIDJSON_PARSE_ERROR(kParseErrorStringInvalidEncoding, is.Tell());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
size_t offset = is.Tell();
|
size_t offset = is.Tell();
|
||||||
@@ -927,7 +1076,7 @@ private:
|
|||||||
// The rest of string using SIMD
|
// The rest of string using SIMD
|
||||||
static const char dquote[16] = { '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"' };
|
static const char dquote[16] = { '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"' };
|
||||||
static const char bslash[16] = { '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\' };
|
static const char bslash[16] = { '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\' };
|
||||||
static const char space[16] = { 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19 };
|
static const char space[16] = { 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F };
|
||||||
const __m128i dq = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&dquote[0]));
|
const __m128i dq = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&dquote[0]));
|
||||||
const __m128i bs = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&bslash[0]));
|
const __m128i bs = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&bslash[0]));
|
||||||
const __m128i sp = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&space[0]));
|
const __m128i sp = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&space[0]));
|
||||||
@@ -936,7 +1085,7 @@ private:
|
|||||||
const __m128i s = _mm_load_si128(reinterpret_cast<const __m128i *>(p));
|
const __m128i s = _mm_load_si128(reinterpret_cast<const __m128i *>(p));
|
||||||
const __m128i t1 = _mm_cmpeq_epi8(s, dq);
|
const __m128i t1 = _mm_cmpeq_epi8(s, dq);
|
||||||
const __m128i t2 = _mm_cmpeq_epi8(s, bs);
|
const __m128i t2 = _mm_cmpeq_epi8(s, bs);
|
||||||
const __m128i t3 = _mm_cmpeq_epi8(_mm_max_epu8(s, sp), sp); // s < 0x20 <=> max(s, 0x19) == 0x19
|
const __m128i t3 = _mm_cmpeq_epi8(_mm_max_epu8(s, sp), sp); // s < 0x20 <=> max(s, 0x1F) == 0x1F
|
||||||
const __m128i x = _mm_or_si128(_mm_or_si128(t1, t2), t3);
|
const __m128i x = _mm_or_si128(_mm_or_si128(t1, t2), t3);
|
||||||
unsigned short r = static_cast<unsigned short>(_mm_movemask_epi8(x));
|
unsigned short r = static_cast<unsigned short>(_mm_movemask_epi8(x));
|
||||||
if (RAPIDJSON_UNLIKELY(r != 0)) { // some of characters is escaped
|
if (RAPIDJSON_UNLIKELY(r != 0)) { // some of characters is escaped
|
||||||
@@ -948,11 +1097,13 @@ private:
|
|||||||
#else
|
#else
|
||||||
length = static_cast<SizeType>(__builtin_ffs(r) - 1);
|
length = static_cast<SizeType>(__builtin_ffs(r) - 1);
|
||||||
#endif
|
#endif
|
||||||
char* q = reinterpret_cast<char*>(os.Push(length));
|
if (length != 0) {
|
||||||
for (size_t i = 0; i < length; i++)
|
char* q = reinterpret_cast<char*>(os.Push(length));
|
||||||
q[i] = p[i];
|
for (size_t i = 0; i < length; i++)
|
||||||
|
q[i] = p[i];
|
||||||
|
|
||||||
p += length;
|
p += length;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
_mm_storeu_si128(reinterpret_cast<__m128i *>(os.Push(16)), s);
|
_mm_storeu_si128(reinterpret_cast<__m128i *>(os.Push(16)), s);
|
||||||
@@ -988,7 +1139,7 @@ private:
|
|||||||
// The rest of string using SIMD
|
// The rest of string using SIMD
|
||||||
static const char dquote[16] = { '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"' };
|
static const char dquote[16] = { '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"' };
|
||||||
static const char bslash[16] = { '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\' };
|
static const char bslash[16] = { '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\' };
|
||||||
static const char space[16] = { 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19 };
|
static const char space[16] = { 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F };
|
||||||
const __m128i dq = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&dquote[0]));
|
const __m128i dq = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&dquote[0]));
|
||||||
const __m128i bs = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&bslash[0]));
|
const __m128i bs = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&bslash[0]));
|
||||||
const __m128i sp = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&space[0]));
|
const __m128i sp = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&space[0]));
|
||||||
@@ -997,7 +1148,7 @@ private:
|
|||||||
const __m128i s = _mm_load_si128(reinterpret_cast<const __m128i *>(p));
|
const __m128i s = _mm_load_si128(reinterpret_cast<const __m128i *>(p));
|
||||||
const __m128i t1 = _mm_cmpeq_epi8(s, dq);
|
const __m128i t1 = _mm_cmpeq_epi8(s, dq);
|
||||||
const __m128i t2 = _mm_cmpeq_epi8(s, bs);
|
const __m128i t2 = _mm_cmpeq_epi8(s, bs);
|
||||||
const __m128i t3 = _mm_cmpeq_epi8(_mm_max_epu8(s, sp), sp); // s < 0x20 <=> max(s, 0x19) == 0x19
|
const __m128i t3 = _mm_cmpeq_epi8(_mm_max_epu8(s, sp), sp); // s < 0x20 <=> max(s, 0x1F) == 0x1F
|
||||||
const __m128i x = _mm_or_si128(_mm_or_si128(t1, t2), t3);
|
const __m128i x = _mm_or_si128(_mm_or_si128(t1, t2), t3);
|
||||||
unsigned short r = static_cast<unsigned short>(_mm_movemask_epi8(x));
|
unsigned short r = static_cast<unsigned short>(_mm_movemask_epi8(x));
|
||||||
if (RAPIDJSON_UNLIKELY(r != 0)) { // some of characters is escaped
|
if (RAPIDJSON_UNLIKELY(r != 0)) { // some of characters is escaped
|
||||||
@@ -1036,7 +1187,7 @@ private:
|
|||||||
// The rest of string using SIMD
|
// The rest of string using SIMD
|
||||||
static const char dquote[16] = { '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"' };
|
static const char dquote[16] = { '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"' };
|
||||||
static const char bslash[16] = { '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\' };
|
static const char bslash[16] = { '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\' };
|
||||||
static const char space[16] = { 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19 };
|
static const char space[16] = { 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F };
|
||||||
const __m128i dq = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&dquote[0]));
|
const __m128i dq = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&dquote[0]));
|
||||||
const __m128i bs = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&bslash[0]));
|
const __m128i bs = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&bslash[0]));
|
||||||
const __m128i sp = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&space[0]));
|
const __m128i sp = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&space[0]));
|
||||||
@@ -1045,7 +1196,7 @@ private:
|
|||||||
const __m128i s = _mm_load_si128(reinterpret_cast<const __m128i *>(p));
|
const __m128i s = _mm_load_si128(reinterpret_cast<const __m128i *>(p));
|
||||||
const __m128i t1 = _mm_cmpeq_epi8(s, dq);
|
const __m128i t1 = _mm_cmpeq_epi8(s, dq);
|
||||||
const __m128i t2 = _mm_cmpeq_epi8(s, bs);
|
const __m128i t2 = _mm_cmpeq_epi8(s, bs);
|
||||||
const __m128i t3 = _mm_cmpeq_epi8(_mm_max_epu8(s, sp), sp); // s < 0x20 <=> max(s, 0x19) == 0x19
|
const __m128i t3 = _mm_cmpeq_epi8(_mm_max_epu8(s, sp), sp); // s < 0x20 <=> max(s, 0x1F) == 0x1F
|
||||||
const __m128i x = _mm_or_si128(_mm_or_si128(t1, t2), t3);
|
const __m128i x = _mm_or_si128(_mm_or_si128(t1, t2), t3);
|
||||||
unsigned short r = static_cast<unsigned short>(_mm_movemask_epi8(x));
|
unsigned short r = static_cast<unsigned short>(_mm_movemask_epi8(x));
|
||||||
if (RAPIDJSON_UNLIKELY(r != 0)) { // some of characters is escaped
|
if (RAPIDJSON_UNLIKELY(r != 0)) { // some of characters is escaped
|
||||||
@@ -1064,7 +1215,180 @@ private:
|
|||||||
|
|
||||||
is.src_ = is.dst_ = p;
|
is.src_ = is.dst_ = p;
|
||||||
}
|
}
|
||||||
#endif
|
#elif defined(RAPIDJSON_NEON)
|
||||||
|
// StringStream -> StackStream<char>
|
||||||
|
static RAPIDJSON_FORCEINLINE void ScanCopyUnescapedString(StringStream& is, StackStream<char>& os) {
|
||||||
|
const char* p = is.src_;
|
||||||
|
|
||||||
|
// Scan one by one until alignment (unaligned load may cross page boundary and cause crash)
|
||||||
|
const char* nextAligned = reinterpret_cast<const char*>((reinterpret_cast<size_t>(p) + 15) & static_cast<size_t>(~15));
|
||||||
|
while (p != nextAligned)
|
||||||
|
if (RAPIDJSON_UNLIKELY(*p == '\"') || RAPIDJSON_UNLIKELY(*p == '\\') || RAPIDJSON_UNLIKELY(static_cast<unsigned>(*p) < 0x20)) {
|
||||||
|
is.src_ = p;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
os.Put(*p++);
|
||||||
|
|
||||||
|
// The rest of string using SIMD
|
||||||
|
const uint8x16_t s0 = vmovq_n_u8('"');
|
||||||
|
const uint8x16_t s1 = vmovq_n_u8('\\');
|
||||||
|
const uint8x16_t s2 = vmovq_n_u8('\b');
|
||||||
|
const uint8x16_t s3 = vmovq_n_u8(32);
|
||||||
|
|
||||||
|
for (;; p += 16) {
|
||||||
|
const uint8x16_t s = vld1q_u8(reinterpret_cast<const uint8_t *>(p));
|
||||||
|
uint8x16_t x = vceqq_u8(s, s0);
|
||||||
|
x = vorrq_u8(x, vceqq_u8(s, s1));
|
||||||
|
x = vorrq_u8(x, vceqq_u8(s, s2));
|
||||||
|
x = vorrq_u8(x, vcltq_u8(s, s3));
|
||||||
|
|
||||||
|
x = vrev64q_u8(x); // Rev in 64
|
||||||
|
uint64_t low = vgetq_lane_u64(reinterpret_cast<uint64x2_t>(x), 0); // extract
|
||||||
|
uint64_t high = vgetq_lane_u64(reinterpret_cast<uint64x2_t>(x), 1); // extract
|
||||||
|
|
||||||
|
SizeType length = 0;
|
||||||
|
bool escaped = false;
|
||||||
|
if (low == 0) {
|
||||||
|
if (high != 0) {
|
||||||
|
unsigned lz = (unsigned)__builtin_clzll(high);;
|
||||||
|
length = 8 + (lz >> 3);
|
||||||
|
escaped = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
unsigned lz = (unsigned)__builtin_clzll(low);;
|
||||||
|
length = lz >> 3;
|
||||||
|
escaped = true;
|
||||||
|
}
|
||||||
|
if (RAPIDJSON_UNLIKELY(escaped)) { // some of characters is escaped
|
||||||
|
if (length != 0) {
|
||||||
|
char* q = reinterpret_cast<char*>(os.Push(length));
|
||||||
|
for (size_t i = 0; i < length; i++)
|
||||||
|
q[i] = p[i];
|
||||||
|
|
||||||
|
p += length;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
vst1q_u8(reinterpret_cast<uint8_t *>(os.Push(16)), s);
|
||||||
|
}
|
||||||
|
|
||||||
|
is.src_ = p;
|
||||||
|
}
|
||||||
|
|
||||||
|
// InsituStringStream -> InsituStringStream
|
||||||
|
static RAPIDJSON_FORCEINLINE void ScanCopyUnescapedString(InsituStringStream& is, InsituStringStream& os) {
|
||||||
|
RAPIDJSON_ASSERT(&is == &os);
|
||||||
|
(void)os;
|
||||||
|
|
||||||
|
if (is.src_ == is.dst_) {
|
||||||
|
SkipUnescapedString(is);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
char* p = is.src_;
|
||||||
|
char *q = is.dst_;
|
||||||
|
|
||||||
|
// Scan one by one until alignment (unaligned load may cross page boundary and cause crash)
|
||||||
|
const char* nextAligned = reinterpret_cast<const char*>((reinterpret_cast<size_t>(p) + 15) & static_cast<size_t>(~15));
|
||||||
|
while (p != nextAligned)
|
||||||
|
if (RAPIDJSON_UNLIKELY(*p == '\"') || RAPIDJSON_UNLIKELY(*p == '\\') || RAPIDJSON_UNLIKELY(static_cast<unsigned>(*p) < 0x20)) {
|
||||||
|
is.src_ = p;
|
||||||
|
is.dst_ = q;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
*q++ = *p++;
|
||||||
|
|
||||||
|
// The rest of string using SIMD
|
||||||
|
const uint8x16_t s0 = vmovq_n_u8('"');
|
||||||
|
const uint8x16_t s1 = vmovq_n_u8('\\');
|
||||||
|
const uint8x16_t s2 = vmovq_n_u8('\b');
|
||||||
|
const uint8x16_t s3 = vmovq_n_u8(32);
|
||||||
|
|
||||||
|
for (;; p += 16, q += 16) {
|
||||||
|
const uint8x16_t s = vld1q_u8(reinterpret_cast<uint8_t *>(p));
|
||||||
|
uint8x16_t x = vceqq_u8(s, s0);
|
||||||
|
x = vorrq_u8(x, vceqq_u8(s, s1));
|
||||||
|
x = vorrq_u8(x, vceqq_u8(s, s2));
|
||||||
|
x = vorrq_u8(x, vcltq_u8(s, s3));
|
||||||
|
|
||||||
|
x = vrev64q_u8(x); // Rev in 64
|
||||||
|
uint64_t low = vgetq_lane_u64(reinterpret_cast<uint64x2_t>(x), 0); // extract
|
||||||
|
uint64_t high = vgetq_lane_u64(reinterpret_cast<uint64x2_t>(x), 1); // extract
|
||||||
|
|
||||||
|
SizeType length = 0;
|
||||||
|
bool escaped = false;
|
||||||
|
if (low == 0) {
|
||||||
|
if (high != 0) {
|
||||||
|
unsigned lz = (unsigned)__builtin_clzll(high);
|
||||||
|
length = 8 + (lz >> 3);
|
||||||
|
escaped = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
unsigned lz = (unsigned)__builtin_clzll(low);
|
||||||
|
length = lz >> 3;
|
||||||
|
escaped = true;
|
||||||
|
}
|
||||||
|
if (RAPIDJSON_UNLIKELY(escaped)) { // some of characters is escaped
|
||||||
|
for (const char* pend = p + length; p != pend; ) {
|
||||||
|
*q++ = *p++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
vst1q_u8(reinterpret_cast<uint8_t *>(q), s);
|
||||||
|
}
|
||||||
|
|
||||||
|
is.src_ = p;
|
||||||
|
is.dst_ = q;
|
||||||
|
}
|
||||||
|
|
||||||
|
// When read/write pointers are the same for insitu stream, just skip unescaped characters
|
||||||
|
static RAPIDJSON_FORCEINLINE void SkipUnescapedString(InsituStringStream& is) {
|
||||||
|
RAPIDJSON_ASSERT(is.src_ == is.dst_);
|
||||||
|
char* p = is.src_;
|
||||||
|
|
||||||
|
// Scan one by one until alignment (unaligned load may cross page boundary and cause crash)
|
||||||
|
const char* nextAligned = reinterpret_cast<const char*>((reinterpret_cast<size_t>(p) + 15) & static_cast<size_t>(~15));
|
||||||
|
for (; p != nextAligned; p++)
|
||||||
|
if (RAPIDJSON_UNLIKELY(*p == '\"') || RAPIDJSON_UNLIKELY(*p == '\\') || RAPIDJSON_UNLIKELY(static_cast<unsigned>(*p) < 0x20)) {
|
||||||
|
is.src_ = is.dst_ = p;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The rest of string using SIMD
|
||||||
|
const uint8x16_t s0 = vmovq_n_u8('"');
|
||||||
|
const uint8x16_t s1 = vmovq_n_u8('\\');
|
||||||
|
const uint8x16_t s2 = vmovq_n_u8('\b');
|
||||||
|
const uint8x16_t s3 = vmovq_n_u8(32);
|
||||||
|
|
||||||
|
for (;; p += 16) {
|
||||||
|
const uint8x16_t s = vld1q_u8(reinterpret_cast<uint8_t *>(p));
|
||||||
|
uint8x16_t x = vceqq_u8(s, s0);
|
||||||
|
x = vorrq_u8(x, vceqq_u8(s, s1));
|
||||||
|
x = vorrq_u8(x, vceqq_u8(s, s2));
|
||||||
|
x = vorrq_u8(x, vcltq_u8(s, s3));
|
||||||
|
|
||||||
|
x = vrev64q_u8(x); // Rev in 64
|
||||||
|
uint64_t low = vgetq_lane_u64(reinterpret_cast<uint64x2_t>(x), 0); // extract
|
||||||
|
uint64_t high = vgetq_lane_u64(reinterpret_cast<uint64x2_t>(x), 1); // extract
|
||||||
|
|
||||||
|
if (low == 0) {
|
||||||
|
if (high != 0) {
|
||||||
|
int lz = __builtin_clzll(high);
|
||||||
|
p += 8 + (lz >> 3);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
int lz = __builtin_clzll(low);
|
||||||
|
p += lz >> 3;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
is.src_ = is.dst_ = p;
|
||||||
|
}
|
||||||
|
#endif // RAPIDJSON_NEON
|
||||||
|
|
||||||
template<typename InputStream, bool backup, bool pushOnTake>
|
template<typename InputStream, bool backup, bool pushOnTake>
|
||||||
class NumberStream;
|
class NumberStream;
|
||||||
@@ -1075,7 +1399,6 @@ private:
|
|||||||
typedef typename InputStream::Ch Ch;
|
typedef typename InputStream::Ch Ch;
|
||||||
|
|
||||||
NumberStream(GenericReader& reader, InputStream& s) : is(s) { (void)reader; }
|
NumberStream(GenericReader& reader, InputStream& s) : is(s) { (void)reader; }
|
||||||
~NumberStream() {}
|
|
||||||
|
|
||||||
RAPIDJSON_FORCEINLINE Ch Peek() const { return is.Peek(); }
|
RAPIDJSON_FORCEINLINE Ch Peek() const { return is.Peek(); }
|
||||||
RAPIDJSON_FORCEINLINE Ch TakePush() { return is.Take(); }
|
RAPIDJSON_FORCEINLINE Ch TakePush() { return is.Take(); }
|
||||||
@@ -1097,7 +1420,6 @@ private:
|
|||||||
typedef NumberStream<InputStream, false, false> Base;
|
typedef NumberStream<InputStream, false, false> Base;
|
||||||
public:
|
public:
|
||||||
NumberStream(GenericReader& reader, InputStream& is) : Base(reader, is), stackStream(reader.stack_) {}
|
NumberStream(GenericReader& reader, InputStream& is) : Base(reader, is), stackStream(reader.stack_) {}
|
||||||
~NumberStream() {}
|
|
||||||
|
|
||||||
RAPIDJSON_FORCEINLINE Ch TakePush() {
|
RAPIDJSON_FORCEINLINE Ch TakePush() {
|
||||||
stackStream.Put(static_cast<char>(Base::is.Peek()));
|
stackStream.Put(static_cast<char>(Base::is.Peek()));
|
||||||
@@ -1124,7 +1446,6 @@ private:
|
|||||||
typedef NumberStream<InputStream, true, false> Base;
|
typedef NumberStream<InputStream, true, false> Base;
|
||||||
public:
|
public:
|
||||||
NumberStream(GenericReader& reader, InputStream& is) : Base(reader, is) {}
|
NumberStream(GenericReader& reader, InputStream& is) : Base(reader, is) {}
|
||||||
~NumberStream() {}
|
|
||||||
|
|
||||||
RAPIDJSON_FORCEINLINE Ch Take() { return Base::TakePush(); }
|
RAPIDJSON_FORCEINLINE Ch Take() { return Base::TakePush(); }
|
||||||
};
|
};
|
||||||
@@ -1185,18 +1506,27 @@ private:
|
|||||||
}
|
}
|
||||||
// Parse NaN or Infinity here
|
// Parse NaN or Infinity here
|
||||||
else if ((parseFlags & kParseNanAndInfFlag) && RAPIDJSON_LIKELY((s.Peek() == 'I' || s.Peek() == 'N'))) {
|
else if ((parseFlags & kParseNanAndInfFlag) && RAPIDJSON_LIKELY((s.Peek() == 'I' || s.Peek() == 'N'))) {
|
||||||
useNanOrInf = true;
|
if (Consume(s, 'N')) {
|
||||||
if (RAPIDJSON_LIKELY(Consume(s, 'N') && Consume(s, 'a') && Consume(s, 'N'))) {
|
if (Consume(s, 'a') && Consume(s, 'N')) {
|
||||||
d = std::numeric_limits<double>::quiet_NaN();
|
d = std::numeric_limits<double>::quiet_NaN();
|
||||||
|
useNanOrInf = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (RAPIDJSON_LIKELY(Consume(s, 'I') && Consume(s, 'n') && Consume(s, 'f'))) {
|
else if (RAPIDJSON_LIKELY(Consume(s, 'I'))) {
|
||||||
d = (minus ? -std::numeric_limits<double>::infinity() : std::numeric_limits<double>::infinity());
|
if (Consume(s, 'n') && Consume(s, 'f')) {
|
||||||
if (RAPIDJSON_UNLIKELY(s.Peek() == 'i' && !(Consume(s, 'i') && Consume(s, 'n')
|
d = (minus ? -std::numeric_limits<double>::infinity() : std::numeric_limits<double>::infinity());
|
||||||
&& Consume(s, 'i') && Consume(s, 't') && Consume(s, 'y'))))
|
useNanOrInf = true;
|
||||||
RAPIDJSON_PARSE_ERROR(kParseErrorValueInvalid, s.Tell());
|
|
||||||
|
if (RAPIDJSON_UNLIKELY(s.Peek() == 'i' && !(Consume(s, 'i') && Consume(s, 'n')
|
||||||
|
&& Consume(s, 'i') && Consume(s, 't') && Consume(s, 'y')))) {
|
||||||
|
RAPIDJSON_PARSE_ERROR(kParseErrorValueInvalid, s.Tell());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
if (RAPIDJSON_UNLIKELY(!useNanOrInf)) {
|
||||||
RAPIDJSON_PARSE_ERROR(kParseErrorValueInvalid, s.Tell());
|
RAPIDJSON_PARSE_ERROR(kParseErrorValueInvalid, s.Tell());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
RAPIDJSON_PARSE_ERROR(kParseErrorValueInvalid, s.Tell());
|
RAPIDJSON_PARSE_ERROR(kParseErrorValueInvalid, s.Tell());
|
||||||
@@ -1231,8 +1561,6 @@ private:
|
|||||||
// Force double for big integer
|
// Force double for big integer
|
||||||
if (useDouble) {
|
if (useDouble) {
|
||||||
while (RAPIDJSON_LIKELY(s.Peek() >= '0' && s.Peek() <= '9')) {
|
while (RAPIDJSON_LIKELY(s.Peek() >= '0' && s.Peek() <= '9')) {
|
||||||
if (RAPIDJSON_UNLIKELY(d >= 1.7976931348623157e307)) // DBL_MAX / 10.0
|
|
||||||
RAPIDJSON_PARSE_ERROR(kParseErrorNumberTooBig, startOffset);
|
|
||||||
d = d * 10 + (s.TakePush() - '0');
|
d = d * 10 + (s.TakePush() - '0');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1302,9 +1630,18 @@ private:
|
|||||||
if (RAPIDJSON_LIKELY(s.Peek() >= '0' && s.Peek() <= '9')) {
|
if (RAPIDJSON_LIKELY(s.Peek() >= '0' && s.Peek() <= '9')) {
|
||||||
exp = static_cast<int>(s.Take() - '0');
|
exp = static_cast<int>(s.Take() - '0');
|
||||||
if (expMinus) {
|
if (expMinus) {
|
||||||
|
// (exp + expFrac) must not underflow int => we're detecting when -exp gets
|
||||||
|
// dangerously close to INT_MIN (a pessimistic next digit 9 would push it into
|
||||||
|
// underflow territory):
|
||||||
|
//
|
||||||
|
// -(exp * 10 + 9) + expFrac >= INT_MIN
|
||||||
|
// <=> exp <= (expFrac - INT_MIN - 9) / 10
|
||||||
|
RAPIDJSON_ASSERT(expFrac <= 0);
|
||||||
|
int maxExp = (expFrac + 2147483639) / 10;
|
||||||
|
|
||||||
while (RAPIDJSON_LIKELY(s.Peek() >= '0' && s.Peek() <= '9')) {
|
while (RAPIDJSON_LIKELY(s.Peek() >= '0' && s.Peek() <= '9')) {
|
||||||
exp = exp * 10 + static_cast<int>(s.Take() - '0');
|
exp = exp * 10 + static_cast<int>(s.Take() - '0');
|
||||||
if (exp >= 214748364) { // Issue #313: prevent overflow exponent
|
if (RAPIDJSON_UNLIKELY(exp > maxExp)) {
|
||||||
while (RAPIDJSON_UNLIKELY(s.Peek() >= '0' && s.Peek() <= '9')) // Consume the rest of exponent
|
while (RAPIDJSON_UNLIKELY(s.Peek() >= '0' && s.Peek() <= '9')) // Consume the rest of exponent
|
||||||
s.Take();
|
s.Take();
|
||||||
}
|
}
|
||||||
@@ -1363,6 +1700,13 @@ private:
|
|||||||
else
|
else
|
||||||
d = internal::StrtodNormalPrecision(d, p);
|
d = internal::StrtodNormalPrecision(d, p);
|
||||||
|
|
||||||
|
// Use > max, instead of == inf, to fix bogus warning -Wfloat-equal
|
||||||
|
if (d > (std::numeric_limits<double>::max)()) {
|
||||||
|
// Overflow
|
||||||
|
// TODO: internal::StrtodX should report overflow (or underflow)
|
||||||
|
RAPIDJSON_PARSE_ERROR(kParseErrorNumberTooBig, startOffset);
|
||||||
|
}
|
||||||
|
|
||||||
cont = handler.Double(minus ? -d : d);
|
cont = handler.Double(minus ? -d : d);
|
||||||
}
|
}
|
||||||
else if (useNanOrInf) {
|
else if (useNanOrInf) {
|
||||||
@@ -1408,29 +1752,31 @@ private:
|
|||||||
|
|
||||||
// States
|
// States
|
||||||
enum IterativeParsingState {
|
enum IterativeParsingState {
|
||||||
IterativeParsingStartState = 0,
|
IterativeParsingFinishState = 0, // sink states at top
|
||||||
IterativeParsingFinishState,
|
IterativeParsingErrorState, // sink states at top
|
||||||
IterativeParsingErrorState,
|
IterativeParsingStartState,
|
||||||
|
|
||||||
// Object states
|
// Object states
|
||||||
IterativeParsingObjectInitialState,
|
IterativeParsingObjectInitialState,
|
||||||
IterativeParsingMemberKeyState,
|
IterativeParsingMemberKeyState,
|
||||||
IterativeParsingKeyValueDelimiterState,
|
|
||||||
IterativeParsingMemberValueState,
|
IterativeParsingMemberValueState,
|
||||||
IterativeParsingMemberDelimiterState,
|
|
||||||
IterativeParsingObjectFinishState,
|
IterativeParsingObjectFinishState,
|
||||||
|
|
||||||
// Array states
|
// Array states
|
||||||
IterativeParsingArrayInitialState,
|
IterativeParsingArrayInitialState,
|
||||||
IterativeParsingElementState,
|
IterativeParsingElementState,
|
||||||
IterativeParsingElementDelimiterState,
|
|
||||||
IterativeParsingArrayFinishState,
|
IterativeParsingArrayFinishState,
|
||||||
|
|
||||||
// Single value state
|
// Single value state
|
||||||
IterativeParsingValueState
|
IterativeParsingValueState,
|
||||||
};
|
|
||||||
|
|
||||||
enum { cIterativeParsingStateCount = IterativeParsingValueState + 1 };
|
// Delimiter states (at bottom)
|
||||||
|
IterativeParsingElementDelimiterState,
|
||||||
|
IterativeParsingMemberDelimiterState,
|
||||||
|
IterativeParsingKeyValueDelimiterState,
|
||||||
|
|
||||||
|
cIterativeParsingStateCount
|
||||||
|
};
|
||||||
|
|
||||||
// Tokens
|
// Tokens
|
||||||
enum Token {
|
enum Token {
|
||||||
@@ -1452,7 +1798,7 @@ private:
|
|||||||
kTokenCount
|
kTokenCount
|
||||||
};
|
};
|
||||||
|
|
||||||
RAPIDJSON_FORCEINLINE Token Tokenize(Ch c) {
|
RAPIDJSON_FORCEINLINE Token Tokenize(Ch c) const {
|
||||||
|
|
||||||
//!@cond RAPIDJSON_HIDDEN_FROM_DOXYGEN
|
//!@cond RAPIDJSON_HIDDEN_FROM_DOXYGEN
|
||||||
#define N NumberToken
|
#define N NumberToken
|
||||||
@@ -1479,9 +1825,21 @@ private:
|
|||||||
return NumberToken;
|
return NumberToken;
|
||||||
}
|
}
|
||||||
|
|
||||||
RAPIDJSON_FORCEINLINE IterativeParsingState Predict(IterativeParsingState state, Token token) {
|
RAPIDJSON_FORCEINLINE IterativeParsingState Predict(IterativeParsingState state, Token token) const {
|
||||||
// current state x one lookahead token -> new state
|
// current state x one lookahead token -> new state
|
||||||
static const char G[cIterativeParsingStateCount][kTokenCount] = {
|
static const char G[cIterativeParsingStateCount][kTokenCount] = {
|
||||||
|
// Finish(sink state)
|
||||||
|
{
|
||||||
|
IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState,
|
||||||
|
IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState,
|
||||||
|
IterativeParsingErrorState
|
||||||
|
},
|
||||||
|
// Error(sink state)
|
||||||
|
{
|
||||||
|
IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState,
|
||||||
|
IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState,
|
||||||
|
IterativeParsingErrorState
|
||||||
|
},
|
||||||
// Start
|
// Start
|
||||||
{
|
{
|
||||||
IterativeParsingArrayInitialState, // Left bracket
|
IterativeParsingArrayInitialState, // Left bracket
|
||||||
@@ -1496,18 +1854,6 @@ private:
|
|||||||
IterativeParsingValueState, // Null
|
IterativeParsingValueState, // Null
|
||||||
IterativeParsingValueState // Number
|
IterativeParsingValueState // Number
|
||||||
},
|
},
|
||||||
// Finish(sink state)
|
|
||||||
{
|
|
||||||
IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState,
|
|
||||||
IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState,
|
|
||||||
IterativeParsingErrorState
|
|
||||||
},
|
|
||||||
// Error(sink state)
|
|
||||||
{
|
|
||||||
IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState,
|
|
||||||
IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState,
|
|
||||||
IterativeParsingErrorState
|
|
||||||
},
|
|
||||||
// ObjectInitial
|
// ObjectInitial
|
||||||
{
|
{
|
||||||
IterativeParsingErrorState, // Left bracket
|
IterativeParsingErrorState, // Left bracket
|
||||||
@@ -1536,20 +1882,6 @@ private:
|
|||||||
IterativeParsingErrorState, // Null
|
IterativeParsingErrorState, // Null
|
||||||
IterativeParsingErrorState // Number
|
IterativeParsingErrorState // Number
|
||||||
},
|
},
|
||||||
// KeyValueDelimiter
|
|
||||||
{
|
|
||||||
IterativeParsingArrayInitialState, // Left bracket(push MemberValue state)
|
|
||||||
IterativeParsingErrorState, // Right bracket
|
|
||||||
IterativeParsingObjectInitialState, // Left curly bracket(push MemberValue state)
|
|
||||||
IterativeParsingErrorState, // Right curly bracket
|
|
||||||
IterativeParsingErrorState, // Comma
|
|
||||||
IterativeParsingErrorState, // Colon
|
|
||||||
IterativeParsingMemberValueState, // String
|
|
||||||
IterativeParsingMemberValueState, // False
|
|
||||||
IterativeParsingMemberValueState, // True
|
|
||||||
IterativeParsingMemberValueState, // Null
|
|
||||||
IterativeParsingMemberValueState // Number
|
|
||||||
},
|
|
||||||
// MemberValue
|
// MemberValue
|
||||||
{
|
{
|
||||||
IterativeParsingErrorState, // Left bracket
|
IterativeParsingErrorState, // Left bracket
|
||||||
@@ -1564,20 +1896,6 @@ private:
|
|||||||
IterativeParsingErrorState, // Null
|
IterativeParsingErrorState, // Null
|
||||||
IterativeParsingErrorState // Number
|
IterativeParsingErrorState // Number
|
||||||
},
|
},
|
||||||
// MemberDelimiter
|
|
||||||
{
|
|
||||||
IterativeParsingErrorState, // Left bracket
|
|
||||||
IterativeParsingErrorState, // Right bracket
|
|
||||||
IterativeParsingErrorState, // Left curly bracket
|
|
||||||
IterativeParsingObjectFinishState, // Right curly bracket
|
|
||||||
IterativeParsingErrorState, // Comma
|
|
||||||
IterativeParsingErrorState, // Colon
|
|
||||||
IterativeParsingMemberKeyState, // String
|
|
||||||
IterativeParsingErrorState, // False
|
|
||||||
IterativeParsingErrorState, // True
|
|
||||||
IterativeParsingErrorState, // Null
|
|
||||||
IterativeParsingErrorState // Number
|
|
||||||
},
|
|
||||||
// ObjectFinish(sink state)
|
// ObjectFinish(sink state)
|
||||||
{
|
{
|
||||||
IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState,
|
IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState,
|
||||||
@@ -1612,6 +1930,18 @@ private:
|
|||||||
IterativeParsingErrorState, // Null
|
IterativeParsingErrorState, // Null
|
||||||
IterativeParsingErrorState // Number
|
IterativeParsingErrorState // Number
|
||||||
},
|
},
|
||||||
|
// ArrayFinish(sink state)
|
||||||
|
{
|
||||||
|
IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState,
|
||||||
|
IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState,
|
||||||
|
IterativeParsingErrorState
|
||||||
|
},
|
||||||
|
// Single Value (sink state)
|
||||||
|
{
|
||||||
|
IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState,
|
||||||
|
IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState,
|
||||||
|
IterativeParsingErrorState
|
||||||
|
},
|
||||||
// ElementDelimiter
|
// ElementDelimiter
|
||||||
{
|
{
|
||||||
IterativeParsingArrayInitialState, // Left bracket(push Element state)
|
IterativeParsingArrayInitialState, // Left bracket(push Element state)
|
||||||
@@ -1626,18 +1956,34 @@ private:
|
|||||||
IterativeParsingElementState, // Null
|
IterativeParsingElementState, // Null
|
||||||
IterativeParsingElementState // Number
|
IterativeParsingElementState // Number
|
||||||
},
|
},
|
||||||
// ArrayFinish(sink state)
|
// MemberDelimiter
|
||||||
{
|
{
|
||||||
IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState,
|
IterativeParsingErrorState, // Left bracket
|
||||||
IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState,
|
IterativeParsingErrorState, // Right bracket
|
||||||
IterativeParsingErrorState
|
IterativeParsingErrorState, // Left curly bracket
|
||||||
|
IterativeParsingObjectFinishState, // Right curly bracket
|
||||||
|
IterativeParsingErrorState, // Comma
|
||||||
|
IterativeParsingErrorState, // Colon
|
||||||
|
IterativeParsingMemberKeyState, // String
|
||||||
|
IterativeParsingErrorState, // False
|
||||||
|
IterativeParsingErrorState, // True
|
||||||
|
IterativeParsingErrorState, // Null
|
||||||
|
IterativeParsingErrorState // Number
|
||||||
},
|
},
|
||||||
// Single Value (sink state)
|
// KeyValueDelimiter
|
||||||
{
|
{
|
||||||
IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState,
|
IterativeParsingArrayInitialState, // Left bracket(push MemberValue state)
|
||||||
IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState,
|
IterativeParsingErrorState, // Right bracket
|
||||||
IterativeParsingErrorState
|
IterativeParsingObjectInitialState, // Left curly bracket(push MemberValue state)
|
||||||
}
|
IterativeParsingErrorState, // Right curly bracket
|
||||||
|
IterativeParsingErrorState, // Comma
|
||||||
|
IterativeParsingErrorState, // Colon
|
||||||
|
IterativeParsingMemberValueState, // String
|
||||||
|
IterativeParsingMemberValueState, // False
|
||||||
|
IterativeParsingMemberValueState, // True
|
||||||
|
IterativeParsingMemberValueState, // Null
|
||||||
|
IterativeParsingMemberValueState // Number
|
||||||
|
},
|
||||||
}; // End of G
|
}; // End of G
|
||||||
|
|
||||||
return static_cast<IterativeParsingState>(G[state][token]);
|
return static_cast<IterativeParsingState>(G[state][token]);
|
||||||
@@ -1818,6 +2164,14 @@ private:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RAPIDJSON_FORCEINLINE bool IsIterativeParsingDelimiterState(IterativeParsingState s) const {
|
||||||
|
return s >= IterativeParsingElementDelimiterState;
|
||||||
|
}
|
||||||
|
|
||||||
|
RAPIDJSON_FORCEINLINE bool IsIterativeParsingCompleteState(IterativeParsingState s) const {
|
||||||
|
return s <= IterativeParsingErrorState;
|
||||||
|
}
|
||||||
|
|
||||||
template <unsigned parseFlags, typename InputStream, typename Handler>
|
template <unsigned parseFlags, typename InputStream, typename Handler>
|
||||||
ParseResult IterativeParse(InputStream& is, Handler& handler) {
|
ParseResult IterativeParse(InputStream& is, Handler& handler) {
|
||||||
parseResult_.Clear();
|
parseResult_.Clear();
|
||||||
@@ -1856,6 +2210,7 @@ private:
|
|||||||
static const size_t kDefaultStackCapacity = 256; //!< Default stack capacity in bytes for storing a single decoded string.
|
static const size_t kDefaultStackCapacity = 256; //!< Default stack capacity in bytes for storing a single decoded string.
|
||||||
internal::Stack<StackAllocator> stack_; //!< A stack for storing decoded string temporarily during non-destructive parsing.
|
internal::Stack<StackAllocator> stack_; //!< A stack for storing decoded string temporarily during non-destructive parsing.
|
||||||
ParseResult parseResult_;
|
ParseResult parseResult_;
|
||||||
|
IterativeParsingState state_;
|
||||||
}; // class GenericReader
|
}; // class GenericReader
|
||||||
|
|
||||||
//! Reader with UTF8 encoding and default allocator.
|
//! Reader with UTF8 encoding and default allocator.
|
||||||
@@ -1863,7 +2218,7 @@ typedef GenericReader<UTF8<>, UTF8<> > Reader;
|
|||||||
|
|
||||||
RAPIDJSON_NAMESPACE_END
|
RAPIDJSON_NAMESPACE_END
|
||||||
|
|
||||||
#ifdef __clang__
|
#if defined(__clang__) || defined(_MSC_VER)
|
||||||
RAPIDJSON_DIAG_POP
|
RAPIDJSON_DIAG_POP
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -1872,8 +2227,4 @@ RAPIDJSON_DIAG_POP
|
|||||||
RAPIDJSON_DIAG_POP
|
RAPIDJSON_DIAG_POP
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
RAPIDJSON_DIAG_POP
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // RAPIDJSON_READER_H_
|
#endif // RAPIDJSON_READER_H_
|
||||||
|
|||||||
717
src/3rdparty/rapidjson/schema.h
vendored
717
src/3rdparty/rapidjson/schema.h
vendored
File diff suppressed because it is too large
Load Diff
52
src/3rdparty/rapidjson/stream.h
vendored
52
src/3rdparty/rapidjson/stream.h
vendored
@@ -1,5 +1,5 @@
|
|||||||
// Tencent is pleased to support the open source community by making RapidJSON available.
|
// Tencent is pleased to support the open source community by making RapidJSON available.
|
||||||
//
|
//
|
||||||
// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
|
// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
|
||||||
//
|
//
|
||||||
// Licensed under the MIT License (the "License"); you may not use this file except
|
// Licensed under the MIT License (the "License"); you may not use this file except
|
||||||
@@ -7,9 +7,9 @@
|
|||||||
//
|
//
|
||||||
// http://opensource.org/licenses/MIT
|
// http://opensource.org/licenses/MIT
|
||||||
//
|
//
|
||||||
// Unless required by applicable law or agreed to in writing, software distributed
|
// Unless required by applicable law or agreed to in writing, software distributed
|
||||||
// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||||||
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
||||||
// specific language governing permissions and limitations under the License.
|
// specific language governing permissions and limitations under the License.
|
||||||
|
|
||||||
#include "rapidjson.h"
|
#include "rapidjson.h"
|
||||||
@@ -100,6 +100,50 @@ inline void PutN(Stream& stream, Ch c, size_t n) {
|
|||||||
PutUnsafe(stream, c);
|
PutUnsafe(stream, c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// GenericStreamWrapper
|
||||||
|
|
||||||
|
//! A Stream Wrapper
|
||||||
|
/*! \tThis string stream is a wrapper for any stream by just forwarding any
|
||||||
|
\treceived message to the origin stream.
|
||||||
|
\note implements Stream concept
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(_MSC_VER) && _MSC_VER <= 1800
|
||||||
|
RAPIDJSON_DIAG_PUSH
|
||||||
|
RAPIDJSON_DIAG_OFF(4702) // unreachable code
|
||||||
|
RAPIDJSON_DIAG_OFF(4512) // assignment operator could not be generated
|
||||||
|
#endif
|
||||||
|
|
||||||
|
template <typename InputStream, typename Encoding = UTF8<> >
|
||||||
|
class GenericStreamWrapper {
|
||||||
|
public:
|
||||||
|
typedef typename Encoding::Ch Ch;
|
||||||
|
GenericStreamWrapper(InputStream& is): is_(is) {}
|
||||||
|
|
||||||
|
Ch Peek() const { return is_.Peek(); }
|
||||||
|
Ch Take() { return is_.Take(); }
|
||||||
|
size_t Tell() { return is_.Tell(); }
|
||||||
|
Ch* PutBegin() { return is_.PutBegin(); }
|
||||||
|
void Put(Ch ch) { is_.Put(ch); }
|
||||||
|
void Flush() { is_.Flush(); }
|
||||||
|
size_t PutEnd(Ch* ch) { return is_.PutEnd(ch); }
|
||||||
|
|
||||||
|
// wrapper for MemoryStream
|
||||||
|
const Ch* Peek4() const { return is_.Peek4(); }
|
||||||
|
|
||||||
|
// wrapper for AutoUTFInputStream
|
||||||
|
UTFType GetType() const { return is_.GetType(); }
|
||||||
|
bool HasBOM() const { return is_.HasBOM(); }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
InputStream& is_;
|
||||||
|
};
|
||||||
|
|
||||||
|
#if defined(_MSC_VER) && _MSC_VER <= 1800
|
||||||
|
RAPIDJSON_DIAG_POP
|
||||||
|
#endif
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// StringStream
|
// StringStream
|
||||||
|
|
||||||
|
|||||||
4
src/3rdparty/rapidjson/stringbuffer.h
vendored
4
src/3rdparty/rapidjson/stringbuffer.h
vendored
@@ -78,8 +78,12 @@ public:
|
|||||||
return stack_.template Bottom<Ch>();
|
return stack_.template Bottom<Ch>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! Get the size of string in bytes in the string buffer.
|
||||||
size_t GetSize() const { return stack_.GetSize(); }
|
size_t GetSize() const { return stack_.GetSize(); }
|
||||||
|
|
||||||
|
//! Get the length of string in Ch in the string buffer.
|
||||||
|
size_t GetLength() const { return stack_.GetSize() / sizeof(Ch); }
|
||||||
|
|
||||||
static const size_t kDefaultCapacity = 256;
|
static const size_t kDefaultCapacity = 256;
|
||||||
mutable internal::Stack<Allocator> stack_;
|
mutable internal::Stack<Allocator> stack_;
|
||||||
|
|
||||||
|
|||||||
160
src/3rdparty/rapidjson/writer.h
vendored
160
src/3rdparty/rapidjson/writer.h
vendored
@@ -16,6 +16,7 @@
|
|||||||
#define RAPIDJSON_WRITER_H_
|
#define RAPIDJSON_WRITER_H_
|
||||||
|
|
||||||
#include "stream.h"
|
#include "stream.h"
|
||||||
|
#include "internal/meta.h"
|
||||||
#include "internal/stack.h"
|
#include "internal/stack.h"
|
||||||
#include "internal/strfunc.h"
|
#include "internal/strfunc.h"
|
||||||
#include "internal/dtoa.h"
|
#include "internal/dtoa.h"
|
||||||
@@ -31,17 +32,18 @@
|
|||||||
#include <nmmintrin.h>
|
#include <nmmintrin.h>
|
||||||
#elif defined(RAPIDJSON_SSE2)
|
#elif defined(RAPIDJSON_SSE2)
|
||||||
#include <emmintrin.h>
|
#include <emmintrin.h>
|
||||||
#endif
|
#elif defined(RAPIDJSON_NEON)
|
||||||
|
#include <arm_neon.h>
|
||||||
#ifdef _MSC_VER
|
|
||||||
RAPIDJSON_DIAG_PUSH
|
|
||||||
RAPIDJSON_DIAG_OFF(4127) // conditional expression is constant
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __clang__
|
#ifdef __clang__
|
||||||
RAPIDJSON_DIAG_PUSH
|
RAPIDJSON_DIAG_PUSH
|
||||||
RAPIDJSON_DIAG_OFF(padded)
|
RAPIDJSON_DIAG_OFF(padded)
|
||||||
RAPIDJSON_DIAG_OFF(unreachable-code)
|
RAPIDJSON_DIAG_OFF(unreachable-code)
|
||||||
|
RAPIDJSON_DIAG_OFF(c++98-compat)
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
RAPIDJSON_DIAG_PUSH
|
||||||
|
RAPIDJSON_DIAG_OFF(4127) // conditional expression is constant
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
RAPIDJSON_NAMESPACE_BEGIN
|
RAPIDJSON_NAMESPACE_BEGIN
|
||||||
@@ -103,6 +105,13 @@ public:
|
|||||||
Writer(StackAllocator* allocator = 0, size_t levelDepth = kDefaultLevelDepth) :
|
Writer(StackAllocator* allocator = 0, size_t levelDepth = kDefaultLevelDepth) :
|
||||||
os_(0), level_stack_(allocator, levelDepth * sizeof(Level)), maxDecimalPlaces_(kDefaultMaxDecimalPlaces), hasRoot_(false) {}
|
os_(0), level_stack_(allocator, levelDepth * sizeof(Level)), maxDecimalPlaces_(kDefaultMaxDecimalPlaces), hasRoot_(false) {}
|
||||||
|
|
||||||
|
#if RAPIDJSON_HAS_CXX11_RVALUE_REFS
|
||||||
|
Writer(Writer&& rhs) :
|
||||||
|
os_(rhs.os_), level_stack_(std::move(rhs.level_stack_)), maxDecimalPlaces_(rhs.maxDecimalPlaces_), hasRoot_(rhs.hasRoot_) {
|
||||||
|
rhs.os_ = 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
//! Reset the writer with a new stream.
|
//! Reset the writer with a new stream.
|
||||||
/*!
|
/*!
|
||||||
This function reset the writer with a new stream and default settings,
|
This function reset the writer with a new stream and default settings,
|
||||||
@@ -184,12 +193,14 @@ public:
|
|||||||
bool Double(double d) { Prefix(kNumberType); return EndValue(WriteDouble(d)); }
|
bool Double(double d) { Prefix(kNumberType); return EndValue(WriteDouble(d)); }
|
||||||
|
|
||||||
bool RawNumber(const Ch* str, SizeType length, bool copy = false) {
|
bool RawNumber(const Ch* str, SizeType length, bool copy = false) {
|
||||||
|
RAPIDJSON_ASSERT(str != 0);
|
||||||
(void)copy;
|
(void)copy;
|
||||||
Prefix(kNumberType);
|
Prefix(kNumberType);
|
||||||
return EndValue(WriteString(str, length));
|
return EndValue(WriteString(str, length));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool String(const Ch* str, SizeType length, bool copy = false) {
|
bool String(const Ch* str, SizeType length, bool copy = false) {
|
||||||
|
RAPIDJSON_ASSERT(str != 0);
|
||||||
(void)copy;
|
(void)copy;
|
||||||
Prefix(kStringType);
|
Prefix(kStringType);
|
||||||
return EndValue(WriteString(str, length));
|
return EndValue(WriteString(str, length));
|
||||||
@@ -209,10 +220,18 @@ public:
|
|||||||
|
|
||||||
bool Key(const Ch* str, SizeType length, bool copy = false) { return String(str, length, copy); }
|
bool Key(const Ch* str, SizeType length, bool copy = false) { return String(str, length, copy); }
|
||||||
|
|
||||||
|
#if RAPIDJSON_HAS_STDSTRING
|
||||||
|
bool Key(const std::basic_string<Ch>& str)
|
||||||
|
{
|
||||||
|
return Key(str.data(), SizeType(str.size()));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
bool EndObject(SizeType memberCount = 0) {
|
bool EndObject(SizeType memberCount = 0) {
|
||||||
(void)memberCount;
|
(void)memberCount;
|
||||||
RAPIDJSON_ASSERT(level_stack_.GetSize() >= sizeof(Level));
|
RAPIDJSON_ASSERT(level_stack_.GetSize() >= sizeof(Level)); // not inside an Object
|
||||||
RAPIDJSON_ASSERT(!level_stack_.template Top<Level>()->inArray);
|
RAPIDJSON_ASSERT(!level_stack_.template Top<Level>()->inArray); // currently inside an Array, not Object
|
||||||
|
RAPIDJSON_ASSERT(0 == level_stack_.template Top<Level>()->valueCount % 2); // Object has a Key without a Value
|
||||||
level_stack_.template Pop<Level>(1);
|
level_stack_.template Pop<Level>(1);
|
||||||
return EndValue(WriteEndObject());
|
return EndValue(WriteEndObject());
|
||||||
}
|
}
|
||||||
@@ -236,9 +255,9 @@ public:
|
|||||||
//@{
|
//@{
|
||||||
|
|
||||||
//! Simpler but slower overload.
|
//! Simpler but slower overload.
|
||||||
bool String(const Ch* str) { return String(str, internal::StrLen(str)); }
|
bool String(const Ch* const& str) { return String(str, internal::StrLen(str)); }
|
||||||
bool Key(const Ch* str) { return Key(str, internal::StrLen(str)); }
|
bool Key(const Ch* const& str) { return Key(str, internal::StrLen(str)); }
|
||||||
|
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
//! Write a raw JSON value.
|
//! Write a raw JSON value.
|
||||||
@@ -249,7 +268,19 @@ public:
|
|||||||
\param length Length of the json.
|
\param length Length of the json.
|
||||||
\param type Type of the root of json.
|
\param type Type of the root of json.
|
||||||
*/
|
*/
|
||||||
bool RawValue(const Ch* json, size_t length, Type type) { Prefix(type); return EndValue(WriteRawValue(json, length)); }
|
bool RawValue(const Ch* json, size_t length, Type type) {
|
||||||
|
RAPIDJSON_ASSERT(json != 0);
|
||||||
|
Prefix(type);
|
||||||
|
return EndValue(WriteRawValue(json, length));
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Flush the output stream.
|
||||||
|
/*!
|
||||||
|
Allows the user to flush the output stream immediately.
|
||||||
|
*/
|
||||||
|
void Flush() {
|
||||||
|
os_->Flush();
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
//! Information for each nested level
|
//! Information for each nested level
|
||||||
@@ -257,6 +288,7 @@ protected:
|
|||||||
Level(bool inArray_) : valueCount(0), inArray(inArray_) {}
|
Level(bool inArray_) : valueCount(0), inArray(inArray_) {}
|
||||||
size_t valueCount; //!< number of values in this level
|
size_t valueCount; //!< number of values in this level
|
||||||
bool inArray; //!< true if in array, otherwise in object
|
bool inArray; //!< true if in array, otherwise in object
|
||||||
|
bool inLine = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
static const size_t kDefaultLevelDepth = 32;
|
static const size_t kDefaultLevelDepth = 32;
|
||||||
@@ -283,7 +315,7 @@ protected:
|
|||||||
const char* end = internal::i32toa(i, buffer);
|
const char* end = internal::i32toa(i, buffer);
|
||||||
PutReserve(*os_, static_cast<size_t>(end - buffer));
|
PutReserve(*os_, static_cast<size_t>(end - buffer));
|
||||||
for (const char* p = buffer; p != end; ++p)
|
for (const char* p = buffer; p != end; ++p)
|
||||||
PutUnsafe(*os_, static_cast<typename TargetEncoding::Ch>(*p));
|
PutUnsafe(*os_, static_cast<typename OutputStream::Ch>(*p));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -292,7 +324,7 @@ protected:
|
|||||||
const char* end = internal::u32toa(u, buffer);
|
const char* end = internal::u32toa(u, buffer);
|
||||||
PutReserve(*os_, static_cast<size_t>(end - buffer));
|
PutReserve(*os_, static_cast<size_t>(end - buffer));
|
||||||
for (const char* p = buffer; p != end; ++p)
|
for (const char* p = buffer; p != end; ++p)
|
||||||
PutUnsafe(*os_, static_cast<typename TargetEncoding::Ch>(*p));
|
PutUnsafe(*os_, static_cast<typename OutputStream::Ch>(*p));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -301,7 +333,7 @@ protected:
|
|||||||
const char* end = internal::i64toa(i64, buffer);
|
const char* end = internal::i64toa(i64, buffer);
|
||||||
PutReserve(*os_, static_cast<size_t>(end - buffer));
|
PutReserve(*os_, static_cast<size_t>(end - buffer));
|
||||||
for (const char* p = buffer; p != end; ++p)
|
for (const char* p = buffer; p != end; ++p)
|
||||||
PutUnsafe(*os_, static_cast<typename TargetEncoding::Ch>(*p));
|
PutUnsafe(*os_, static_cast<typename OutputStream::Ch>(*p));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -310,7 +342,7 @@ protected:
|
|||||||
char* end = internal::u64toa(u64, buffer);
|
char* end = internal::u64toa(u64, buffer);
|
||||||
PutReserve(*os_, static_cast<size_t>(end - buffer));
|
PutReserve(*os_, static_cast<size_t>(end - buffer));
|
||||||
for (char* p = buffer; p != end; ++p)
|
for (char* p = buffer; p != end; ++p)
|
||||||
PutUnsafe(*os_, static_cast<typename TargetEncoding::Ch>(*p));
|
PutUnsafe(*os_, static_cast<typename OutputStream::Ch>(*p));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -338,12 +370,12 @@ protected:
|
|||||||
char* end = internal::dtoa(d, buffer, maxDecimalPlaces_);
|
char* end = internal::dtoa(d, buffer, maxDecimalPlaces_);
|
||||||
PutReserve(*os_, static_cast<size_t>(end - buffer));
|
PutReserve(*os_, static_cast<size_t>(end - buffer));
|
||||||
for (char* p = buffer; p != end; ++p)
|
for (char* p = buffer; p != end; ++p)
|
||||||
PutUnsafe(*os_, static_cast<typename TargetEncoding::Ch>(*p));
|
PutUnsafe(*os_, static_cast<typename OutputStream::Ch>(*p));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool WriteString(const Ch* str, SizeType length) {
|
bool WriteString(const Ch* str, SizeType length) {
|
||||||
static const typename TargetEncoding::Ch hexDigits[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
|
static const typename OutputStream::Ch hexDigits[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
|
||||||
static const char escape[256] = {
|
static const char escape[256] = {
|
||||||
#define Z16 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
#define Z16 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
//0 1 2 3 4 5 6 7 8 9 A B C D E F
|
//0 1 2 3 4 5 6 7 8 9 A B C D E F
|
||||||
@@ -399,7 +431,7 @@ protected:
|
|||||||
else if ((sizeof(Ch) == 1 || static_cast<unsigned>(c) < 256) && RAPIDJSON_UNLIKELY(escape[static_cast<unsigned char>(c)])) {
|
else if ((sizeof(Ch) == 1 || static_cast<unsigned>(c) < 256) && RAPIDJSON_UNLIKELY(escape[static_cast<unsigned char>(c)])) {
|
||||||
is.Take();
|
is.Take();
|
||||||
PutUnsafe(*os_, '\\');
|
PutUnsafe(*os_, '\\');
|
||||||
PutUnsafe(*os_, static_cast<typename TargetEncoding::Ch>(escape[static_cast<unsigned char>(c)]));
|
PutUnsafe(*os_, static_cast<typename OutputStream::Ch>(escape[static_cast<unsigned char>(c)]));
|
||||||
if (escape[static_cast<unsigned char>(c)] == 'u') {
|
if (escape[static_cast<unsigned char>(c)] == 'u') {
|
||||||
PutUnsafe(*os_, '0');
|
PutUnsafe(*os_, '0');
|
||||||
PutUnsafe(*os_, '0');
|
PutUnsafe(*os_, '0');
|
||||||
@@ -427,9 +459,13 @@ protected:
|
|||||||
|
|
||||||
bool WriteRawValue(const Ch* json, size_t length) {
|
bool WriteRawValue(const Ch* json, size_t length) {
|
||||||
PutReserve(*os_, length);
|
PutReserve(*os_, length);
|
||||||
for (size_t i = 0; i < length; i++) {
|
GenericStringStream<SourceEncoding> is(json);
|
||||||
RAPIDJSON_ASSERT(json[i] != '\0');
|
while (RAPIDJSON_LIKELY(is.Tell() < length)) {
|
||||||
PutUnsafe(*os_, json[i]);
|
RAPIDJSON_ASSERT(is.Peek() != '\0');
|
||||||
|
if (RAPIDJSON_UNLIKELY(!(writeFlags & kWriteValidateEncodingFlag ?
|
||||||
|
Transcoder<SourceEncoding, TargetEncoding>::Validate(is, *os_) :
|
||||||
|
Transcoder<SourceEncoding, TargetEncoding>::TranscodeUnsafe(is, *os_))))
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -457,7 +493,7 @@ protected:
|
|||||||
// Flush the value if it is the top level one.
|
// Flush the value if it is the top level one.
|
||||||
bool EndValue(bool ret) {
|
bool EndValue(bool ret) {
|
||||||
if (RAPIDJSON_UNLIKELY(level_stack_.Empty())) // end of json text
|
if (RAPIDJSON_UNLIKELY(level_stack_.Empty())) // end of json text
|
||||||
os_->Flush();
|
Flush();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -561,7 +597,7 @@ inline bool Writer<StringBuffer>::ScanWriteUnescapedString(StringStream& is, siz
|
|||||||
// The rest of string using SIMD
|
// The rest of string using SIMD
|
||||||
static const char dquote[16] = { '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"' };
|
static const char dquote[16] = { '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"', '\"' };
|
||||||
static const char bslash[16] = { '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\' };
|
static const char bslash[16] = { '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\' };
|
||||||
static const char space[16] = { 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19 };
|
static const char space[16] = { 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F };
|
||||||
const __m128i dq = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&dquote[0]));
|
const __m128i dq = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&dquote[0]));
|
||||||
const __m128i bs = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&bslash[0]));
|
const __m128i bs = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&bslash[0]));
|
||||||
const __m128i sp = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&space[0]));
|
const __m128i sp = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&space[0]));
|
||||||
@@ -570,7 +606,7 @@ inline bool Writer<StringBuffer>::ScanWriteUnescapedString(StringStream& is, siz
|
|||||||
const __m128i s = _mm_load_si128(reinterpret_cast<const __m128i *>(p));
|
const __m128i s = _mm_load_si128(reinterpret_cast<const __m128i *>(p));
|
||||||
const __m128i t1 = _mm_cmpeq_epi8(s, dq);
|
const __m128i t1 = _mm_cmpeq_epi8(s, dq);
|
||||||
const __m128i t2 = _mm_cmpeq_epi8(s, bs);
|
const __m128i t2 = _mm_cmpeq_epi8(s, bs);
|
||||||
const __m128i t3 = _mm_cmpeq_epi8(_mm_max_epu8(s, sp), sp); // s < 0x20 <=> max(s, 0x19) == 0x19
|
const __m128i t3 = _mm_cmpeq_epi8(_mm_max_epu8(s, sp), sp); // s < 0x20 <=> max(s, 0x1F) == 0x1F
|
||||||
const __m128i x = _mm_or_si128(_mm_or_si128(t1, t2), t3);
|
const __m128i x = _mm_or_si128(_mm_or_si128(t1, t2), t3);
|
||||||
unsigned short r = static_cast<unsigned short>(_mm_movemask_epi8(x));
|
unsigned short r = static_cast<unsigned short>(_mm_movemask_epi8(x));
|
||||||
if (RAPIDJSON_UNLIKELY(r != 0)) { // some of characters is escaped
|
if (RAPIDJSON_UNLIKELY(r != 0)) { // some of characters is escaped
|
||||||
@@ -595,15 +631,79 @@ inline bool Writer<StringBuffer>::ScanWriteUnescapedString(StringStream& is, siz
|
|||||||
is.src_ = p;
|
is.src_ = p;
|
||||||
return RAPIDJSON_LIKELY(is.Tell() < length);
|
return RAPIDJSON_LIKELY(is.Tell() < length);
|
||||||
}
|
}
|
||||||
#endif // defined(RAPIDJSON_SSE2) || defined(RAPIDJSON_SSE42)
|
#elif defined(RAPIDJSON_NEON)
|
||||||
|
template<>
|
||||||
|
inline bool Writer<StringBuffer>::ScanWriteUnescapedString(StringStream& is, size_t length) {
|
||||||
|
if (length < 16)
|
||||||
|
return RAPIDJSON_LIKELY(is.Tell() < length);
|
||||||
|
|
||||||
|
if (!RAPIDJSON_LIKELY(is.Tell() < length))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
const char* p = is.src_;
|
||||||
|
const char* end = is.head_ + length;
|
||||||
|
const char* nextAligned = reinterpret_cast<const char*>((reinterpret_cast<size_t>(p) + 15) & static_cast<size_t>(~15));
|
||||||
|
const char* endAligned = reinterpret_cast<const char*>(reinterpret_cast<size_t>(end) & static_cast<size_t>(~15));
|
||||||
|
if (nextAligned > end)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
while (p != nextAligned)
|
||||||
|
if (*p < 0x20 || *p == '\"' || *p == '\\') {
|
||||||
|
is.src_ = p;
|
||||||
|
return RAPIDJSON_LIKELY(is.Tell() < length);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
os_->PutUnsafe(*p++);
|
||||||
|
|
||||||
|
// The rest of string using SIMD
|
||||||
|
const uint8x16_t s0 = vmovq_n_u8('"');
|
||||||
|
const uint8x16_t s1 = vmovq_n_u8('\\');
|
||||||
|
const uint8x16_t s2 = vmovq_n_u8('\b');
|
||||||
|
const uint8x16_t s3 = vmovq_n_u8(32);
|
||||||
|
|
||||||
|
for (; p != endAligned; p += 16) {
|
||||||
|
const uint8x16_t s = vld1q_u8(reinterpret_cast<const uint8_t *>(p));
|
||||||
|
uint8x16_t x = vceqq_u8(s, s0);
|
||||||
|
x = vorrq_u8(x, vceqq_u8(s, s1));
|
||||||
|
x = vorrq_u8(x, vceqq_u8(s, s2));
|
||||||
|
x = vorrq_u8(x, vcltq_u8(s, s3));
|
||||||
|
|
||||||
|
x = vrev64q_u8(x); // Rev in 64
|
||||||
|
uint64_t low = vgetq_lane_u64(reinterpret_cast<uint64x2_t>(x), 0); // extract
|
||||||
|
uint64_t high = vgetq_lane_u64(reinterpret_cast<uint64x2_t>(x), 1); // extract
|
||||||
|
|
||||||
|
SizeType len = 0;
|
||||||
|
bool escaped = false;
|
||||||
|
if (low == 0) {
|
||||||
|
if (high != 0) {
|
||||||
|
unsigned lz = (unsigned)__builtin_clzll(high);
|
||||||
|
len = 8 + (lz >> 3);
|
||||||
|
escaped = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
unsigned lz = (unsigned)__builtin_clzll(low);
|
||||||
|
len = lz >> 3;
|
||||||
|
escaped = true;
|
||||||
|
}
|
||||||
|
if (RAPIDJSON_UNLIKELY(escaped)) { // some of characters is escaped
|
||||||
|
char* q = reinterpret_cast<char*>(os_->PushUnsafe(len));
|
||||||
|
for (size_t i = 0; i < len; i++)
|
||||||
|
q[i] = p[i];
|
||||||
|
|
||||||
|
p += len;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
vst1q_u8(reinterpret_cast<uint8_t *>(os_->PushUnsafe(16)), s);
|
||||||
|
}
|
||||||
|
|
||||||
|
is.src_ = p;
|
||||||
|
return RAPIDJSON_LIKELY(is.Tell() < length);
|
||||||
|
}
|
||||||
|
#endif // RAPIDJSON_NEON
|
||||||
|
|
||||||
RAPIDJSON_NAMESPACE_END
|
RAPIDJSON_NAMESPACE_END
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#if defined(_MSC_VER) || defined(__clang__)
|
||||||
RAPIDJSON_DIAG_POP
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __clang__
|
|
||||||
RAPIDJSON_DIAG_POP
|
RAPIDJSON_DIAG_POP
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,6 @@
|
|||||||
#include <uv.h>
|
#include <uv.h>
|
||||||
|
|
||||||
|
|
||||||
#include "api/Api.h"
|
|
||||||
#include "App.h"
|
#include "App.h"
|
||||||
#include "backend/cpu/Cpu.h"
|
#include "backend/cpu/Cpu.h"
|
||||||
#include "base/io/Console.h"
|
#include "base/io/Console.h"
|
||||||
|
|||||||
@@ -71,13 +71,12 @@ static void print_cpu(Config *)
|
|||||||
{
|
{
|
||||||
const ICpuInfo *info = Cpu::info();
|
const ICpuInfo *info = Cpu::info();
|
||||||
|
|
||||||
Log::print(GREEN_BOLD(" * ") WHITE_BOLD("%-13s%s (%zu)") " %sx64 %sAES %sAVX2",
|
Log::print(GREEN_BOLD(" * ") WHITE_BOLD("%-13s%s (%zu)") " %sx64 %sAES",
|
||||||
"CPU",
|
"CPU",
|
||||||
info->brand(),
|
info->brand(),
|
||||||
info->packages(),
|
info->packages(),
|
||||||
info->isX64() ? GREEN_BOLD_S : RED_BOLD_S "-",
|
info->isX64() ? GREEN_BOLD_S : RED_BOLD_S "-",
|
||||||
info->hasAES() ? GREEN_BOLD_S : RED_BOLD_S "-",
|
info->hasAES() ? GREEN_BOLD_S : RED_BOLD_S "-"
|
||||||
info->hasAVX2() ? GREEN_BOLD_S : RED_BOLD_S "-"
|
|
||||||
);
|
);
|
||||||
# if defined(XMRIG_FEATURE_LIBCPUID) || defined (XMRIG_FEATURE_HWLOC)
|
# if defined(XMRIG_FEATURE_LIBCPUID) || defined (XMRIG_FEATURE_HWLOC)
|
||||||
Log::print(WHITE_BOLD(" %-13s") BLACK_BOLD("L2:") WHITE_BOLD("%.1f MB") BLACK_BOLD(" L3:") WHITE_BOLD("%.1f MB")
|
Log::print(WHITE_BOLD(" %-13s") BLACK_BOLD("L2:") WHITE_BOLD("%.1f MB") BLACK_BOLD(" L3:") WHITE_BOLD("%.1f MB")
|
||||||
|
|||||||
@@ -1,87 +0,0 @@
|
|||||||
/* XMRig
|
|
||||||
* Copyright 2010 Jeff Garzik <jgarzik@pobox.com>
|
|
||||||
* Copyright 2012-2014 pooler <pooler@litecoinpool.org>
|
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
|
||||||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
|
||||||
* Copyright 2018-2019 SChernykh <https://github.com/SChernykh>
|
|
||||||
* Copyright 2016-2019 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#include "api/requests/HttpApiRequest.h"
|
|
||||||
#include "base/net/http/HttpData.h"
|
|
||||||
#include "rapidjson/error/en.h"
|
|
||||||
|
|
||||||
|
|
||||||
xmrig::HttpApiRequest::HttpApiRequest(const HttpData &req, bool restricted) :
|
|
||||||
ApiRequest(SOURCE_HTTP, restricted),
|
|
||||||
m_parsed(false),
|
|
||||||
m_req(req),
|
|
||||||
m_res(req.id()),
|
|
||||||
m_url(req.url.c_str())
|
|
||||||
{
|
|
||||||
if (method() == METHOD_GET) {
|
|
||||||
if (url() == "/1/summary" || url() == "/2/summary" || url() == "/api.json") {
|
|
||||||
m_type = REQ_SUMMARY;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (url().size() > 4) {
|
|
||||||
if (memcmp(url().data(), "/2/", 3) == 0) {
|
|
||||||
m_version = 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const rapidjson::Value &xmrig::HttpApiRequest::json() const
|
|
||||||
{
|
|
||||||
return m_body;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
xmrig::IApiRequest::Method xmrig::HttpApiRequest::method() const
|
|
||||||
{
|
|
||||||
return static_cast<IApiRequest::Method>(m_req.method);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void xmrig::HttpApiRequest::accept()
|
|
||||||
{
|
|
||||||
using namespace rapidjson;
|
|
||||||
|
|
||||||
ApiRequest::accept();
|
|
||||||
|
|
||||||
if (!m_parsed && !m_req.body.empty()) {
|
|
||||||
m_parsed = true;
|
|
||||||
m_body.Parse<kParseCommentsFlag | kParseTrailingCommasFlag>(m_req.body.c_str());
|
|
||||||
|
|
||||||
if (m_body.HasParseError()) {
|
|
||||||
reply().AddMember("error", StringRef(GetParseError_En(m_body.GetParseError())), doc().GetAllocator());;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void xmrig::HttpApiRequest::done(int status)
|
|
||||||
{
|
|
||||||
ApiRequest::done(status);
|
|
||||||
|
|
||||||
m_res.setStatus(status);
|
|
||||||
m_res.end();
|
|
||||||
}
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user