Optimización de software

La optimización de software es el proceso de modificación de un software para hacer que algún aspecto del mismo funcione de manera más eficiente y/o utilizar menos recursos (mayor rendimiento). En general, un programa puede ser optimizado para que se ejecute más rápidamente, o sea capaz de operar con menos memoria u otros recursos, o consuman menos energía.[1]

General

La palabra "optimización", comparte la misma raíz que "óptimo", es raro que el proceso de optimización produzca un sistema verdaderamente óptimo. El sistema optimizado típicamente sólo será óptimo en una aplicación o para una audiencia. Se podría reducir la cantidad de tiempo que un programa se toma para realizar alguna tarea logrando que consuma más memoria. En una aplicación donde el espacio de la memoria es un bien escaso, se podría elegir un algoritmo más lento con el fin de utilizar menos memoria. A menudo no existe una solución de diseño que funcione bien en todos los casos, en estos casos los ingenieros de trades-offs para optimizar los atributos de mayor interés. Además, el esfuerzo que se requiere para hacer una pieza de software completamente óptima —incapaz de cualquier mejora adicional— es casi siempre más de lo razonable que los beneficios que brinda, de modo que el proceso de optimización puede ser detenido antes de que una solución óptima ha sido completamente alcanzado.

Trade-Offs

La optimización general se centra en la mejora de uno o dos aspectos del rendimiento: el tiempo de ejecución, uso de memoria, espacio en disco, ancho de banda, el consumo de energía o algún otro recurso. Para ello se requiere un trade-off, donde uno de los factores se optimiza a expensas de los demás. Por ejemplo, aumentar el tamaño de caché mejora el rendimiento del tiempo de ejecución, aunque también aumenta el consumo de memoria. Otras ventajas y desventajas comunes incluyen la claridad del código y la concisión.

Hay casos en que el programador que realiza la optimización debe decidir hacer mejor el software para algunas operaciones pero con esto, logrará hacer otras operaciones menos eficientes. Estas compensaciones pueden ser a veces de carácter no técnico - como cuando un competidor publica un resultado de referencia que debe ser batido con el fin de mejorar el éxito comercial, pero esta característica logra que el software sea menos eficiente. Tales cambios son a veces burlonamente llamado "pessimizations".[2]

En algunos casos, un fragmento de código puede ser tan optimizado como para ser de forma no intencional ofuscado. Esto puede conducir a dificultades en el mantenimiento del código.

Cuellos de botella

La optimización puede incluir buscar cuellos de botellas, una parte crítica de código que es la principal consumidora de los recursos necesarios, a veces conocida como hot-spot.

En ciencias de la computación el principio de Pareto se puede aplicar a la optimización de recursos observando que el 80% de los recursos son típicamente usados por el 20% de las operaciones en promedio. En ingeniería de software es a menudo una mejor aproximación decir que el 90% del tiempo de ejecución de un programa se gasta en ejecutar el 10% del código (conocido como la ley 90/10 en este contexto).

En algunos casos, agregar más memoria puede ayudar a hacer que un programa se ejecute más rápido. Por ejemplo un programa de filtrado leerá comúnmente cada línea, la filtrará y mostrará esa línea inmediatamente. Esto solo usa suficiente memoria para una línea, pero el rendimiento es típicamente muy pobre. El rendimiento se puede mejorar leyendo un archivo completo y luego escribir los datos filtrados, pero usa más memoria. Escribir en caché los resultados es similarmente efectivo y también requiere más uso de memoria.

Niveles de optimización

