SlideShare ist ein Scribd-Unternehmen logo
1 von 17
Downloaden Sie, um offline zu lesen
Renderscript
  Sylvain Galand
Renderscript ?



Rendu ?

Scripts ?



Ni l'un, ni l'autre!
Histoire 1/2


Embellir Android !
●   Animations, fonds d'écran animés, animation de démarrage...


Un outil contre la "diversification"
●   "Write once, run anywhere"
●   Tous les GPUs (extensions OpenGL)
●   Introduction en interne dans Android 2.x

Evolution vers les calculs
●   Exécution optimale partout.
●   Publique avec Android 3.x
Histoire 2/2

Dépréciation de la partie rendu graphique
●   Annoncée avec Jelly Bean (Android 4.1)

Une note dans la documentation
●   Deprecation Notice: Earlier versions of Renderscript included
    an experimental graphics engine component. This component is
    now deprecated as of Android 4.1 [...] If you have apps that render
    graphics with Renderscript, we highly recommend you convert
    your code to another Android graphics rendering option.

Pourquoi ce changement ?
●   Les développeurs préfèrent OpenGL
●   OpenGL plus utilisé en interne aussi.
Renderscript, c'est

Un outil pour les calculs
●   Ne remplace ni le SDK, ni le NDK.
●   Répond à des problématiques spécifiques

Portabilité
●   Android 3.0 +

Performance
●   CPU (architecture, coeurs, instructions)
●   GPU, bientôt... (ARM Mali-T604 GPU)

Simplicité d'utilisation
●   Génération de code
Au coeur de RS

                                               code.rs
Code: script.rs
●   Langage C99
●   API pour le calculs
                                      APK
                                               bytecode
                                                  RS
Compilations via LLVM
●   Compilation en bytecode
●   Compilation (JIT) sur le client

                                      Client    binaire
Execution partout                                 RS
                                       GPU
●   Runtime Renderscript
●   Coeurs CPU + GPU
                                       CPU      CPU
                                       #1       #2
Intégration
Génération de "glue code"

         Renderscript                     Java

                           ScriptC_my_script.java
my_script.rs
                           /res/raw/my_script.bc

typedef struct My_Struct   ScriptField_My_Struct.java

My_Struct_t* my_struct;    .bind_my_struct(...);

                           .set_entier(int i)
int entier;
                           .get_entier();

void my_function();        .invoke_my_function();
Utilisation
Exemple




Par exemple, un exemple
●   Application de filtres sur des photos/images
●   Traitement du signal, calcul matriciel
●   (Rappel : Cette application vaut dans les 1 milliards)

Un peu de code
●   Améliorons les temps de calcul grâce à Renderscript !
Code : filter.rs
#pragma version(1)

#pragma rs java_package_name(com.genymobile.owf)

rs_matrix3x3 filter;

