Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Integrando Python e C++ com pybind11

Integrando Python e C++ com pybind11

Palestra apresentada pelo Tarcísio Fischer na 50º Python Floripa on-line https://www.youtube.com/watch?v=dl3pLKUiBEU

Python Floripa

August 22, 2020
Tweet

More Decks by Python Floripa

Other Decks in Technology

Transcript

  1. Agenda - Motivações - O que é a pybind11 -

    Um exemplo básico - Algumas features - Mais exemplos
  2. Motivações - Performance (Python é lento e Numpy as vezes

    não é o bastante) - Aproveitar libs C++
  3. Motivações - Performance (Python é lento e Numpy as vezes

    não é o bastante) - Aproveitar libs C++ - Levar código legado C++ para Python
  4. O que é a pybind11 - Biblioteca C++ que permite

    expor código C++ em Python e vice versa “pybind11 is a lightweight header-only library that exposes C++ types in Python and vice versa, mainly to create Python bindings of existing C++ code” https://github.com/pybind/pybind11
  5. O que é a pybind11 - Biblioteca C++ que permite

    expor código C++ em Python e vice versa - Alternativas? - Boost::Python Tempo de compilação lento, não está mais sendo mantida - Cython Difícil manter, e não tem boas ferramentas (IDE/Debugger) - Python C API Muito Low-Level
  6. Um exemplo básico: Compilação (linux) * Existe também funções prontas

    para CMAKE Usando make, ou compilando “na mão”: https://pybind11.readthedocs.io/en/stable/basics.html https://github.com/pybind/python_example Usando CMake: https://github.com/pybind/cmake_example https://github.com/tarcisiofischer/simple_petsc_example/blob/master/src/c%2B%2B/CMakeLists.txt Auxiliar para encontrar os paths Poderia também colocar “na mão”
  7. Integrando com a NumPy - py::array - xTensor - Eigen

    https://pybind11.readthedocs.io/en/stable/advanced/pycpp/numpy.html https://xtensor-python.readthedocs.io/en/latest/basic_usage.html Eigen is a C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms. http://eigen.tuxfamily.org/
  8. Exemplo 1 Dados os 4 números primos: 3, 7, 109,

    e 673... Concatenando 3 e 7 temos 37 e 73 (ambos primos) Concatenando 3 e 109 temos 3109 e 1093 (ambos primos) Concatenando 7 e 109 temos 7109 e 1097 (ambos primos) E assim por diante... “Encontre 5 primos cuja concatenação entre eles sempre gera novos primos” https://projecteuler.net/problem=60
  9. Exemplo 2 (...) a suite of data structures and routines

    for the scalable (parallel) solution of scientific applications modeled by partial differential equations https://www.mcs.anl.gov/petsc/
  10. Solução do sistema não linear simples usando a PETSc, com

    plots da matplotlib para ver os resultados. https://tarcisiofischer.github.io/2020-07-27/biblioteca-petsc Plot da matplotlib mostrando o campo de velocidades, solução de um problema de dinâmica de fluidos, resolvido usando a PETSc
  11. Exemplo 3 “high-performance, robust, memory efficient, and easy to use

    software package for solving large sparse linear systems of equations on shared memory multiprocessors” https://software.intel.com/mkl
  12. Exemplo 3 https://tarcisiofischer.github.io/ Exemplo de resultado do processo de difusão

    bidimensional sem termo fonte. A leitura da imagem e setup do problema pode ser escrito em Python, enquanto a solução do sistema linear pode ser feito pela PARDISO