La optimización puede ocurrir en una serie de niveles:

  • Nivel de diseño: En el nivel más alto, el diseño puede ser optimizado para aprovechar al máximo los recursos disponibles. La implementación de un proyecto se beneficiará de una buena selección de algoritmos eficientes y la aplicación de estos algoritmos se beneficiarán de la escritura de código de buena calidad. El diseño arquitectónico de un sistema mayoritariamente afecta a su rendimiento. La elección del algoritmo afecta la eficiencia más que cualquier otro elemento del diseño y, desde que la elección del algoritmo suele ser lo primero que hay que decidir, los argumentos en contra de la "optimización prematura" temprana pueden ser difíciles de justificar.
  • Nivel de código fuente: Evitar la codificación de mala calidad también puede mejorar el rendimiento, evitando ralentizaciones obvias. Después de eso, sin embargo, algunas optimizaciones pueden disminuir el mantenimiento. Algunas optimizaciones en la actualidad se pueden realizar por los compiladores optimizadores.
  • Nivel de armado: Entre el código y el nivel de compilación, directivas y flags pueden ser usados para ajustar las opciones de rendimiento en el código fuente y el compilador respectivamente, como el uso del preprocesador para desactivar características innecesarias de software, o la optimización de los modelos de procesadores específicos o capacidades de hardware.
  • Nivel de compilación: El uso de un compilador optimizador tiende a asegurar que el programa ejecutable se optimiza por lo menos tanto como el compilador puede predecir.
  • Nivel ensamblador: En el nivel más bajo, la escritura de código utilizando lenguaje ensamblador, diseñado para una plataforma de hardware particular, pueden producir el código más eficiente y compacta si el programador se aprovecha de todo el repertorio de instrucciones de la máquina.
  • Tiempo de ejecución: Los compiladores just-in- time y los programadores de ensamblador pueden ser capaz de realizar la optimización en tiempo de ejecución excediendo la capacidad de los compiladores estáticos, ajustando dinámicamente los parámetros de acuerdo con la entrada actual u otros factores.

Optimizaciones en dependencia e independencia de la plataforma

La optimización de código se puede clasificar en términos generales como técnicas dependientes de la plataforma e independientes de la plataforma. Si bien estos últimos son eficaces en la mayoría o todas las plataformas, las técnicas dependientes de la plataforma utilizan propiedades específicas de una plataforma, o se basan en parámetros en función de la plataforma única o incluso en el procesador. Escribir o producir diferentes versiones del mismo código para diferentes procesadores por lo tanto, podría ser necesaria. Por ejemplo, en el caso de la optimización a nivel de compilación, las técnicas independientes de la plataforma son técnicas genéricas (tales como el desarme de ciclos, la reducción en las llamadas a función, las rutinas eficiente de la memoria, reducción en las condiciones, etc), eso impacta en la arquitectura de CPU en una similar manera. Generalmente, estos sirven para reducir la longitud total del instruction path length necesario para completar el programa y/o reducir el uso total de memoria durante el proceso. Por otra parte, las técnicas dependientes de la plataforma implican la planificación de instrucciones, el paralelismo a nivel de instrucción, paralelismo a nivel de datos, las técnicas de optimización de memoria caché (es decir, parámetros que difieren entre las distintas plataformas) y la planificación de instrucciones óptima puede ser diferente incluso en diferentes procesadores de la misma arquitectura.

Diferentes algoritmos

Las tareas de cálculo se puede realizar de varias formas diferentes con diferentes eficiencia. Por ejemplo, considere el siguiente fragmento de código en C cuya intención es obtener la suma de todos los números enteros de 1 a N:

int i, sum = 0;
for (i = 1; i <= N; ++i) {
  sum += i;
}
printf("sum: %d\n", sum);

Este código puede (suponiendo que no hay desbordamiento aritmético) ser reescrito utilizando una fórmula matemática como:

int sum = N * (1 + N) / 2;
printf("sum: %d\n", sum);

La optimización, a veces se realiza automáticamente por un compilador de optimización, es seleccionar un método (algoritmo) que sea computacionalmente más eficiente, manteniendo la misma funcionalidad. Sin embargo, una mejora significativa en el rendimiento a menudo se puede lograr mediante la eliminación de alguna funcionalidad extraña.

La optimización no siempre es un proceso obvio ni evidente. En el ejemplo anterior, la optimización en realidad puede ser más lenta que la versión original si N fuera suficientemente pequeño y el hardware en particular pasa a ser mucho más rápido en la realización de operaciones de suma y de bucle de multiplicación y división.

Macros

La optimización durante el desarrollo de código usando macros toma formas diferentes en diferentes lenguajes.

En algunos lenguajes procedurales, tales como C, las macros se implementan mediante la sustitución de palabras. Hoy en día, las funciones inline se pueden utilizar como una alternativa de tipo seguro en muchos casos. En ambos casos, se puede invertir más tiempo de compilación en el cuerpo de la función inline para llevar a cabo las optimizaciones del compilador, incluyendo plegamiento de constantes, que puede mover algunos cálculos a tiempo de compilación.

