Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

""" 

CPU Detection 

""" 

# Parallel Python Software: http://www.parallelpython.com 

# Copyright (c) 2005-2008, Vitalii Vanovschi 

# 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 the author 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 COPYRIGHT HOLDERS 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 COPYRIGHT OWNER OR 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. 

 

###### 

# This is from ParallelPython (the pp.py file). 

from __future__ import absolute_import 

 

import os 

import subprocess 

 

def ncpus(): 

""" 

Detects the number of effective CPUs in the system. 

 

EXAMPLES:: 

 

sage: sage.parallel.ncpus.ncpus() # random output -- depends on machine. 

2 

""" 

# Support Sage environment variable SAGE_NUM_THREADS 

# NOTE: while doctesting, this is forced to be 2 by the 

# sage-runtests script 

try: 

n = os.environ["SAGE_NUM_THREADS"] 

except KeyError: 

pass 

else: 

return int(n) 

 

#for Linux, Unix and MacOS 

if hasattr(os, "sysconf"): 

if "SC_NPROCESSORS_ONLN" in os.sysconf_names: 

#Linux and Unix 

ncpus = os.sysconf("SC_NPROCESSORS_ONLN") 

if isinstance(ncpus, int) and ncpus > 0: 

return ncpus 

else: 

#MacOS X 

#deprecated: return int(os.popen2("sysctl -n hw.ncpu")[1].read()) 

process = subprocess.Popen("sysctl -n hw.ncpu", shell=True, stdin=subprocess.PIPE, stdout = subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True) 

return int(process.stdout.read()) 

#for Windows 

if "NUMBER_OF_PROCESSORS" in os.environ: 

ncpus = int(os.environ["NUMBER_OF_PROCESSORS"]) 

if ncpus > 0: 

return ncpus 

#return the default value 

return 1