Skip to main content

Abstract

Genetic programming (GP) can dramatically increase computer programs’ performance. It can automatically port or refactor legacy code written by domain experts and specialist software engineers. After reviewing SBSE research on evolving software we describe an open source parallel StereoCamera image processing application in which GI optimisation gave a seven fold speedup on nVidia Tesla GPU hardware not even imagined when the original state-of-the-art CUDA GPGPU C++ code was written.

This is a preview of subscription content, log in via an institution to check access.

Access this chapter

Chapter
USD 29.95
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever
eBook
USD 129.00
Price excludes VAT (USA)
  • Available as EPUB and PDF
  • Read on any device
  • Instant download
  • Own it forever
Softcover Book
USD 169.99
Price excludes VAT (USA)
  • Compact, lightweight edition
  • Dispatched in 3 to 5 business days
  • Free shipping worldwide - see info
Hardcover Book
USD 169.99
Price excludes VAT (USA)
  • Durable hardcover edition
  • Dispatched in 3 to 5 business days
  • Free shipping worldwide - see info

Tax calculation will be finalised at checkout

Purchases are for personal use only

Institutional subscriptions

Notes

  1. 1.

    Genetic programming bibliography http://www.cs.bham.ac.uk/˜wbl/biblio/ gives details of more than nine thousand articles, papers, books, etc.

  2. 2.

    Human-competitive results presented at the annual GECCO conference http://www.genetic-programming.org/combined.php.

  3. 3.

    Later work used even fewer tests.

  4. 4.

    http://research.microsoft.com/en-us/um/people/antcrim/data_i2i/i2idatabase.zip.

