ex exten endi ding ng num umba
play

Ex Exten endi ding ng Num umba FOSDEM 2019 Joris Geessels // - PowerPoint PPT Presentation

Ex Exten endi ding ng Num umba FOSDEM 2019 Joris Geessels // @jolos JIT compiler (LLVM) @numba.jit(nopython=True) def go_fast(a): trace = 0 accelerates Python for i in range(a.shape[0]): trace += numpy.tanh(a[i, i]) numpy support


  1. Ex Exten endi ding ng Num umba FOSDEM 2019 Joris Geessels // @jolos

  2. JIT – compiler (LLVM) @numba.jit(nopython=True) def go_fast(a): trace = 0 accelerates Python for i in range(a.shape[0]): trace += numpy.tanh(a[i, i]) numpy support ++ return a + trace x = numpy.arange(100).reshape(10, 10) print(go_fast(x)) 2

  3. Si Simu mula latio tion n of a PI PIC class WaveguideModel(CompactModel): Called by simulator? C++ objects? def calculate_smatrix(params, env, S): phase = 2 * np.pi / env.wavelength * params.n_eff * params.length A = 0.99 S['in', 'out'] = S['out', 'in'] = A * np.exp(1j * phase) dict support? 3

  4. Num umba Co Comp mpile iler Pip ipel elin ine ③ add datamodels ① custom rewrite ④ custom codegen Bytecode Rewrite Type Rewrite Lowering → IR Inference (+ types) (codegen) Numba IR ② add types + inference 4

  5. ① Num umba IR IR R Rew ewrit ite from numba import ir from numba.rewrites import Rewrite, register_rewrite # 'before-inference' or 'after-inference' @register_rewrite('before-inference') class MyRewrite(Rewrite): def match(self, func_ir, block, typemap, calltypes): # search for expressions to rewrite, # return True when match return True def apply(self): # return a new function 'block’ return new_block 5

  6. ② Type pe In Infer erence ence # 2 public decorators to register your custom typers from numba.extending import type_callable, typeof_impl class MyPointType(numba.types.Type): # A custom type to represent a point # used during inference def __init__(self): super(MyPointType, self).__init__(name='Point') @type_callable(MyPoint) def type_MyPoint(context): def typer(x, y): instantiate & return # your_func returns a point your custom type return MyPointType() return typer 6

  7. ③ Lower erin ing g Type pes Lowering = generating LLVM intermediate representation (IR) from numba.extending import register_model, models @register_model(MyPointType) class MyPointModel(models.StructModel): def __init__(self, dmm, fe_type): members = [ ('x', types.int64), Data Layout ('y', types.int64), ] models.StructModel.__init__(self, dmm, fe_type, members) 7

  8. ④ Lower erin ing g calla llable bles, , se setattr tr, , ge getattr tr , … from numba.extending import lower_builtin from numba import cgutils # llvm codegen utils @lower_builtin(MyPoint, types.Integer, types.Integer) def impl_point(context, builder, sig, args): typ = sig.return_type Types of arguments assert isinstance(typ, MyPointType) x, y = args point = cgutils.create_struct_proxy(typ)(context, builder) point.x = x point.y = y return point._getvalue() Codegen utilities for StructModel 8

  9. In Integ egratio ation n wi with C/ h C/C+ C++ import numpy.ctypeslib from numba import carray, cfunc import cffi 9

  10. sys.exit(0) References & Docs: • Good start: http://numba.pydata.org/numba-doc/latest/extending/interval-example.html • Numpy ctypeslib: https://docs.scipy.org/doc/numpy/reference/routines.ctypeslib.html • Numba uses Numba, so look at its code for examples: https://github.com/numba/numba • Friendly introduction to LLVM: https://www.aosabook.org/en/llvm.html • Examples: https://fosdem.org/2019/schedule/event/python_extending_numba/ 10

  11. Pho hotoni nics cs In Integ egrat ated ed Cir Circuit uit (P (PIC IC)? )?

  12. In Inter erop p wi with C+ h C++ + cla lasse sses? s? 1. Write C – wrapper for your C++ code 2. Create a Numba type and model to store a C++ obj pointer 3. Implement attributes using Numba’s extension architecture 4. Pass the pointer to the C++ object to your numba.cfunc 5. Segfault ;-) 12

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend