File: test_convolve_speeds.py

package info (click to toggle)
python-astropy 1.3-8~bpo8%2B2
  • links: PTS, VCS
  • area: main
  • in suites: jessie-backports
  • size: 44,292 kB
  • sloc: ansic: 160,360; python: 137,322; sh: 11,493; lex: 7,638; yacc: 4,956; xml: 1,796; makefile: 474; cpp: 364
file content (187 lines) | stat: -rw-r--r-- 12,282 bytes parent folder | download | duplicates (2)
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
# Licensed under a 3-clause BSD style license - see LICENSE.rst
from __future__ import (absolute_import, division, print_function,
                        unicode_literals)

import timeit

import numpy as np  # pylint: disable=W0611

from ...extern.six.moves import range, zip

# largest image size to use for "linear" and fft convolutions
max_exponents_linear = {1: 15, 2: 7, 3: 5}
max_exponents_fft = {1: 15, 2: 10, 3: 7}

if __name__ == "__main__":
    for ndims in [1, 2, 3]:
        print("\n{}-dimensional arrays ('n' is the size of the image AND "
              "the kernel)".format(ndims))
        print(" ".join(["%17s" % n for n in ("n", "convolve", "convolve_fft")]))

        for ii in range(3, max_exponents_fft[ndims]):
            # array = np.random.random([2**ii]*ndims)
            # test ODD sizes too
            if ii < max_exponents_fft[ndims]:
                setup = ("""
import numpy as np
from astropy.convolution.convolve import convolve
from astropy.convolution.convolve import convolve_fft
array = np.random.random([%i]*%i)
kernel = np.random.random([%i]*%i)""") % (2 ** ii - 1, ndims, 2 ** ii - 1, ndims)

                print("%16i:" % (int(2 ** ii - 1)), end=' ')

                if ii <= max_exponents_linear[ndims]:
                    for ffttype, extra in zip(("", "_fft"),
                                              ("", "fft_pad=False")):
                        statement = "convolve{}(array, kernel, boundary='fill', {})".format(ffttype, extra)
                        besttime = min(timeit.Timer(stmt=statement, setup=setup).repeat(3, 10))
                        print("%17f" % (besttime), end=' ')
                else:
                    print("%17s" % "skipped", end=' ')
                    statement = "convolve_fft(array, kernel, boundary='fill')"
                    besttime = min(timeit.Timer(stmt=statement, setup=setup).repeat(3, 10))
                    print("%17f" % (besttime), end=' ')

                print()

            setup = ("""
import numpy as np
from astropy.convolution.convolve import convolve
from astropy.convolution.convolve import convolve_fft
array = np.random.random([%i]*%i)
kernel = np.random.random([%i]*%i)""") % (2 ** ii - 1, ndims, 2 ** ii - 1, ndims)

            print("%16i:" % (int(2 ** ii)), end=' ')

            if ii <= max_exponents_linear[ndims]:
                for ffttype in ("", "_fft"):
                    statement = "convolve{}(array, kernel, boundary='fill')".format(ffttype)
                    besttime = min(timeit.Timer(stmt=statement, setup=setup).repeat(3, 10))
                    print("%17f" % (besttime), end=' ')
            else:
                print("%17s" % "skipped", end=' ')
                statement = "convolve_fft(array, kernel, boundary='fill')"
                besttime = min(timeit.Timer(stmt=statement, setup=setup).repeat(3, 10))
                print("%17f" % (besttime), end=' ')

            print()