void init() { {
   rsMatrixLoadIdentity(&filter);
}

void root(const uchar4 *in, uchar4 *out) {
   float3 pixel = convert_float4(in[0]).rgb;
   pixel = rsMatrixMultiply(&filter, pixel);
   pixel = clamp(pixel, 0.f, 255.f);
   out->a = in->a;
   out->rgb = convert_uchar3(pixel);
}
// Création du script
                                     Code : Filter.java
mRS = RenderScript.create(mContext);
mScript = new ScriptC_filter(mRS, mContext.getResources(), R.raw.
filter);

// Allocation de la mémoire contenant le bitmap
mInAllocation = Allocation.createFromBitmap( mRS,
    inputBitmap,
    Allocation.MipmapControl.MIPMAP_NONE,
    Allocation.USAGE_SCRIPT);

// Allocation de la mémoire pour récupérer l'image générée
mOutAllocation = Allocation.createTyped(mRS, mInAllocation.
getType());

// Mise en place des paramètres
Matrix3f sepiaMatrix = new Matrix3f(mMatrix);
mScript.set_filter(sepiaMatrix);

// Appel du script (rsForEach)
mScript.forEach_root(mInAllocation, mOutAllocation);

// Copie du résultat dans le bitmap de sortie
mOutAllocation.copyTo(outputBitmap);
Résultats 1/2
Résultats 2/2

      Appareil (matériel)                    Java      RS       Gain
Nexus S
                                           960 ms      280 ms   x 3.4
(Exynos 1 GHz Cortex A8)

Galaxy Nexus
                                           360 ms      80 ms    x 4.5
(OMAP 4460 1,2 GHz dual-core)

Samsung Galaxy S2
                                           340 ms      48 ms    x 7.0
(1.2 GHz dual-core ARM Cortex-A9)

Samsung Galaxy S3
                                           325 ms      49 ms    x 6.6
(1.4 GHz quad-core ARM Cortex-A9)

Motorola Xoom
                                           210 ms      26 ms    x 8.0
(Tegra 2: 1GHz dual-core)

Nexus 7
                                           180 ms      22 ms    x 8.2
(Tegra 3: 1.3 GHz quad-core)

Intel AZ210 - Intel Orange San Diego
                                           293 ms      59 ms    x 4.9
(Intel Atom 1.6 Ghz Z2460 with HT - x86)
Android 4.0.3+
Conclusion



En bref
●   La solution pour les problèmes de performance sur les calculs
●   Intégration simplifiée

Pour la suite
●   Calculs dans le GPU ?
●   Meilleurs outils ?
●   Maintenance par Google ?
Merci !




Merci !
●   twitter : @sylvaingaland

●   google plus : http://slvn.fr/+

●   Code dispo sur : http://github.com/sgaland
Questions ?




@sylvaingaland   http://slvn.fr/+

Weitere ähnliche Inhalte

Ähnlich wie OWF12/PAUG Conf Days Render script, sylvain galand, software engineer at genymobile

Sizing PoC LSF & PowerAI for Engineers schools workloads
Sizing PoC LSF & PowerAI for Engineers schools workloadsSizing PoC LSF & PowerAI for Engineers schools workloads
Sizing PoC LSF & PowerAI for Engineers schools workloadsPhilippeBrogi
 
Programmation sur GPU avec CUDA
Programmation sur GPU avec CUDAProgrammation sur GPU avec CUDA
Programmation sur GPU avec CUDAIn Fine
 
Graphics card as computation engine
Graphics card as computation engineGraphics card as computation engine
Graphics card as computation enginevalery brasseur
 
Architecture des ordinateurs
Architecture des ordinateursArchitecture des ordinateurs
Architecture des ordinateursRMwebsite
 
Rouabhi algiers meetup
Rouabhi algiers meetupRouabhi algiers meetup
Rouabhi algiers meetupSamir Rouabhi
 
Isbs slides 2010
Isbs slides 2010Isbs slides 2010
Isbs slides 2010RMwebsite
 
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseriesBreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseriesXavier MARIN
 
Les nouveautés d'Unity 2018
Les nouveautés d'Unity 2018Les nouveautés d'Unity 2018
Les nouveautés d'Unity 2018Yannick Comte
 
Softshake 2013 - Vivre en parallèle
Softshake 2013 - Vivre en parallèleSoftshake 2013 - Vivre en parallèle
Softshake 2013 - Vivre en parallèleOCTO Technology
 
Vivre en parallèle - Softshake 2013
Vivre en parallèle - Softshake 2013Vivre en parallèle - Softshake 2013
Vivre en parallèle - Softshake 2013Henri Tremblay
 
Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++cppfrug
 
Poitou Charentes JUG - Traçabilité dans une architecture distribuée avec Node...
Poitou Charentes JUG - Traçabilité dans une architecture distribuée avec Node...Poitou Charentes JUG - Traçabilité dans une architecture distribuée avec Node...
Poitou Charentes JUG - Traçabilité dans une architecture distribuée avec Node...Sébastien Prunier
 
Lost in serverless AWS Lambda, Google Cloud Function, Azure Function quelle s...
Lost in serverless AWS Lambda, Google Cloud Function, Azure Function quelle s...Lost in serverless AWS Lambda, Google Cloud Function, Azure Function quelle s...
Lost in serverless AWS Lambda, Google Cloud Function, Azure Function quelle s...sebastienmoreno
 
OSIS18_IoT: L'approche machine virtuelle pour les microcontrôleurs, le projet...
OSIS18_IoT: L'approche machine virtuelle pour les microcontrôleurs, le projet...OSIS18_IoT: L'approche machine virtuelle pour les microcontrôleurs, le projet...
OSIS18_IoT: L'approche machine virtuelle pour les microcontrôleurs, le projet...Pôle Systematic Paris-Region
 
Presentaion fpga µc µp quelles est la solution
Presentaion  fpga µc µp quelles est la solutionPresentaion  fpga µc µp quelles est la solution
Presentaion fpga µc µp quelles est la solutionCynapsys It Hotspot
 
COURS VHDL PROGRAMMATION ET _ETAPES pour comprendre
COURS VHDL   PROGRAMMATION ET _ETAPES pour comprendreCOURS VHDL   PROGRAMMATION ET _ETAPES pour comprendre
COURS VHDL PROGRAMMATION ET _ETAPES pour comprendreMariamHafsa
 

Ähnlich wie OWF12/PAUG Conf Days Render script, sylvain galand, software engineer at genymobile (20)

Paug renderscript-mars-2013
Paug renderscript-mars-2013Paug renderscript-mars-2013
Paug renderscript-mars-2013
 
Sizing PoC LSF & PowerAI for Engineers schools workloads
Sizing PoC LSF & PowerAI for Engineers schools workloadsSizing PoC LSF & PowerAI for Engineers schools workloads
Sizing PoC LSF & PowerAI for Engineers schools workloads
 
Programmation sur GPU avec CUDA
Programmation sur GPU avec CUDAProgrammation sur GPU avec CUDA
Programmation sur GPU avec CUDA
 
Graphics card as computation engine
Graphics card as computation engineGraphics card as computation engine
Graphics card as computation engine
 
Architecture des ordinateurs
Architecture des ordinateursArchitecture des ordinateurs
Architecture des ordinateurs
 
Rouabhi algiers meetup
Rouabhi algiers meetupRouabhi algiers meetup
Rouabhi algiers meetup
 
Isbs slides 2010
Isbs slides 2010Isbs slides 2010
Isbs slides 2010
 
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseriesBreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
 
The Future of Javascript
The Future of JavascriptThe Future of Javascript
The Future of Javascript
 
The future of JavaScript
The future of JavaScriptThe future of JavaScript
The future of JavaScript
 
Les nouveautés d'Unity 2018
Les nouveautés d'Unity 2018Les nouveautés d'Unity 2018
Les nouveautés d'Unity 2018
 
Softshake 2013 - Vivre en parallèle
Softshake 2013 - Vivre en parallèleSoftshake 2013 - Vivre en parallèle
Softshake 2013 - Vivre en parallèle
 
Vivre en parallèle - Softshake 2013
Vivre en parallèle - Softshake 2013Vivre en parallèle - Softshake 2013
Vivre en parallèle - Softshake 2013
 
Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++
 
Poitou Charentes JUG - Traçabilité dans une architecture distribuée avec Node...
Poitou Charentes JUG - Traçabilité dans une architecture distribuée avec Node...Poitou Charentes JUG - Traçabilité dans une architecture distribuée avec Node...
Poitou Charentes JUG - Traçabilité dans une architecture distribuée avec Node...
 
Lost in serverless AWS Lambda, Google Cloud Function, Azure Function quelle s...
Lost in serverless AWS Lambda, Google Cloud Function, Azure Function quelle s...Lost in serverless AWS Lambda, Google Cloud Function, Azure Function quelle s...
Lost in serverless AWS Lambda, Google Cloud Function, Azure Function quelle s...
 
OSIS18_IoT: L'approche machine virtuelle pour les microcontrôleurs, le projet...
OSIS18_IoT: L'approche machine virtuelle pour les microcontrôleurs, le projet...OSIS18_IoT: L'approche machine virtuelle pour les microcontrôleurs, le projet...
OSIS18_IoT: L'approche machine virtuelle pour les microcontrôleurs, le projet...
 
Presentaion fpga µc µp quelles est la solution
Presentaion  fpga µc µp quelles est la solutionPresentaion  fpga µc µp quelles est la solution
Presentaion fpga µc µp quelles est la solution
 
sfPot aop
sfPot aopsfPot aop
sfPot aop
 
COURS VHDL PROGRAMMATION ET _ETAPES pour comprendre
COURS VHDL   PROGRAMMATION ET _ETAPES pour comprendreCOURS VHDL   PROGRAMMATION ET _ETAPES pour comprendre
COURS VHDL PROGRAMMATION ET _ETAPES pour comprendre
 

Mehr von Paris Open Source Summit

#OSSPARIS19 : Control your Embedded Linux remotely by using WebSockets - Gian...
#OSSPARIS19 : Control your Embedded Linux remotely by using WebSockets - Gian...#OSSPARIS19 : Control your Embedded Linux remotely by using WebSockets - Gian...
#OSSPARIS19 : Control your Embedded Linux remotely by using WebSockets - Gian...Paris Open Source Summit
 
#OSSPARIS19 : A virtual machine approach for microcontroller programming : th...
#OSSPARIS19 : A virtual machine approach for microcontroller programming : th...#OSSPARIS19 : A virtual machine approach for microcontroller programming : th...
#OSSPARIS19 : A virtual machine approach for microcontroller programming : th...Paris Open Source Summit
 
#OSSPARIS19 : RIOT: towards open source, secure DevOps on microcontroller-bas...
#OSSPARIS19 : RIOT: towards open source, secure DevOps on microcontroller-bas...#OSSPARIS19 : RIOT: towards open source, secure DevOps on microcontroller-bas...
#OSSPARIS19 : RIOT: towards open source, secure DevOps on microcontroller-bas...Paris Open Source Summit
 
#OSSPARIS19 : The evolving (IoT) security landscape - Gianluca Varisco, Arduino
#OSSPARIS19 : The evolving (IoT) security landscape - Gianluca Varisco, Arduino#OSSPARIS19 : The evolving (IoT) security landscape - Gianluca Varisco, Arduino
#OSSPARIS19 : The evolving (IoT) security landscape - Gianluca Varisco, ArduinoParis Open Source Summit
 
#OSSPARIS19: Construire des applications IoT "secure-by-design" - Thomas Gaza...
#OSSPARIS19: Construire des applications IoT "secure-by-design" - Thomas Gaza...#OSSPARIS19: Construire des applications IoT "secure-by-design" - Thomas Gaza...
#OSSPARIS19: Construire des applications IoT "secure-by-design" - Thomas Gaza...Paris Open Source Summit
 
#OSSPARIS19 : Detecter des anomalies de séries temporelles à la volée avec Wa...
#OSSPARIS19 : Detecter des anomalies de séries temporelles à la volée avec Wa...#OSSPARIS19 : Detecter des anomalies de séries temporelles à la volée avec Wa...
#OSSPARIS19 : Detecter des anomalies de séries temporelles à la volée avec Wa...Paris Open Source Summit
 
#OSSPARIS19 : Supervision d'objets connectés industriels - Eric DOANE, Zabbix
#OSSPARIS19 : Supervision d'objets connectés industriels - Eric DOANE, Zabbix#OSSPARIS19 : Supervision d'objets connectés industriels - Eric DOANE, Zabbix
#OSSPARIS19 : Supervision d'objets connectés industriels - Eric DOANE, ZabbixParis Open Source Summit
 
#OSSPARIS19: Introduction to scikit-learn - Olivier Grisel, Inria
#OSSPARIS19: Introduction to scikit-learn - Olivier Grisel, Inria#OSSPARIS19: Introduction to scikit-learn - Olivier Grisel, Inria
#OSSPARIS19: Introduction to scikit-learn - Olivier Grisel, InriaParis Open Source Summit
 
#OSSPARIS19 - Fostering disruptive innovation in AI with JEDI - André Loesekr...
#OSSPARIS19 - Fostering disruptive innovation in AI with JEDI - André Loesekr...#OSSPARIS19 - Fostering disruptive innovation in AI with JEDI - André Loesekr...
#OSSPARIS19 - Fostering disruptive innovation in AI with JEDI - André Loesekr...Paris Open Source Summit
 
#OSSPARIS19 : Comment ONLYOFFICE aide à organiser les travaux de recherches ...
#OSSPARIS19 : Comment ONLYOFFICE aide à organiser les travaux de recherches  ...#OSSPARIS19 : Comment ONLYOFFICE aide à organiser les travaux de recherches  ...
#OSSPARIS19 : Comment ONLYOFFICE aide à organiser les travaux de recherches ...Paris Open Source Summit
 
#OSSPARIS19 : MDPH : une solution collaborative open source pour l'instructio...
#OSSPARIS19 : MDPH : une solution collaborative open source pour l'instructio...#OSSPARIS19 : MDPH : une solution collaborative open source pour l'instructio...
#OSSPARIS19 : MDPH : une solution collaborative open source pour l'instructio...Paris Open Source Summit
 
#OSSPARIS19 - Understanding Open Source Governance - Gilles Gravier, Wipro Li...
#OSSPARIS19 - Understanding Open Source Governance - Gilles Gravier, Wipro Li...#OSSPARIS19 - Understanding Open Source Governance - Gilles Gravier, Wipro Li...
#OSSPARIS19 - Understanding Open Source Governance - Gilles Gravier, Wipro Li...Paris Open Source Summit
 
#OSSPARIS19 : Publier du code Open Source dans une banque : Mission impossibl...
#OSSPARIS19 : Publier du code Open Source dans une banque : Mission impossibl...#OSSPARIS19 : Publier du code Open Source dans une banque : Mission impossibl...
#OSSPARIS19 : Publier du code Open Source dans une banque : Mission impossibl...Paris Open Source Summit
 
#OSSPARIS19 : Libre à vous ! Raconter les libertés informatiques à la radio -...
#OSSPARIS19 : Libre à vous ! Raconter les libertés informatiques à la radio -...#OSSPARIS19 : Libre à vous ! Raconter les libertés informatiques à la radio -...
#OSSPARIS19 : Libre à vous ! Raconter les libertés informatiques à la radio -...Paris Open Source Summit
 
#OSSPARIS19 - Le logiciel libre : un enjeu politique et social - Etienne Gonn...
#OSSPARIS19 - Le logiciel libre : un enjeu politique et social - Etienne Gonn...#OSSPARIS19 - Le logiciel libre : un enjeu politique et social - Etienne Gonn...
#OSSPARIS19 - Le logiciel libre : un enjeu politique et social - Etienne Gonn...Paris Open Source Summit
 
#OSSPARIS19 - Conflits d’intérêt & concurrence : la place de l’éditeur dans l...
#OSSPARIS19 - Conflits d’intérêt & concurrence : la place de l’éditeur dans l...#OSSPARIS19 - Conflits d’intérêt & concurrence : la place de l’éditeur dans l...
#OSSPARIS19 - Conflits d’intérêt & concurrence : la place de l’éditeur dans l...Paris Open Source Summit
 
#OSSPARIS19 - Table ronde : souveraineté des données
#OSSPARIS19 - Table ronde : souveraineté des données #OSSPARIS19 - Table ronde : souveraineté des données
#OSSPARIS19 - Table ronde : souveraineté des données Paris Open Source Summit
 
#OSSPARIS19 - Comment financer un projet de logiciel libre - LUDOVIC DUBOST, ...
#OSSPARIS19 - Comment financer un projet de logiciel libre - LUDOVIC DUBOST, ...#OSSPARIS19 - Comment financer un projet de logiciel libre - LUDOVIC DUBOST, ...
#OSSPARIS19 - Comment financer un projet de logiciel libre - LUDOVIC DUBOST, ...Paris Open Source Summit
 
#OSSPARIS19 - BlueMind v4 : les dessous technologiques de 10 ans de travail p...
#OSSPARIS19 - BlueMind v4 : les dessous technologiques de 10 ans de travail p...#OSSPARIS19 - BlueMind v4 : les dessous technologiques de 10 ans de travail p...
#OSSPARIS19 - BlueMind v4 : les dessous technologiques de 10 ans de travail p...Paris Open Source Summit
 
#OSSPARIS19 - Tuto de première installation de VITAM, un système d'archivage ...
#OSSPARIS19 - Tuto de première installation de VITAM, un système d'archivage ...#OSSPARIS19 - Tuto de première installation de VITAM, un système d'archivage ...
#OSSPARIS19 - Tuto de première installation de VITAM, un système d'archivage ...Paris Open Source Summit
 

Mehr von Paris Open Source Summit (20)

#OSSPARIS19 : Control your Embedded Linux remotely by using WebSockets - Gian...
#OSSPARIS19 : Control your Embedded Linux remotely by using WebSockets - Gian...#OSSPARIS19 : Control your Embedded Linux remotely by using WebSockets - Gian...
#OSSPARIS19 : Control your Embedded Linux remotely by using WebSockets - Gian...
 
#OSSPARIS19 : A virtual machine approach for microcontroller programming : th...
#OSSPARIS19 : A virtual machine approach for microcontroller programming : th...#OSSPARIS19 : A virtual machine approach for microcontroller programming : th...
#OSSPARIS19 : A virtual machine approach for microcontroller programming : th...
 
#OSSPARIS19 : RIOT: towards open source, secure DevOps on microcontroller-bas...
#OSSPARIS19 : RIOT: towards open source, secure DevOps on microcontroller-bas...#OSSPARIS19 : RIOT: towards open source, secure DevOps on microcontroller-bas...
#OSSPARIS19 : RIOT: towards open source, secure DevOps on microcontroller-bas...
 
#OSSPARIS19 : The evolving (IoT) security landscape - Gianluca Varisco, Arduino
#OSSPARIS19 : The evolving (IoT) security landscape - Gianluca Varisco, Arduino#OSSPARIS19 : The evolving (IoT) security landscape - Gianluca Varisco, Arduino
#OSSPARIS19 : The evolving (IoT) security landscape - Gianluca Varisco, Arduino
 
#OSSPARIS19: Construire des applications IoT "secure-by-design" - Thomas Gaza...
#OSSPARIS19: Construire des applications IoT "secure-by-design" - Thomas Gaza...#OSSPARIS19: Construire des applications IoT "secure-by-design" - Thomas Gaza...
#OSSPARIS19: Construire des applications IoT "secure-by-design" - Thomas Gaza...
 
#OSSPARIS19 : Detecter des anomalies de séries temporelles à la volée avec Wa...
#OSSPARIS19 : Detecter des anomalies de séries temporelles à la volée avec Wa...#OSSPARIS19 : Detecter des anomalies de séries temporelles à la volée avec Wa...
#OSSPARIS19 : Detecter des anomalies de séries temporelles à la volée avec Wa...
 
#OSSPARIS19 : Supervision d'objets connectés industriels - Eric DOANE, Zabbix
#OSSPARIS19 : Supervision d'objets connectés industriels - Eric DOANE, Zabbix#OSSPARIS19 : Supervision d'objets connectés industriels - Eric DOANE, Zabbix
#OSSPARIS19 : Supervision d'objets connectés industriels - Eric DOANE, Zabbix
 
#OSSPARIS19: Introduction to scikit-learn - Olivier Grisel, Inria
#OSSPARIS19: Introduction to scikit-learn - Olivier Grisel, Inria#OSSPARIS19: Introduction to scikit-learn - Olivier Grisel, Inria
#OSSPARIS19: Introduction to scikit-learn - Olivier Grisel, Inria
 
#OSSPARIS19 - Fostering disruptive innovation in AI with JEDI - André Loesekr...
#OSSPARIS19 - Fostering disruptive innovation in AI with JEDI - André Loesekr...#OSSPARIS19 - Fostering disruptive innovation in AI with JEDI - André Loesekr...
#OSSPARIS19 - Fostering disruptive innovation in AI with JEDI - André Loesekr...
 
#OSSPARIS19 : Comment ONLYOFFICE aide à organiser les travaux de recherches ...
#OSSPARIS19 : Comment ONLYOFFICE aide à organiser les travaux de recherches  ...#OSSPARIS19 : Comment ONLYOFFICE aide à organiser les travaux de recherches  ...
#OSSPARIS19 : Comment ONLYOFFICE aide à organiser les travaux de recherches ...
 
#OSSPARIS19 : MDPH : une solution collaborative open source pour l'instructio...
#OSSPARIS19 : MDPH : une solution collaborative open source pour l'instructio...#OSSPARIS19 : MDPH : une solution collaborative open source pour l'instructio...
#OSSPARIS19 : MDPH : une solution collaborative open source pour l'instructio...
 
#OSSPARIS19 - Understanding Open Source Governance - Gilles Gravier, Wipro Li...
#OSSPARIS19 - Understanding Open Source Governance - Gilles Gravier, Wipro Li...#OSSPARIS19 - Understanding Open Source Governance - Gilles Gravier, Wipro Li...
#OSSPARIS19 - Understanding Open Source Governance - Gilles Gravier, Wipro Li...
 
#OSSPARIS19 : Publier du code Open Source dans une banque : Mission impossibl...
#OSSPARIS19 : Publier du code Open Source dans une banque : Mission impossibl...#OSSPARIS19 : Publier du code Open Source dans une banque : Mission impossibl...
#OSSPARIS19 : Publier du code Open Source dans une banque : Mission impossibl...
 
#OSSPARIS19 : Libre à vous ! Raconter les libertés informatiques à la radio -...
#OSSPARIS19 : Libre à vous ! Raconter les libertés informatiques à la radio -...#OSSPARIS19 : Libre à vous ! Raconter les libertés informatiques à la radio -...
#OSSPARIS19 : Libre à vous ! Raconter les libertés informatiques à la radio -...
 
#OSSPARIS19 - Le logiciel libre : un enjeu politique et social - Etienne Gonn...
#OSSPARIS19 - Le logiciel libre : un enjeu politique et social - Etienne Gonn...#OSSPARIS19 - Le logiciel libre : un enjeu politique et social - Etienne Gonn...
#OSSPARIS19 - Le logiciel libre : un enjeu politique et social - Etienne Gonn...
 
#OSSPARIS19 - Conflits d’intérêt & concurrence : la place de l’éditeur dans l...
#OSSPARIS19 - Conflits d’intérêt & concurrence : la place de l’éditeur dans l...#OSSPARIS19 - Conflits d’intérêt & concurrence : la place de l’éditeur dans l...
#OSSPARIS19 - Conflits d’intérêt & concurrence : la place de l’éditeur dans l...
 
#OSSPARIS19 - Table ronde : souveraineté des données
#OSSPARIS19 - Table ronde : souveraineté des données #OSSPARIS19 - Table ronde : souveraineté des données
#OSSPARIS19 - Table ronde : souveraineté des données
 
#OSSPARIS19 - Comment financer un projet de logiciel libre - LUDOVIC DUBOST, ...
#OSSPARIS19 - Comment financer un projet de logiciel libre - LUDOVIC DUBOST, ...#OSSPARIS19 - Comment financer un projet de logiciel libre - LUDOVIC DUBOST, ...
#OSSPARIS19 - Comment financer un projet de logiciel libre - LUDOVIC DUBOST, ...
 
#OSSPARIS19 - BlueMind v4 : les dessous technologiques de 10 ans de travail p...
#OSSPARIS19 - BlueMind v4 : les dessous technologiques de 10 ans de travail p...#OSSPARIS19 - BlueMind v4 : les dessous technologiques de 10 ans de travail p...
#OSSPARIS19 - BlueMind v4 : les dessous technologiques de 10 ans de travail p...
 
#OSSPARIS19 - Tuto de première installation de VITAM, un système d'archivage ...
#OSSPARIS19 - Tuto de première installation de VITAM, un système d'archivage ...#OSSPARIS19 - Tuto de première installation de VITAM, un système d'archivage ...
#OSSPARIS19 - Tuto de première installation de VITAM, un système d'archivage ...
 

OWF12/PAUG Conf Days Render script, sylvain galand, software engineer at genymobile

  • 2. Renderscript ? Rendu ? Scripts ? Ni l'un, ni l'autre!
  • 3. Histoire 1/2 Embellir Android ! ● Animations, fonds d'écran animés, animation de démarrage... Un outil contre la "diversification" ● "Write once, run anywhere" ● Tous les GPUs (extensions OpenGL) ● Introduction en interne dans Android 2.x Evolution vers les calculs ● Exécution optimale partout. ● Publique avec Android 3.x
  • 4. Histoire 2/2 Dépréciation de la partie rendu graphique ● Annoncée avec Jelly Bean (Android 4.1) Une note dans la documentation ● Deprecation Notice: Earlier versions of Renderscript included an experimental graphics engine component. This component is now deprecated as of Android 4.1 [...] If you have apps that render graphics with Renderscript, we highly recommend you convert your code to another Android graphics rendering option. Pourquoi ce changement ? ● Les développeurs préfèrent OpenGL ● OpenGL plus utilisé en interne aussi.
  • 5. Renderscript, c'est Un outil pour les calculs ● Ne remplace ni le SDK, ni le NDK. ● Répond à des problématiques spécifiques Portabilité ● Android 3.0 + Performance ● CPU (architecture, coeurs, instructions) ● GPU, bientôt... (ARM Mali-T604 GPU) Simplicité d'utilisation ● Génération de code
  • 6. Au coeur de RS code.rs Code: script.rs ● Langage C99 ● API pour le calculs APK bytecode RS Compilations via LLVM ● Compilation en bytecode ● Compilation (JIT) sur le client Client binaire Execution partout RS GPU ● Runtime Renderscript ● Coeurs CPU + GPU CPU CPU #1 #2
  • 7. Intégration Génération de "glue code" Renderscript Java ScriptC_my_script.java my_script.rs /res/raw/my_script.bc typedef struct My_Struct ScriptField_My_Struct.java My_Struct_t* my_struct; .bind_my_struct(...); .set_entier(int i) int entier; .get_entier(); void my_function(); .invoke_my_function();
  • 9. Exemple Par exemple, un exemple ● Application de filtres sur des photos/images ● Traitement du signal, calcul matriciel ● (Rappel : Cette application vaut dans les 1 milliards) Un peu de code ● Améliorons les temps de calcul grâce à Renderscript !
  • 10. Code : filter.rs #pragma version(1) #pragma rs java_package_name(com.genymobile.owf) rs_matrix3x3 filter; void init() { { rsMatrixLoadIdentity(&filter); } void root(const uchar4 *in, uchar4 *out) { float3 pixel = convert_float4(in[0]).rgb; pixel = rsMatrixMultiply(&filter, pixel); pixel = clamp(pixel, 0.f, 255.f); out->a = in->a; out->rgb = convert_uchar3(pixel); }
  • 11. // Création du script Code : Filter.java mRS = RenderScript.create(mContext); mScript = new ScriptC_filter(mRS, mContext.getResources(), R.raw. filter); // Allocation de la mémoire contenant le bitmap mInAllocation = Allocation.createFromBitmap( mRS, inputBitmap, Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT); // Allocation de la mémoire pour récupérer l'image générée mOutAllocation = Allocation.createTyped(mRS, mInAllocation. getType()); // Mise en place des paramètres Matrix3f sepiaMatrix = new Matrix3f(mMatrix); mScript.set_filter(sepiaMatrix); // Appel du script (rsForEach) mScript.forEach_root(mInAllocation, mOutAllocation); // Copie du résultat dans le bitmap de sortie mOutAllocation.copyTo(outputBitmap);
  • 13. Résultats 2/2 Appareil (matériel) Java RS Gain Nexus S 960 ms 280 ms x 3.4 (Exynos 1 GHz Cortex A8) Galaxy Nexus 360 ms 80 ms x 4.5 (OMAP 4460 1,2 GHz dual-core) Samsung Galaxy S2 340 ms 48 ms x 7.0 (1.2 GHz dual-core ARM Cortex-A9) Samsung Galaxy S3 325 ms 49 ms x 6.6 (1.4 GHz quad-core ARM Cortex-A9) Motorola Xoom 210 ms 26 ms x 8.0 (Tegra 2: 1GHz dual-core) Nexus 7 180 ms 22 ms x 8.2 (Tegra 3: 1.3 GHz quad-core) Intel AZ210 - Intel Orange San Diego 293 ms 59 ms x 4.9 (Intel Atom 1.6 Ghz Z2460 with HT - x86)
  • 15. Conclusion En bref ● La solution pour les problèmes de performance sur les calculs ● Intégration simplifiée Pour la suite ● Calculs dans le GPU ? ● Meilleurs outils ? ● Maintenance par Google ?
  • 16. Merci ! Merci ! ● twitter : @sylvaingaland ● google plus : http://slvn.fr/+ ● Code dispo sur : http://github.com/sgaland
  • 17. Questions ? @sylvaingaland http://slvn.fr/+