diff options
author | cookedm <cookedm@localhost> | 2006-07-06 16:57:20 +0000 |
---|---|---|
committer | cookedm <cookedm@localhost> | 2006-07-06 16:57:20 +0000 |
commit | 6782a92fd1a7625ee48f6b2946a7d7149ab28a77 (patch) | |
tree | 177a92f0673655b58b247e663477af06ac1192b6 /numpy/distutils/cpuinfo.py | |
parent | 216f071ab060a6f08c22666aea33f7095f079d1e (diff) | |
download | numpy-6782a92fd1a7625ee48f6b2946a7d7149ab28a77.tar.gz |
Branch numpy.distutils to distutils-revamp
Diffstat (limited to 'numpy/distutils/cpuinfo.py')
-rw-r--r-- | numpy/distutils/cpuinfo.py | 691 |
1 files changed, 0 insertions, 691 deletions
diff --git a/numpy/distutils/cpuinfo.py b/numpy/distutils/cpuinfo.py deleted file mode 100644 index 692876f95..000000000 --- a/numpy/distutils/cpuinfo.py +++ /dev/null @@ -1,691 +0,0 @@ -#!/usr/bin/env python -""" -cpuinfo - -Copyright 2002 Pearu Peterson all rights reserved, -Pearu Peterson <pearu@cens.ioc.ee> -Permission to use, modify, and distribute this software is given under the -terms of the SciPy (BSD style) license. See LICENSE.txt that came with -this distribution for specifics. - -Note: This should be merged into proc at some point. Perhaps proc should -be returning classes like this instead of using dictionaries. - -NO WARRANTY IS EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. -$Revision: 1.1 $ -$Date: 2005/04/09 19:29:34 $ -Pearu Peterson -""" - -__version__ = "$Id: cpuinfo.py,v 1.1 2005/04/09 19:29:34 pearu Exp $" - -__all__ = ['cpu'] - -import sys,string,re,types - -class cpuinfo_base: - """Holds CPU information and provides methods for requiring - the availability of various CPU features. - """ - - def _try_call(self,func): - try: - return func() - except: - pass - - def __getattr__(self,name): - if name[0]!='_': - if hasattr(self,'_'+name): - attr = getattr(self,'_'+name) - if type(attr) is types.MethodType: - return lambda func=self._try_call,attr=attr : func(attr) - else: - return lambda : None - raise AttributeError,name - - def _getNCPUs(self): - return 1 - - def _is_32bit(self): - return not self.is_64bit() - -class linux_cpuinfo(cpuinfo_base): - - info = None - - def __init__(self): - if self.info is not None: - return - info = [] - try: - for line in open('/proc/cpuinfo').readlines(): - name_value = map(string.strip,string.split(line,':',1)) - if len(name_value)!=2: - continue - name,value = name_value - if not info or info[-1].has_key(name): # next processor - info.append({}) - info[-1][name] = value - import commands - status,output = commands.getstatusoutput('uname -m') - if not status: - if not info: info.append({}) - info[-1]['uname_m'] = string.strip(output) - except: - print sys.exc_value,'(ignoring)' - self.__class__.info = info - - def _not_impl(self): pass - - # Athlon - - def _is_AMD(self): - return self.info[0]['vendor_id']=='AuthenticAMD' - - def _is_AthlonK6_2(self): - return self._is_AMD() and self.info[0]['model'] == '2' - - def _is_AthlonK6_3(self): - return self._is_AMD() and self.info[0]['model'] == '3' - - def _is_AthlonK6(self): - return re.match(r'.*?AMD-K6',self.info[0]['model name']) is not None - - def _is_AthlonK7(self): - return re.match(r'.*?AMD-K7',self.info[0]['model name']) is not None - - def _is_AthlonMP(self): - return re.match(r'.*?Athlon\(tm\) MP\b', - self.info[0]['model name']) is not None - - def _is_Athlon64(self): - return re.match(r'.*?Athlon\(tm\) 64\b', - self.info[0]['model name']) is not None - - def _is_AthlonHX(self): - return re.match(r'.*?Athlon HX\b', - self.info[0]['model name']) is not None - - def _is_Opteron(self): - return re.match(r'.*?Opteron\b', - self.info[0]['model name']) is not None - - def _is_Hammer(self): - return re.match(r'.*?Hammer\b', - self.info[0]['model name']) is not None - - # Alpha - - def _is_Alpha(self): - return self.info[0]['cpu']=='Alpha' - - def _is_EV4(self): - return self.is_Alpha() and self.info[0]['cpu model'] == 'EV4' - - def _is_EV5(self): - return self.is_Alpha() and self.info[0]['cpu model'] == 'EV5' - - def _is_EV56(self): - return self.is_Alpha() and self.info[0]['cpu model'] == 'EV56' - - def _is_PCA56(self): - return self.is_Alpha() and self.info[0]['cpu model'] == 'PCA56' - - # Intel - - #XXX - _is_i386 = _not_impl - - def _is_Intel(self): - return self.info[0]['vendor_id']=='GenuineIntel' - - def _is_i486(self): - return self.info[0]['cpu']=='i486' - - def _is_i586(self): - return self.is_Intel() and self.info[0]['cpu family'] == '5' - - def _is_i686(self): - return self.is_Intel() and self.info[0]['cpu family'] == '6' - - def _is_Celeron(self): - return re.match(r'.*?Celeron', - self.info[0]['model name']) is not None - - def _is_Pentium(self): - return re.match(r'.*?Pentium', - self.info[0]['model name']) is not None - - def _is_PentiumII(self): - return re.match(r'.*?Pentium.*?II\b', - self.info[0]['model name']) is not None - - def _is_PentiumPro(self): - return re.match(r'.*?PentiumPro\b', - self.info[0]['model name']) is not None - - def _is_PentiumMMX(self): - return re.match(r'.*?Pentium.*?MMX\b', - self.info[0]['model name']) is not None - - def _is_PentiumIII(self): - return re.match(r'.*?Pentium.*?III\b', - self.info[0]['model name']) is not None - - def _is_PentiumIV(self): - return re.match(r'.*?Pentium.*?(IV|4)\b', - self.info[0]['model name']) is not None - - def _is_PentiumM(self): - return re.match(r'.*?Pentium.*?M\b', - self.info[0]['model name']) is not None - - def _is_Prescott(self): - return self.is_PentiumIV() and self.has_sse3() - - def _is_Nocona(self): - return self.is_PentiumIV() and self.is_64bit() - - def _is_Itanium(self): - return re.match(r'.*?Itanium\b', - self.info[0]['family']) is not None - - def _is_XEON(self): - return re.match(r'.*?XEON\b', - self.info[0]['model name'],re.IGNORECASE) is not None - - _is_Xeon = _is_XEON - - # Varia - - def _is_singleCPU(self): - return len(self.info) == 1 - - def _getNCPUs(self): - return len(self.info) - - def _has_fdiv_bug(self): - return self.info[0]['fdiv_bug']=='yes' - - def _has_f00f_bug(self): - return self.info[0]['f00f_bug']=='yes' - - def _has_mmx(self): - return re.match(r'.*?\bmmx\b',self.info[0]['flags']) is not None - - def _has_sse(self): - return re.match(r'.*?\bsse\b',self.info[0]['flags']) is not None - - def _has_sse2(self): - return re.match(r'.*?\bsse2\b',self.info[0]['flags']) is not None - - def _has_sse3(self): - return re.match(r'.*?\bsse3\b',self.info[0]['flags']) is not None - - def _has_3dnow(self): - return re.match(r'.*?\b3dnow\b',self.info[0]['flags']) is not None - - def _has_3dnowext(self): - return re.match(r'.*?\b3dnowext\b',self.info[0]['flags']) is not None - - def _is_64bit(self): - if self.is_Alpha(): - return True - if self.info[0].get('clflush size','')=='64': - return True - if self.info[0].get('uname_m','')=='x86_64': - return True - if self.info[0].get('arch','')=='IA-64': - return True - return False - - def _is_32bit(self): - return not self.is_64bit() - -class irix_cpuinfo(cpuinfo_base): - - info = None - - def __init__(self): - if self.info is not None: - return - info = [] - try: - import commands - status,output = commands.getstatusoutput('sysconf') - if status not in [0,256]: - return - for line in output.split('\n'): - name_value = map(string.strip,string.split(line,' ',1)) - if len(name_value)!=2: - continue - name,value = name_value - if not info: - info.append({}) - info[-1][name] = value - except: - print sys.exc_value,'(ignoring)' - self.__class__.info = info - - #print info - def _not_impl(self): pass - - def _is_singleCPU(self): - return self.info[0].get('NUM_PROCESSORS') == '1' - - def _getNCPUs(self): - return int(self.info[0].get('NUM_PROCESSORS')) - - def __cputype(self,n): - return self.info[0].get('PROCESSORS').split()[0].lower() == 'r%s' % (n) - def _is_r2000(self): return self.__cputype(2000) - def _is_r3000(self): return self.__cputype(3000) - def _is_r3900(self): return self.__cputype(3900) - def _is_r4000(self): return self.__cputype(4000) - def _is_r4100(self): return self.__cputype(4100) - def _is_r4300(self): return self.__cputype(4300) - def _is_r4400(self): return self.__cputype(4400) - def _is_r4600(self): return self.__cputype(4600) - def _is_r4650(self): return self.__cputype(4650) - def _is_r5000(self): return self.__cputype(5000) - def _is_r6000(self): return self.__cputype(6000) - def _is_r8000(self): return self.__cputype(8000) - def _is_r10000(self): return self.__cputype(10000) - def _is_r12000(self): return self.__cputype(12000) - def _is_rorion(self): return self.__cputype('orion') - - def get_ip(self): - try: return self.info[0].get('MACHINE') - except: pass - def __machine(self,n): - return self.info[0].get('MACHINE').lower() == 'ip%s' % (n) - def _is_IP19(self): return self.__machine(19) - def _is_IP20(self): return self.__machine(20) - def _is_IP21(self): return self.__machine(21) - def _is_IP22(self): return self.__machine(22) - def _is_IP22_4k(self): return self.__machine(22) and self._is_r4000() - def _is_IP22_5k(self): return self.__machine(22) and self._is_r5000() - def _is_IP24(self): return self.__machine(24) - def _is_IP25(self): return self.__machine(25) - def _is_IP26(self): return self.__machine(26) - def _is_IP27(self): return self.__machine(27) - def _is_IP28(self): return self.__machine(28) - def _is_IP30(self): return self.__machine(30) - def _is_IP32(self): return self.__machine(32) - def _is_IP32_5k(self): return self.__machine(32) and self._is_r5000() - def _is_IP32_10k(self): return self.__machine(32) and self._is_r10000() - -class darwin_cpuinfo(cpuinfo_base): - - info = None - - def __init__(self): - if self.info is not None: - return - info = [] - try: - import commands - status,output = commands.getstatusoutput('arch') - if not status: - if not info: info.append({}) - info[-1]['arch'] = string.strip(output) - status,output = commands.getstatusoutput('machine') - if not status: - if not info: info.append({}) - info[-1]['machine'] = string.strip(output) - status,output = commands.getstatusoutput('sysctl hw') - if not status: - if not info: info.append({}) - d = {} - for l in string.split(output,'\n'): - l = map(string.strip,string.split(l, '=')) - if len(l)==2: - d[l[0]]=l[1] - info[-1]['sysctl_hw'] = d - except: - print sys.exc_value,'(ignoring)' - self.__class__.info = info - - def _not_impl(self): pass - - def _getNCPUs(self): - try: return int(self.info[0]['sysctl_hw']['hw.ncpu']) - except: return 1 - - def _is_Power_Macintosh(self): - return self.info[0]['sysctl_hw']['hw.machine']=='Power Macintosh' - - def _is_i386(self): - return self.info[0]['arch']=='i386' - def _is_ppc(self): - return self.info[0]['arch']=='ppc' - - def __machine(self,n): - return self.info[0]['machine'] == 'ppc%s'%n - def _is_ppc601(self): return self.__machine(601) - def _is_ppc602(self): return self.__machine(602) - def _is_ppc603(self): return self.__machine(603) - def _is_ppc603e(self): return self.__machine('603e') - def _is_ppc604(self): return self.__machine(604) - def _is_ppc604e(self): return self.__machine('604e') - def _is_ppc620(self): return self.__machine(620) - def _is_ppc630(self): return self.__machine(630) - def _is_ppc740(self): return self.__machine(740) - def _is_ppc7400(self): return self.__machine(7400) - def _is_ppc7450(self): return self.__machine(7450) - def _is_ppc750(self): return self.__machine(750) - def _is_ppc403(self): return self.__machine(403) - def _is_ppc505(self): return self.__machine(505) - def _is_ppc801(self): return self.__machine(801) - def _is_ppc821(self): return self.__machine(821) - def _is_ppc823(self): return self.__machine(823) - def _is_ppc860(self): return self.__machine(860) - -class sunos_cpuinfo(cpuinfo_base): - - info = None - - def __init__(self): - if self.info is not None: - return - info = [] - try: - import commands - status,output = commands.getstatusoutput('arch') - if not status: - if not info: info.append({}) - info[-1]['arch'] = string.strip(output) - status,output = commands.getstatusoutput('mach') - if not status: - if not info: info.append({}) - info[-1]['mach'] = string.strip(output) - status,output = commands.getstatusoutput('uname -i') - if not status: - if not info: info.append({}) - info[-1]['uname_i'] = string.strip(output) - status,output = commands.getstatusoutput('uname -X') - if not status: - if not info: info.append({}) - d = {} - for l in string.split(output,'\n'): - l = map(string.strip,string.split(l, '=')) - if len(l)==2: - d[l[0]]=l[1] - info[-1]['uname_X'] = d - status,output = commands.getstatusoutput('isainfo -b') - if not status: - if not info: info.append({}) - info[-1]['isainfo_b'] = string.strip(output) - status,output = commands.getstatusoutput('isainfo -n') - if not status: - if not info: info.append({}) - info[-1]['isainfo_n'] = string.strip(output) - status,output = commands.getstatusoutput('psrinfo -v 0') - if not status: - if not info: info.append({}) - for l in string.split(output,'\n'): - m = re.match(r'\s*The (?P<p>[\w\d]+) processor operates at',l) - if m: - info[-1]['processor'] = m.group('p') - break - except: - print sys.exc_value,'(ignoring)' - self.__class__.info = info - - def _not_impl(self): pass - - def _is_32bit(self): - return self.info[0]['isainfo_b']=='32' - def _is_64bit(self): - return self.info[0]['isainfo_b']=='64' - - def _is_i386(self): - return self.info[0]['isainfo_n']=='i386' - def _is_sparc(self): - return self.info[0]['isainfo_n']=='sparc' - def _is_sparcv9(self): - return self.info[0]['isainfo_n']=='sparcv9' - - def _getNCPUs(self): - try: return int(self.info[0]['uname_X']['NumCPU']) - except: return 1 - - def _is_sun4(self): - return self.info[0]['arch']=='sun4' - - def _is_SUNW(self): - return re.match(r'SUNW',self.info[0]['uname_i']) is not None - def _is_sparcstation5(self): - return re.match(r'.*SPARCstation-5',self.info[0]['uname_i']) is not None - def _is_ultra1(self): - return re.match(r'.*Ultra-1',self.info[0]['uname_i']) is not None - def _is_ultra250(self): - return re.match(r'.*Ultra-250',self.info[0]['uname_i']) is not None - def _is_ultra2(self): - return re.match(r'.*Ultra-2',self.info[0]['uname_i']) is not None - def _is_ultra30(self): - return re.match(r'.*Ultra-30',self.info[0]['uname_i']) is not None - def _is_ultra4(self): - return re.match(r'.*Ultra-4',self.info[0]['uname_i']) is not None - def _is_ultra5_10(self): - return re.match(r'.*Ultra-5_10',self.info[0]['uname_i']) is not None - def _is_ultra5(self): - return re.match(r'.*Ultra-5',self.info[0]['uname_i']) is not None - def _is_ultra60(self): - return re.match(r'.*Ultra-60',self.info[0]['uname_i']) is not None - def _is_ultra80(self): - return re.match(r'.*Ultra-80',self.info[0]['uname_i']) is not None - def _is_ultraenterprice(self): - return re.match(r'.*Ultra-Enterprise',self.info[0]['uname_i']) is not None - def _is_ultraenterprice10k(self): - return re.match(r'.*Ultra-Enterprise-10000',self.info[0]['uname_i']) is not None - def _is_sunfire(self): - return re.match(r'.*Sun-Fire',self.info[0]['uname_i']) is not None - def _is_ultra(self): - return re.match(r'.*Ultra',self.info[0]['uname_i']) is not None - - def _is_cpusparcv7(self): - return self.info[0]['processor']=='sparcv7' - def _is_cpusparcv8(self): - return self.info[0]['processor']=='sparcv8' - def _is_cpusparcv9(self): - return self.info[0]['processor']=='sparcv9' - -class win32_cpuinfo(cpuinfo_base): - - info = None - pkey = "HARDWARE\\DESCRIPTION\\System\\CentralProcessor" - # XXX: what does the value of - # HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0 - # mean? - - def __init__(self): - if self.info is not None: - return - info = [] - try: - #XXX: Bad style to use so long `try:...except:...`. Fix it! - import _winreg - pkey = "HARDWARE\\DESCRIPTION\\System\\CentralProcessor" - prgx = re.compile(r"family\s+(?P<FML>\d+)\s+model\s+(?P<MDL>\d+)"\ - "\s+stepping\s+(?P<STP>\d+)",re.IGNORECASE) - chnd=_winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,pkey) - pnum=0 - while 1: - try: - proc=_winreg.EnumKey(chnd,pnum) - except _winreg.error: - break - else: - pnum+=1 - print proc - info.append({"Processor":proc}) - phnd=_winreg.OpenKey(chnd,proc) - pidx=0 - while True: - try: - name,value,vtpe=_winreg.EnumValue(phnd,pidx) - except _winreg.error: - break - else: - pidx=pidx+1 - info[-1][name]=value - if name=="Identifier": - srch=prgx.search(value) - if srch: - info[-1]["Family"]=int(srch.group("FML")) - info[-1]["Model"]=int(srch.group("MDL")) - info[-1]["Stepping"]=int(srch.group("STP")) - except: - print sys.exc_value,'(ignoring)' - self.__class__.info = info - - def _not_impl(self): pass - - # Athlon - - def _is_AMD(self): - return self.info[0]['VendorIdentifier']=='AuthenticAMD' - - def _is_Am486(self): - return self.is_AMD() and self.info[0]['Family']==4 - - def _is_Am5x86(self): - return self.is_AMD() and self.info[0]['Family']==4 - - def _is_AMDK5(self): - return self.is_AMD() and self.info[0]['Family']==5 \ - and self.info[0]['Model'] in [0,1,2,3] - - def _is_AMDK6(self): - return self.is_AMD() and self.info[0]['Family']==5 \ - and self.info[0]['Model'] in [6,7] - - def _is_AMDK6_2(self): - return self.is_AMD() and self.info[0]['Family']==5 \ - and self.info[0]['Model']==8 - - def _is_AMDK6_3(self): - return self.is_AMD() and self.info[0]['Family']==5 \ - and self.info[0]['Model']==9 - - def _is_Athlon(self): - return self.is_AMD() and self.info[0]['Family']==6 - - def _is_Athlon64(self): - return self.is_AMD() and self.info[0]['Family']==15 \ - and self.info[0]['Model']==4 - - def _is_Opteron(self): - return self.is_AMD() and self.info[0]['Family']==15 \ - and self.info[0]['Model']==5 - - # Intel - - def _is_Intel(self): - return self.info[0]['VendorIdentifier']=='GenuineIntel' - - def _is_i386(self): - return self.info[0]['Family']==3 - - def _is_i486(self): - return self.info[0]['Family']==4 - - def _is_i586(self): - return self.is_Intel() and self.info[0]['Family']==5 - - def _is_i686(self): - return self.is_Intel() and self.info[0]['Family']==6 - - def _is_Pentium(self): - return self.is_Intel() and self.info[0]['Family']==5 - - def _is_PentiumMMX(self): - return self.is_Intel() and self.info[0]['Family']==5 \ - and self.info[0]['Model']==4 - - def _is_PentiumPro(self): - return self.is_Intel() and self.info[0]['Family']==6 \ - and self.info[0]['Model']==1 - - def _is_PentiumII(self): - return self.is_Intel() and self.info[0]['Family']==6 \ - and self.info[0]['Model'] in [3,5,6] - - def _is_PentiumIII(self): - return self.is_Intel() and self.info[0]['Family']==6 \ - and self.info[0]['Model'] in [7,8,9,10,11] - - def _is_PentiumIV(self): - return self.is_Intel() and self.info[0]['Family']==15 - - # Varia - - def _is_singleCPU(self): - return len(self.info) == 1 - - def _getNCPUs(self): - return len(self.info) - - def _has_mmx(self): - if self.is_Intel(): - return (self.info[0]['Family']==5 and self.info[0]['Model']==4) \ - or (self.info[0]['Family'] in [6,15]) - elif self.is_AMD(): - return self.info[0]['Family'] in [5,6,15] - - def _has_sse(self): - if self.is_Intel(): - return (self.info[0]['Family']==6 and \ - self.info[0]['Model'] in [7,8,9,10,11]) \ - or self.info[0]['Family']==15 - elif self.is_AMD(): - return (self.info[0]['Family']==6 and \ - self.info[0]['Model'] in [6,7,8,10]) \ - or self.info[0]['Family']==15 - - def _has_sse2(self): - return self.info[0]['Family']==15 - - def _has_3dnow(self): - # XXX: does only AMD have 3dnow?? - return self.is_AMD() and self.info[0]['Family'] in [5,6,15] - - def _has_3dnowext(self): - return self.is_AMD() and self.info[0]['Family'] in [6,15] - -if sys.platform[:5] == 'linux': # variations: linux2,linux-i386 (any others?) - cpuinfo = linux_cpuinfo -elif sys.platform[:4] == 'irix': - cpuinfo = irix_cpuinfo -elif sys.platform == 'darwin': - cpuinfo = darwin_cpuinfo -elif sys.platform[:5] == 'sunos': - cpuinfo = sunos_cpuinfo -elif sys.platform[:5] == 'win32': - cpuinfo = win32_cpuinfo -elif sys.platform[:6] == 'cygwin': - cpuinfo = linux_cpuinfo -#XXX: other OS's. Eg. use _winreg on Win32. Or os.uname on unices. -else: - cpuinfo = cpuinfo_base - -cpu = cpuinfo() - -if __name__ == "__main__": - - cpu.is_blaa() - cpu.is_Intel() - cpu.is_Alpha() - - print 'CPU information:', - for name in dir(cpuinfo): - if name[0]=='_' and name[1]!='_': - r = getattr(cpu,name[1:])() - if r: - if r!=1: - print '%s=%s' %(name[1:],r), - else: - print name[1:], - print |