[pypy-commit] pypy default: fix wrong import
Author: David Schneider Branch: Changeset: r59627:88b1caf1a529 Date: 2012-12-30 13:39 +0100 http://bitbucket.org/pypy/pypy/changeset/88b1caf1a529/ Log:fix wrong import diff --git a/pypy/jit/backend/arm/test/test_gc_integration.py b/pypy/jit/backend/arm/test/test_gc_integration.py --- a/pypy/jit/backend/arm/test/test_gc_integration.py +++ b/pypy/jit/backend/arm/test/test_gc_integration.py @@ -20,7 +20,7 @@ from pypy.jit.backend.arm.test.test_regalloc import BaseTestRegalloc from pypy.jit.backend.arm.regalloc import ARMFrameManager, VFPRegisterManager from pypy.jit.codewriter.effectinfo import EffectInfo -from pypy.jit.backend.arm.regalloc import Regalloc, ARMv7RegisterManager +from pypy.jit.backend.arm.regalloc import Regalloc CPU = getcpuclass() ___ pypy-commit mailing list [email protected] http://mail.python.org/mailman/listinfo/pypy-commit
[pypy-commit] pypy jit-usable_retrace_3: allow (discarded) null valued fields to be genralized
Author: Hakan Ardo
Branch: jit-usable_retrace_3
Changeset: r59629:40db680deaef
Date: 2012-12-30 12:39 +0100
http://bitbucket.org/pypy/pypy/changeset/40db680deaef/
Log:allow (discarded) null valued fields to be genralized
diff --git a/pypy/jit/metainterp/optimizeopt/virtualstate.py
b/pypy/jit/metainterp/optimizeopt/virtualstate.py
--- a/pypy/jit/metainterp/optimizeopt/virtualstate.py
+++ b/pypy/jit/metainterp/optimizeopt/virtualstate.py
@@ -30,6 +30,9 @@
def make_guardable_generalization_of(self, other, value, optimizer):
pass
+def make_guardable_generalization_of_null(self, value, optimizer):
+pass
+
def generate_guards(self, other, box, cpu, extra_guards, renum):
if self.generalization_of(other, renum, {}):
return
@@ -44,7 +47,7 @@
raise InvalidLoop('Generating guards for making the VirtualStates ' +
'at hand match have not been implemented')
-def enum_forced_boxes(self, boxes, value, optimizer):
+def enum_forced_boxes(self, boxes, value, optimizer, doforce):
raise NotImplementedError
def enum(self, virtual_state):
@@ -132,16 +135,40 @@
assert len(self.fielddescrs) == len(self.fieldstate)
assert len(other.fielddescrs) == len(other.fieldstate)
assert isinstance(value, virtualize.AbstractVirtualStructValue)
-if len(self.fielddescrs) != len(other.fielddescrs):
-raise InvalidLoop('Cant combine virtuals with different numbers of
fields.')
-for i in range(len(self.fielddescrs)):
-if other.fielddescrs[i] is not self.fielddescrs[i]:
-raise InvalidLoop('Cant combine virtuals with different
fields.')
-new_field_value =
self.fieldstate[i].make_guardable_generalization_of(other.fieldstate[i],
-
value.getfield(self.fielddescrs[i], None),
-
optimizer)
+
+i = j = 0
+while i < len(self.fielddescrs) and j < len(other.fielddescrs):
+if other.fielddescrs[j] is self.fielddescrs[i]:
+new_field_value =
self.fieldstate[i].make_guardable_generalization_of(other.fieldstate[j],
+
value.getfield(self.fielddescrs[i], None), optimizer)
+if new_field_value:
+value.setfield(self.fielddescrs[i], new_field_value)
+i += 1
+j += 1
+elif self.fielddescrs[i].sort_key() <
other.fielddescrs[j].sort_key():
+new_field_value =
self.fieldstate[i].make_guardable_generalization_of_null(
+
value.getfield(self.fielddescrs[i], None), optimizer)
+if new_field_value:
+value.setfield(self.fielddescrs[i], new_field_value)
+i += 1
+else:
+new_field_value =
other.fieldstate[j].make_guardable_generalization_of_null(
+
value.getfield(other.fielddescrs[j], None), optimizer)
+if new_field_value:
+value.setfield(other.fielddescrs[j], new_field_value)
+j += 1
+while i < len(self.fielddescrs):
+new_field_value =
self.fieldstate[i].make_guardable_generalization_of_null(
+
value.getfield(self.fielddescrs[i], None), optimizer)
if new_field_value:
value.setfield(self.fielddescrs[i], new_field_value)
+i += 1
+while j < len(other.fielddescrs):
+new_field_value =
other.fieldstate[j].make_guardable_generalization_of_null(
+
value.getfield(other.fielddescrs[j], None), optimizer)
+if new_field_value:
+value.setfield(other.fielddescrs[j], new_field_value)
+j += 1
def kill_null_fields(self):
assert len(self.fielddescrs) == len(self.fieldstate)
@@ -153,19 +180,18 @@
def _generalization_of(self, other):
raise NotImplementedError
-def enum_forced_boxes(self, boxes, value, optimizer):
+def enum_forced_boxes(self, boxes, value, optimizer, doforce):
if not isinstance(value, virtualize.AbstractVirtualStructValue):
raise BadVirtualState
if not value.is_virtual():
raise BadVirtualState
for i in range(len(self.fielddescrs)):
-try:
-v = value._fields[self.fielddescrs[i]]
-except KeyError:
-raise BadVirtualState
+v = value.getfield(self.fielddescrs[i], None)
+if v is None:
+v = optimizer.new_const(self.fielddescrs[i])
s = self.fieldstate[i]
if s.position > self.po
[pypy-commit] pypy jit-usable_retrace_3: this case is better optimized now
Author: Hakan Ardo Branch: jit-usable_retrace_3 Changeset: r59630:323b6a4e4039 Date: 2012-12-30 15:27 +0100 http://bitbucket.org/pypy/pypy/changeset/323b6a4e4039/ Log:this case is better optimized now diff --git a/pypy/jit/metainterp/test/test_virtual.py b/pypy/jit/metainterp/test/test_virtual.py --- a/pypy/jit/metainterp/test/test_virtual.py +++ b/pypy/jit/metainterp/test/test_virtual.py @@ -902,7 +902,7 @@ assert res == f(10) self.check_aborted_count(0) self.check_target_token_count(3) -self.check_resops(int_mul=2) +self.check_resops(int_mul=3, new_with_vtable=0) def test_nested_loops_bridge(self): class Int(object): ___ pypy-commit mailing list [email protected] http://mail.python.org/mailman/listinfo/pypy-commit
[pypy-commit] pypy jit-usable_retrace_3: fix?
Author: Hakan Ardo Branch: jit-usable_retrace_3 Changeset: r59631:646719fca9fc Date: 2012-12-30 15:59 +0100 http://bitbucket.org/pypy/pypy/changeset/646719fca9fc/ Log:fix? diff --git a/pypy/jit/metainterp/test/support.py b/pypy/jit/metainterp/test/support.py --- a/pypy/jit/metainterp/test/support.py +++ b/pypy/jit/metainterp/test/support.py @@ -180,7 +180,8 @@ def check_target_token_count(self, count): tokens = get_stats().get_all_jitcell_tokens() -n = sum ([len(t.target_tokens) for t in tokens]) +n = sum ([len(t.target_tokens) for t in tokens if t.target_tokens is not None]) +# XXX: is target_tokens == None a good idea? assert n == count def check_enter_count(self, count): diff --git a/pypy/jit/metainterp/test/test_virtual.py b/pypy/jit/metainterp/test/test_virtual.py --- a/pypy/jit/metainterp/test/test_virtual.py +++ b/pypy/jit/metainterp/test/test_virtual.py @@ -909,6 +909,7 @@ def __init__(self, val): self.val = val myjitdriver = JitDriver(greens = ['pc'], reds = ['n', 'sa', 'i', 'j']) +# 0123456 bytecode = "iajb+JI" def f(n): pc = sa = 0 ___ pypy-commit mailing list [email protected] http://mail.python.org/mailman/listinfo/pypy-commit
[pypy-commit] pypy jit-usable_retrace_3: rpythonized
Author: Hakan Ardo
Branch: jit-usable_retrace_3
Changeset: r59632:c10f50bbce17
Date: 2012-12-30 16:32 +0100
http://bitbucket.org/pypy/pypy/changeset/c10f50bbce17/
Log:rpythonized
diff --git a/pypy/jit/metainterp/compile.py b/pypy/jit/metainterp/compile.py
--- a/pypy/jit/metainterp/compile.py
+++ b/pypy/jit/metainterp/compile.py
@@ -217,7 +217,9 @@
assert label.getopnum() == rop.LABEL
target_token = label.getdescr()
assert isinstance(target_token, TargetToken)
-target_token.exported_state.generalize_virtual_state =
original_target_token.virtual_state
+exported_state = target_token.exported_state
+assert exported_state is not None
+exported_state.generalize_virtual_state =
original_target_token.virtual_state
loop.inputargs = inputargs[:]
loop.resume_at_jump_descr = resume_at_jump_descr
@@ -238,8 +240,10 @@
if target_token.short_preamble:
metainterp_sd.logger_ops.log_short_preamble([],
target_token.short_preamble)
+exported_state = original_target_token.exported_state
+assert exported_state is not None
preamble.operations = [orignial_label] + \
- [ResOperation(rop.JUMP,
original_target_token.exported_state.jump_args,
+ [ResOperation(rop.JUMP, exported_state.jump_args,
None, descr=loop_jitcell_token)]
try:
optimize_trace(metainterp_sd, preamble,
jitdriver_sd.warmstate.enable_opts)
@@ -254,7 +258,9 @@
if jumpop.getdescr() is not loop.operations[0].getdescr():
assert loop_jitcell_token.target_tokens.pop() is
loop.operations[0].getdescr()
raise InvalidLoop
-preamble.operations = preamble.operations[1:-1]
+stop = len(preamble.operations) - 1
+assert stop >= 1 # There should always be atleast one label and one
jump
+preamble.operations = preamble.operations[1:stop]
usedboxes = {}
newargs = [None] * jumpop.numargs()
diff --git a/pypy/jit/metainterp/optimizeopt/virtualstate.py
b/pypy/jit/metainterp/optimizeopt/virtualstate.py
--- a/pypy/jit/metainterp/optimizeopt/virtualstate.py
+++ b/pypy/jit/metainterp/optimizeopt/virtualstate.py
@@ -172,7 +172,9 @@
def kill_null_fields(self):
assert len(self.fielddescrs) == len(self.fieldstate)
-for i in reversed(range(len(self.fielddescrs))):
+i = len(self.fielddescrs)
+while i > 0:
+i -= 1
if self.fieldstate[i].is_null():
del self.fieldstate[i]
del self.fielddescrs[i]
___
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit
[pypy-commit] benchmarks default: add scimark benchmark
Author: Hakan Ardo
Branch:
Changeset: r192:04c696b62ec7
Date: 2012-12-30 18:49 +0100
http://bitbucket.org/pypy/benchmarks/changeset/04c696b62ec7/
Log:add scimark benchmark
diff --git a/benchmarks.py b/benchmarks.py
--- a/benchmarks.py
+++ b/benchmarks.py
@@ -185,3 +185,22 @@
return RawResult([t[0]], [t[1]])
BM_cpython_doc.benchmark_name = 'sphinx'
+
+_register_new_bm('scimark', 'scimark_SOR_small', globals(),
+ extra_args=['--benchmark=SOR', '100', '3276', 'Array2D'])
+_register_new_bm('scimark', 'scimark_SOR_large', globals(),
+ extra_args=['--benchmark=SOR', '1000', '25', 'Array2D'])
+_register_new_bm('scimark', 'scimark_SparseMatMult_small', globals(),
+ extra_args=['--benchmark=SparseMatMult', '1000', '5',
'26214'])
+_register_new_bm('scimark', 'scimark_SparseMatMult_large', globals(),
+ extra_args=['--benchmark=SparseMatMult', '10', '100',
'102'])
+_register_new_bm('scimark', 'scimark_MonteCarlo', globals(),
+ extra_args=['--benchmark=MonteCarlo', '26843545'])
+_register_new_bm('scimark', 'scimark_LU_small', globals(),
+ extra_args=['--benchmark=LU', '100', '409'])
+_register_new_bm('scimark', 'scimark_LU_large', globals(),
+ extra_args=['--benchmark=LU', '1000', '1'])
+_register_new_bm('scimark', 'scimark_FFT_small', globals(),
+ extra_args=['--benchmark=FFT', '1024', '3276'])
+_register_new_bm('scimark', 'scimark_FFT_large', globals(),
+ extra_args=['--benchmark=FFT', '1048576', '1'])
diff --git a/own/scimark.py b/own/scimark.py
new file mode 100644
--- /dev/null
+++ b/own/scimark.py
@@ -0,0 +1,353 @@
+from array import array
+import math
+
+class Array2D(object):
+def __init__(self, w, h, data=None):
+self.width = w
+self.height = h
+self.data = array('d', [0]) * (w*h)
+if data is not None:
+self.setup(data)
+
+def _idx(self, x, y):
+if 0 <= x < self.width and 0 <= y < self.height:
+return y*self.width + x
+raise IndexError
+
+def __getitem__(self, (x, y)):
+return self.data[self._idx(x, y)]
+
+def __setitem__(self, (x, y), val):
+self.data[self._idx(x, y)] = val
+
+def __cmp__(self, other):
+return cmp(self.data, other.data)
+
+def setup(self, data):
+for y in xrange(self.height):
+for x in xrange(self.width):
+self[x, y] = data[y][x]
+return self
+
+def indexes(self):
+for y in xrange(self.height):
+for x in xrange(self.width):
+yield x, y
+
+def copy_data_from(self, other):
+self.data[:] = other.data[:]
+
+class Random(object):
+MDIG = 32
+ONE = 1
+m1 = (ONE << (MDIG-2)) + ((ONE << (MDIG-2) )-ONE)
+m2 = ONE << MDIG/2
+dm1 = 1.0 / float(m1);
+
+def __init__(self, seed):
+self.initialize(seed)
+self.left = 0.0
+self.right = 1.0
+self.width = 1.0
+self.haveRange = False
+
+def initialize(self, seed):
+
+self.seed = seed
+seed = abs(seed)
+jseed = min(seed, self.m1)
+if (jseed % 2 == 0):
+jseed -= 1
+k0 = 9069 % self.m2;
+k1 = 9069 / self.m2;
+j0 = jseed % self.m2;
+j1 = jseed / self.m2;
+self.m = array('d', [0]) * 17
+for iloop in xrange(17):
+jseed = j0 * k0;
+j1 = (jseed / self.m2 + j0 * k1 + j1 * k0) % (self.m2 / 2);
+j0 = jseed % self.m2;
+self.m[iloop] = j0 + self.m2 * j1;
+self.i = 4;
+self.j = 16;
+
+def nextDouble(self):
+I, J, m = self.i, self.j, self.m
+k = m[I] - m[J];
+if (k < 0):
+k += self.m1;
+self.m[J] = k;
+
+if (I == 0):
+I = 16;
+else:
+I -= 1;
+self.i = I;
+
+if (J == 0):
+J = 16;
+else:
+J -= 1;
+self.j = J;
+
+if (self.haveRange):
+return self.left + self.dm1 * float(k) * self.width;
+else:
+return self.dm1 * float(k);
+
+def RandomMatrix(self, a):
+for x, y in a.indexes():
+a[x, y] = self.nextDouble()
+return a
+
+def RandomVector(self, n):
+return array('d', [self.nextDouble() for i in xrange(n)])
+
+
+class ArrayList(Array2D):
+def __init__(self, w, h, data=None):
+self.width = w
+self.height = h
+self.data = [array('d', [0]) * w for y in xrange(h)]
+if data is not None:
+self.setup(data)
+
+def __getitem__(self, idx):
+if isinstance(idx, tuple):
+return self.data[idx[1]][idx[0]]
+else:
+return self.data[idx]
+
+def __setitem__(self, idx, val):
+if isinstance(idx, tuple):
+self.data[idx[1]][idx[0]] = val
+
[pypy-commit] benchmarks default: skip the large flavour
Author: Hakan Ardo
Branch:
Changeset: r193:e1bb4421b855
Date: 2012-12-30 18:51 +0100
http://bitbucket.org/pypy/benchmarks/changeset/e1bb4421b855/
Log:skip the large flavour
diff --git a/benchmarks.py b/benchmarks.py
--- a/benchmarks.py
+++ b/benchmarks.py
@@ -186,21 +186,21 @@
BM_cpython_doc.benchmark_name = 'sphinx'
-_register_new_bm('scimark', 'scimark_SOR_small', globals(),
+_register_new_bm('scimark', 'scimark_SOR', globals(),
extra_args=['--benchmark=SOR', '100', '3276', 'Array2D'])
-_register_new_bm('scimark', 'scimark_SOR_large', globals(),
- extra_args=['--benchmark=SOR', '1000', '25', 'Array2D'])
-_register_new_bm('scimark', 'scimark_SparseMatMult_small', globals(),
+#_register_new_bm('scimark', 'scimark_SOR_large', globals(),
+# extra_args=['--benchmark=SOR', '1000', '25', 'Array2D'])
+_register_new_bm('scimark', 'scimark_SparseMatMult', globals(),
extra_args=['--benchmark=SparseMatMult', '1000', '5',
'26214'])
-_register_new_bm('scimark', 'scimark_SparseMatMult_large', globals(),
- extra_args=['--benchmark=SparseMatMult', '10', '100',
'102'])
+#_register_new_bm('scimark', 'scimark_SparseMatMult_large', globals(),
+# extra_args=['--benchmark=SparseMatMult', '10',
'100', '102'])
_register_new_bm('scimark', 'scimark_MonteCarlo', globals(),
extra_args=['--benchmark=MonteCarlo', '26843545'])
-_register_new_bm('scimark', 'scimark_LU_small', globals(),
+_register_new_bm('scimark', 'scimark_LU', globals(),
extra_args=['--benchmark=LU', '100', '409'])
-_register_new_bm('scimark', 'scimark_LU_large', globals(),
- extra_args=['--benchmark=LU', '1000', '1'])
-_register_new_bm('scimark', 'scimark_FFT_small', globals(),
+#_register_new_bm('scimark', 'scimark_LU_large', globals(),
+# extra_args=['--benchmark=LU', '1000', '1'])
+_register_new_bm('scimark', 'scimark_FFT', globals(),
extra_args=['--benchmark=FFT', '1024', '3276'])
-_register_new_bm('scimark', 'scimark_FFT_large', globals(),
- extra_args=['--benchmark=FFT', '1048576', '1'])
+#_register_new_bm('scimark', 'scimark_FFT_large', globals(),
+# extra_args=['--benchmark=FFT', '1048576', '1'])
___
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit
