[eside-ghost] extensiones C/C++ para Python
altern
altern2 en gmail.com
Mie Mayo 7 17:11:46 CEST 2008
Jon Valdés(e)k dio:
> 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).
si, esto ya lo habia leido en otro lado.
> 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
bueno, a mi si pq ahora tengo mas claro por donde cojeo. supongo que a
otros tb les habra servido para enterarse de algo.
> 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 ;)
gracias!
> 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
gracias por tomarte la molestia de mirar esto. Otra opcion que quedaria
puede ser http://www.pyglet.org/
esto es un wrapper a las dll directamente usando Ctypes. Creo que se
puede desactivar el checkeo de errores tipo PyOpenGL y es mas eficiente,
pero tb es mas nuevo, hace un año o asi que esta en marcha. Se supone
que viene a reemplazar a pygame y pyopengl. Tiene muy buena pinta y
hasta ahora no me habia metido con ello por vagueza, pero igual hay que
probarlo a ver si hay alguna diferencia, aunque me temo que la solucion
pasa por C.
> Un saludooo.
>
> [1] http://graphcomp.com/pogl.cgi?v=0111s3B2
> [2] http://graphcomp.com/pogl.cgi?v=0111s3B1
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> eside-ghost mailing list
> eside-ghost en deusto.es
> https://listas.deusto.es/mailman/listinfo/eside-ghost
Más información sobre la lista de distribución eside-ghost