References

  • Thomas Ackling, Bradley Alexander, and Ian Grunert. Evolving patches for software repair. In Natalio Krasnogor et al., editors, GECCO ’11: Proceedings of the 13th annual conference on Genetic and evolutionary computation, pages 1427–1434, Dublin, Ireland, 12-16 July 2011. ACM.

    Google Scholar 

  • Stephen F. Altschul, Thomas L. Madden, Alejandro A. Schaffer, Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman. Gapped BLAST and PSI-BLAST a new generation of protein database search programs. Nucleic Acids Research, 25(17):3389–3402, 1997.

    Article  Google Scholar 

  • Yiannis Andreopoulos. Error tolerant multimedia stream processing: There’s plenty of room at the top (of the system stack). IEEE Transactions on Multimedia, 15(2):291–303, Feb 2013. Invited Paper.

    Google Scholar 

  • Gabriel A. Archanjo and Fernando J. Von Zuben. Genetic programming for automating the development of data management algorithms in information technology systems. Advances in Software Engineering, 2012.

    Google Scholar 

  • Andrea Arcuri and Xin Yao. A novel co-evolutionary approach to automatic software bug fixing. In Jun Wang, editor, 2008 IEEE World Congress on Computational Intelligence, pages 162–168, Hong Kong, 1–6 June 2008. IEEE Computational Intelligence Society, IEEE Press.

    Google Scholar 

  • Andrea Arcuri and Xin Yao. Co-evolutionary automatic programming for software development. Information Sciences, 259:412–432, 2014.

    Article  Google Scholar 

  • Wolfgang Banzhaf, Peter Nordin, Robert E. Keller, and Frank D. Francone. Genetic Programming – An Introduction; On the Automatic Evolution of Computer Programs and its Applications. Morgan Kaufmann, San Francisco, CA, USA, January 1998.

    MATH  Google Scholar 

  • Earl T. Barr, Yuriy Brun, Premkumar Devanbu, Mark Harman, and Federica Sarro. The plastic surgery hypothesis. In Alessandro Orso, Margaret-Anne Storey, and Shing-Chi Cheung, editors, 22nd ACM SIGSOFT International Symposium on the Foundations of Software Engineering (FSE 2014), Hong Kong, 16–12 Nov 2014. ACM.

    Google Scholar 

  • Patrick Berarducci, Demetrius Jordan, David Martin, and Jennifer Seitzer. GEVOSH: Using grammatical evolution to generate hashing functions. In R. Poli et al., editors, GECCO 2004 Workshop Proceedings, Seattle, Washington, USA, 26–30 June 2004.

    Google Scholar 

  • Jeremy S. Bradbury and Kevin Jalbert. Automatic repair of concurrency bugs. In Massimiliano Di Penta et al., editors, Proceedings of the 2nd International Symposium on Search Based Software Engineering (SSBSE ’10), Benevento, Italy, 7–9 September 2010. Fast abstract.

    Google Scholar 

  • Jurgen Branke, Pablo Funes, and Frederik Thiele. Evolutionary design of en-route caching strategies. Applied Soft Computing, 7(3):890–898, June 2006.

    Article  Google Scholar 

  • Edmund K Burke, Michel Gendreau, Matthew Hyde, Graham Kendall, Gabriela Ochoa, Ender Ozcan, and Rong Qu. Hyper-heuristics: a survey of the state of the art. Journal of the Operational Research Society, 64(12):1695–1724, December 2013.

    Google Scholar 

  • B. F. Buxton, W. B. Langdon, and S. J. Barrett. Data fusion by intelligent classifier combination. Measurement and Control, 34(8):229–234, October 2001.

    Article  Google Scholar 

  • Cristian Cadar, Peter Pietzuch, and Alexander L. Wolf. Multiplicity computing: a vision of software engineering for next-generation computing platform applications. In Kevin Sullivan, editor, Proceedings of the FSE/SDP workshop on Future of software engineering research, FoSER ’10, pages 81–86, Santa Fe, New Mexico, USA, 7–11 November 2010. ACM.

    Google Scholar 

  • Brendan Cody-Kenny and Stephen Barrett. The emergence of useful bias in self-focusing genetic programming for software optimisation. In Guenther Ruhe and Yuanyuan Zhang, editors, Symposium on Search-Based Software Engineering, volume 8084 of Lecture Notes in Computer Science, pages 306–311, Leningrad, August 24–26 2013. Springer. Graduate Student Track.

    Google Scholar 

  • J. Manuel Colmenar, Jose L. Risco-Martin, David Atienza, and J. Ignacio Hidalgo. Multi-objective optimization of dynamic memory managers using grammatical evolution. In Natalio Krasnogor et al., editors, GECCO ’11: Proceedings of the 13th annual conference on Genetic and evolutionary computation, pages 1819–1826, Dublin, Ireland, 12–16 July 2011. ACM.

    Google Scholar 

  • Alban Cotillon, Philip Valencia, and Raja Jurdak. Android genetic programming framework. In Alberto Moraglio et al., editors, Proceedings of the 15th European Conference on Genetic Programming, EuroGP 2012, volume 7244 of LNCS, pages 13–24, Malaga, Spain, 11–13 April 2012. Springer Verlag.

    Google Scholar 

  • Charles Darwin. The Origin of Species. John Murray, penguin classics, 1985 edition, 1859.

    Google Scholar 

  • K. Deb, A. Pratap, S. Agarwal, and T. Meyarivan. A fast and elitist multiobjective genetic algorithm: NSGA-II. IEEE Transactions on Evolutionary Computation, 6(2):182–197, Apr 2002.

    Article  Google Scholar 

  • Richard A. DeMillo and A. Jefferson Offutt. Constraint-based automatic test data generation. IEEE Transactions on Software Engineering, 17(9):900–910, 1991.

    Google Scholar 

  • Cesar Estebanez, Yago Saez, Gustavo Recio, and Pedro Isasi. Automatic design of noncryptographic hash functions using genetic programming. Computational Intelligence. Early View (Online Version of Record published before inclusion in an issue).

    Google Scholar 

  • Robert Feldt. Generating diverse software versions with genetic programming: an experimental study. IEE Proceedings - Software Engineering, 145(6):228–236, December 1998. Special issue on Dependable Computing Systems.

    Google Scholar 

  • Robert Feldt. Genetic programming as an explorative tool in early software development phases. In Conor Ryan and Jim Buckley, editors, Proceedings of the 1st International Workshop on Soft Computing Applied to Software Engineering, pages 11–20, University of Limerick, Ireland, 12–14 April 1999. Limerick University Press.

    Google Scholar 

  • Stephanie Forrest, ThanhVu Nguyen, Westley Weimer, and Claire Le Goues. A genetic programming approach to automated software repair. In Guenther Raidl et al., editors, GECCO ’09: Proceedings of the 11th Annual conference on Genetic and evolutionary computation, pages 947–954, Montreal, 8–12 July 2009. ACM. Best paper.

    Google Scholar 

  • Erik M. Fredericks and Betty H. C. Cheng. Exploring automated software composition with genetic programming. In Christian Blum et al., editors, GECCO ’13 Companion: Proceeding of the fifteenth annual conference companion on Genetic and evolutionary computation conference companion, pages 1733–1734, Amsterdam, The Netherlands, 6–10 July 2013. ACM.

    Google Scholar 

  • Alex A. Freitas. A genetic programming framework for two data mining tasks: Classification and generalized rule induction. In John R. Koza et al., editors, Genetic Programming 1997: Proceedings of the Second Annual Conference, pages 96–101, Stanford University, CA, USA, 13–16 July 1997. Morgan Kaufmann.

    Google Scholar 

  • Mark Gabel and Zhendong Su. A study of the uniqueness of source code. In Proceedings of the eighteenth ACM SIGSOFT international symposium on Foundations of software engineering, FSE ’10, pages 147–156, New York, NY, USA, 2010. ACM.

    Google Scholar 

  • David E. Goldberg. Genetic Algorithms in Search Optimization and Machine Learning. Addison-Wesley, 1989.

    Google Scholar 

  • Xin Han, Tak-Wah Lam, Lap-Kei Lee, Isaac K.K. To, and Prudence W.H. Wong. Deadline scheduling and power management for speed bounded processors. Theoretical Computer Science, 411(40-42):3587–3600, 2010.

    Google Scholar 

  • S. Handley. On the use of a directed acyclic graph to represent a population of computer programs. In Proceedings of the 1994 IEEE World Congress on Computational Intelligence, volume 1, pages 154–159, Orlando, Florida, USA, 27–29 June 1994. IEEE Press.

    Google Scholar 

  • Saemundur O. Haraldsson and John R. Woodward. Automated design of algorithms and genetic improvement: contrast and commonalities. In John Woodward et al., editors, GECCO 2014 4th workshop on evolutionary computation for the automated design of algorithms, pages 1373–1380, Vancouver, BC, Canada, 12–16 July 2014. ACM.

    Google Scholar 

  • Mark Harman, William B. Langdon, Yue Jia, David R. White, Andrea Arcuri, and John A. Clark. The GISMOE challenge: Constructing the Pareto program surface using genetic programming to find better programs. In The 27th IEEE/ACM International Conference on Automated Software Engineering (ASE 12), pages 1–14, Essen, Germany, September 3–7 2012. ACM.

    Google Scholar 

  • Mark Harman, Yue Jia, and William B. Langdon. Babel pidgin: SBSE can grow and graft entirely new functionality into a real world system. In Claire Le Goues and Shin Yoo, editors, Proceedings of the 6th International Symposium, on Search-Based Software Engineering, SSBSE 2014, volume 8636 of LNCS, pages 247–252, Fortaleza, Brazil, 26–29 August 2014. Springer. Winner SSBSE 2014 Challange Track.

    Google Scholar 

  • Mark Harman. Software engineering meets evolutionary computation. Computer, 44(10):31–39, October 2011. Cover feature.

    Google Scholar 

  • John H. Holland. Adaptation in Natural and Artificial Systems: An Introductory Analysis with Applications to Biology, Control and Artificial Intelligence. MIT Press, 1992. First Published by University of Michigan Press 1975.

    Google Scholar 

  • Daniar Hussain and Steven Malliaris. Evolutionary techniques applied to hashing: An efficient data retrieval method. In Darrell Whitley et al., editors, Proceedings of the Genetic and Evolutionary Computation Conference (GECCO-2000), page 760, Las Vegas, Nevada, USA, 10–12 July 2000. Morgan Kaufmann.

    Google Scholar 

  • M. Hutchins, H. Foster, T. Goradia, and T. Ostrand. Experiments on the effectiveness of dataflow- and control-flow-based test adequacy criteria. In Proceedings of 16th International Conference on Software Engineering, ICSE-16, pages 191–200, May 1994.

    Google Scholar 

  • Kosuke Imamura and James A. Foster. Fault-tolerant computing with N-version genetic programming. In Lee Spector et al., editors, Proceedings of the Genetic and Evolutionary Computation Conference (GECCO-2001), page 178, San Francisco, California, USA, 7–11 July 2001. Morgan Kaufmann.

    Google Scholar 

  • Kosuke Imamura, Terence Soule, Robert B. Heckendorn, and James A. Foster. Behavioral diversity and a probabilistically optimal GP ensemble. Genetic Programming and Evolvable Machines, 4(3):235–253, September 2003.

    Article  Google Scholar 

  • Christian Jacob. Illustrating Evolutionary Computation with Mathematica. Morgan Kaufmann, 2001.

    Google Scholar 

  • Jan Karasek, Radim Burget, and Ondrej Morsky. Towards an automatic design of non-cryptographic hash function. In 34th International Conference on Telecommunications and Signal Processing (TSP 2011), pages 19–23, Budapest, 18–20 August 2011.

    Google Scholar 

  • Gal Katz and Doron Peled. Synthesizing, correcting and improving code, using model checking-based genetic programming. In Valeria Bertacco and Axel Legay, editors, Proceedings of the 9th International Haifa Verification Conference (HVC 2013), volume 8244 of Lecture Notes in Computer Science, pages 246–261, Haifa, Israel, November 5–7 2013. Springer. Keynote Presentation.

    Google Scholar 

  • Marouane Kessentini, Wael Kessentini, Houari Sahraoui, Mounir Boukadoum, and Ali Ouni. Design defects detection and correction by example. In 19th IEEE International Conference on Program Comprehension (ICPC 2011), pages 81–90, Kingston, Canada, 22–24 June 2011.

    Google Scholar 

  • Dongsun Kim, Jaechang Nam, Jaewoo Song, and Sunghun Kim. Automatic patch generation learned from human-written patches. In 35th International Conference on Software Engineering (ICSE 2013), pages 802–811, San Francisco, USA, 18–26 May 2013.

    Google Scholar 

  • Arthur K. Kordon. Applying Computational Intelligence How to Create Value. Springer, 2010.

    Google Scholar 

  • Miha Kovacic and Bozidar Sarler. Genetic programming prediction of the natural gas consumption in a steel plant. Energy, 66(1):273–284, 1 March 2014.

    Google Scholar 

  • John R. Koza. Genetic Programming: On the Programming of Computers by Natural Selection. MIT press, 1992.

    Google Scholar 

  • W. B. Langdon and S. J. Barrett. Genetic programming in data mining for drug discovery. In Ashish Ghosh and Lakhmi C. Jain, editors, Evolutionary Computing in Data Mining, volume 163 of Studies in Fuzziness and Soft Computing, Chapter 10, pages 211–235. Springer, 2004.

    Google Scholar 

  • W. B. Langdon and B. F. Buxton. Genetic programming for combining classifiers. In Lee Spector et al., editors, Proceedings of the Genetic and Evolutionary Computation Conference (GECCO-2001), pages 66–73, San Francisco, California, USA, 7–11 July 2001. Morgan Kaufmann.

    Google Scholar 

  • W. B. Langdon and M. Harman. Evolving a CUDA kernel from an nVidia template. In Pilar Sobrevilla, editor, 2010 IEEE World Congress on Computational Intelligence, pages 2376–2383, Barcelona, 18–23 July 2010. IEEE.

    Google Scholar 

  • W. B. Langdon and M. Harman. Genetically improved CUDA kernels for stereocamera. Research Note RN/14/02, Department of Computer Science, University College London, Gower Street, London WC1E 6BT, UK, 20 February 2014.

    Google Scholar 

  • William B. Langdon and Mark Harman. Genetically improved CUDA C++ software. In Miguel Nicolau et al., editors, 17th European Conference on Genetic Programming, volume 8599 of LNCS, pages 87–99, Granada, Spain, 23–25 April 2014. Springer.

    Google Scholar 

  • William B. Langdon and Mark Harman. Optimising existing software with genetic programming. IEEE Transactions on Evolutionary Computation, 19(1):118–135, February 2015.

    Article  Google Scholar 

  • W. B. Langdon and J. P. Nordin. Seeding GP populations. In Riccardo Poli et al., editors, Genetic Programming, Proceedings of EuroGP’2000, volume 1802 of LNCS, pages 304–315, Edinburgh, 15–16 April 2000. Springer-Verlag.

    Google Scholar 

  • William B. Langdon and Riccardo Poli. Evolving problems to learn about particle swarm and other optimisers. In David Corne et al., editors, Proceedings of the 2005 IEEE Congress on Evolutionary Computation, volume 1, pages 81–88, Edinburgh, UK, 2–5 September 2005. IEEE Press.

    Google Scholar 

  • William B. Langdon, Mark Harman, and Yue Jia. Efficient multi-objective higher order mutation testing with genetic programming. Journal of Systems and Software, 83(12):2416–2430, December 2010.

    Article  Google Scholar 

  • William B. Langdon, Marc Modat, Justyna Petke, and Mark Harman. Improving 3D medical image registration CUDA software with genetic programming. In Christian Igel et al., editors, GECCO ’14: Proceeding of the sixteenth annual conference on genetic and evolutionary computation conference, pages 951–958, Vancouver, BC, Canada, 12–15 July 2014. ACM.

    Google Scholar 

  • William B. Langdon. Genetic Programming and Data Structures: Genetic Programming + Data Structures = Automatic Programming!, volume 1 of Genetic Programming. Kluwer, Boston, 1998.

    Book  Google Scholar 

  • W. B. Langdon. Global distributed evolution of L-systems fractals. In Maarten Keijzer et al., editors, Genetic Programming, Proceedings of EuroGP’2004, volume 3003 of LNCS, pages 349–358, Coimbra, Portugal, 5–7 April 2004. Springer-Verlag.

    Google Scholar 

  • W. B. Langdon. A many threaded CUDA interpreter for genetic programming. In Anna Isabel Esparcia-Alcazar et al., editors, Proceedings of the 13th European Conference on Genetic Programming, EuroGP 2010, volume 6021 of LNCS, pages 146–158, Istanbul, 7–9 April 2010. Springer.

    Google Scholar 

  • W. B. Langdon. Graphics processing units and genetic programming: An overview. Soft Computing, 15:1657–1669, August 2011.

    Article  Google Scholar 

  • W.B. Langdon. Creating and debugging performance CUDA C. In Francisco Fernandez de Vega, Jose Ignacio Hidalgo Perez, and Juan Lanchares, editors, Parallel Architectures and Bioinspired Algorithms, volume 415 of Studies in Computational Intelligence, chapter 1, pages 7–50. Springer, 2012.

    Google Scholar 

  • William B. Langdon. Genetic improvement of programs. In Franz Winkler et al., editors, 16th International Symposium on Symbolic and Numeric Algorithms for Scientific Computing (SYNASC 2014), pages 14–19, Timisoara, 22–25 September 2014. IEEE. Keynote.

    Google Scholar 

  • Claire Le Goues, Michael Dewey-Vogt, Stephanie Forrest, and Westley Weimer. A systematic study of automated program repair: Fixing 55 out of 105 bugs for $8 each. In Martin Glinz, editor, 34th International Conference on Software Engineering (ICSE 2012), pages 3–13, Zurich, June 2–9 2012.

    Google Scholar 

  • Claire Le Goues, ThanhVu Nguyen, Stephanie Forrest, and Westley Weimer. GenProg: A generic method for automatic software repair. IEEE Transactions on Software Engineering, 38(1):54–72, January-February 2012.

    Article  Google Scholar 

  • Jason D. Lohn and Gregory S. Hornby. Evolvable hardware using evolutionary computation to design and optimize hardware systems. IEEE Computational Intelligence Magazine, 1(1):19–27, February 2006.

    Article  Google Scholar 

  • Eduard Lukschandl, Magus Holmlund, and Eirk Moden. Automatic evolution of Java bytecode: First experience with the Java virtual machine. In Riccardo Poli et al., editors, Late Breaking Papers at EuroGP’98: the First European Workshop on Genetic Programming, pages 14–16, Paris, France, 14–15 April 1998. CSRP-98-10, The University of Birmingham, UK.

    Google Scholar 

  • Anjali Mahajan and M S Ali. Superblock scheduling using genetic programming for embedded systems. In 7th IEEE International Conference on Cognitive Informatics, ICCI 2008, pages 261–266, August 2008.

    Google Scholar 

  • Duane Merrill, Michael Garland, and Andrew Grimshaw. Policy-based tuning for performance portability and library co-optimization. In Innovative Parallel Computing (InPar), 2012. IEEE, May 2012.

    Google Scholar 

  • Gordon E. Moore. Cramming more components onto integrated circuits. Electronics, 38(8):114–117, April 19 1965.

    Google Scholar 

  • Hoang Duong Thien Nguyen, Dawei Qi, Abhik Roychoudhury, and Satish Chandra. SemFix: program repair via semantic analysis. In Betty H. C. Cheng and Klaus Pohl, editors, 35th International Conference on Software Engineering (ICSE 2013), pages 772–781, San Francisco, USA, May 18–26 2013. IEEE.

    Google Scholar 

  • Michael O’Neill and Conor Ryan. Automatic generation of caching algorithms. In Kaisa Miettinen et al., editors, Evolutionary Algorithms in Engineering and Computer Science, pages 127–134, Jyväskylä, Finland, 30 May - 3 June 1999. John Wiley & Sons.

    Google Scholar 

  • Michael O’Neill and Conor Ryan. Grammatical evolution. IEEE Transactions on Evolutionary Computation, 5(4):349–358, August 2001.

    Article  Google Scholar 

  • Michael O’Neill and Conor Ryan. Grammatical Evolution: Evolutionary Automatic Programming in a Arbitrary Language, volume 4 of Genetic programming. Kluwer Academic Publishers, 2003.

    Google Scholar 

  • Michael Orlov and Moshe Sipper. Flight of the FINCH through the Java wilderness. IEEE Transactions on Evolutionary Computation, 15(2):166–182, April 2011.

    Article  Google Scholar 

  • John D. Owens, Mike Houston, David Luebke, Simon Green, John E. Stone, and James C. Phillips. GPU computing. Proceedings of the IEEE, 96(5):879–899, May 2008. Invited paper.

    Google Scholar 

  • Gisele L. Pappa, Gabriela Ochoa, Matthew R. Hyde, Alex A. Freitas, John Woodward, and Jerry Swan. Contrasting meta-learning and hyper-heuristic research: the role of evolutionary algorithms. Genetic Programming and Evolvable Machines, 15(1):3–35, March 2014.

    Article  Google Scholar 

  • Norman Paterson and Mike Livesey. Evolving caching algorithms in C by genetic programming. In John R. Koza et al., editors, Genetic Programming 1997: Proceedings of the Second Annual Conference, pages 262–267, Stanford University, CA, USA, 13–16 July 1997. Morgan Kaufmann.

    Google Scholar 

  • Justyna Petke, Mark Harman, William B. Langdon, and Westley Weimer. Using genetic improvement & code transplants to specialise a C++ program to a problem class. 11th Annual Humies Awards 2014, 14 July 2014. Winner Silver.

    Google Scholar 

  • Justyna Petke, Mark Harman, William B. Langdon, and Westley Weimer. Using genetic improvement and code transplants to specialise a C++ program to a problem class. In Miguel Nicolau et al., editors, 17th European Conference on Genetic Programming, volume 8599 of LNCS, pages 137–149, Granada, Spain, 23–25 April 2014. Springer.

    Google Scholar 

  • Bojan Podgornik, Vojteh Leskovsek, Miha Kovacic, and Josef Vizintin. Analysis and prediction of residual stresses in nitrided tool steel. Materials Science Forum, 681, Residual Stresses VIII:352–357, March 2011.

    Google Scholar 

  • Riccardo Poli, William B. Langdon, and Nicholas Freitag McPhee. A field guide to genetic programming. Published via http://lulu.com and freely available at http://www.gp-field-guide.org.uk, 2008. (With contributions by J. R. Koza).

  • Vlad Radulescu, Stefan Andrei, and Albert M. K. Cheng. A heuristic-based approach for reducing the power consumption of real-time embedded systems. In Franz Winkler, editor, 16th International Symposium on Symbolic and Numeric Algorithms for Scientific Computing (SYNASC 2014), Timisoara, 22–25 September 2014. Pre-proceedings.

    Google Scholar 

  • Craig Reynolds. Interactive evolution of camouflage. Artificial Life, 17(2):123–136, Spring 2011.

    Article  Google Scholar 

  • Jose L. Risco-Martin, David Atienza, J. Manuel Colmenar, and Oscar Garnica. A parallel evolutionary algorithm to optimize dynamic memory managers in embedded systems. Parallel Computing, 36(10-11):572–590, 2010. Parallel Architectures and Bioinspired Algorithms.

    Google Scholar 

  • Pablo Rodriguez-Mier, Manuel Mucientes, Manuel Lama, and Miguel I. Couto. Composition of web services through genetic programming. Evolutionary Intelligence, 3(3-4):171–186, 2010.

    Article  Google Scholar 

  • Juan Romero, Penousal Machado, and Adrian Carballal. Guest editorial: special issue on biologically inspired music, sound, art and design. Genetic Programming and Evolvable Machines, 14(3):281–286, September 2013. Special issue on biologically inspired music, sound, art and design.

    Google Scholar 

  • Conor Ryan. Automatic Re-engineering of Software Using Genetic Programming, volume 2 of Genetic Programming. Kluwer Academic Publishers, 1 November 1999.

    Google Scholar 

  • Eric Schulte, Stephanie Forrest, and Westley Weimer. Automated program repair through the evolution of assembly code. In Proceedings of the IEEE/ACM international conference on Automated software engineering, pages 313–316, Antwerp, 20–24 September 2010. ACM.

    Google Scholar 

  • Eric Schulte, Jonathan DiLorenzo, Westley Weimer, and Stephanie Forrest. Automated repair of binary and assembly programs for cooperating embedded devices. In Proceedings of the eighteenth international conference on Architectural support for programming languages and operating systems, ASPLOS 2013, pages 317–328, Houston, Texas, USA, March 16–20 2013. ACM.

    Google Scholar 

  • Eric Schulte, Jonathan Dorn, Stephen Harding, Stephanie Forrest, and Westley Weimer. Post-compiler software optimization for reducing energy. In Proceedings of the 19th International Conference on Architectural Support for Programming Languages and Operating Systems, ASPLOS’14, pages 639–652, Salt Lake City, Utah, USA, 1–5 March 2014. ACM.

    Google Scholar 

  • Eric Schulte, Zachary P. Fry, Ethan Fast, Westley Weimer, and Stephanie Forrest. Software mutational robustness. Genetic Programming and Evolvable Machines, 15(3):281–312, September 2014.

    Article  Google Scholar 

  • Pitchaya Sitthi-amorn, Nicholas Modly, Westley Weimer, and Jason Lawrence. Genetic programming for shader simplification. ACM Transactions on Graphics, 30(6):article:152, December 2011. Proceedings of ACM SIGGRAPH Asia 2011.

    Google Scholar 

  • Joe Stam. Stereo imaging with CUDA. Technical report, nVidia, V 0.2 3 Jan 2008.

    Google Scholar 

  • Gilbert Syswerda. Uniform crossover in genetic algorithms. In J. David Schaffer, editor, Proceedings of the third international conference on Genetic Algorithms, pages 2–9, George Mason University, 4–7 June 1989. Morgan Kaufmann.

    Google Scholar 

  • Westley Weimer, ThanhVu Nguyen, Claire Le Goues, and Stephanie Forrest. Automatically finding patches using genetic programming. In Stephen Fickas, editor, International Conference on Software Engineering (ICSE) 2009, pages 364–374, Vancouver, May 16–24 2009.

    Google Scholar 

  • Westley Weimer, Stephanie Forrest, Claire Le Goues, and ThanhVu Nguyen. Automatic program repair with evolutionary computation. Communications of the ACM, 53(5):109–116, June 2010.

    Article  Google Scholar 

  • Westley Weimer. Advances in automated program repair and a call to arms. In Guenther Ruhe and Yuanyuan Zhang, editors, Symposium on Search-Based Software Engineering, volume 8084 of Lecture Notes in Computer Science, pages 1–3, Leningrad, August 24–26 2013. Springer. Invited keynote.

    Google Scholar 

  • David R. White, John Clark, Jeremy Jacob, and Simon M. Poulding. Searching for resource-efficient programs: low-power pseudorandom number generators. In Maarten Keijzer et al., editors, GECCO ’08: Proceedings of the 10th annual conference on Genetic and evolutionary computation, pages 1775–1782, Atlanta, GA, USA, 12–16 July 2008. ACM.

    Google Scholar 

  • David R. White, Andrea Arcuri, and John A. Clark. Evolutionary improvement of programs. IEEE Transactions on Evolutionary Computation, 15(4):515–538, August 2011.

    Article  Google Scholar 

  • Josh L. Wilkerson and Daniel Tauritz. Coevolutionary automated software correction. In Juergen Branke et al., editors, GECCO ’10: Proceedings of the 12th annual conference on Genetic and evolutionary computation, pages 1391–1392, Portland, Oregon, USA, 7–11 July 2010. ACM.

    Google Scholar 

  • Liyuan Xiao, Carl K. Chang, Hen-I Yang, Kai-Shin Lu, and Hsin yi Jiang. Automated web service composition using genetic programming. In 36th Annual IEEE Computer Software and Applications Conference Workshops (COMPSACW 2012), pages 7–12, Izmir, 16–20 July 2012.

    Google Scholar 

  • Frances Yao, Alan Demers, and Scott Shenker. A scheduling model for reduced cpu energy. In 36th Annual Symposium on Foundations of Computer Science, pages 374–382. IEEE, Oct 1995.

    Google Scholar 

  • Shin Yoo. Evolving human competitive spectra-based fault localisation techniques. In Gordon Fraser et al., editors, 4th Symposium on Search Based Software Engineering, volume 7515 of Lecture Notes in Computer Science, pages 244–258, Riva del Garda, Italy, September 28–30 2012. Springer.

    Google Scholar 

  • Ling Zhu and Sandeep Kulkarni. Synthesizing round based fault-tolerant programs using genetic programming. In Teruo Higashino et al., editors, Proceedings of the 15th International Symposium on Stabilization, Safety, and Security of Distributed Systems (SSS 2013), volume 8255 of Lecture Notes in Computer Science, pages 370–372, Osaka, Japan, November 13–16 2013. Springer.

    Google Scholar 

