Chris Mellon added the comment:

In funcobject.c:PyFunction_New, the declarations of op and __name__ need
to be moved to the top of the function to compile in MSVC, and if
accepted the fastglobals.c file needs to be added to PCBuild.

In the test script, the use of import * generates syntax warnings that
make the output awkward to read, and the benchmark for dict_get is
actually running dict_set. I'm attaching the fixed copy of the test
script I used.

I see roughly the same speed ups (MSVC 7.1, Windows XP, Intel Core2 Duo
@ 2.13Ghz), but I see a 10% slowdown in the dict-insert/delete and
dict-set benchmarks which I find very troubling.

Test            Trunk          fastglobals    Time difference
--------------------------------------------------
Dict insert/del 2.002495495    2.207409125    1.102329134
Dict get        0.750253205    0.745576662    0.993766714
Dict set        0.982695921    1.114997766    1.13463152
Local get       0.533387029    0.51337118     0.96247406
Local set       0.596565774    0.614124914    1.029433703
Global get      0.935605073    0.731136584    0.78145855
Global set      1.48638532     1.03868462     0.69879903
Builtin get     1.392606367    0.735180673    0.52791707
Function call   1.938705781    1.716233004    0.885246756
List comp       1.547780105    1.188215756    0.767690289


PyBench shows an overall slowdown - String mappings in particular,
string/unicode predicates, and new instance creation all show
significant slowdowns. The results are fairly verbose so I've uploaded
them as a google docs spreadsheet at
http://spreadsheets.google.com/ccc?key=p7g0z40g_NpvH5UpPTpr-Ag&hl=en

I notice that you create a new PyFastGlobals object in every call to
PyEval_EvalCode. This might explain some of the general case slowdown,
is this really what you want to do?

----------
nosy: +arkanes
Added file: http://bugs.python.org/file8823/fastglobals_test.py

__________________________________
Tracker <[EMAIL PROTECTED]>
<http://bugs.python.org/issue1518>
__________________________________
import timeit, new, time, dis

MULTIPLIER = 1


def test_local_get():
	x = 0
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x


def test_local_set():
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0


x = 0
def test_global_get():
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x
	x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x; x


def test_global_set():
	global x
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0
	x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0; x = 0


def test_builtin_get():
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 
	len; len; len; len; len; len; len; len; len; len; 


lists = [[x for x in xrange(y)] for y in xrange(1, 1000)]
def test_listcomp():
	[set(sub) for sub in lists if len(sub) <= 5]


def test_func_call():
	def inner_function():
		pass
	for i in xrange(1000):
		inner_function();


dict_range = ['%i' % i for i in range(1000)]
def test_dict_insert_del():
	d = {}
	for i in dict_range:
		d[i] = i
	for i in dict_range:
		del d[i]

test_dict = dict((i, i) for i in dict_range)
def test_dict_set():
	d = test_dict
	for i in dict_range:
		d[i] = i

def test_dict_get():
	d = test_dict
	for i in dict_range:
		d[i]


print 'Dict insert/del:', timeit.Timer('test_dict_insert_del()', 'from __main__ import test_dict_insert_del').timeit(number=10000 * MULTIPLIER)

print 'Dict get:', timeit.Timer('test_dict_get()', 'from __main__ import test_dict_get').timeit(number=10000 * MULTIPLIER)

print 'Dict set:', timeit.Timer('test_dict_set()', 'from __main__ import test_dict_set').timeit(number=10000 * MULTIPLIER)

print 'Local get:', timeit.Timer('test_local_get()', 'from __main__ import test_local_get').timeit(number=100000 * MULTIPLIER)

print 'Local set:', timeit.Timer('test_local_set()', 'from __main__ import test_local_set').timeit(number=100000 * MULTIPLIER)

print 'Global get:', timeit.Timer('test_global_get()', 'from __main__ import test_global_get').timeit(number=100000 * MULTIPLIER)

print 'Global set:', timeit.Timer('test_global_set()', 'from __main__ import test_global_set').timeit(number=100000 * MULTIPLIER)

print 'Builtin get:', timeit.Timer('test_builtin_get()', 'from __main__ import test_builtin_get').timeit(number=100000 * MULTIPLIER)

print 'Function call:', timeit.Timer('test_func_call()', 'from __main__ import test_func_call').timeit(number=10000 * MULTIPLIER)

print 'List comp:', timeit.Timer('test_listcomp()', 'from __main__ import test_listcomp').timeit(number=10000 * MULTIPLIER)
_______________________________________________
Python-bugs-list mailing list 
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to