CPU相关信息
unit untCpuInfo;
interface
{ 获取 CPU 制造商 }
function GetCpuFactory: String;
{ 获取 CPU 家族系统 }
function GetCpuFamily: Cardinal;
{ 获取 CPU 型号 }
function GetCpuModel: Cardinal;
{ 获取 CPU 步进 }
function GetCpuStepping: Cardinal;
{ 获取 CPU 名称 }
function GetCpuName: String;
{ 获取 CPU 频率 }
function GetCpuFrequency: Cardinal;
{ 获取 CPU 指令集 }
function GetCpuInstructs: String;
{ 获取 CPU 个数 }
function GetCPUCount: String;
{ 获取 CPU 缓存信息 }
function GetCPUCacheInfo: String;
implementation
uses Windows, SysUtils, Math;
type
TCPUParam = record
bit: Integer;
desc: array [0 .. 19] of AnsiChar;
detail: array [0 .. 63] of AnsiChar;
end;
{ 寄存器 }
TRegisters = record
EAX: DWORD;
EBX: DWORD;
ECX: DWORD;
EDX: DWORD;
end;
PROCESSOR_CACHE_TYPE = (CacheUnified, CacheInstruction, CacheData, CacheTrace);
TLOGICAL_PROCESSOR_RELATIONSHIP = (RelationProcessorCore, RelationNumaNode, RelationCache, RelationProcessorPackage, RelationGroup, RelationAll = $FFFFFF);
CACHE_DESCRIPTOR = record
Level: Byte;
Associativity: Byte;
LineSize: WORD;
Size: DWORD;
iType: PROCESSOR_CACHE_TYPE;
end;
TCACHE_DESCRIPTOR = CACHE_DESCRIPTOR;
PCACHE_DESCRIPTOR = ^TCACHE_DESCRIPTOR;
SYSTEM_LOGICAL_PROCESSOR_INFORMATION = record
ProcessorMask: NativeUInt;
Relationship: TLOGICAL_PROCESSOR_RELATIONSHIP;
Cache: TCACHE_DESCRIPTOR;
Reserved: DWORD;
end;
TSYSTEM_LOGICAL_PROCESSOR_INFORMATION = SYSTEM_LOGICAL_PROCESSOR_INFORMATION;
PSYSTEM_LOGICAL_PROCESSOR_INFORMATION = ^TSYSTEM_LOGICAL_PROCESSOR_INFORMATION;
const
IntelCPUParam_1: array [0 .. 29] of TCPUParam = ( { }
(bit: 0; desc: 'FPU'; detail: 'Floating-point unit on-chip'), { }
(bit: 1; desc: 'VME'; detail: 'Virtual Mode Enhancements'), { }
(bit: 2; desc: 'DE'; detail: 'Debugging Extension'), { }
(bit: 3; desc: 'PSE'; detail: 'Page Size Extension'), { }
(bit: 4; desc: 'TSC'; detail: 'Time Stamp Counter'), { }
(bit: 5; desc: 'MSR'; detail: 'Pentium Processor MSR'), { }
(bit: 6; desc: 'PAE'; detail: 'Physical Address Extension'), { }
(bit: 7; desc: 'MCE'; detail: 'Machine Check Exception'), { }
(bit: 8; desc: 'CX8'; detail: 'CMPXCHG8B Instruction Supported'), { }
(bit: 9; desc: 'APIC'; detail: 'On-chip APIC Hardware Enabled'), { }
(bit: 11; desc: 'SEP'; detail: 'SYSENTER and SYSEXIT'), { }
(bit: 12; desc: 'MTRR'; detail: 'Memory Type Range Registers'), { }
(bit: 13; desc: 'PGE'; detail: 'PTE Global Bit'), { }
(bit: 14; desc: 'MCA'; detail: 'Machine Check Architecture'), { }
(bit: 15; desc: 'CMOV'; detail: 'Conditional Move/Compare Instruction'), { }
(bit: 16; desc: 'PAT'; detail: 'Page Attribute Table'), { }
(bit: 17; desc: 'PSE36'; detail: 'Page Size Extension 36-bit'), { }
(bit: 18; desc: 'PN'; detail: 'Processor Serial Number'), { }
(bit: 19; desc: 'CLFLUSH'; detail: 'CFLUSH instruction'), { }
(bit: 21; desc: 'DTS'; detail: 'Debug Store'), { }
(bit: 22; desc: 'ACPI'; detail: 'Thermal Monitor and Clock Ctrl'), { }
(bit: 23; desc: 'MMX'; detail: 'MMX Technology'), { }
(bit: 24; desc: 'FXSR'; detail: 'FXSAVE/FXRSTOR'), { }
(bit: 25; desc: 'SSE'; detail: 'SSE Extensions'), { }
(bit: 26; desc: 'SSE2'; detail: 'SSE2 Extensions'), { }
(bit: 27; desc: 'SS'; detail: 'Self Snoop'), { }
(bit: 28; desc: 'HT'; detail: 'Multi-threading'), { }
(bit: 29; desc: 'TM'; detail: 'Therm. Monitor'), { }
(bit: 30; desc: 'IA64'; detail: 'IA-64 Processor'), { }
(bit: 31; desc: 'PBE'; detail: 'Pend. Brk. EN.') { }
);
IntelCPUParam_2: array [0 .. 24] of TCPUParam = ( { }
(bit: 0; desc: 'PNI'; detail: 'SSE3 Extensions '), { }
(bit: 1; desc: 'PCLMULQDQ'; detail: 'Carryless Multiplication'), { }
(bit: 2; desc: 'DTES64'; detail: '64-bit Debug Store'), { }
(bit: 3; desc: 'MONITOR'; detail: 'MONITOR/MWAIT'), { }
(bit: 4; desc: 'DS_CPL'; detail: 'CPL Qualified Debug Store'), { }
(bit: 5; desc: 'VMX'; detail: 'Virtual Machine Extensions'), { }
(bit: 6; desc: 'SMX'; detail: 'Safer Mode Extensions'), { }
(bit: 7; desc: 'EST'; detail: 'Enhanced Intel SpeedStep Technology'), { }
(bit: 8; desc: 'TM2'; detail: 'Thermal Monitor 2'), { }
(bit: 9; desc: 'SSSE3'; detail: 'Supplemental SSE3'), { }
(bit: 10; desc: 'CID'; detail: 'L1 Context ID'), { }
(bit: 12; desc: 'FMA'; detail: 'Fused Multiply Add'), { }
(bit: 13; desc: 'CX16'; detail: 'CMPXCHG16B Available'), { }
(bit: 14; desc: 'XTPR'; detail: 'xTPR Disable'), { }
(bit: 15; desc: 'PDCM'; detail: 'Perf/Debug Capability MSR'), { }
(bit: 18; desc: 'DCA'; detail: 'Direct Cache Access'), { }
(bit: 19; desc: 'SSE4_1'; detail: 'SSE4.1 Extensions'), { }
(bit: 20; desc: 'SSE4_2'; detail: 'SSE4.2 Extensions'), { }
(bit: 21; desc: 'X2APIC'; detail: 'x2APIC Feature'), { }
(bit: 22; desc: 'MOVBE'; detail: 'MOVBE Instruction'), { }
(bit: 23; desc: 'POPCNT'; detail: 'Pop Count Instruction'), { }
(bit: 25; desc: 'AES'; detail: 'AES Instruction'), { }
(bit: 26; desc: 'XSAVE'; detail: 'XSAVE/XRSTOR Extensions'), { }
(bit: 27; desc: 'OSXSAVE'; detail: 'XSAVE/XRSTOR Enabled in the OS'), { }
(bit: 28; desc: 'AVX'; detail: 'Advanced Vector Extension') { }
);
AMDCPUParam_1: array [0 .. 9] of TCPUParam = ( { }
(bit: 11; desc: 'SYSCALL'; detail: 'SYSCALL and SYSRET'), { }
(bit: 19; desc: 'MP'; detail: 'MP Capable'), { }
(bit: 20; desc: 'NX'; detail: 'No-Execute Page Protection'), { }
(bit: 22; desc: 'MMXEXT'; detail: 'MMX Technology (AMD Extensions)'), { }
(bit: 25; desc: 'FXSR_OPT'; detail: 'Fast FXSAVE/FXRSTOR'), { }
(bit: 26; desc: 'PDPE1GB'; detail: 'PDP Entry for 1GiB Page'), { }
(bit: 27; desc: 'RDTSCP'; detail: 'RDTSCP Instruction'), { }
(bit: 29; desc: 'LM'; detail: 'Long Mode Capable'), { }
(bit: 30; desc: '3DNOWEXT'; detail: '3DNow! Extensions'), { }
(bit: 31; desc: '3DNOW'; detail: '3DNow!') { }
);
AMDCPUParam_2: array [0 .. 13] of TCPUParam = ( { }
(bit: 0; desc: 'LAHF_LM'; detail: 'LAHF/SAHF Supported in 64-bit Mode'), { }
(bit: 1; desc: 'CMP_LEGACY'; detail: 'Chip Multi-Core'), { }
(bit: 2; desc: 'SVM'; detail: 'Secure Virtual Machine'), { }
(bit: 3; desc: 'EXTAPIC'; detail: 'Extended APIC Space'), { }
(bit: 4; desc: 'CR8_LEGACY'; detail: 'CR8 Available in Legacy Mode'), { }
(bit: 5; desc: 'ABM'; detail: 'Advanced Bit Manipulation'), { }
(bit: 6; desc: 'SSE4A'; detail: 'SSE4A Extensions'), { }
(bit: 7; desc: 'MISALIGNSSE'; detail: 'Misaligned SSE Mode'), { }
(bit: 8; desc: '3DNOWPREFETCH'; detail: '3DNow! Prefetch/PrefetchW'), { }
(bit: 9; desc: 'OSVW'; detail: 'OS Visible Workaround'), { }
(bit: 10; desc: 'IBS'; detail: 'Instruction Based Sampling'), { }
(bit: 11; desc: 'SSE5'; detail: 'SSE5 Extensions'), { }
(bit: 12; desc: 'SKINIT'; detail: 'SKINIT, STGI, and DEV Support'), { }
(bit: 13; desc: 'WDT'; detail: 'Watchdog Timer Support') { }
);
function GetLogicalProcessorInformation(Buffer: PSYSTEM_LOGICAL_PROCESSOR_INFORMATION; var ReturnLength: DWORD): BOOL; stdcall; external 'kernel32.dll';
procedure GetCPUID(Param: Cardinal; var Registers: TRegisters);
asm
PUSH EBX { save affected registers }
PUSH EDI
MOV EDI, Registers
XOR EBX, EBX { clear EBX register }
XOR ECX, ECX { clear ECX register }
XOR EDX, EDX { clear EDX register }
DB $0F, $A2 { CPUID opcode }
MOV TRegisters(EDI).&EAX, EAX { save EAX register }
MOV TRegisters(EDI).&EBX, EBX { save EBX register }
MOV TRegisters(EDI).&ECX, ECX { save ECX register }
MOV TRegisters(EDI).&EDX, EDX { save EDX register }
POP EDI { restore registers }
POP EBX
end;
{ 获取 CPU 制造商 }
function GetCpuFactory: String;
var
regs : TRegisters;
VendorName: array [0 .. 12] of AnsiChar;
begin
GetCPUID(0, regs);
{ 1、制造商 }
Move(regs.EBX, VendorName[0], 4);
Move(regs.EDX, VendorName[4], 4);
Move(regs.ECX, VendorName[8], 4);
VendorName[12] := #0;
Result := string(AnsiString(VendorName));
end;
{ 获取 CPU 家族系统 }
function GetCpuFamily: Cardinal;
var
regs: TRegisters;
begin
GetCPUID(1, regs);
Result := (regs.EAX shr 8) and $F;
if (Result = $F) then
Result := Result + (regs.EAX shr 20) and $FF;
end;
{ 获取 CPU 型号 }
function GetCpuModel: Cardinal;
var
regs: TRegisters;
begin
GetCPUID(1, regs);
Result := (regs.EAX shr 4) and $F;
if (GetCpuFamily = $F) or (GetCpuFamily = 6) then
Result := Result + ((regs.EAX shr 16) and $F) shl 4;
end;
{ 获取 CPU 步进 }
function GetCpuStepping: Cardinal;
var
regs: TRegisters;
begin
GetCPUID(1, regs);
Result := regs.EAX and $F;
end;
{ 获取 CPU 名称 }
function GetCpuName: String;
var
regs : TRegisters;
processor_name: array [0 .. 48] of AnsiChar;
III : Integer;
TTT : Cardinal;
begin
for III := 2 to 4 do
begin
TTT := 1 shl 31 + III;
GetCPUID(TTT, regs);
Move(regs.EAX, processor_name[(III - 2) * 16 + 00], 4);
Move(regs.EBX, processor_name[(III - 2) * 16 + 04], 4);
Move(regs.ECX, processor_name[(III - 2) * 16 + 08], 4);
Move(regs.EDX, processor_name[(III - 2) * 16 + 12], 4);
end;
processor_name[48] := #0;
Result := string(AnsiString(processor_name));
end;
{ 获取 CPU 频率 }
function GetCpuFrequency: Cardinal;
var
CurrTicks, TicksCount: TLargeInteger;
iST, iET : Int64;
OldProcessP : DWORD;
OldThreadP : DWORD;
begin
{ 获取进程、线程级别 }
OldProcessP := GetPriorityClass(GetCurrentProcess);
OldThreadP := GetThreadPriority(GetCurrentThread);
{ 调整进程、线程级别到最高级别 }
SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
QueryPerformanceFrequency(TicksCount);
QueryPerformanceCounter(CurrTicks);
LARGE_INTEGER(TicksCount).QuadPart := Round(LARGE_INTEGER(TicksCount).QuadPart / 16);
LARGE_INTEGER(TicksCount).QuadPart := LARGE_INTEGER(TicksCount).QuadPart + LARGE_INTEGER(CurrTicks).QuadPart;
asm
RDTSC
MOV DWORD PTR iST + 0, EAX
MOV DWORD PTR iST + 4, EDX
end;
while (LARGE_INTEGER(CurrTicks).QuadPart < LARGE_INTEGER(TicksCount).QuadPart) do
begin
QueryPerformanceCounter(CurrTicks);
end;
asm
RDTSC
MOV DWORD PTR iET + 0, EAX
MOV DWORD PTR iET + 4, EDX
end;
{ 恢复进程、线程级别原有级别 }
SetThreadPriority(GetCurrentThread, OldThreadP);
SetPriorityClass(GetCurrentProcess, OldProcessP);
{ 返回结果 MHz }
Result := Round((iET - iST) / 62500);
end;
{ 获取 CPU 指令集 }
function GetCpuInstructs: String;
var
regs1, regs2 : TRegisters;
amd_flags1, amd_flags2: Integer;
III : Integer;
begin
GetCPUID(1, regs1);
for III := 29 downto 0 do
begin
if regs1.EDX and (1 shl IntelCPUParam_1[III].bit) = 1 shl IntelCPUParam_1[III].bit then
begin
Result := string(StrPas(IntelCPUParam_1[III].desc)) + ' ' + Result;
end;
end;
for III := 24 downto 0 do
begin
if regs1.ECX and (1 shl IntelCPUParam_2[III].bit) = 1 shl IntelCPUParam_2[III].bit then
begin
Result := Result + ' ' + string(StrPas(IntelCPUParam_2[III].desc));
end;
end;
GetCPUID($80000001, regs2);
amd_flags1 := regs2.EDX;
amd_flags2 := regs2.ECX;
for III := 10 downto 0 do
begin
if amd_flags1 and (1 shl AMDCPUParam_1[III].bit) = 1 shl AMDCPUParam_1[III].bit then
begin
Result := Result + ' ' + string(StrPas(AMDCPUParam_1[III].desc));
end;
end;
for III := 13 downto 0 do
begin
if amd_flags2 and (1 shl AMDCPUParam_2[III].bit) = 1 shl AMDCPUParam_2[III].bit then
begin
Result := Result + ' ' + string(StrPas(AMDCPUParam_2[III].desc));
end;
end;
end;
function CountSetBits(const bitMask: Cardinal): DWORD;
var
LSHIFT : DWORD;
bitSetCount: DWORD;
bitTest : Uint64;
I : DWORD;
begin
LSHIFT := sizeof(Cardinal) * 8 - 1;
bitSetCount := 0;
bitTest := 1 shl LSHIFT;
for I := 0 to LSHIFT - 1 do
begin
bitSetCount := Ifthen((bitMask and bitTest) = 0, 1, 0);
bitTest := bitTest div 2;
end;
Result := bitSetCount;
end;
{ 获取 CPU 个数 }
function GetCPUCount: String;
var
Buffer : array of SYSTEM_LOGICAL_PROCESSOR_INFORMATION;
ReturnLength : DWORD;
III, Count : Integer;
processorCoreCount : Integer;
numaNodeCount : Integer;
logicalProcessorCount: Integer;
processorPackageCount: Integer;
JJJ : Integer;
begin
SetLength(Buffer, 1);
ReturnLength := sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION);
{ 第一次调用获取缓冲区大小 }
if not GetLogicalProcessorInformation(@Buffer[0], ReturnLength) then
begin
if GetLastError = ERROR_INSUFFICIENT_BUFFER then
begin
SetLength(Buffer, ReturnLength div sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION) + 1);
{ 第二次调用,返回结果 }
if not GetLogicalProcessorInformation(@Buffer[0], ReturnLength) then
begin
Exit;
end;
end;
end;
processorCoreCount := 0;
numaNodeCount := 0;
logicalProcessorCount := 0;
processorPackageCount := 0;
Count := ReturnLength div sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION);
for III := 0 to Count - 1 do
begin
case Buffer[III].Relationship of
RelationProcessorCore:
Inc(processorCoreCount);
RelationNumaNode:
Inc(numaNodeCount);
RelationProcessorPackage:
Inc(processorPackageCount);
RelationCache:
begin
JJJ := CountSetBits(Buffer[III].ProcessorMask);
if JJJ = 1 then
begin
Inc(logicalProcessorCount);
end;
end;
end;
end;
Result := Format('NumaNodes=%d PhysicalProcessorPackages=%d ProcessorCores=%d LogicalProcessors=%d', [numaNodeCount, processorPackageCount, processorCoreCount,
logicalProcessorCount]);
end;
{ 获取 CPU 缓存信息 }
function GetCPUCacheInfo: String;
var
Buffer : array of SYSTEM_LOGICAL_PROCESSOR_INFORMATION;
ReturnLength : DWORD;
III, Count : Integer;
L1DataCache : Integer;
L1InstructionCache : Integer;
L2DataCache : Integer;
L3DataCache : Integer;
L1DataCacheStr : String;
L1InstructionCacheStr: String;
L2DataCacheStr : String;
L3DataCacheStr : String;
L10 : String;
L11 : String;
L2, L3 : string;
L1DataSize : Integer;
L1InstructionSize : Integer;
L2DataSize : Integer;
L3DataSize : Integer;
begin
SetLength(Buffer, 1);
ReturnLength := sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION);
L1DataSize := 0;
L1InstructionSize := 0;
L2DataSize := 0;
L3DataSize := 0;
{ 第一次调用获取缓冲区大小 }
if not GetLogicalProcessorInformation(@Buffer[0], ReturnLength) then
begin
if GetLastError = ERROR_INSUFFICIENT_BUFFER then
begin
SetLength(Buffer, ReturnLength div sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION) + 1);
{ 第二次调用,返回结果 }
if not GetLogicalProcessorInformation(@Buffer[0], ReturnLength) then
begin
Exit;
end;
end;
end;
L1DataCache := 0;
L1InstructionCache := 0;
L2DataCache := 0;
L3DataCache := 0;
Count := ReturnLength div sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION);
for III := 0 to Count - 1 do
begin
{ CPU一级缓存 }
if Buffer[III].Cache.Level = 1 then
begin
{ CPU一级数据缓存 }
if Buffer[III].Cache.iType = CacheData then
begin
Inc(L1DataCache);
L1DataSize := Buffer[III].Cache.Size div 1024;
L1DataCacheStr := Format('%d 路成组相连,%d 字节管道尺寸', [Buffer[III].Cache.Associativity, Buffer[III].Cache.LineSize]);
end;
{ CPU一级指令缓存 }
if Buffer[III].Cache.iType = CacheInstruction then
begin
Inc(L1InstructionCache);
L1InstructionSize := Buffer[III].Cache.Size div 1024;
L1InstructionCacheStr := Format('%d 路成组相连,%d 字节管道尺寸', [Buffer[III].Cache.Associativity, Buffer[III].Cache.LineSize]);
end;
end;
{ CPU二级缓存 }
if Buffer[III].Cache.Level = 2 then
begin
Inc(L2DataCache);
L2DataSize := Buffer[III].Cache.Size div 1024;
L2DataCacheStr := Format('%d 路成组相连,%d 字节管道尺寸', [Buffer[III].Cache.Associativity, Buffer[III].Cache.LineSize]);
end;
{ CPU三级缓存 }
if Buffer[III].Cache.Level = 3 then
begin
Inc(L3DataCache);
L3DataSize := Buffer[III].Cache.Size div 1024;
L3DataCacheStr := Format('%d 路成组相连,%d 字节管道尺寸', [Buffer[III].Cache.Associativity, Buffer[III].Cache.LineSize]);
end;
end;
L10 := Format('一级缓存数据缓存(参数:%s):%d×%dK', [L1DataCacheStr, L1DataCache, L1DataSize]);
L11 := Format('一级缓存指令缓存(%s):%d×%dK', [L1InstructionCacheStr, L1InstructionCache, L1InstructionSize]);
L2 := Format('二级缓存(%s):%d×%dK', [L2DataCacheStr, L2DataCache, L2DataSize]);
L3 := Format('三级缓存(%s):%d×%dK', [L3DataCacheStr, L3DataCache, L3DataSize]);
Result := L10 + ' ' + L11 + ' ' + L2 + ' ' + L3;
end;
end.
附件列表
CPU相关信息的更多相关文章
- Linux系统CPU相关信息查询
Linux系统CPU相关信息查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.lscpu常用参数介绍 1>.查看帮助信息 [root@node105 ~]# lscpu ...
- 统计cpu相关信息
我的cpu为i3310m 适用类型:笔记本 CPU系列:酷睿i3 3代系列 CPU主频:2.4GHz 三级缓存:3MB 插槽类型:FCBGA1023,FCPGA988 封装大小:37.5×37.5mm ...
- cpu相关信息(进程、线程、核...)
cpu的相关信息. 1.cpu 1.1 物理cpu 实际Server中插槽上的CPU个数.物理cpu数量,可以数不重复的 physical id 有几个 1.1.1 查看物理CPU的个数 cat /p ...
- iostat---监视磁盘CPU相关信息
iostat命令被用于监视系统输入输出设备和CPU的使用情况.它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况.同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分 ...
- 查看服务器CPU相关信息!
# 查看物理CPU个数 cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l # 查看每个物理CPU中core的个数(即 ...
- 性能测试必备知识(2)- 查看 Linux 的 CPU 相关信息
做性能测试的必备知识系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1806772.html 查看系统 CPU 信息 cat /proc/ ...
- Linux CPU相关信息查看
linux 下查看机器是cpu是几核的 几个cpu more /proc/cpuinfo |grep "physical id"|uniq|wc -l 每个cpu是几核(假设cpu ...
- 获取CPU相关信息
实现效果: 知识运用: WMI管理类中的ManagementObjectCollection类 ManagementObjectSearcher类的Get方法 和ManagementObje ...
- cpu相关信息查看
查看CPU型号:grep "model name" /proc/cpuinfo | uniqdmidecode -s processor-version | uniq 查看物理CP ...
随机推荐
- hdu4631Sad Love Story(多校3)(最接近点对)
http://acm.hdu.edu.cn/showproblem.php?pid=4631 比赛的时候搜到了最接近点对的求法 Nlog(N) 又估摸着依次插入求的话会TLE 想了想觉得可以先把最近的 ...
- bzoj3156
斜率优化dp,比较裸 注意int64的运算 ..] of int64; i,n,h,t:longint; x,y,z:int64; function g(j,k:int64):doub ...
- HDU 1503 Advanced Fruits (LCS,变形)
题意: 给两个水果名,要求他们的LCS部分只输出1次,其他照常输出,但是必须保持原来的顺序! 思路: 求LCS是常规的,但是输出麻烦了,要先求LCS,再标记两串中的所有LCS字符,在遇到LCS字符时, ...
- 中国Azure媒体服务RESTAPI的Endpoint
Amber Zhao Thu, Feb 26 2015 4:09 AM 由于海外Azure和中国Azure有不同的domain,很多用户在使用媒体服务RESTAPI时,需要指定中国Azure媒体服务 ...
- 【转】cocos2d-x游戏开发(十四)用shader使图片背景透明
转自:http://blog.csdn.net/dawn_moon/article/details/8631783 好吧,终于抽时间写这篇文章了. 手头上有很多人物行走图,技能特效图等,但这些图都有个 ...
- Kernel 中的 GPIO 定义和控制
最近要深一步用到GPIO口控制,写个博客记录下Kernel层的GPIO学习过程! 一.概念 General Purpose Input Output (通用输入/输出)简称为GPIO,或 总线扩展器. ...
- Loadrunner通过sitescope监控mysql
1. Loadrunner通过sitescope监控mysql 1.1. Sitescope下载 第一次在网上下载的是sitescope11.30,安装之后无法破解,所以最后卸载了,重新下载了si ...
- Nitrous挂VPN
- Spark系列(三)SparkContext分析
SparkContext初始化流程图 其它说明: 在createTaskScheduler会根据不同的提交模式创建backend对象(如本地模式为LocalBackend). 在SparkDeploy ...
- HDU4276 - The Ghost Blows Light(树形DP)
题目大意 给定一棵n个结点的树,每个结点上有一定数量的treasure,经过每条边需要花一定的时间,要求你从结点1出发,在不超过时间T的情况下,最多能够获得的treasure是多少,并且要求结束于结点 ...