Download references

Acknowledgements

I am grateful for the assistance of njuffa, Istvan Reguly, vyas of nVidia, TedBaker, and Allan MacKinnon.

GPUs were given by nVidia. Funded by EPSRC grant EP/I033688/1.

Author information

Authors and Affiliations

Authors

Corresponding author

Correspondence to William B. Langdon .

Editor information

Editors and Affiliations

Appendix: StereoKernel Tuned for K20c Tesla

Appendix: StereoKernel Tuned for K20c Tesla

In addition to the complete Stereo Camera system StereoCamera_v1_1c.zip contains the following CUDA kernel. The modifications to the openVidia CUDA Stereo Camera code distributed by SourceForge are also described in Sect. 8.16 (pages 206 to 207).

/*******

stereoKernel

Now for the main stereo kernel: There are four parameters:

disparityPixel points to memory containing the disparity value (d)

for each pixel.

width & height are the image width & height, and out_pitch

specifies the pitch of the output data in words (i.e. the number

of floats between the start of one row and the start of the next.).

disparityMinSSD removed by GP

*********/

__attribute__((global)) void stereoKernel(

// pointer to the output memory for the disparity map

float * __restrict__ disparityPixel,

// the pitch (in pixels) of the output memory for the disparity

map const size_t out_pitch,

const int width,

const int height,

unsigned int * __restrict__ timer, //For GP timing only

int * __restrict__ sm_id //For GP timing only

)

