 Bienvenido a... é a memoria tonto. Como dicendo, quando estamos intentando sacar ao máximo partidos das máquinas e nos preocupamos sobre o solo pela CPU, resulta que o acceso a memoria e também a outros sistemas de almiracenamiento, como os discos, son moi importantes. Bueno, unas pocas palavras sobre mi empresa. Continuum Analytics nos dedicamos a temas de análisis de datos e visualización de datos, sobre todo en temas de Big Data, en muchas candidadas de información e sobre todo queremos desarrollar novas maneras de almacenar datos, calcular con ellos e visualizarlos. Também queremos dotar de tecnologías abiertas para a intervención de datos, pero sobre todo en una escala masiva, o que estamos mais interessados e sobre todo ofrecer herramientas de software e nós os estamos haciendo agora mismo. Também formación, consultoría, integración, serviço de integración e consultoría para empresas, gobierno e clientes de todo o mundo. Os quarteles generales están en Austin, en Texas, pero no tenemos oficinas abiertas en todo o mundo e en particular nós os estamos também en España. Bueno, esto é un pouco o que vou tratar en a charla, estamos un pouco en la era del Big Data e vou explicar como enfrentarnos a ella. Después unas pocas palavras sobre Python, nossa empresa gira mucho ao redor de Python e explicaré por que e NumPy é un contenedor de datos para Python, bastante potente. Después me centraré en algo máis básico, máis de bajo nivel, como é o problema de la CPU hambrienta e después acabaré como aplicar todo o que hemos visto, sobre todo o problema de CPU hambrienta para elegir os contenedores de datos adequados para o tema de Big Data. Para introducir o tema de Big Data, no hace falta mucha introducción, simplemente porque aquí as ha discutido bastante en las presentaciones anteriores, pero esta cita eu creo que describí basicamente muy bien o que é o Big Data, por lo menos desde o punto de vista deste ejecutivo de tecnologías de información que dice un viento de datos de streaming, datos sociales e datos non-structurados está llamando a la puerta e estamos empezando a dejá-los entrar e isto empieza a dar un pouco de miedo. Eu creo que a maioria de vosotros, se trabajáis en empresas e seguramente habréis tenido esta especie de sensación onde os datos que estáis acostumbrados a trabajar llegámos non suficientes e tenéis que trabajar con muchos máis datos. Evidentemente o que se nos pide é trabajar con máis datos pero seguramente trabajar con o mesmo recursos. Esto é un problema e, por lo tanto, tenemos que calentarnos la cabeza e mirar a ver como podemos usar é os datos de manera óptima, no estos recursos de manera óptima para sacar o máximo partido do Big Data. Se me pierda a veces, é o meu sensación. Una cosa moi importante que tenemos moi clara en nuestra empresa é que para gestionar grandes cantidades de datos ou para gestionar datos en general, hace falta interactividad. É o de procesar grandes cantidades de datos a través dos sistemas Batch. É muy complicado o sentido de que é difícil extraer información se tens que esperar horas ou dias para que tus trabajos acaben. Então, temos clarísimo que a interacción con os datos é importantísima. E quando hablamos de Big Data, não só é importante a interactividad, sino também as prestaciones. Unir estos dos cosas, novamente, no é fácil o que nosotros intentamos solucionar. Como o femos? Nós somos unha empresa, todos os integrantes de la empresa tenemos mucha experiencia con o tema de Python. Hace muchos años que trabajamos, nós trabajamos en Python e queremos sinceramente que Python como o lenguaje é un key role, a veces non me saen as palabras en inglés, tiene un papel moi importante en o tema de tratamiento de datos. Há un mito que Python, como o lenguaje interpretado que é, se cree, bueno, la gente normalmente piensa que é un lenguaje lento, ¿acuerdo? E, portanto, non é apto para Big Data. Nosotros queremos demostrar que Python tiene acceso a un rango, a unha variedad de librerías enormemente grande e se pueden usar para acceder aos datos de manera muy eficiente e mucho máis lejos de lo que esperamos. Sólo para abrir un pouco de boca os voy a enseñar un entorno de programación. La letra está pequeña, la veis? A ver, la ampliaré un pouco. Así mejor. Bueno, é un entorno, é o lenguaje Python, é un entorno que está na navegadora e o que permite é usando o lenguaje Python para hacer diferentes coxas. Por exemplo, vamos, unha cosa muy sencilla que vamos aprovar e importamos unha librería que se llaman un P. Cuentos de vosotros habéis ouvido hablar de Python? Cuántos os usáis diariamente en vuestro trabajo? Vale, menos. Pero bueno, hay gente que lo usa. Está bien. Importamos, por exemplo, en un Python, que é a librería, el plot que pasa? Ah, pues sí, sí. Gracias. Bueno, aquí o que vamos hacer é crear un vector de 10 millones de elementos, por exemplo, aquí. O que queremos, basicamente, é calcular un polinomio, una cosa muy sencillita, pero para que os deis cuenta que en Python realmente se pode hacer en muy poco código, e, además, bastante legible. É o número de puntos e é a función de numpy que permite crear unha serie de puntos uniformemente espaciados en el eje x. Lo hacemos, já hemos acabado e vamos aquí e, simplemente, para calcular o polinomio ponemos a espición do polinomio tal cual aqui, con x, que ya é o vector que hemos creado, digamos, e el hemos ejecutado, de acuerdo? Então, se queremos ver o contenido de eso, podemos aquí imprimir e, aquí está a array resultante. É o polinomio ya calculado, de acuerdo? Este entorno, además, isto é o Ipython Notebook para los que trabaja nomamente con Python é muy potente e, además, podemos hacer cálculos de tiempo, por exemplo, con o Keyword mágico de time e, por exemplo, aqui nos dá, pues, o tempo que tarda isto en ejecutarse, vale? Después, diríamos, pues, bueno, queremos também ver un hacemos un plot a ver como se ve esto de acuerdo? Como se ve o polinomio e, aquí, tenemos unha representación de como se ve o polinomio todo esto de manera interactiva de acuerdo? Aqui nos ha costado un pouco o plot então podemos dizer, pues, bueno, no queremos digamos representar 10 millones de puntos pues, decimos, sólo queremos representar cada 1000 puntos, por exemplo pues, eso se hace así e, ahora, pues digamos, se ha representado a salir mucho má rápido o plot pero, mucho má digamos, e no nos hace falta tanta resolución, de acuerdo? Por ejemplo, decimos, pues, bueno, que pasaria se camiamos os parámetros aqui? Una cosa que un analista de datos, ao mojo, hace mucho vale? Recalculamos outra vez e hacemos o plot aquí e vemos como el gráfico evidentemente cambia de acuerdo? Digamos, esto es un un ejemplo muy sencillo pero, bueno, lo que quiero decir es que Python viene muy bien para hacerse todo este tipo de manipulación, digamos, interactiva e, además, lo pode hacer muy rápido las librerías que he usado aquí, que son NumPy e Matplotlib, están hechas en C de acuerdo? Python es simplemente el lenguaje a través del cual se llaman estas librerías. Bueno, durante mi charla voy a hablar, también, un pouco de otras librerías. Bueno, en Python NumPy es el, digamos, Alexander de facto como conténor de datos, de acuerdo? NumPy es una librería realmente muy bien diseñada e muy eficiente, de acuerdo? Tantos así que se ha convertido, digamos, en en el, en la base alrededor del cual se ha construido un ecosistema muy muy variado donde existen paquetes para hacer prácticamente de todo, digamos, sin dejar el entorno de Python, de acuerdo? Por ejemplo, hay paquetes para hacer machine learning, like it's learned en torno de desarrollo muy potentes como o Spider, SciPy que es un paquete grande de librerías matemáticas plots en tres dimensiones muy potente, también pandas, que es un es un sistema emergente para gestionar o para analizar datos series temporales de datos, es muy potente en definitiva todo un serie de paquetes que permiten hacer realmente cosas muy potentes del propio lenguaje La manera de operar con un Python, es muy sencilla y tenemos un ejemplo de un contenedor en tres dimensiones, por exemplo de datos, y bueno, podemos a través de la indexación de esta parte de aquí da RAI, da RAI 2 e 1, 1, 5 tal, podemos seleccionar partes, la parte que nos interesa da la información, de acuerdo? Sua información, noa mente, lo que se hace es devolver vistas, nos hacen copias es muy importante esto, una copia sempre carísima en memoria Permite a cien também a hacer operaciones acceder a las librerías de algebra lineal, optimizada e mucho más pero evidentemente nada es perfecto e un Python también tiene sus limitaciones, da acuerdo? Entonces, por ejemplo una de las cosas, es que cuando está valuando operaciones con a RAI lo que tiene que hacer es seguir el orden que le dicta Python, vale? E esto genera problemas como vamos a ver después, problemas de prestaciones e después también tampoco tiene soporte directo para multiprocesoadores a menos que se linque con una librería optimizada de algebra lineal Mumexpress es un paquete que está diseñado para, digamos mejorar o evitar las limitaciones de NumPy Básicamente es una máquina virtual que se encarga de evaluar expresiones e lo que haces acelerar los computos, básicamente haciendo un uso máis eficiente da memoria, vale? Problema, muchas veces no es la CPU sino como se usa la memoria e también tiene soporte de multígilos, que está activo por defecto então, se tenéis máquinas con diferentes cores esto lo pode hacer Por exemplo seguimos con o polinomio que teníamos ahí hemos visto que a ejecución en NumPy cuesta un segundo más o menos e usando NumExp digamos o que le pasamos es a expresión como una cadena e ela acompila internamente en tiempo real e después la ejecuta la convierte en código máquina la máquina virtual la ejecuta de un segundo ha pasado a cero dos segundos, vale? Cuatro veces más e después outra cosa que podemos hacer es el polinomio en NumPy que pasaria se le ejecutamos en esta versión esto se llama factorizar en lugar de hacerlo con el original se factorizamos vemos que en lugar de tratar un segundo conseguimos optimizar pero, outra vez con NumExp tenemos también que continuar siendo bastante más rápido que con NumPy bueno pues digamos que aquí está la representación de los tiempos en una determinada máquina esta es la versión original del polinomio e esta es la versión factorizada se vemos en esta versión NumExp puede llegar a ser 10 veces que en NumPy e en esta menos então estamos interesados en saber porque de estas diferencias bueno, la primera diferencia se explica fácilmente aquí tenemos la versión original del polinomio e lo que hacen NumExp es que se da cuenta que los exponentes de las x son enteros e un entero e esa operación de x al cubo se puede representar como x por x por x evaluar x al cubo es mucho más lento, mucho más costoso que x por x por x porque por defecto no puede entender que 3 es un entero entonces tiene que usar la función pol del sistema para evaluar esa expresión e eso cuesta muchos títulos de reloj NumExp optimiza eso esa es a primera optimización pero sin embargo aquí ya no hay exponenciaciones aquí simplemente hay multiplicaciones puras entonces porque se os dos usan un solo core para que nós digamos NumExp que por defecto usa un core solo porque NumExp continua siendo más rápido neste caso un factor 3 más rápido se están ejecutando cosas en C e además con el mismo número de operaciones bueno para responder esta pergunta pues tengo que hacer un interludio e hablar lo que es el problema de la CPU hambrienta unha vez os describo al problema creo que podés entender mejor porque funciona má rápido NumExp la cita para que me refriantes y que ha e que le da título a la charla es de Richard Sykes en su artículo it's the memory stupid 1996 Richard Sykes es el padre de muchos microprocesadores en particular del alfa que se empezó a hacer sobre os años 90 e el ya sabe cuenta que en toda la industria los chips podés ejecutar código mucho má rápido de lo que se podés alimentar a las CPUs con memoria, con código e con datos entonces el vio que tenhamos sentido continuar aumentando a velocidad de las CPUs se nos aumentaba igualmente a velocidad con la que se podés poner datos en a propia CPU para verlo con un pouco má de perspectiva aquí tenemos un gráfico que nos muesta la evolución en rojo está o en naranja el incremento de velocidad en la memoria con los años del 82 al 2007 que tengo que actualizarla porque ya está un pouco obsoleta e en verde está como está se está incrementando la velocidad de las CPUs en los años 80 e hasta el 90 más o menos, hasta el año 90 las velocidades están bastante comparables es o que significa que cuando a CPU queria un dato simplemente lo tenhé que pedir al sistema de memoria e el sistema de memoria se lo daba instantanemente no tenhé que esperar para que el sistema de memoria redicalmente conforme pasaban os años cada vez la distancia entre las dos línguas es maior e ahora nos encontramos que las CPUs están paradas na maior parte do tiempo no tenemos que preocupar nos demasiado para a velocidad de las CPUs sino como darles datos a las CPUs e esto para o tema de big data es muy importante o problema está en gordo ahora mismo que a gente no sólo publica entonces uno dos libros que me ha llamado Atención, que se ha publicado hace 3 años es el sistema de memoria no lo podes evitar e no lo podes ignorar e tampo que lo podes dissimular es un problema gordo, está ahí e hay que dar resolución e se queremos que nuestras aplicaciones funcionen rápidas lo tenhemos que tener en cuenta ahora mismo el status de este problema al dia de hoy es que la atencia de memoria es mucho má lenta que los procesadores en un factor 250 a 500 o se quando un procesador pide un dato a la memoria tarda entre 250 e 500 ciclos tiene que esperar para que llegue el ancho de banda de memoria está mejando un nivel mejor pero también continua siendo má lento que los procesadores particular cuando se están enviando ráfagas de datos a la CPU nuevamente van má lentos entre 30 e 100 veces má lentos en llegar a la CPU de acuerdo sin embargo, los vendedores de CPU cada vez nos dicen que están metiendo má cores van a máis frecuencia muchas veces perdemos un pouco la visión e muchas veces los cores no nos dan realmente máis máis velocidad a menos que hagamos algo para que los procesadores puedan gestionar máis esta información mucho mejor bueno, los fabricantes han dado cuenta esto desde hace mucho tiempo evidentemente e lo que han empezado a implementar son los cachés en las CPUs realmente, una caché funcione básicamente de forma muy similar a la memoria principal de un ordenador pero tiene unas latencias unidos anchos de banda significativamente superiores sin embargo evidentemente quanto má rápido van tienen que ser máis pequeñas e eso básicamente es por un factor un problema de dissipación de calor se tú quieres hacer funcionar má memoria muy rápida dissipa un calor impresionante afinal, no pueden meter grandes cantidades de memoria dentro dos cachés por estos problemas de dissipación e esto es un pouco la evolución de arquitectura en los sistemas digamos en los años 80 los sistemas eran muy sencillos simplemente había en las CPUs la memoria principal e os discos mecánicos e un programador tampo que tenia que calentarse demasiado a cabezas para sacar el máximo partido la CPU pedía datos la memoria se los dava rápidamente e después se amacenava en el disco en los años en esta década, que estamos ahora mismo tenemos un sistema que tiene 1, 2, 3, 4, 5 e 6 contando os discos de estado sólido como unha jerarquía má en la jerarquía de memoria tenemos 6 niveles de jerarquía de memoria si non diseñamos nuestras aplicaciones para que tengan en cuenta esa jerarquía vamos a tener un problema de eficiencia grande lo que hay que tener en cuenta es las CPUs en que condiciones son má efectivas e básicamente son en dos escenarios el localidad temporal de los datos e después el localidad espacial se acceden de manera secuencial no de manera aleatoria tenemos que intentar sempre que nuestro código siga estas premisas la técnica de bloqueo lo que hace es implementar estas premisas de manera muy sencilla básicamente lo que dice la técnica de bloqueo es que tenemos que hacer unha operación entre os arrays A y B lo que se hace es dividir los conjuntos de datos en A y en B en trozos en diferentes bloques que se llaman estes bloques se transmiten bloques que son secuenciales por eso estamos el bloque tiene que ser contigo se transmiten en la caché en la caché se opera con ellos lo máximo posible una vez que os datos están en la caché evidentemente para saquer el máximo partido dos cachés e unha vez que tiene unha resultado final ya decimos, vale, pues ya hemos acabado con el e depositamos el bloque en la memoria en la área de memoria donde tiene que ir al final esta técnica es muy sencilla e cualquiera que esté desarrollando os puede usarla e verá, incrementa os emprestaciones bastante importantes bueno y ahora con esa introducción o este paréntesis que he hecho un poco de bajo nivel creo que ya podemos entender el por qué digamos, la librería NumEx puede ser tres veces más rápida que NumPy, cuándo los dos están haciendo exactamente las mismas operaciones e lo hacen desde C esta es la manera que tiene NumPy para ejecutar por ejemplo unha operación muy sencilla que es A por B más C tenemos los arrays A y B que están en memoria NumPy lo que hace es, primero calcula A por B e lo dejan un temporal si los arrays son muy grandes esos dos temporales no acaban en caché se tiene que mover a memoria una vez este temporal e este calculado se coge este temporal e el C e se hace la suma que queda para calcular el resultado definitivo todo este trasiego es muy costoso en tiempos reales porque el acceso a memoria es muy lento que es lo que hace NumEx NumEx lo que hace es aplicar a técnica de bloqueo divide los arrays, os dividem bloques transmite los bloques a la caché hace todas as operaciones en caché sin moverlas a memoria en un momento e quando ha acabado con un bloque no mueve al sitio definitivo que es lo que hemos evitado hemos evitado la creación de temporales completamente a memoria esta técnica tan sencilla é responsable de que tengamos estos incrementos de tiempo então é muy importante que o acceso a memoria é un dos factores claves e quando digo memoria digo todo o stack de toda a jerarquía de memoria incluindo os discos é muy importante a hora diseñar aplicaciones eficientes más que muy importante é fundamental nosa empresa estamos trabajando con una librería que se llama Namba que va mucho más allá de NumEx NumEx también tiene sus limitaciones como todo e basicamente as limitaciones é que só lo pode trabajar con elementos que pertenecen a la misma fila basicamente só lo pode gestionar índices en estos computaciones que sean ao mesmo sei lá aí, aqui en este bucle no pode cambiar por exemplo, ésto no se pode ejecutar con NumEx no acuerdo nosa empresa o que hemos hecho é hacer un outra librería que supera que mejora o que va bueno elimina estas limitaciones de NumEx e basicamente é outro jeet é un just in time compiler o que pasa é que pode traducir un subconjunto de paizo máis grande do que pode traducir NumEx e o traduce a un código intermedio o código intermedio é código de LVM não sei se hay gente de aqui que lo conoce o proyecto é una infraestrutura é un compilador para demás viene con a máquina virtual então é o código máquina se pode ejecutar na máquina virtual e essa máquina virtual é má eficiente e o resultado é que esta librería pode obtener unas prestaciones muy parecidas a NumEx pero con mucho muy parecidas ou mejores pero con má flexibilidad aqui describo un pouco como funciona se coja unha función em Python se escribe agora vemos un ejemplo se pasa a unha interface LVM que usa toda a infraestrutura de LVM para generar código que se cutan eficiente para diferentes plataformas plataformas hardware pode funcionar con diferentes fabricantes en particular con las CPUs típicas toda a vida de Intel o tambien con GPUs e todo eso se pode hacer des de Python que é bastante innovador vendo unha función Python correr a velocidades de C en plataformas Intel o en plataformas de GPUs porque tambien se pode ejecutar en tarjetas gráficas aqui hay un ejemplo de como funciona namba é unha función en Python e basicamente para usar namba é tan sencillo como decorarla é un decorador en Python e basicamente o que decimos é os parámetros de cálculo en este caso de poly de que tipo son e la dimensión este caso só tiene unha dimensión con esta información adicional isto se lea maltipado digamos namba pude compilar esto e genera o lvm que se pebe de ejecutar de manera moe eficiente vamos hacerlo en nuestro ejemplo aqui está ejecutamos esto ahora mismo ya lo ha compilado la compilación é casi inmediata e isto é la ejecución veamos aqui que a ejecución ha tardado 0,12 segundos quando antes estávamos tardando con numexpr 0,18 segundos isto é casi velocidade este é prácticamente velocidade c c puro non se pode llegar a velocidades mejores que é aqui hay unha tabla má o menos definitiva onde se ve namba comparado con numexpr para os tipos do polynomial 1 e para o tipo 2 que é o factorizado e isto está compilado en c e además paralizado aqui hay un ejemplo en c puro e paralizado para el ejemplo optimizado vemos que numba tarda básicamente lo mismo que la versión en c e aunque esta a funcione o hemos hecho directamente en python imaginaros a velocidade de desarrollo que permite esto quando estáis desarrollando aplicaciones novas en lugar de hacerlo en c que hay un paso de compilación intermedio desarrollarlo en python e con a convicción de o que estáis haciendo va a correr a velocidades muy rápidas en a c pu e isto para un análise de datos é muy importante también sobretodo con temas de big data neste caso o tiempo de compilación para a funcione são 0,02 segundos pero tampoco é demasiado comparado con o que tarda a funcione en ejecutarse bueno pues éstos numba numba é código python que pode alcanzar a velocidade de c pero sin programar en c parece magia, pero no lo é e sobretodo o que é importante é que no perdemos la interactividad hace pouco nuestro sí e eu se falta un pouco de luz pero bueno aqui está Travis Hollifant autor de NumPy isto é o supercomputing meeting of supercomputing que esteño ha sido en estados unidos en Utah e estos é o stand que teníamos allí e o estava Travis explicando como poder usar GPUs con código python que a gente nadie se esperaba que se podia hacer todo o agente que vai allí son expertos superespertos em c python era o lenguaje que estava excluido nós queremos cambiar éso e realmente esta é outra perspectiva da charla a gente estava curiosa como pode ser que python pode hacer éso tipo de cosas pois sí e isto é unha muestra má do que queremos hacer na nossa empresa quanto tempo? 5 minutos? bueno e agora nos 5 minutos que me quedan quero un pouco explicar como pensamos aplicar todo esto que he dicho a los novos contenedores para big data que estamos pensando en implementar e que dentro de muy pouco tendréis versiones open source para jugar con éxitos se alguien tiene interés evidentemente muchas veces obviamos una necesidad de un buen contenedor porque creemos que para gestionar o big data é falso dependiendo de como almacenas a información tú podes conseguir mejores velociades mejores ou peores velociades então digamos en continuum estamos muy interesados en encontrar estructuras de datos óptimas para alcanzar velociades críticas nos grandes cantidades o velociades de proceso altas en estos grandes contenedores de acuerdo? numpy por exemplo non es un buen contenedor para big data porque por exemplo un big data muchas veces lo queremos es la operación de append queremos añadir información nuevamente en numpy o que se hace es cuando está el array en memoria e se quire outro contenedor con la suma de los dos o que se hace es copiar el contenedor anterior a un novar de memoria e en ese momento se copia se reserva un área un pouco más grande e se hace la copia esto realmente como hemos visto la operación de copy memoria es carísima esto non es bueno o que estamos pensando en hacer es para no siguiente producto que se llamará blaze es implementar contenedores que están discontiguos en memoria esto que ventajada en lugar de que ser un bloque de memoria todo contigo es diferentes bloques pequeños que simulan el array total esto o gran ventaja que tiene es que non requiere copias de acuerdo? porque quando queremos añadir estos datos aquí al contenedor los trozos anteriores se quedan igual e o que vamos hacer es comprimir digamos o trozo que existía que queremos añadir a un novo trozo e este novo trozo va formar parte del contenedor de acuerdo? esto va ser muy importante e queremos que va tener mucha repercusión en la velocidad de los contenedores he dicho que a información va estar comprimida porque queremos comprimir primero porque comprimiendo se hace un mejor uso de memoria puedes meter más datos pero segundo porque estamos convencidos que se las CPUs son tan rápidas a lo mismo porque no vamos a tener la información comprimida en memoria en lugar de tenerla sin comprimir bajarla a las cachés descoprimir a las cachés e una vez tan descoprimidas actuar sobre ella en lugar de transmitir todo o trozo grande que funciona con él esos dos tiempos bajarlo un trozo máis pequeño e descoprimirlo creemos que pode ser má rápido que tener que bajar o trozo grande a la compresión para nosotras pode tener éxos dos ventajas isto no es cintar ficción e por exemplo usando Bloch que é o compressor que hemos desarrollado en Continuum e por exemplo para o tema de genómica y hay gente que lo está usando para acelerar el acceso a los apasos de datos de genoma humano aquí nos damos cuenta não vou entrar en detalles porque não temos tempo pero aquí está a velocidade de copia memoria esta é a raia de puntos usando compresión estamos consiguendo velocidades de acceso a memoria mucho má rápidas parece un contrasentido obviamente dependendo do tamanho do Bloch e de unas séries de parámetros podemos conseguir unas velocidades ootras pero digamos o factor fundamental, a coisa a recordar é que a compresión no sólo para consumir menos memoria sino para acelerar má rápido o acceso a memoria isto é o e aquí estará como os dedos evidentemente os contenidos não estarán em memoria e o que vamos hacer é usar todo o processo de bloqueo para trabajar sempre por bloques para optimizarlo e os bloques sempre estarán comprimidos então estes bloques o sistema operativo se va a encargar de dejarlos comprimidos também en un minuto e depois podemos usar as maquinas virtuales que tenemos em particular non va para poder trabajar con eles e este é o último mensaje que irei transmitir por hoy que os grandes cantidades de información são muy difíciles de manejar evidentemente então temos que mirar muy bien que contenedores son os óptimos para os nossos datos e perder un pouco de tempo para ver qual son os melhores contenedores que ao final nos va ser bastante produtivo a largo plaz ou a medio plaz simplemente decir que as ideias básicas en mi charla que paizón queremos que é un lenguaje perfecto ou casi perfecto para o tema de big data perfecto e nada agora mismo continuamos sino todos vosotros tenemos que ser muy conscientes del problema del acceso a memoria para obtener velocidades buenas de proceso e também pois que elegir os contenedores de datos apropiados é muy importante para todo o tema de procesos de big data e bueno, vou acabar con una cita que ida hace unha hora con a apresentación de Oscar de Bustos de o representante de Bool eu ida un pouco rápido mas eu gosto da cita e eu creo que é bastante apropiada para o que acaba de explicar o éxito do big data o conseguirem aquellos desenvoledores que sén capaces de mirar más allá do estándar e sén capaces de entender os recursos hardware subyecentes e a variedad de algoritmos disponibles eu acho que é realmente o core do big data aunque ele decía também do HPC do big data de mi opinión e se hay alguna pregunta hay alguna pregunta hola, buenas tardes eu intento trabajar e visto que o nosso NUNPA NUNPA va sobre una máquina virtual que eu não conhecia e que trabaja sobre OPCL, CUDA LWM, sim eu intento hacer trabajos en Python sobre GPUs e sempre me encuentro con o problema de que ao final tenho que hacer o core que se vai ejecutar en GPUs eu tenho que hacer en C é o problema como os solucionáis se os encontrados por que o que é o lema que usa bastante eu uso Python o que eu diria o kernel que tenho que subir a GPU eu tenho que hacerlo en C é o que está haciendo automáticamente e iva a dizer o está haciendo ya agora eu mismo iva en una versión Open Source de NUNPA e essa versión no genera código para GPUs automáticamente só para GPUs pero en un año vista vamos a liberar la versión de GPUs também va ser Open Source muchas gracias eu queria preguntar se está trabajando en algo en multicore porque o Python tiene o problema de que é monocore não é monocore não é monocore e claro nós estávamos pensando en lenguajas tipo escala ou outros habéis visto alguna solución para romperse é muito intersante a tu pergunta e de hecho eu tento responder como tampoco tempo eu não posso deixar os librerías de NUMEXP e NUMBA as dos soporta multicores por exemplo NUMEXP coge todos os cores que detecta no sistema e os usa automáticamente a menos que tu le digas não quero usarlos todos porque por um motivo quer reservar outros para outras cosas e úsame só esta selección ou seja NUMEXP o GUIL só actúa a nivel de a ejecución do código Python todo isto que estábamos hablando são librerías en C que están por baixo e esses librerías de C não estão sujetas nas imitaciones do GUIL e de hecho já se soporta eu não te conto eu tinha gráficas que os mostraram mas eu posso... nós podemos hablar depois moltes gracias francés