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

23f134e5e0567efeff45ecfaa8702f37?s=128

Python Floripa

August 22, 2020
Tweet

Transcript

  1. Integrando Python e C++ com pybind11 tarcisiofischer.github.io /tarcisio-fischer /tarcisiofischer /tarcisiofischer

    Tarcísio Fischer
  2. Agenda - Motivações - O que é a pybind11 -

    Um exemplo básico - Algumas features - Mais exemplos
  3. Motivações

  4. Motivações - Performance (Python pode ser lento e Numpy as

    vezes não é suficiente)
  5. None
  6. Motivações - Performance (Python é lento e Numpy as vezes

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

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

  9. 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
  10. 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
  11. Um exemplo básico

  12. Um exemplo básico

  13. Um exemplo básico Inclui as macros, templates e funções da

    pybind11
  14. Um exemplo básico Função C++ implementada normalmente

  15. Um exemplo básico Define o nome do módulo que será

    importado do python
  16. Um exemplo básico Escolhe quais funções serão exportadas para o

    Python
  17. 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”
  18. Um exemplo básico: Execução

  19. Um exemplo básico: Execução

  20. Um exemplo básico: Execução

  21. Algumas features

  22. Conversão automática de tipos primitivos (C++)

  23. Conversão automática de tipos primitivos (C++)

  24. Disponibilidade de tipos primitivos (Python)

  25. Disponibilidade de tipos primitivos (Python)

  26. Conversão automática de exceções

  27. Funções Python como parâmetro para C++

  28. Retorno de funções C++ para o Python

  29. Classes & Objetos

  30. Classes & Objetos

  31. Usando módulos Python no C++

  32. 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/
  33. Numpy & Eigen

  34. Mais exemplos

  35. 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
  36. None
  37. None
  38. ~86 seg.

  39. None
  40. None
  41. ~86 seg. ~16 seg.

  42. 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/
  43. 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
  44. 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
  45. 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
  46. Perguntas? tarcisiofischer.github.io /tarcisio-fischer /tarcisiofischer /tarcisiofischer