"""
Unfortunately, these tests are pretty strongly inconclusive

RESULTS on a 2011 Mac Air:
1-dimensional arrays ('n' is the size of the image AND the kernel)
                n          convolve    convolve_fftnp     convolve_fftw    convolve_fftsp
               7:          0.000408          0.002334          0.005571          0.002677
               8:          0.000399          0.002818          0.006505          0.003094
              15:          0.000361          0.002491          0.005648          0.002678
              16:          0.000371          0.002997          0.005983          0.003036
              31:          0.000535          0.002450          0.005988          0.002880
              32:          0.000452          0.002618          0.007102          0.004366
              63:          0.000509          0.002876          0.008003          0.002981
              64:          0.000453          0.002706          0.005520          0.003049
             127:          0.000801          0.004080          0.008513          0.003932
             128:          0.000749          0.003332          0.006236          0.003159
             255:          0.002453          0.003111          0.007518          0.003564
             256:          0.002478          0.003341          0.006325          0.004290
             511:          0.008394          0.006224          0.010247          0.005991
             512:          0.007934          0.003764          0.006840          0.004106
            1023:          0.028741          0.007538          0.009591          0.007696
            1024:          0.027900          0.004871          0.009628          0.005118
            2047:          0.106323          0.021575          0.022041          0.020682
            2048:          0.108916          0.008107          0.011049          0.007596
            4095:          0.411936          0.021675          0.019761          0.020939
            4096:          0.408992          0.018870          0.016663          0.012890
            8191:          1.664517          8.278320          0.073001          7.803563
            8192:          1.657573          0.037967          0.034227          0.028390
           16383:          6.654678          0.251661          0.202271          0.222171
           16384:          6.611977          0.073630          0.067616          0.055591

2-dimensional arrays ('n' is the size of the image AND the kernel)
                n          convolve    convolve_fftnp     convolve_fftw    convolve_fftsp
               7:          0.000552          0.003524          0.006667          0.004318
               8:          0.000646          0.004443          0.007354          0.003958
              15:          0.002986          0.005093          0.012941          0.005951
              16:          0.003549          0.005688          0.008818          0.006300
              31:          0.074360          0.033973          0.031800          0.036937
              32:          0.077338          0.017708          0.025637          0.011883
              63:          0.848471          0.057407          0.052192          0.053213
              64:          0.773061          0.029657          0.033409          0.028230
             127:         14.656414          1.005329          0.402113          0.955279
             128:         15.867796          0.266233          0.268551          0.237930
             255:           skipped          1.715546          1.566876          1.745338
             256:           skipped          1.515616          1.268220          1.036881
             511:           skipped          4.066155          4.303350          3.930661
             512:           skipped          3.976139          4.337525          3.968935

3-dimensional arrays ('n' is the size of the image AND the kernel)
                n          convolve    convolve_fftnp     convolve_fftw    convolve_fftsp
               7:          0.009239          0.012957          0.011957          0.015997
               8:          0.012405          0.011328          0.011677          0.012283
              15:          0.772434          0.075621          0.056711          0.079508
              16:          0.964635          0.105846          0.072811          0.104611
              31:         62.824051          2.295193          1.189505          2.351136
              32:         79.507060          1.169182          0.821779          1.275770
              63:           skipped         11.250225         10.982726         10.585744
              64:           skipped         10.013558         11.507645         12.665557



On a 2009 Mac Pro:
1-dimensional arrays ('n' is the size of the image AND the kernel)
                n          convolve    convolve_fftnp     convolve_fftw    convolve_fftsp
               7:          0.000360          0.002269          0.004986          0.002476
               8:          0.000361          0.002468          0.005242          0.002696
              15:          0.000364          0.002255          0.005244          0.002471
              16:          0.000365          0.002506          0.005286          0.002727
              31:          0.000385          0.002380          0.005422          0.002588
              32:          0.000385          0.002531          0.005543          0.002737
              63:          0.000474          0.002407          0.005392          0.002637
              64:          0.000484          0.002602          0.005631          0.002823
             127:          0.000752          0.004122          0.007827          0.003966
             128:          0.000757          0.002763          0.005844          0.002958
             255:          0.004316          0.003258          0.006566          0.003324
             256:          0.004354          0.003180          0.006120          0.003245
             511:          0.011517          0.007158          0.009898          0.006238
             512:          0.011482          0.003873          0.006777          0.003820
            1023:          0.034105          0.009211          0.009468          0.008260
            1024:          0.034609          0.005504          0.008399          0.005080
            2047:          0.113620          0.028097          0.020662          0.021603
            2048:          0.112828          0.008403          0.010939          0.007331
            4095:          0.403373          0.023211          0.018767          0.020065
            4096:          0.403316          0.017550          0.017853          0.013651
            8191:          1.519329          8.454573          0.211436          7.212381
            8192:          1.519082          0.033148          0.030370          0.025905
           16383:          5.887481          0.317428          0.153344          0.237119
           16384:          5.888222          0.069379          0.065264          0.052847

2-dimensional arrays ('n' is the size of the image AND the kernel)
                n          convolve    convolve_fftnp     convolve_fftw    convolve_fftsp
               7:          0.000474          0.003470          0.006131          0.003503
               8:          0.000503          0.003565          0.006400          0.003586
              15:          0.002011          0.004481          0.007825          0.004496
              16:          0.002236          0.004744          0.007078          0.004680
              31:          0.027291          0.019433          0.014841          0.018034
              32:          0.029283          0.009244          0.010161          0.008964
              63:          0.445680          0.038171          0.026753          0.037404
              64:          0.460616          0.028128          0.029487          0.029149
             127:          7.003774          0.925921          0.282591          0.762671
             128:          7.063657          0.110838          0.104402          0.133523
             255:           skipped          0.804682          0.708849          0.869368
             256:           skipped          0.797800          0.721042          0.880848
             511:           skipped          3.643626          3.687562          4.584770
             512:           skipped          3.715215          4.893539          5.538462

3-dimensional arrays ('n' is the size of the image AND the kernel)
                n          convolve    convolve_fftnp     convolve_fftw    convolve_fftsp
               7:          0.004520          0.011519          0.009464          0.012335
               8:          0.006422          0.010294          0.010220          0.011711
              15:          0.329566          0.060978          0.045495          0.073692
              16:          0.405275          0.069999          0.040659          0.086114
              31:         24.935228          1.654920          0.710509          1.773879
              32:         27.524226          0.724053          0.543507          1.027568
              63:           skipped          8.982771         12.407683         16.900078
              64:           skipped          8.956070         11.934627         17.296447

"""