En muchos lenguajes de programación funcionales las macros se implementan utilizando sustitución en tiempo de parseado durante el parseo del árbol de sintaxis abstracta , la cual se afirma que los hace más seguros de usar. Dado que en muchos casos la interpretación se utiliza, que es una manera de asegurarse de que tales cálculos sólo se realizan en tiempo de análisis, y a veces la única manera.

Lisp originó este estilo de macros y estos son a menudo llamados "Lisp-like macros". Un efecto similar puede conseguirse mediante el uso de las plantillas de metaprogramación en C++.

En ambos casos, el trabajo se hace en tiempo de compilación. La diferencia entre las macros de C, por un lado, y macros Lisp y plantilla de metaprogramación de C++ por otro lado, es que las últimas herramientas permiten realizar cálculos arbitrarios en tiempo de compilación/tiempo de parseo, mientras que la expansión de las macros de C no realiza ninguna computación, y se basa en la capacidad del optimizador para llevarla a cabo. Además, las macros de C no apoyan directamente la recursión o iteración, por lo que no son turing completo.

Como con cualquier optimización, sin embargo, a menudo es difícil predecir dónde las herramientas de este tipo tienen el mayor impacto antes de que el proyecto este completo.

Optimización automática y manual

La optimización puede ser automatizada por compiladores o realizadas por los programadores. Las ganancias se limitan generalmente para la optimización local, y mayor para las optimizaciones globales. Por lo general, la optimización más potente es encontrar un algoritmo superior.

La optimización de un sistema en su conjunto se suele realizar por los programadores, ya que es demasiado complejo para los optimizadores automatizados. En esta situación, los programadores o administradores del sistema explícitamente cambian el código de manera que el sistema en general tenga un mejor rendimiento. Aunque se puede producir una mayor eficacia, es mucho más caro que las optimizaciones automatizados.

Se suelen utilizar profilers para encontrar las secciones del programa que está tomando la mayor cantidad de recursos - el cuello de botella. Ocasionalmente se puede creer en dónde está el cuello de botella, pero esta intuición no siempre es correcta. La optimización de una pieza insignificante de código suele hacer poco para ayudar al rendimiento general.

Cuando el cuello de botella es localizado, la optimización general comienza con un replanteamiento del algoritmo utilizado en el programa. A menudo, un algoritmo particular se puede adaptar específicamente a un problema particular, para proporcionar un mejor rendimiento que un algoritmo genérico. Por ejemplo, la tarea de clasificar una gran lista de artículos se realiza normalmente con una rutina quicksort, que es uno de los algoritmos genéricos más eficientes. Pero si alguna característica de los elementos es explotable (por ejemplo, ya están dispuestos en un orden particular), un método diferente se puede utilizar con mejores resultados.

Después de que el programador esté razonablemente seguro de que el mejor algoritmo se selecciona, la optimización de código puede comenzar. Los bucles pueden ser desenrollados (para reducir la sobrecarga, aunque esto a menudo puede conducir a una menor velocidad si se sobrecarga la memoria caché de CPU), usar tipos de datos lo más pequeño posible, la aritmética de enteros puede usarse en lugar de coma flotante, y así sucesivamente.

La optimización a veces tiene el efecto secundario de socavar la legibilidad. Así, las optimizaciones de código deben ser cuidadosamente documentadas (preferentemente con comentarios en línea), y debe evaluarse su efecto sobre el desarrollo futuro.

Cuándo optimizar

La optimización puede reducir la legibilidad y agregar código que se utiliza sólo para mejorar el rendimiento. Esto puede complicar programas o sistemas, lo que hace que sean más difíciles de mantener y depurar. Como resultado, la optimización o el rendimiento a menudo se realiza al final de la etapa de desarrollo. Donald Knuth hizo las siguientes declaraciones sobre la optimización:

"Debemos olvidarnos de las pequeñas eficiencias, por ejemplo, el 97% del tiempo: la optimización prematura es la raíz de todos los males".[3]

(También se atribuyó la cita a Tony Hoare algunos años después,[4]​ aunque esto podría haber sido un error ya que Hoare dice no haber acuñado la frase.[5]​)

"En las disciplinas de ingeniería ya establecidas, una mejoría del 12% fácil de obtener, no se considera marginal y creo que el mismo punto de vista debe prevalecer en la ingeniería de software"[3]

