用CPUID檢測各大OJ測評機所用的CPU(以及日常黑BZOJ)
話說這幾天在搞CPUID,於是突發奇想能不能用CPUID試出各大OJ測評機所用CPU型號呢,於是代碼如下:
#include <stdint.h>#include <iostream>#include <cpuid.h>static void cpuid(uint32_t func, uint32_t sub, uint32_t data[4]) { __cpuid_count(func, sub, data[0], data[1], data[2], data[3]);}int main() { uint32_t data[4]; char str[48]; for(int i = 0; i < 3; ++i) { cpuid(0x80000002 + i, 0, data); for(int j = 0; j < 4; ++j) reinterpret_cast<uint32_t*>(str)[i * 4 + j] = data[j]; } std::cout << str;}
(用<stdint.h>而不是<cstdint>的原因是為了照顧不支持C++11的編譯器)(gcc系編譯器可用,如果要用msvc編譯的話需要修改cpuid的實現)
拿這段代碼去各大OJ跑Custom Test,居然無一例外地成功把結果吐出來了……
Wandbox:

UOJ:

CF:

洛谷:

LOJ:

CodeVS:

入門OJ:

最後是喜聞樂見的BZOJ,因為沒有辦法直接獲得輸出,所以費了一番周折,在 @Menci 的幫助下成功獲取了CPU的型號:

你沒有看錯,BZOJ使用的就是2.00GHz的奔騰處理器……可以說是非常BZ了。
總結(以主頻升序,僅供參考):
- Wandbox:Intel Xeon E312xx (Sandy Bridge)
- BZOJ:Intel(R) Pentium(R) Dual CPU E2180 @ 2.00GHz
- CodeVS:Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz
- UOJ:Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz
- 洛谷:
- Intel(R) Xeon(R) CPU E5-2666 v3 @ 2.90GHz
- Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz
- Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz
- 入門OJ:Intel(R) Xeon(R) CPU E3-1220 v3 @ 3.10GHz
- CF:Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz
- LOJ:Intel(R) Xeon(R) CPU E3-1270 v3 @ 3.50GHz (註:由於LOJ換了測評機,本條數據已失效——2017.10.7)
可憐的BZOJ……
推薦閱讀:
※好的VS2010 C++ 配色方案 主題?
※你用 C 語言做過哪些有意思的事?
※Objective-C 和 C++ 的區別有哪些?為什麼蘋果會選擇前者?
