ffc team mailing list archive
-
ffc team
-
Mailing list archive
-
Message #04305
Re: [Branch ~ffc-core/ffc/main] Rev 1684: Change code generation for evaluate_basis and
On 09/12/11 20:00, Marie E. Rognes wrote:
On 09/12/11 19:54, Garth N. Wells wrote:
On 12 September 2011 18:49, Marie E. Rognes<meg@xxxxxxxxx> wrote:
On 09/12/11 19:40, Garth N. Wells wrote:
Which compiler options did you use when evaluating the speed up?
Tested Extrapolation.h with vanilla dolfin (which is dominated by
evaluate_basis calls). No additional compiler options set.
What are the default compiler options?
'-g' for plain JIT, which is dead slow. You should test with at least:
parameters["form_compiler"]["cpp_optimize"] = True
in the Python code. This will use '-O2'.
Ok, thanks -- I'll take a closer look.
Take a look at the attached results in old_evaluate_basis.txt (results
with "old" FFC),
and new_evaluate_basis.txt (results with "new" FFC) from running the
attached
test_evaluate_basis.py.
Acceptable?
--
Marie
OLD:
--------------------------------------------------------------------------------
degree = 1
time, 2d, cpp_optimize = False: 0.120431900024
time, 2d, cpp_optimize = True: 0.114153146744
time, 3d, cpp_optimize = False: 0.198750019073
time, 3d, cpp_optimize = True: 0.162876844406
--------------------------------------------------------------------------------
degree = 2
time, 2d, cpp_optimize = False: 0.300379991531
time, 2d, cpp_optimize = True: 0.233283996582
time, 3d, cpp_optimize = False: 0.762866973877
time, 3d, cpp_optimize = True: 0.431936979294
--------------------------------------------------------------------------------
degree = 3
time, 2d, cpp_optimize = False: 0.576278924942
time, 2d, cpp_optimize = True: 0.411046981812
time, 3d, cpp_optimize = False: 1.96871781349
time, 3d, cpp_optimize = True: 1.07180404663
--------------------------------------------------------------------------------
degree = 4
time, 2d, cpp_optimize = False: 0.988406181335
time, 2d, cpp_optimize = True: 0.682631015778
time, 3d, cpp_optimize = False: 4.75827598572
time, 3d, cpp_optimize = True: 2.35853600502
--------------------------------------------------------------------------------
degree = 5
time, 2d, cpp_optimize = False: 1.62303113937
time, 2d, cpp_optimize = True: 1.00284218788
time, 3d, cpp_optimize = False: 10.7842290401
time, 3d, cpp_optimize = True: 4.76599907875
NEW:
--------------------------------------------------------------------------------
degree = 1
time, 2d, cpp_optimize = False: 0.103919029236
time, 2d, cpp_optimize = True: 0.107428073883
time, 3d, cpp_optimize = False: 0.161116838455
time, 3d, cpp_optimize = True: 0.151404857635
--------------------------------------------------------------------------------
degree = 2
time, 2d, cpp_optimize = False: 0.22599697113
time, 2d, cpp_optimize = True: 0.219713926315
time, 3d, cpp_optimize = False: 0.450500011444
time, 3d, cpp_optimize = True: 0.404354095459
--------------------------------------------------------------------------------
degree = 3
time, 2d, cpp_optimize = False: 0.392661809921
time, 2d, cpp_optimize = True: 0.369643211365
time, 3d, cpp_optimize = False: 0.96449303627
time, 3d, cpp_optimize = True: 0.891642093658
--------------------------------------------------------------------------------
degree = 4
time, 2d, cpp_optimize = False: 0.634053945541
time, 2d, cpp_optimize = True: 0.559627056122
time, 3d, cpp_optimize = False: 1.90867900848
time, 3d, cpp_optimize = True: 1.54476189613
--------------------------------------------------------------------------------
degree = 5
time, 2d, cpp_optimize = False: 0.954979896545
time, 2d, cpp_optimize = True: 0.803352117538
time, 3d, cpp_optimize = False: 3.52839899063
time, 3d, cpp_optimize = True: 2.71618795395
from dolfin import *
import numpy
import time
def run(dim, N, num_repeats, optimize, degree):
parameters["form_compiler"]["cpp_optimize"] = optimize
if dim == 2:
mesh = UnitSquare(1, 1)
else:
mesh = UnitCube(1, 1, 1)
cell = Cell(mesh, 1)
V = FunctionSpace(mesh, "CG", degree)
element = V.element()
m = cell.midpoint()
x = numpy.array([m[i] for i in range(dim)], 'd')
n = element.space_dimension()
d = element.value_dimension(0)
values = numpy.zeros((n, d), dtype='d')
repeats = range(num_repeats)
basis_functions = range(n)
t0 = time.time()
for k in repeats:
for i in basis_functions:
element.evaluate_basis(i, values[i,:], x, cell)
t1 = time.time()
return (t1 - t0)
repeats = 10000
for degree in [1, 2, 3, 4, 5]:
print "-"*80
print "degree = ", degree
print "time, 2d, cpp_optimize = False: ", run(2, 1, repeats, False, degree)
print "time, 2d, cpp_optimize = True: ", run(2, 1, repeats, True, degree)
print "time, 3d, cpp_optimize = False: ", run(3, 1, repeats, False, degree)
print "time, 3d, cpp_optimize = True: ", run(3, 1, repeats, True, degree)
print
Follow ups
References