"Optimización prematura" es una frase usada para describir una situación en la que un programador permite consideraciones de rendimiento que afectan al diseño de una pieza de código. Esto puede resultar en un diseño que no es tan limpio como podría haber sido o código que es incorrecto, ya que el código se complica por la optimización y el programador puede llegar a cometer errores a causa de esto.

Al decidir si se debe optimizar una parte específica del programa, la ley de Amdahl debería ser considerada siempre: el impacto sobre el programa en general depende en gran medida de cuánto tiempo se gasta realmente en esa parte específica, que no siempre es claro al considerar el código sin un análisis del rendimiento.[6]

Un mejor enfoque es por lo tanto el diseñar en primer lugar, desde el diseño realizar el código para luego ver qué partes deben ser optimizadas. Un diseño simple y elegante es a menudo más fácil de optimizar en esta etapa, y el profiling puede revelar problemas inesperados de rendimiento que no han sido abordadas por la optimización prematura.

En la práctica, a menudo es necesario para mantener los objetivos de rendimiento en mente durante el diseño de software, pero el programador equilibra los objetivos de diseño y la optimización.

Tiempo que toma optimizar

A veces el tiempo que se tarda en optimizar puede ser en sí mismo un problema.

Optimizar un código existente no agrega nuevas características, y peor, puede llegar a agregar bugs en código que previamente no los tenía. Debido a que la optimización manual a veces hace el código menos claro que el código no optimizado, la optimización puede impactar en la compatibilidad como consecuencia. La optimización tiene un precio y es importante asegurar que invertir en eso será beneficioso.

Un optimizador automático puede en sí ser optimizado, ya sea para mejorar aún más la eficiencia de los programas que produce o bien acelerar su propio funcionamiento. Una compilación realizada con la optimización activada por lo general toma más tiempo, aunque esto suele ser un problema sólo cuando los programas son bastante grandes.

Véase también

Referencias

  1. Robert Sedgewick, Algorithms, 1984, p. 84
  2. «Pessimizations». 
  3. a b Knuth, Donald (diciembre de 1974). «Structured Programming with go to Statements». ACM Journal Computing Surveys. 6 (4): 268. 
  4. The Errors of Tex, in Software—Practice & Experience, Volume 19, Issue 7 (July 1989), pp. 607–685, reprinted in his book Literate Programming (p. 276)
  5. Tony Hoare, a 2004 email
  6. «Principios cuantitativos de diseño de computadoras». Mixteco.utn.mx. 

Enlaces externos

Read other articles:

Badai pasir mendekati Al Asad, Irak, pada 27 April 2005. Badai pasir adalah fenomena meteorologi yang umum di wilayah arid dan semi-arid. Badai pasir antara lain disebabkan oleh meningkatnya kecepatan angin dalam suatu wilayah yang luas. Badai pasir umumnya terjadi pada tanah yang kering. Badai pasir dapat memindahkan keseluruhan bukit pasir dan membawa pasir dalam jumlah besar sehingga tepi badai dapat menyerupai dinding pasir setinggi 1,6 km. Badai pasir di gurun Sahara dalam bahasa se...

 

 

Cet article est une ébauche concernant un homme politique français. Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants. Michel-Claude Pellissier de FéligondeFonctionDéputé du Puy-de-Dôme22 août 1815 - 14 août 1830BiographieNaissance 15 mai 1765Clermont-FerrandDécès 22 février 1853 (à 87 ans)Clermont-FerrandSépulture Cimetière des CarmesNationalité françaiseActivité Homme politiqueFamille Famill...

 

 

Peta menunjukan lokasi Biliran Biliran adalah munisipalitas yang terletak di provinsi Biliran, Filipina. Pada tahun 2000, munisipalitas ini memiliki populasi sebesar 13.817 jiwa atau 2.619 rumah tangga. Pembagian wilayah Biliran terbagi menjadi 11 barangay, yaitu: Bato Burabod Busali Hugpa Julita Canila Pinangumhan San Isidro (Pob.) San Roque (Pob.) Sanggalang Villa Enage (Baras) Pranala luar BiliranIsland.com Philippine Standard Geographic Code Diarsipkan 2012-04-13 di Wayback Machine. 2000 ...

