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# coding: utf-8 

2""" 

3Template to develop a python module using 

4:epkg:`cython` and :epkg:`openmp`. 

5""" 

6 

7__version__ = "0.1.2" 

8__author__ = "Xavier Dupré" 

9 

10 

11def check(verbose=1): 

12 """ 

13 Runs a couple of functions to check the module is working. 

14 

15 :param verbose: 0 to hide the standout output 

16 :return: list of dictionaries, result of each test 

17 """ 

18 import pprint 

19 import numpy 

20 from .tutorial import pydot, cblas_ddot, cblas_sdot 

21 from .tutorial.dot_cython import ( 

22 dot_product, ddot_cython_array, 

23 ddot_cython_array_optim, ddot_array, 

24 ddot_array_16, ddot_array_16_sse 

25 ) 

26 from .tutorial.dot_cython import ( 

27 sdot_cython_array, 

28 sdot_cython_array_optim, sdot_array, 

29 sdot_array_16, sdot_array_16_sse 

30 ) 

31 from .tools import measure_time 

32 rows = [] 

33 

34 # double 

35 if verbose > 0: 

36 print("\ndouble\n") 

37 

38 va = numpy.random.randn(100).astype(numpy.float64) 

39 vb = numpy.random.randn(100).astype(numpy.float64) 

40 fcts = [ 

41 ('pydot', pydot, 1), 

42 ('numpy.dot', numpy.dot), 

43 ('ddot', cblas_ddot), 

44 ('dot_product', dot_product), 

45 ('ddot_cython_array', ddot_cython_array), 

46 ('ddot_cython_array_optim', ddot_cython_array_optim), 

47 ('ddot_array', ddot_array), 

48 ('ddot_array_16', ddot_array_16), 

49 ('ddot_array_16_sse', ddot_array_16_sse), 

50 ] 

51 

52 for tu in fcts: 

53 name, fct = tu[:2] 

54 ctx = {'va': va, 'vb': vb, 'fctdot': fct} 

55 if len(tu) == 3: 

56 res = measure_time('fctdot(va, vb)', ctx, repeat=tu[2]) 

57 else: 

58 res = measure_time('fctdot(va, vb)', ctx) 

59 res['name'] = name 

60 if verbose > 0: 

61 pprint.pprint(res) 

62 rows.append(res) 

63 

64 # float 

65 if verbose > 0: 

66 print("\nfloat\n") 

67 

68 va = numpy.random.randn(100).astype(numpy.float32) 

69 vb = numpy.random.randn(100).astype(numpy.float32) 

70 fcts = [ 

71 ('pydot', pydot, 1), 

72 ('numpy.dot', numpy.dot), 

73 ('sdot', cblas_sdot), 

74 ('sdot_cython_array', sdot_cython_array), 

75 ('sdot_cython_array_optim', sdot_cython_array_optim), 

76 ('sdot_array', sdot_array), 

77 ('sdot_array_16', sdot_array_16), 

78 ('sdot_array_16_sse', sdot_array_16_sse), 

79 ] 

80 

81 for tu in fcts: 

82 name, fct = tu[:2] 

83 ctx = {'va': va, 'vb': vb, 'fctdot': fct} 

84 if len(tu) == 3: 

85 res = measure_time('fctdot(va, vb)', ctx, repeat=tu[2]) 

86 else: 

87 res = measure_time('fctdot(va, vb)', ctx) 

88 res['name'] = name 

89 if verbose > 0: 

90 pprint.pprint(res) 

91 rows.append(res) 

92 

93 return rows