Ottenere alcune informazioni sulla CPU mediante l'API di Libcpuid
Da Gambas-it.org - Wikipedia.
Versione del 3 nov 2016 alle 17:40 di Vuott (Discussione | contributi) (Creata pagina con "'''Libcpuid''' è una piccola libreria, scritta in C, per la rilevazione e per l'estrazione delle caratteristiche della CPU x86. Per poter utilizzare le risorse di detta lib...")
Libcpuid è una piccola libreria, scritta in C, per la rilevazione e per l'estrazione delle caratteristiche della CPU x86.
Per poter utilizzare le risorse di detta libreria è necessario richiamare in Gambas ed avere installa nel proprio sistema la libreria dinamica condivisa: "libcpuid.so.14.0.0"
Mostriamo un semplice esempio pratico:
Library "libcpuid:14.0.0" Public Struct cpu_raw_data_t basic_cpuid[32, 4] As Integer ext_cpuid[32, 4] As Integer intel_fn4[8, 4] As Integer intel_fn11[4, 4] As Integer intel_fn12h[4, 4] As Integer intel_fn14h[4, 4] As Integer End Struct Public Struct cpu_sgx_t present As Integer max_enclave_32bit As Byte max_enclave_64bit As Byte flags[14] As Byte num_epc_sections As Integer misc_select As Integer secs_attributes As Long secs_xfrm As Long End Struct Public Struct cpu_id_t vendor_str[16] As Byte brand_str[64] As Byte vendor As Integer flags[128] As Byte family As Integer model As Integer stepping As Integer ext_family As Integer ext_model As Integer num_cores As Integer num_logical_cpus As Integer total_logical_cpus As Integer l1_data_cache As Integer l1_instruction_cache As Integer l2_cache As Integer l3_cache As Integer l4_cache As Integer l1_assoc As Integer l2_assoc As Integer l3_assoc As Integer l4_assoc As Integer l1_cacheline As Integer l2_cacheline As Integer l3_cacheline As Integer l4_cacheline As Integer cpu_codename[64] As Byte sse_size As Integer detection_hints[16] As Byte sgx As Struct Cpu_sgx_t End Struct Public Struct cpu_mark_t tsc As Long sys_clock As Long End Struct ' int cpuid_present(void) ' Checks if the CPUID instruction is supported. Private Extern cpuid_present() As Integer ' int cpuid_get_raw_data(struct cpu_raw_data_t* data) ' Obtains the raw CPUID data from the current CPU. Private Extern cpuid_get_raw_data(data As Cpu_raw_data_t) As Integer ' const char* cpuid_error(void) ' Returns textual description of the last error. Private Extern cpuid_error() As String ' int cpu_identify(struct cpu_raw_data_t* raw, struct cpu_id_t* data) ' Identifies the CPU. Private Extern cpu_identify(raw As Cpu_raw_data_t, data As Cpu_id_t) As Integer ' void cpu_tsc_mark(struct cpu_mark_t* mark) ' Store TSC and timing info. Private Extern cpu_tsc_mark(mark As Cpu_mark_t) ' void cpu_tsc_unmark(struct cpu_mark_t* mark) ' Calculate TSC and timing difference. Private Extern cpu_tsc_unmark(mark As Cpu_mark_t) ' int cpu_clock(void) ' Get the CPU clock frequency (all-in-one method). Private Extern cpu_clock() As Integer ' int cpu_clock_by_os(void) ' Returns the CPU clock, as reported by the OS. Private Extern cpu_clock_by_os() As Integer ' int cpu_clock_by_ic(int millis, int runs) ' Measure the CPU clock frequency using instruction-counting. Private Extern cpu_clock_by_ic(millis As Integer, runs As Integer) As Integer ' int cpu_clock_measure(int millis, int quad_check) ' Measure the CPU clock frequency. Private Extern cpu_clock_measure(millis As Integer, quad_check As Integer) As Integer Public Sub Main() Dim raw As New Cpu_raw_data_t Dim data As New Cpu_id_t Dim mark As New Cpu_mark_t If Not cpuid_present() Then Error.Raise("La CPUID non è supportata !") If cpuid_get_raw_data(raw) < 0 Then Error.Raise("Impossibile ottenere dati grezzi CPUID !\nError: " & cpuid_error()) Endif If cpu_identify(raw, data) < 0 Then Error.Raise("Impossibile identificare la CPU !\nError: " & cpuid_error()) Endif cpu_tsc_mark(mark) cpu_tsc_unmark(mark) Print " \"VENDOR_STR\": "; String@(data.vendor_str.data) Print " \"CPU_CODENAME\": "; String@(data.cpu_codename.data) Print " \"BRAND_STR\": "; String@(data.brand_str.data) Print " \"NUM_CORES\": "; data.num_cores Print " \"NUM_LOGICAL_CPUS\": "; data.num_logical_cpus Print " \"TOTAL_LOGICAL_CPUS\": "; data.total_logical_cpus Print " \"FAMILY\": "; data.family Print " \"MODEL\": "; data.model Print " \"STEPPING\": "; data.stepping Print " \"EXT_FAMILY\": "; data.ext_family Print " \"EXT_MODEL\": "; data.ext_model Print " \"CPU_CLOCK\": "; cpu_clock() Print " \"CPU_CLOCK_BY_OS\": "; cpu_clock_by_os(); " Mhz" Print " \"CPU_CLOCK_BY_IC\": "; cpu_clock_by_ic(25, 16); " Mhz" Print " \"CPU_CLOCK_MEASURE\": "; cpu_clock_measure(400, 1); " Mhz" Print " \"MARK_TSC\": "; mark.tsc Print " \"MARK_SYS_CLOCK\": "; mark.sys_clock End