Conférence sur la sécurité et la coopération en Europe Acte final d'Helsinki1er août 1975 Données clés Date 1973 à 1994 Lieu Europe (+ États-Unis et Canada) Cause Renforcement de la sécurité, du respect des droits de l'homme et des échanges Chronologie 3 juillet 1973 Ouverture de la CSCE à Helsinki 1er août 1975 Signature Acte final d'Helsinki juin 1985 Échec de la réunion sur les droits de l'homme septembre 1986 Adoption de mesures de confiance et de sécurité (MDCS) janvie...

 

 

This article is an orphan, as no other articles link to it. Please introduce links to this page from related articles; try the Find link tool for suggestions. (December 2022) Federal Medical Centre, Owerri is a public health care centre located in Owerri city in Imo State, southeastern Nigeria.[1] History In 1903, Federal Medical Centre, Owerri was founded as a colonial dispensary. It was promoted to a District Hospital, then a General Hospital, before finally becoming a federal medic...

 

 

Juan Ramón LucasBorn (1958-11-02) 2 November 1958 (age 65)Madrid, SpainNationalitySpanishOccupationTelevision presenter Juan Ramón Lucas (born November 2, 1958, in Madrid, Spain) is a Spanish TV presenter for Spanish Television. Biography He began his career in 1979 working in Madrid in Radio Juventude Spanish for 'Youth Radio' and the Diario Informaciones. His first contacts with television occurred in 1982, when he joined Spanish Television, to work in the program Informe Semanal, Sp...

Italian painter (1666–1740) Antonio BalestraSelf-portraitBorn(1666-08-12)12 August 1666VeronaDied21 April 1740(1740-04-21) (aged 73)VeronaNationalityItalianKnown forPaintingMovementLate Baroque Theseus discovering his Father's Sword Adoration of Shepherds Antonio Balestra (12 August 1666 – 21 April 1740) was an Italian painter of the Rococo period. Biography Born in Verona, he first apprenticed there with Giovanni Zeffio.[1] By 1690 he moved to Venice, where he worked fo...

 

 

Dutch cavalry charge during the Second Bone War vteDutch colonial campaigns17th century Bantam (1601) Amboina (1605) Malacca (1606) Cape Rachado (1606) Mozambique (1607) Mozambique (1608) Banda Islands (1609–21) Johor (1613) Macau (1622) Pescadores (1622–24) Salvador (1624) Persian Gulf (1625) Salvador (1625) Elmina (1625) Cuba (1628) Batavia (1628–29) Recife (1630) Abrolhos (1631) Liaoluo Bay (1633) Taiwan (1635–36) Brazil (1636) Liuqiu Island (1636) Porto Calvo (1637) Elmina (1637) ...

 

 

Color reproduction capability Not to be confused with L.T.F. Gamut, gambit, gamete, or gauntlet. Look up gamut in Wiktionary, the free dictionary. Typical cathode-ray tube (CRT) gamut The grayed-out horseshoe shape is the entire range of possible chromaticities, displayed in the CIE 1931 chromaticity diagram format (see below). The colored triangle is the gamut available to the sRGB color space typically used in computer monitors; it does not cover the entire space. The corners of the triangl...

1889 United States Senate election in Massachusetts ← 1883 January 15, 1889 1895 → Resolution of legislature needed to win   Nominee George Frisbie Hoar Patrick Collins Party Republican Democratic Senate 32 6 Percentage 84.21% 15.79% House 171 56 Percentage 75.33% 24.67% Senator before election George Frisbie Hoar Republican Elected Senator George Frisbie Hoar Republican The 1889 United States Senate election in Massachusetts was held in January 1889. Incumbent Rep...

 

 

