[eside-ghost] extensiones C/C++ para Python
Jon Valdés
juanval en gmail.com
Mie Mayo 7 16:30:38 CEST 2008
On Tue, May 6, 2008 at 11:24 AM, altern <altern2 en gmail.com> wrote:
> aqui estoy de nuevo con python y opengl
>
> ahora acabo de tener un rato para hacer unas pruebas generales y he
> hecho un ejemplo sencillo que adjunto. Incluso esto se lleva el 30 y
> pico % de mi CPU que es un PIV a 1.6 yo necesito que se mantenga por debajo
> del 20% y necesito correr mucho mas codigo que el que hay en este ejemplo.
>
> Entiendo de esto que el problema es general de python pq esto es muy
> sencillo y mucho de donde arrascar u optimizar, que en general
> python+pyopengl a pelo no chuta lo suficiente para mis necesidades...
He estado mirándolo un poco, y la verdad es que el rendimiento es
verdaderamente pésimo. Buscando por internet cosas sobre pyopengl, me
he encontrado un artículo [1] donde comparaban el rendimiento de perl
y python con opengl (en el que salía perdiendo python), y luego un
comentario del autor de pyopengl explicando por qué en python va todo
tan lento.
De primeras, según lo que dice el tipo este, el asunto es que todas
las instrucciones de pyopengl llaman a la función correspondiente de
C, y luego hacen siempre una llamada a glGetError. Esto solo ya hace
que hagan falta el doble de llamadas a la librería de opengl que las
que harías en un programa en C (aparte que glGetError obliga a
ejecutar todas las instrucciones que están en el buffer de
instrucciones de OpenGL antes de poder ejecutarse, lo que destroza
bastante el sistema que tiene OpenGL de mandar las instrucciones en
bloques grandes, y revienta el rendimiento si lo haces mucho).
Por otro lado, comenta que los vertex arrays (una de las soluciones
que te sugería yo en otros mails) tampoco es que funcione demasiado
rápido, porque pyopengl acaba convirtiendo todos los elementos del
array al formato de C, y eso tarda lo suyo :-S
Me temo que, efectivamente, y a no ser que pruebes a usar display
lists en las partes que puedas, python es demasiado lento para lo que
necesitas, asi que efectivamente tendrás que reimplementar parte en C
o C++. Al final todo este thread no ha servido de mucho, parece :-S
El tema de escribir módulos en C/C++ no tengo demasiada idea, pero
fijo que gente de por aqui sí que sabe :)
Si tienes alguna pregunta de OpenGL en C o lo que sea, pregunta ;)
Por cierto, he flipado en esa página con el benchmark [2] que tienen
entre C y Perl. Resulta que perl es prácticamente igual de rápido que
C en OpenGL :-O No estaría mal que los de pyopengl aprendieran algo de
la gente esta de POGL
Un saludooo.
[1] http://graphcomp.com/pogl.cgi?v=0111s3B2
[2] http://graphcomp.com/pogl.cgi?v=0111s3B1
Más información sobre la lista de distribución eside-ghost