def f(d): bc = d * rffi.sizeof(rffi.SIGNED) va = alloc_raw_storage(bc, zero=True) vb = alloc_raw_storage(bc, zero=True) vc = alloc_raw_storage(bc, zero=True) x = 1 for i in range(d): j = i * rffi.sizeof(rffi.SIGNED) raw_storage_setitem(va, j, rffi.cast(rffi.SIGNED, i)) raw_storage_setitem(vb, j, rffi.cast(rffi.SIGNED, i)) i = 0 while i < bc: myjitdriver.jit_merge_point() a = raw_storage_getitem(rffi.SIGNED, va, i) b = raw_storage_getitem(rffi.SIGNED, vb, i) c = a + b raw_storage_setitem(vc, i, rffi.cast(rffi.SIGNED, c)) i += 1 * rffi.sizeof(rffi.SIGNED) res = 0 for i in range(d): res += raw_storage_getitem(rffi.SIGNED, vc, i * rffi.sizeof(rffi.SIGNED)) free_raw_storage(va) free_raw_storage(vb) free_raw_storage(vc) return res
def f(bytecount, va, vb, vc): i = 0 while i < bytecount: myjitdriver.jit_merge_point() a = raw_storage_getitem(type,va,i) b = raw_storage_getitem(type,vb,i) c = func(a,b) raw_storage_setitem(vc, i, rffi.cast(type,c)) i += size
def f(bytecount, va, vb, vc): i = 0 while i < bytecount: myjitdriver.jit_merge_point() a = raw_storage_getitem(type, va, i) b = raw_storage_getitem(type, vb, i) c = func(a, b) raw_storage_setitem(vc, i, rffi.cast(type, c)) i += size
def test_untranslated_storage(): r = alloc_raw_storage(37) raw_storage_setitem(r, 8, 1<<30) res = raw_storage_getitem(lltype.Signed, r, 8) assert res == 1<<30 raw_storage_setitem(r, 8, 3.14) res = raw_storage_getitem(lltype.Float, r, 8) assert res == 3.14 py.test.raises(AlignmentError, raw_storage_getitem, lltype.Signed, r, 3) py.test.raises(AlignmentError, raw_storage_setitem, r, 3, 42.5) free_raw_storage(r)
def test_untranslated_storage(): r = alloc_raw_storage(37) raw_storage_setitem(r, 8, 1 << 30) res = raw_storage_getitem(lltype.Signed, r, 8) assert res == 1 << 30 raw_storage_setitem(r, 8, 3.14) res = raw_storage_getitem(lltype.Float, r, 8) assert res == 3.14 py.test.raises(AlignmentError, raw_storage_getitem, lltype.Signed, r, 3) py.test.raises(AlignmentError, raw_storage_setitem, r, 3, 42.5) free_raw_storage(r)
def f(bytecount, va, vb, vc): i = 0 j = 0 while i < bytecount: myjitdriver.jit_merge_point() a = raw_storage_getitem(rffi.INT,va,j) b = raw_storage_getitem(rffi.DOUBLE,vb,i) c = rffi.cast(rffi.DOUBLE,a)+b raw_storage_setitem(vc, i, c) j += 4 i += 8
def f(bytecount, va, vb, vc): i = 0 j = 0 while j < bytecount: myjitdriver.jit_merge_point() a = raw_storage_getitem(rffi.DOUBLE,va,j) b = raw_storage_getitem(rffi.INT,vb,i) c = a+rffi.cast(rffi.DOUBLE,b) raw_storage_setitem(vc, j, c) i += 4 j += 8
def f(bytecount, va, vb, vc): i = 0 j = 0 while i < bytecount: myjitdriver.jit_merge_point() a = raw_storage_getitem(rffi.INT, va, j) b = raw_storage_getitem(rffi.DOUBLE, vb, i) c = rffi.cast(rffi.DOUBLE, a) + b raw_storage_setitem(vc, i, c) j += 4 i += 8
def f(bytecount, va, vb, vc): i = 0 j = 0 while j < bytecount: myjitdriver.jit_merge_point() a = raw_storage_getitem(rffi.DOUBLE, va, j) b = raw_storage_getitem(rffi.INT, vb, i) c = a + rffi.cast(rffi.DOUBLE, b) raw_storage_setitem(vc, j, c) i += 4 j += 8
def _vector_simple_int(self, func, type, la): oldfunc = func func = always_inline(func) size = rffi.sizeof(type) myjitdriver = JitDriver(greens=[], reds='auto', vectorize=True) def f(bytecount, va, vb, vc): i = 0 while i < bytecount: myjitdriver.jit_merge_point() a = raw_storage_getitem(type, va, i) b = raw_storage_getitem(type, vb, i) c = func(a, b) raw_storage_setitem(vc, i, rffi.cast(type, c)) i += size l = len(la) lb = list(reversed(la))[:] rawstorage = RawStorage() va = rawstorage.new(la, type) vb = rawstorage.new(lb, type) vc = rawstorage.new(None, type, size=l) self.meta_interp(f, [l * size, va, vb, vc], vec=True) for i in range(l): c = raw_storage_getitem(type, vc, i * size) assert rffi.cast(type, oldfunc(la[i], lb[i])) == c rawstorage.clear()
def test_float_int32_casts(self): myjitdriver = JitDriver(greens = [], reds = 'auto', vectorize=True) def f(bytecount, va, vb, vc): i = 0 j = 0 while j < bytecount: myjitdriver.jit_merge_point() a = raw_storage_getitem(rffi.DOUBLE,va,j) b = raw_storage_getitem(rffi.INT,vb,i) c = a+rffi.cast(rffi.DOUBLE,b) raw_storage_setitem(vc, j, c) i += 4 j += 8 count = 32 va = alloc_raw_storage(8*count, zero=True) vb = alloc_raw_storage(4*count, zero=True) for i,v in enumerate([1.0,2.0,3.0,4.0]*(count/4)): raw_storage_setitem(va, i*8, rffi.cast(rffi.DOUBLE,v)) for i,v in enumerate([-1,-2,-3,-4]*(count/4)): raw_storage_setitem(vb, i*4, rffi.cast(rffi.INT,v)) vc = alloc_raw_storage(8*count, zero=True) self.meta_interp(f, [8*count, va, vb, vc], vec=True) for i in range(count): assert raw_storage_getitem(rffi.DOUBLE,vc,i*8) == 0.0 free_raw_storage(va) free_raw_storage(vb) free_raw_storage(vc)
def test_vector_float_unary(self, func, la): func = always_inline(func) tp = rffi.DOUBLE size = rffi.sizeof(tp) myjitdriver = JitDriver(greens=[], reds='auto', vectorize=True) def f(bytecount, va, vc): i = 0 while i < bytecount: myjitdriver.jit_merge_point() a = raw_storage_getitem(tp, va, i) c = func(a) raw_storage_setitem(vc, i, rffi.cast(tp, c)) i += size l = len(la) rawstorage = RawStorage() va = rawstorage.new(la, tp) vc = rawstorage.new(None, tp, size=l) self.meta_interp(f, [l * size, va, vc], vec=True) for i in range(l): c = raw_storage_getitem(tp, vc, i * size) r = func(la[i]) assert isclose(r, c) rawstorage.clear()
def test_float_int32_casts(self): myjitdriver = JitDriver(greens=[], reds='auto', vectorize=True) def f(bytecount, va, vb, vc): i = 0 j = 0 while j < bytecount: myjitdriver.jit_merge_point() a = raw_storage_getitem(rffi.DOUBLE, va, j) b = raw_storage_getitem(rffi.INT, vb, i) c = a + rffi.cast(rffi.DOUBLE, b) raw_storage_setitem(vc, j, c) i += 4 j += 8 count = 32 va = alloc_raw_storage(8 * count, zero=True) vb = alloc_raw_storage(4 * count, zero=True) for i, v in enumerate([1.0, 2.0, 3.0, 4.0] * (count / 4)): raw_storage_setitem(va, i * 8, rffi.cast(rffi.DOUBLE, v)) for i, v in enumerate([-1, -2, -3, -4] * (count / 4)): raw_storage_setitem(vb, i * 4, rffi.cast(rffi.INT, v)) vc = alloc_raw_storage(8 * count, zero=True) self.meta_interp(f, [8 * count, va, vb, vc], vec=True) for i in range(count): assert raw_storage_getitem(rffi.DOUBLE, vc, i * 8) == 0.0 free_raw_storage(va) free_raw_storage(vb) free_raw_storage(vc)
def _vector_float_unary(self, func, type, data): func = always_inline(func) size = rffi.sizeof(type) myjitdriver = JitDriver(greens = [], reds = 'auto', vectorize=True) def f(bytecount, va, vc): i = 0 while i < bytecount: myjitdriver.jit_merge_point() a = raw_storage_getitem(type,va,i) c = func(a) raw_storage_setitem(vc, i, rffi.cast(type,c)) i += size la = data.draw(st.lists(st.floats(), min_size=10, max_size=150)) l = len(la) rawstorage = RawStorage() va = rawstorage.new(la, type) vc = rawstorage.new(None, type, size=l) self.meta_interp(f, [l*size, va, vc], vec=True) for i in range(l): c = raw_storage_getitem(type,vc,i*size) r = func(la[i]) assert isclose(r, c) rawstorage.clear()
def _vector_simple_int(self, func, type, la): oldfunc = func func = always_inline(func) size = rffi.sizeof(type) myjitdriver = JitDriver(greens = [], reds = 'auto', vectorize=True) def f(bytecount, va, vb, vc): i = 0 while i < bytecount: myjitdriver.jit_merge_point() a = raw_storage_getitem(type,va,i) b = raw_storage_getitem(type,vb,i) c = func(a,b) raw_storage_setitem(vc, i, rffi.cast(type,c)) i += size l = len(la) lb = list(reversed(la))[:] rawstorage = RawStorage() va = rawstorage.new(la, type) vb = rawstorage.new(lb, type) vc = rawstorage.new(None, type, size=l) self.meta_interp(f, [l*size, va, vb, vc], vec=True) for i in range(l): c = raw_storage_getitem(type,vc,i*size) assert rffi.cast(type, oldfunc(la[i], lb[i])) == c rawstorage.clear()
def _vector_simple_float(self, func, type, data): func = always_inline(func) size = rffi.sizeof(rffi.DOUBLE) myjitdriver = JitDriver(greens=[], reds='auto', vectorize=True) def f(bytecount, va, vb, vc): i = 0 while i < bytecount: myjitdriver.jit_merge_point() a = raw_storage_getitem(type, va, i) b = raw_storage_getitem(type, vb, i) c = func(a, b) raw_storage_setitem(vc, i, rffi.cast(type, c)) i += size la = data.draw(st.lists(st.floats(), min_size=10, max_size=150)) l = len(la) lb = data.draw(st.lists(st.floats(), min_size=l, max_size=l)) rawstorage = RawStorage() va = rawstorage.new(la, type) vb = rawstorage.new(lb, type) vc = rawstorage.new(None, type, size=l) self.meta_interp(f, [l * size, va, vb, vc], vec=True) for i in range(l): c = raw_storage_getitem(type, vc, i * size) r = rffi.cast(type, func(la[i], lb[i])) assert isclose(r, c) rawstorage.clear()
def f(accum, bytecount, v): i = 0 while i < bytecount: myjitdriver.jit_merge_point() e = raw_storage_getitem(type,v,i) accum = func(accum,e) i += size return accum
def f(accum, bytecount, v): i = 0 while i < bytecount: myjitdriver.jit_merge_point() e = raw_storage_getitem(tp, v, i) accum = func(accum, e) i += size return accum
def getitem(self, item): if count < 2: v = raw_storage_getitem(TP, self.values, item * self.stride_size + self.start) else: v = [] for i in range(count): _v = raw_storage_getitem(TP, self.values, item * self.stride_size + self.start + step * i) v.append(_v) if comp_type == 'int': v = widen(v) elif comp_type == 'float': v = float(v) elif comp_type == 'complex': v = [float(v[0]),float(v[1])] else: raise NotImplementedError('cannot reach') return (v)
def getitem(self, index): return raw_storage_getitem(lltype.Char, self.impl.storage, index + self.impl.start)
def getitem(self, item): return raw_storage_getitem(lltype.Char, self.impl.storage, item)
def f(i): r = alloc_raw_storage(24) raw_storage_setitem(r, 8, i) res = raw_storage_getitem(lltype.Signed, r, 8) free_raw_storage(r) return res != i
def test_untranslated_storage(): r = alloc_raw_storage(15) raw_storage_setitem(r, 3, 1<<30) res = raw_storage_getitem(lltype.Signed, r, 3) free_raw_storage(r) assert res == 1<<30
def f(): p = alloc_raw_storage(15) raw_storage_setitem(p, 3, 24) res = raw_storage_getitem(lltype.Signed, p, 3) free_raw_storage(p) return res
def f(): p = alloc_raw_storage(15, track_allocation=False, zero=True) raw_storage_setitem(p, 3, 24) res = raw_storage_getitem(lltype.Signed, p, 3) free_raw_storage(p, track_allocation=False) return res
def f(): p = alloc_raw_storage(15) raw_storage_setitem(p, 5, rffi.cast(rffi.UCHAR, 254)) res = raw_storage_getitem(rffi.UCHAR, p, 5) free_raw_storage(p) return rffi.cast(lltype.Signed, res)
def f(): p = alloc_raw_storage(15) raw_storage_setitem(p, 4, 2.4e15) res = raw_storage_getitem(lltype.Float, p, 4) free_raw_storage(p) return res