هوليتون   الإحداثيات 38°26′30″N 89°16′27″W / 38.441666666667°N 89.274166666667°W / 38.441666666667; -89.274166666667   [1] تقسيم إداري  البلد الولايات المتحدة[2]  التقسيم الأعلى مقاطعة واشنغطون  خصائص جغرافية  المساحة 0.75 ميل مربع  عدد السكان  عدد السكان 520 (1 أبريل 2020)[3&...

 

 

French political scientist and Arabist (born 1955) Gilles KepelGilles Kepel at Chatham House in 2012Born (1955-06-30) 30 June 1955 (age 68)Paris, FranceNationalityFrenchKnown forPolitical Islam and Arab WorldScientific careerFieldsPolitical science,SociologyInstitutionsParis Institute of Political Studies,Institut Universitaire de France,London School of Economics,New York University,Columbia University,CNRSThesis Le Prophète et le Pharaon  (1984) Websitegilleskepel.weebly.com...

PausRentang fosil: Eosen awal - sekarang Tursiops truncatus Klasifikasi ilmiah Kerajaan: Animalia Filum: Chordata Kelas: Mammalia Subkelas: Eutheria Ordo: Cetacea Paus adalah sejenis mamalia yang hidup di lautan. Meskipun dalam bahasa Indonesia paus sering disebut ikan paus, paus sebenarnya bukanlah tergolong dalam keluarga ikan. Paus balin Paus Sikat Atlantik Utara, Eubalaena glacialis Paus Sikat Pasifik Utara, Eubalaena japonica Paus Sikat Selatan, Eubalaena australis Paus Sirip, Balaenopt...

 

 

Software published only in binary code Not to be confused with Binary large object (BLOB). In the context of free and open-source software, proprietary software only available as a binary executable is referred to as a blob or binary blob. The term usually refers to a device driver module loaded into the kernel of an open-source operating system, and is sometimes also applied to code running outside the kernel, such as system firmware images, microcode updates, or userland programs.[1]...

 

 

Federazione della Sinistra Portavoce Paolo Ferrero(2009-2010) Cesare Salvi(2010) Oliviero Diliberto(2010-2011) Massimo Rossi(2011-2012) Stato Italia Fondazione18 luglio 2009 Dissoluzione24 luglio 2015 IdeologiaComunismoSocialismo del XXI secolo[1] CollocazioneSinistra radicale Gruppo parl. europeoSinistra Unitaria Europea/Sinistra Verde Nordica Seggi massimi Camera0 / 630 Seggi massimi Senato1 / 315 Seggi massimi Europarlamento7 / 73 Sito webwww.federazio...

Virslīga 2017SynotTip Virslīga 2017 Competizione Virslīga Sport Calcio Edizione 43ª Organizzatore LFF Date dal 10 marzo 2017al 4 novembre 2017 Luogo  Lettonia Partecipanti 8 Formula Girone all'italiana Risultati Vincitore Spartaks Jūrmala(2º titolo) Secondo Liepāja Retrocessioni Babīte Statistiche Miglior marcatore Evgenij Kozlov (13) Incontri disputati 84 Gol segnati 200 (2,38 per incontro) Cronologia della competizione 2016 2018 Manuale La Virslīga 2017 è s...

 

 

Part of a series on theCulture of Sweden History Prehistory 800–1521 Kalmar Union 1523–1611 Rise to become Great Power Swedish Empire Great Northern War Age of Liberty Coup of 1756 December Crisis (1768) Revolution of 1772 Gustavian era Coup of 1809 Sweden–Norway union Famine of 1867–1869 Modernization Industrialization World War I World War II timeline 1945–1967 1967–1991 Since 1991 People Languages Mythology and folklore Cuisine Festivals Religion Bahá'í Buddhism Christianity...

 

 

Questa voce o sezione sull'argomento stagioni delle società calcistiche italiane non cita le fonti necessarie o quelle presenti sono insufficienti. Puoi migliorare questa voce aggiungendo citazioni da fonti attendibili secondo le linee guida sull'uso delle fonti. Segui i suggerimenti del progetto di riferimento. Voce principale: Associazione Calcio Chievo Verona. Associazione Calcio ChievoStagione 1986-1987Sport calcio Squadra Chievo Allenatore Carlo De Angelis Presidente Bruno Ga...

Cet article est une ébauche concernant New York. Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants. Garment DistrictNom local (en) Garment DistrictGéographiePays  États-UnisÉtat New YorkCité New YorkArrondissement ManhattanCoordonnées 40° 45′ 13″ N, 73° 59′ 20″ OFonctionnementPatrimonialité Inscrit au NRHP (2008)modifier - modifier le code - modifier Wik...

 

 

Cet article est une ébauche concernant un photographe britannique. Vous pouvez partager vos connaissances en l’améliorant (comment ?). Pour plus d’informations, voyez le projet associé. Storm ThorgersonStorm ThorgersonNaissance 28 février 1944Potters BarDécès 18 avril 2013 (à 69 ans)LondresSépulture Cimetière de HighgatePériode d'activité 1965-2010Nationalité britanniqueActivités Photographe, graphiste, designer, réalisateurFormation Royal College of ArtHills Road...