{

FIXED_init_timings(timer,sm_id); //For GP timing only

extern __attribute__((shared)) float disparityPixel_S[];

int* const disparityMinSSD = (int*)&disparityPixel_S[ROWSper

THREAD*BLOCK_W];

// column squared difference functions

int* const col_ssd = &disparityMinSSD[ROWSperTHREAD*BLOCK_W];

float d; // disparity value

float d0,d1;

float dmin;

int diff; // difference temporary value

int ssd; // total SSD for a kernel

float x_tex; // texture coordinates for image lookup

float y_tex;

int row; // the current row in the rolling window

int i; // for index variable

const int dthreadIdx = threadIdx.x % BLOCK_W;

const int dblockIdx = threadIdx.x / BLOCK_W;

//bugfix force subsequent calculations to be signed

const int X = (__mul24(blockIdx.x,(BLOCK_W-2*RADIUS_H)) +

dthreadIdx);

const int ssdIdx = threadIdx.x;

int* const reduce_ssd = &col_ssd[(BLOCK_W )*dperblock-BLOCK_W];

const int Y = (__mul24(blockIdx.y,ROWSperTHREAD));

//int extra_read_val = 0; no longer used

//if(dthreadIdx < (2*RADIUS_H)) extra_read_val = BLOCK_W + ssdIdx;

// initialize the memory used for the disparity and the disparity

difference

//Uses first group of threads to initialise shared memory

if(threadIdx.x<BLOCK_W-2*RADIUS_H)

if(dblockIdx==0)

if(X<width )

{

for(i = 0;i<ROWSperTHREAD && Y+i < height;i++)

{

// initialize to -1 indicating no match

disparityPixel_S[i*BLOCK_W +threadIdx.x] = -1.0f;

//ssd += col_ssd[i+threadIdx.x];

disparityMinSSD[i*BLOCK_W +threadIdx.x] = MIN_SSD;

}

}

__syncthreads();

x_tex = X - RADIUS_H;

for(d0 = STEREO_MIND;d0 <= STEREO_MAXD;d0 += STEREO_DISP_STEP*

dperblock)

{

d = d0 + STEREO_DISP_STEP*dblockIdx;

col_ssd[ssdIdx] = 0;

// do the first row

y_tex = Y - RADIUS_V;

for(i = 0;i <= 2*RADIUS_V;i++)

{

diff = readLeft(x_tex,y_tex) - readRight(x_tex-d,y_tex);

col_ssd[ssdIdx] += SQ(diff);

y_tex += 1.0f;

}

__syncthreads();

// now accumulate the total

if(dthreadIdx<BLOCK_W-2*RADIUS_H)

if(X < width && Y < height)

{

ssd = 0;

for(i = 0;i<=(2*RADIUS_H);i++)

{

ssd += col_ssd[i+ssdIdx];

}

}

if(dblockIdx!=0) reduce_ssd[threadIdx.x] = ssd;

__syncthreads();

//Use first group of threads to set ssd to smallest SSD for

d1<d0+dperblock

if(threadIdx.x<BLOCK_W-2*RADIUS_H)

if(X < width && Y < height)

{

dmin = d;

d1 = d + STEREO_DISP_STEP;

for(i = threadIdx.x+BLOCK_W;i < blockDim.x;i += BLOCK_W) {

if(d1 <= STEREO_MAXD && reduce_ssd[i] < ssd) {

ssd = reduce_ssd[i];

dmin = d1;

}

d1 += STEREO_DISP_STEP;

}

//if ssd is smaller update both shared data arrays

if( ssd < disparityMinSSD[0*BLOCK_W +threadIdx.x])

{

disparityPixel_S[0*BLOCK_W +threadIdx.x] = dmin;

disparityMinSSD[0*BLOCK_W +threadIdx.x] = ssd;

}

}

__syncthreads();

// now do the remaining rows

y_tex = Y - RADIUS_V; // this is the row we will remove

#pragma unroll 11

for(row = 1;row < ROWSperTHREAD && (row+Y < (height+RADIUS_V));

row++)

{

// subtract the value of the first row from column sums

diff = readLeft(x_tex,y_tex) - readRight(x_tex-d,y_tex);

col_ssd[ssdIdx] -= SQ(diff);

// add in the value from the next row down

diff = readLeft(x_tex, y_tex + (float)(2*RADIUS_V)+1.0f) -

readRight(x_tex-d,y_tex + (float)(2*RADIUS_V)+1.0f);

col_ssd[ssdIdx] += SQ(diff);

y_tex += 1.0f;

__syncthreads();

if(dthreadIdx<BLOCK_W-2*RADIUS_H)

if(X<width && (Y+row) < height)

{

ssd = 0;

for(i = 0;i<=(2*RADIUS_H);i++)

{

ssd += col_ssd[i+ssdIdx];

}

}

if(dblockIdx!=0) reduce_ssd[threadIdx.x] = ssd;

__syncthreads();

//Use 1st group threads to set ssd/dmin to smallest SSD for

d1<d0+dperblock

if(threadIdx.x<BLOCK_W-2*RADIUS_H)

if(dblockIdx==0)

{

dmin = d;

d1 = d + STEREO_DISP_STEP;

for(i = threadIdx.x+BLOCK_W;i < blockDim.x;i += BLOCK_W) {

if(d1 <= STEREO_MAXD && reduce_ssd[i] < ssd) {

ssd = reduce_ssd[i];

dmin = d1;

}

d1 += STEREO_DISP_STEP;

}

//if smaller SSD found update shared memory

if(ssd < disparityMinSSD[row*BLOCK_W +threadIdx.x])

{

disparityPixel_S[row*BLOCK_W +threadIdx.x] = dmin;

disparityMinSSD[row*BLOCK_W +threadIdx.x] = ssd;

}

}//endif first group of thread

}// for row loop

}// for d0 loop

//Write answer in shared memory to global memory

if(threadIdx.x<BLOCK_W-2*RADIUS_H)

if(dblockIdx==0)

if(X < width) {

#pragma unroll 3

for(row = 0;row < ROWSperTHREAD && (row+Y < height);row++)

{

disparityPixel[__mul24((Y+row),out_pitch)+X] =

disparityPixel_S[row*BLOCK_W +threadIdx.x];

}

}

FIXED_report_timings(timer,sm_id); //For GP timing only

}

Rights and permissions

Reprints and permissions

Copyright information

© 2015 Springer International Publishing Switzerland

About this chapter

Cite this chapter

Langdon, W.B. (2015). Genetically Improved Software. In: Gandomi, A., Alavi, A., Ryan, C. (eds) Handbook of Genetic Programming Applications. Springer, Cham. https://doi.org/10.1007/978-3-319-20883-1_8

Download citation

  • DOI: https://doi.org/10.1007/978-3-319-20883-1_8

  • Publisher Name: Springer, Cham

  • Print ISBN: 978-3-319-20882-4

  • Online ISBN: 978-3-319-20883-1

  • eBook Packages: Computer ScienceComputer Science (R0)

Publish with us

Policies and ethics