The Functional Design of Scientific Computing Library

Total Page:16

File Type:pdf, Size:1020Kb

The Functional Design of Scientific Computing Library The Functional Design of Scientific Computing Library Liang Wang University of Cambridge, UK ABSTRACT in Python (such as Caffe [10] and TensorFlow [5]), they Owl is an emerging library developed in the OCaml lan- often provide Python bindings to take advantage of the guage for scientific and engineering computing. It focuses existing numerical infrastructure in Numpy and Scipy. on providing a comprehensive set of high-level numerical On the other hand, the supporting of basic scien- functions so that developers can quickly build up any data tific computing in OCaml is rather fragmented. There analytical applications. After over one-year intensive devel- have been some initial efforts (e.g., Lacaml [2], Oml [4], opment and continuous optimisation, Owl has evolved into a Pareto, and etc.), but their APIs are either too low-level powerful software system with competitive performance to to offer satisfying productivity, or the designs overly mainstream numerical libraries. Meanwhile, Owl’s overall focus on a specific problem domain. Moreover, incon- architecture remains simple and elegant, its small code base sistent data representation and careless use of abstract can be easily managed by a small group of developers. types make it difficult to pass data across different li- In this paper, we first present Owl’s design, core compo- braries. Consequently, developers often have to write nents, and its key functionality. We show that Owl benefits a significant amount of boilerplate code just to finish greatly from OCaml’s module system which not only allows rather trivial numerical tasks. As we can see, there is us to write concise generic code with superior performance, a severe lack of a general purpose numerical library in but also leads to a very unique design to enable parallel and OCaml ecosystem. We believe OCaml per se is a good distributed computing. OCaml’s static type checking signif- candidate for developing such a general purpose numer- icantly reduces potential bugs and accelerates the develop- ical library for two important reasons: 1) we can write ment cycle. We also share the knowledge and lessons learnt functional code as concise as that in Python with type- from building up a full-fledge system for scientific comput- safety; 2) OCaml code often has much superior perfor- ing with the functional programming community. mance comparing to dynamic languages such as Python and Julia. However, designing and developing a full-fledged nu- 1. INTRODUCTION merical library is a non-trivial task, despite that OCaml Thanks to the recent advances in machine learning has been widely used in system programming such as and deep neural networks, there is a huge demand on MirageOS [15]. The key difference between the two various numerical tools and libraries in order to facili- is obvious and interesting: system libraries provide a tate both academic researchers and industrial develop- lean set of APIs to abstract complex and heterogeneous ers to fast prototype and test their new ideas, then de- physical hardware, whilst numerical library offer a fat arXiv:1707.09616v3 [cs.MS] 28 Aug 2018 velop and deploy analytical applications at large scale. set of functions over a small set of abstract number Take deep neural network as an example, Google invests types. heavily in TensorFlow [5] while Facebook promotes their When Owl project started in 2016, we were imme- PyTorch [16]. Beyond these libraries focusing on one diately confronted by a series of fundamental questions specific numerical task, the interest on general purpose like: "what should be the basic data types", "what should tools like Python and Julia [1] also grows fast. be the core data structures", "what modules should be Python has been one popular choice among devel- designed", and etc. In the following development and opers for fast prototyping analytical applications, one performance optimisation, we also tackled many research important reason is because Scipy [12] and Numpy [3] and engineering challenges on a wide range of different two libraries, tightly integrated with other advanced topics such as software engineering, language design, functionality such as plotting, offer a powerful environ- system and network programming, and etc. ment which lets developers write very concise code to In this paper, we will introduce Owl1, a new general finish complicated numerical tasks. As a result, even for the frameworks which were not originally developed 1https://github.com/ryanrhymes/owl 1 purpose numerical library for scientific computing de- • Base is the basis of all other libraries in Owl. veloped in OCaml.2 We show that Owl benefits greatly Base defines core data structures, exceptions, and from OCaml's module system which not only allows us part of numerical functions. Because it contains to write concise generic code with superior performance, pure OCaml code so the applications built atop but also leads to a very unique design to enable par- of Base can be safely compiled into native code, allel and distributed computing. OCaml's static type bytecode, Javascript, even into unikernels. Fortu- checking significantly reduces potential bugs and accel- nately, majority of Owl's advanced functions are erate the development cycle. We would like to share implemented in pure OCaml. the knowledge and lessons learnt from building up a full-fledge system for scientific computing with the func- • Owl is the backbone of the numerical subsystem. tional programming community. It depends on Base but replaces some pure OCaml functions with C implementations (e.g. vectorised 2. ARCHITECTURE math functions inNdarray module). Mixing C code into the library limits the choice of backends (e.g. Owl is a complex library consisting of numerous func- browsers and MirageOS) but gives us significant tions (over 6500 by the end of 2017), we have strived for performance improvement when running applica- a modular design to make sure that the system is flex- tions on CPU. ible enough to be extended in future. In the following, we will present its architecture briefly. • Zoo [20] is designed for packaging and sharing 2.1 Hierarchy code snippets among users. This module targets small scripts and light numerical functions which may not be suitable for publishing on the heavier Owl Actor OPAM system. The code is distributed via gists on Composable Services Github, and Zoo is able to resolve the dependency GPGPU Dataset & NLP Neural Network Model Zoo and automatically pull in and cache the code. Map-Reduce • Top is the Toplevel system of Owl. It automati- Classic Analytics Engine cally loads both Owl and Zoo, and installs multiple Algorithmic Linear Algebra Plot Differentiation Parameter pretty printers for various data types. Server Engine Maths & Stats Regression Optimisation The subsystem on the right is called Actor Sub- Peer-to-Peer Engine system [19] which extends Owl's capability to parallel Core and distributed computing. The addition of Actor sub- Ndarray & CBLAS, LAPACKE Parallel & Synchronous system makes Owl fundamentally different from main- Matrix Interface Distributed Engine Parallel Machine stream numerical libraries such as Scipy and Julia. The core idea is to transform a user application from se- Figure 1: Two subsystems: Owl on the left handles quential execution mode into parallel mode (using var- numerical calculations while Actor on the right takes ious computation engines) with minimal efforts. The care of parallel and distributed computing. method we used is to compose two subsystems together with functors to generate the parallel version of the Figure 1 gives a bird view of Owl's system architec- module defined in the numerical subsystem. We will ture, i.e. the two subsystems and their modules. The elaborate this idea and its design in detail in Section subsystem on the left part is Owl's Numerical Sub- 5.1. system. The modules contained in this subsystem fall into three categories: (1) core modules contains basic 3. CORE DATA STRUCTURE data structures and foreign function interfaces to other N-dimensional array and matrix are the building blocks libraries (e.g., CBLAS and LAPACKE); (2) classic ana- of Owl library, their functionality are implemented in lytics contains basic mathematical and statistical func- Ndarray and Matrix modules respectively. Matrix is tions, linear algebra, regression, optimisation, plotting, a special case of n-dimensional array, and in fact many and etc.; (3) composable service includes more advanced functions in Matrix module call the corresponding func- numerical techniques such as deep neural network, nat- tions in Ndarray directly. ural language processing, data processing and service For n-dimensional array and matrix, Owl supports deployment tools. both dense and sparse data structures. The dense data The numerical subsystem is further organised in a structure is built atop of OCaml's native Bigarray mod- stack of smaller libraries, as follows. ule hence it can be easily interfaced with other libraries 2Owl can be installed with OPAM "opam install owl". like BLAS and LAPACK. Owl also supports both single 2 and double precisions for both real and complex num- Algorithm 1 Get and Set a slice in an ndarray ber. Therefore, Owl essentially has covered all the nec- 1: let x = sequential [j10; 10; 10j];; essary number types in most common scientific com- 2: let a = x.$f [[0;4]; [6;-1]; [-1;0]] g;; putations. The functions in Ndarray modules can be 3: x.$f [[0;4]; [6;-1]; [-1;0]] g <- zeros (shape a);; divided into following three groups. • The first group contains the vectorised mathemat- to the ndarrays with dimensionality greater than four. ical functions such as sin, cos, relu, and etc. Owl exploits the extended indexing operators recently • The second group contains the high-level function- introduced in OCaml 4.06 to provide a unified indexing ality to manipulate arrays and matrices, e.g., in- and slicing interface. dex, slice, tile, repeat, pad, and etc.
Recommended publications
  • Practical Perl Tools: Scratch the Webapp Itch With
    last tIme, we had the pleasure oF exploring the basics of a Web applica- DaviD n. BLank-EdeLman tion framework called CGI::Application (CGI::App). I appreciate this particular pack- age because it hits a certain sweet spot in practical Perl tools: terms of its complexity/learning curve and scratch the webapp itch with power. In this column we’ll finish up our exploration by looking at a few of the more CGI::Application, part 2 powerful extensions to the framework that David N. Blank-Edelman is the director of can really give it some oomph. technology at the Northeastern University College of Computer and Information Sci- ence and the author of the O’Reilly book Quick review Automating System Administration with Perl (the second edition of the Otter book), Let’s do a really quick review of how CGI::App available at purveyors of fine dead trees works, so that we can build on what we’ve learned everywhere. He has spent the past 24+ years as a system/network administrator in large so far. CGI::App is predicated on the notion of “run multi-platform environments, including modes.” When you are first starting out, it is easi- Brandeis University, Cambridge Technology est to map “run mode” to “Web page” in your head. Group, and the MIT Media Laboratory. He was the program chair of the LISA ’05 confer- You write a piece of code (i.e., a subroutine) that ence and one of the LISA ’06 Invited Talks will be responsible for producing the HTML for co-chairs.
    [Show full text]
  • Fortran Resources 1
    Fortran Resources 1 Ian D Chivers Jane Sleightholme May 7, 2021 1The original basis for this document was Mike Metcalf’s Fortran Information File. The next input came from people on comp-fortran-90. Details of how to subscribe or browse this list can be found in this document. If you have any corrections, additions, suggestions etc to make please contact us and we will endeavor to include your comments in later versions. Thanks to all the people who have contributed. Revision history The most recent version can be found at https://www.fortranplus.co.uk/fortran-information/ and the files section of the comp-fortran-90 list. https://www.jiscmail.ac.uk/cgi-bin/webadmin?A0=comp-fortran-90 • May 2021. Major update to the Intel entry. Also changes to the editors and IDE section, the graphics section, and the parallel programming section. • October 2020. Added an entry for Nvidia to the compiler section. Nvidia has integrated the PGI compiler suite into their NVIDIA HPC SDK product. Nvidia are also contributing to the LLVM Flang project. Updated the ’Additional Compiler Information’ entry in the compiler section. The Polyhedron benchmarks discuss automatic parallelisation. The fortranplus entry covers the diagnostic capability of the Cray, gfortran, Intel, Nag, Oracle and Nvidia compilers. Updated one entry and removed three others from the software tools section. Added ’Fortran Discourse’ to the e-lists section. We have also made changes to the Latex style sheet. • September 2020. Added a computer arithmetic and IEEE formats section. • June 2020. Updated the compiler entry with details of standard conformance.
    [Show full text]
  • Object Oriented Programming in Java Object Oriented
    Object Oriented Programming in Java Introduction Object Oriented Programming in Java Introduction to Computer Science II I Java is Object-Oriented I Not pure object oriented Christopher M. Bourke I Differs from other languages in how it achieves and implements OOP [email protected] functionality I OOP style programming requires practice Objects in Java Objects in Java Java is a class-based OOP language Definition Contrast with proto-type based OOP languages A class is a construct that is used as a blueprint to create instances of I Example: JavaScript itself. I No classes, only instances (of objects) I Constructed from nothing (ex-nihilo) I Objects are concepts; classes are Java’s realization of that concept I Inheritance through cloning of original prototype object I Classes are a definition of all objects of a specific type (instances) I Interface is build-able, mutable at runtime I Classes provide an explicit blueprint of its members and their visibility I Instances of a class must be explicitly created Objects in Java Objects in JavaI Paradigm: Singly-Rooted Hierarchy Object methods 1 //ignore: 2 protected Object clone(); 3 protected void finalize(); I All classes are subclasses of Object 4 Class<? extends Object> getClass(); 5 I Object is a java object, not an OOP object 6 //multithreaded applications: I Makes garbage collection easier 7 public void notify(); 8 public void notifyAll(); I All instances have a type and that type can be determined 9 public void wait(); I Provides a common, universal minimum interface for objects 10 public
    [Show full text]
  • Better PHP Development I
    Better PHP Development i Better PHP Development Copyright © 2017 SitePoint Pty. Ltd. Cover Design: Natalia Balska Notice of Rights All rights reserved. No part of this book may be reproduced, stored in a retrieval system or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embodied in critical articles or reviews. Notice of Liability The author and publisher have made every effort to ensure the accuracy of the information herein. However, the information contained in this book is sold without warranty, either express or implied. Neither the authors and SitePoint Pty. Ltd., nor its dealers or distributors will be held liable for any damages to be caused either directly or indirectly by the instructions contained in this book, or by the software or hardware products described herein. Trademark Notice Rather than indicating every occurrence of a trademarked name as such, this book uses the names only in an editorial fashion and to the benefit of the trademark owner with no intention of infringement of the trademark. Published by SitePoint Pty. Ltd. 48 Cambridge Street Collingwood VIC Australia 3066 Web: www.sitepoint.com Email: [email protected] ii Better PHP Development About SitePoint SitePoint specializes in publishing fun, practical, and easy-to-understand content for web professionals. Visit http://www.sitepoint.com/ to access our blogs, books, newsletters, articles, and community forums. You’ll find a stack of information on JavaScript, PHP, design,
    [Show full text]
  • Introducing Javascript OSA
    Introducing JavaScript OSA Late Night SOFTWARE Contents CHAPTER 1 What is JavaScript OSA?....................................................................... 1 The OSA ........................................................................................................................ 2 Why JavaScript? ............................................................................................................ 3 CHAPTER 2 JavaScript Examples.............................................................................. 5 Learning JavaScript ....................................................................................................... 6 Sieve of Eratosthenes..................................................................................................... 7 Word Histogram Example ............................................................................................. 8 Area of a Polygon .......................................................................................................... 9 CHAPTER 3 The Core Object ................................................................................... 13 Talking to the User ...................................................................................................... 14 Places ........................................................................................................................... 14 Where Am I?................................................................................................................ 14 Who Am I? .................................................................................................................
    [Show full text]
  • With SCL and C/C++ 3 Graphics for Guis and Data Plotting 4 Implementing Computational Models with C and Graphics José M
    Presentation Agenda Using Cross-Platform Graphic Packages for 1 General Goals GUIs and Data Plotting 2 Concepts and Background Overview with SCL and C/C++ 3 Graphics for GUIs and data plotting 4 Implementing Computational Models with C and graphics José M. Garrido C. 5 Demonstration of C programs using graphic libraries on Linux Department of Computer Science College of Science and Mathematics cs.kennesaw.edu/~jgarrido/comp_models Kennesaw State University November 7, 2014 José M. Garrido C. Graphic Packages for GUIs and Data Plotting José M. Garrido C. Graphic Packages for GUIs and Data Plotting A Computational Model Abstraction and Decomposition An software implementation of the solution to a (scientific) Abstraction is recognized as a fundamental and essential complex problem principle in problem solving and software development. It usually requires a mathematical model or mathematical Abstraction and decomposition are extremely important representation that has been formulated for the problem. in dealing with large and complex systems. The software implementation often requires Abstraction is the activity of hiding the details and exposing high-performance computing (HPC) to run. only the essential features of a particular system. In modeling, one of the critical tasks is representing the various aspects of a system at different levels of abstraction. A good abstraction captures the essential elements of a system, and purposely leaving out the rest. José M. Garrido C. Graphic Packages for GUIs and Data Plotting José M. Garrido C. Graphic Packages for GUIs and Data Plotting Developing a Computational Model Levels of Abstraction in the Process The process of developing a computational model can be divided in three levels: 1 Prototyping, using the Matlab programming language 2 Performance implementation, using: C or Fortran programming languages.
    [Show full text]
  • Plotting Package Evaluation
    Plotting package evaluation Introduction We would like to evaluate several graphics packages for possible use in the GLAST Standard Analysis Environment. It is hoped that this testing will lead to a recommendation for a plotting package to be adopted for use by the science tools. We will describe the packages we want to test, the tests we want to do to (given the short time and resources for doing this), and then the results of the evaluation. Finally we will discuss the conclusions of our testing and hopefully make a recommendation. According to the draft requirements document for plotting packages the top candidates are: ROOT VTK VisAD JAS PLPLOT There has been some discussion about using some python plotting package: e.g.,Chaco, SciPy, and possibly Biggles (suggested in Computers in Science and Engineering). A desired feature is have is the ability to get the cursor position back from the graphics package. We will look for this desired feature. An additional desired feature would be to have the same graphics package make widgets or have a closely associated widget friend. Widget friends will not be tested here, but will have to studied before agreeing to use it. Package Widget Friend(s) Comments Biggles WxPython Plplot PyQt, Tk, java The Python Qt interface is only experimental at present. ROOT Comes with its own GUI INTEGRAL makes GUIs from ROOT graphics libs. We hear this was a bit of a challenge to do, but much of the work is already done for us. for us. Tests: The testing is to be carried out separately in the Windows and Linux environments.
    [Show full text]
  • Concepts in Programming Languages Practicalities
    Concepts in Programming Languages Practicalities I Course web page: Alan Mycroft1 www.cl.cam.ac.uk/teaching/1617/ConceptsPL/ with lecture slides, exercise sheet and reading material. These slides play two roles – both “lecture notes" and “presentation material”; not every slide will be lectured in Computer Laboratory detail. University of Cambridge I There are various code examples (particularly for 2016–2017 (Easter Term) JavaScript and Java applets) on the ‘materials’ tab of the course web page. I One exam question. www.cl.cam.ac.uk/teaching/1617/ConceptsPL/ I The syllabus and course has changed somewhat from that of 2015/16. I would be grateful for comments on any remaining ‘rough edges’, and for views on material which is either over- or under-represented. 1Acknowledgement: various slides are based on Marcelo Fiore’s 2013/14 course. Alan Mycroft Concepts in Programming Languages 1 / 237 Alan Mycroft Concepts in Programming Languages 2 / 237 Main books Context: so many programming languages I J. C. Mitchell. Concepts in programming languages. Cambridge University Press, 2003. Peter J. Landin: “The Next 700 Programming Languages”, I T.W. Pratt and M. V.Zelkowitz. Programming Languages: CACM (published in 1966!). Design and implementation (3RD EDITION). Some programming-language ‘family trees’ (too big for slide): Prentice Hall, 1999. http://www.oreilly.com/go/languageposter http://www.levenez.com/lang/ ? M. L. Scott. Programming language pragmatics http://rigaux.org/language-study/diagram.html (4TH EDITION). http://www.rackspace.com/blog/ Elsevier, 2016. infographic-evolution-of-computer-languages/ I R. Harper. Practical Foundations for Programming Plan of this course: pick out interesting programming-language Languages.
    [Show full text]
  • Volume 30 Number 1 March 2009
    ADA Volume 30 USER Number 1 March 2009 JOURNAL Contents Page Editorial Policy for Ada User Journal 2 Editorial 3 News 5 Conference Calendar 30 Forthcoming Events 37 Articles J. Barnes “Thirty Years of the Ada User Journal” 43 J. W. Moore, J. Benito “Progress Report: ISO/IEC 24772, Programming Language Vulnerabilities” 46 Articles from the Industrial Track of Ada-Europe 2008 B. J. Moore “Distributed Status Monitoring and Control Using Remote Buffers and Ada 2005” 49 Ada Gems 61 Ada-Europe Associate Members (National Ada Organizations) 64 Ada-Europe 2008 Sponsors Inside Back Cover Ada User Journal Volume 30, Number 1, March 2009 2 Editorial Policy for Ada User Journal Publication Original Papers Commentaries Ada User Journal — The Journal for Manuscripts should be submitted in We publish commentaries on Ada and the international Ada Community — is accordance with the submission software engineering topics. These published by Ada-Europe. It appears guidelines (below). may represent the views either of four times a year, on the last days of individuals or of organisations. Such March, June, September and All original technical contributions are articles can be of any length – December. Copy date is the last day of submitted to refereeing by at least two inclusion is at the discretion of the the month of publication. people. Names of referees will be kept Editor. confidential, but their comments will Opinions expressed within the Ada Aims be relayed to the authors at the discretion of the Editor. User Journal do not necessarily Ada User Journal aims to inform represent the views of the Editor, Ada- readers of developments in the Ada The first named author will receive a Europe or its directors.
    [Show full text]
  • The C Programming Language
    The C programming Language The C programming Language By Brian W. Kernighan and Dennis M. Ritchie. Published by Prentice-Hall in 1988 ISBN 0-13-110362-8 (paperback) ISBN 0-13-110370-9 Contents ● Preface ● Preface to the first edition ● Introduction 1. Chapter 1: A Tutorial Introduction 1. Getting Started 2. Variables and Arithmetic Expressions 3. The for statement 4. Symbolic Constants 5. Character Input and Output 1. File Copying 2. Character Counting 3. Line Counting 4. Word Counting 6. Arrays 7. Functions 8. Arguments - Call by Value 9. Character Arrays 10. External Variables and Scope 2. Chapter 2: Types, Operators and Expressions 1. Variable Names 2. Data Types and Sizes 3. Constants 4. Declarations http://freebooks.by.ru/view/CProgrammingLanguage/kandr.html (1 of 5) [5/15/2002 10:12:59 PM] The C programming Language 5. Arithmetic Operators 6. Relational and Logical Operators 7. Type Conversions 8. Increment and Decrement Operators 9. Bitwise Operators 10. Assignment Operators and Expressions 11. Conditional Expressions 12. Precedence and Order of Evaluation 3. Chapter 3: Control Flow 1. Statements and Blocks 2. If-Else 3. Else-If 4. Switch 5. Loops - While and For 6. Loops - Do-While 7. Break and Continue 8. Goto and labels 4. Chapter 4: Functions and Program Structure 1. Basics of Functions 2. Functions Returning Non-integers 3. External Variables 4. Scope Rules 5. Header Files 6. Static Variables 7. Register Variables 8. Block Structure 9. Initialization 10. Recursion 11. The C Preprocessor 1. File Inclusion 2. Macro Substitution 3. Conditional Inclusion 5. Chapter 5: Pointers and Arrays 1.
    [Show full text]
  • 210 CHAPTER 7. NAMES and BINDING Chapter 8
    210 CHAPTER 7. NAMES AND BINDING Chapter 8 Expressions and Evaluation Overview This chapter introduces the concept of the programming environment and the role of expressions in a program. Programs are executed in an environment which is provided by the operating system or the translator. An editor, linker, file system, and compiler form the environment in which the programmer can enter and run programs. Interac- tive language systems, such as APL, FORTH, Prolog, and Smalltalk among others, are embedded in subsystems which replace the operating system in forming the program- development environment. The top-level control structure for these subsystems is the Read-Evaluate-Write cycle. The order of computation within a program is controlled in one of three basic ways: nesting, sequencing, or signaling other processes through the shared environment or streams which are managed by the operating system. Within a program, an expression is a nest of function calls or operators that returns a value. Binary operators written between their arguments are used in infix syntax. Unary and binary operators written before a single argument or a pair of arguments are used in prefix syntax. In postfix syntax, operators (unary or binary) follow their arguments. Parse trees can be developed from expressions that include infix, prefix and postfix operators. Rules for precedence, associativity, and parenthesization determine which operands belong to which operators. The rules that define order of evaluation for elements of a function call are as follows: • Inside-out: Evaluate every argument before beginning to evaluate the function. 211 212 CHAPTER 8. EXPRESSIONS AND EVALUATION • Outside-in: Start evaluating the function body.
    [Show full text]
  • CC Data Visualization Library
    CC Data Visualization Library: Visualizing large amounts of scientific data through interactive graph widgets on ordinary workstations Master of Science Thesis in the programmes Interaction Design & Algorithms, Languages and Logic MAX OCKLIND ERIK WIKLUND Chalmers University of Technology Department of Computer Science and Engineering Göteborg, Sweden, May 2012 The Authors grant to Chalmers University of Technology the non-exclusive right to publish the Work electronically and in a non-commercial purpose make it accessible on the Internet. The Authors warrant that they are the authors to the Work, and warrant that the Work does not contain text, pictures or other material that violates copyright law. The Authors shall, when transferring the rights of the Work to a third party (for example a publisher or a company), acknowledge the third party about this agreement. If the Authors have signed a copyright agreement with a third party regarding the Work, the Authors warrant hereby that they have obtained any necessary permission from this third party to let Chalmers University of Technology store the Work electronically and make it accessible on the Internet. CC Data Visualization Library: Visualizing large amounts of scientific data through interactive graph widgets on ordinary workstations MAX OCKLIND ERIK WIKLUND © MAX OCKLIND, May 2012. © ERIK WIKLUND, May 2012. Examiner: Olof Torgersson Chalmers University of Technology Department of Computer Science and Engineering SE-412 96 Göteborg Sweden Telephone + 46 (0)31-772 1000 Cover: The GUI of the CCDVL library during a test run, showing a scatter plot graph of sample data with a lasso selection overlay. Sections 4.2.3 FRONTEND AND GUI ANALYSIS AND DESIGN and 4.3.3 FRONTEND AND GUI IMPLEMENTATION as well as APPENDIX B - MANUAL AND USER GUIDE contains detailed descriptions of the GUI and frontend.
    [Show full text]