L Fu - Dao: a novel programming language for bioinformatics

Jan Aerts
Jan AertsAssistant Professor at Leuven University
Motivation      Example Features   Concurrent Programming   JIT   ClangDao   Future




             Dao: a novel programming language for
                         bioinformatics

                                       Limin Fu

                                   UC San Diego


                                    BOSC 2012


                                     July 14, 2012
Motivation      Example Features   Concurrent Programming   JIT   ClangDao    Future




Why a new language for bioinformatics?



       A simple fact:
       Programming languages commonly used in bioinformatics are
       designed before:
             multi-core machines started to become common;
             some important programming paradigms are widely accepted.

       Once a language has got a lot of backward compatibility to maintain,
       it becomes very hard to add new features or support new
       programming paradigms without introducing inconsistency!
Motivation       Example Features   Concurrent Programming   JIT   ClangDao   Future




Dao programming language (http://daovm.net)




       Key Features
             Optional typing with type inference and static type checking;
             Native support for concurrent programming;
             LLVM-based Just-In-Time (JIT) compiling;
             Simple C interfaces for easy embedding and extending;
             Clang-based tool for automatic wrapping of C/C++ libraries;
Motivation    Example Features   Concurrent Programming   JIT   ClangDao   Future




A simple example
       Use thread task to compute the sum of squares:
       # Start a thread task and return a future value:
       fut = mt.start( $now )::{
           sum2 = 0
           for( i = 1 : 1000 ) sum2 += i * i
           return sum2
       }
Motivation           Example Features      Concurrent Programming    JIT     ClangDao   Future




A simple example
       Use thread task to compute the sum of squares:
       # Start a thread task and return a future value:
       fut = mt.start( $now )::{
           sum2 = 0
           for( i = 1 : 1000 ) sum2 += i * i
           return sum2
       }


             Due to type inference, variable fut will be a future value with type,
         future<int>
             It is optional to write the type explicitly as the following,
         fut : future<int> = mt.start( $now )::{ ...
Motivation         Example Features      Concurrent Programming   JIT   ClangDao      Future




A simple example
       Use thread task to compute the sum of squares:
       # Start a thread task and return a future value:
       fut = mt.start( $now )::{
           sum2 = 0
           for( i = 1 : 1000 ) sum2 += i * i
           return sum2
       }


             mt   built-in module for multi-threading;
             mt.start()::{}           a code section method to start a thread task;
             The thread task will be executed in a different thread.
Motivation         Example Features   Concurrent Programming   JIT   ClangDao   Future




A simple example
       Use thread task to compute the sum of squares:
       # Start a thread task and return a future value:
       fut = mt.start( $now )::{
           sum2 = 0
           for( i = 1 : 1000 ) sum2 += i * i
           return sum2
       }


             An enum symbol to request immediate start of the thread task.
             (More or less a combination of C++ enum and Ruby symbol.)
Motivation       Example Features    Concurrent Programming   JIT       ClangDao       Future




Concurrent programming: parallelized code section methods


       Parallelized code section methods
       The multi-threading module mt provides a number of parallelized
       code section methods:
             mt.iterate(): iterate on array, list, map, or a number of iteration;
             mt.map(): map items of array, list or map to produce new array or list;
             mt.apply(): apply new values to the items of array, list or map;
             mt.find(): find the first item that satisfy a condition;
       Example,
       ls = {1,2,3,4,5,6}
       # Parallel iteration:
       mt.iterate( times => 10 )::{ [index] io.writeln( index ) }
       mt.iterate( ls, threads => 2 )::{ [item] io.writeln( item ) }
       # Parallel mapping and value application:
       ls2 = mt.map( ls, 2 )::{ [it] it*it } # ls2 = {1,4,9,16,25,36}
       mt.apply( ls, 2 )::{ [it] it*it } # ls = {1,4,9,16,25,36}
Motivation       Example Features   Concurrent Programming   JIT   ClangDao   Future




Concurrent programming: asynchronous classes


       Asynchronous classes
             Asynchronous classes produce asynchronous instances;
             Calling a method will automatically create a thread task;
          Thread tasks on the same instance are queued for execution.
       Example,
       class @Clustering {
           routine Run(){ DoKmeansClustering() }
       }
       cls = Clustering()
       job = cls.Run()
       while( 1 ){
           DoSomethingElse();
           if( job.wait( 0.1 ) ) break; # wait for 0.1 second
       }
Motivation       Example Features   Concurrent Programming   JIT   ClangDao   Future




LLVM-based Just-In-Time (JIT) compiler

             Based on the Low Level Virtual Machine (LLVM);
             Emphasis on numeric computation;
             Compiles a subset of Dao virtual machine instructions;
Motivation              Example Features          Concurrent Programming           JIT            ClangDao   Future




LLVM-based Just-In-Time (JIT) compiler

                 Based on the Low Level Virtual Machine (LLVM);
                 Emphasis on numeric computation;
                 Compiles a subset of Dao virtual machine instructions;

       JIT Performance Test (time in seconds)
             Program           Argument          Dao     Dao+JIT       Speedup           Python   C (-O2)

             fannkuch                      11   100.5         22.8          4.4X          339.3        4.8
             mandelbrot               4000       40.0          5.1          7.8X          158.8        3.8
             nbody              10000000         63.5         19.2          3.4X          333.4        2.4
             spectral-norm            5000       98.0          7.6         12.8X          985.5        7.7
             binary-trees                  16    64.4         64.4          1.0X           22.3        5.5

       Note: benchmark programs are taken from Computer Language Benchmarks Game
       http://shootout.alioth.debian.org
Motivation       Example Features    Concurrent Programming   JIT    ClangDao   Future




ClangDao:              bringing C/C++ libraries to your finger tips




             Based on Clang (C Language Family Frontend for LLVM);
             Generate bindings directly from C/C++ header files;
             Support C/C++ functions, C structs, C callbacks, C++ classes
             and inheritance, C++ virtual functions, C++ templates (to some
             extent) etc.;
Motivation            Example Features       Concurrent Programming        JIT          ClangDao   Future




ClangDao:                      bringing C/C++ libraries to your finger tips



       List of bindings generated by ClangDao
                 Scientific:      DaoGSL                GNU Science Library (GSL)
                                 DaoBamTools           BamTools
                                 DaoGenomeTools        GenomeTools
                                 DaoSVM                LibSVM (Support Vector Machine)
              Visualization:     DaoVTK                Visualization Toolkit
                                 DaoMathGL             MathGL
              2D Graphics:       DaoGraphicsMagick     GraphicsMagick
              3D Graphics:       DaoOpenGL             OpenGL
                                 DaoHorde3D            Horde3D Engine
                                 DaoIrrlicht           Irrlicht 3D Engine
                Multimedia:      DaoSDL                Simple DirectMedia Layer (SDL)
                                 DaoSFML               Simple and Fast Multimedia Library
                       GUI:      DaoFLTK               Fast Light Toolkit (FLTK)
             Miscellaneous:      DaoXML                libxml2
                                 DaoBullet             Bullet Physics Engine
                                 DaoGameKit            GameKit Game Engine
                                 DaoGamePlay           GamePlay Game Engine
Motivation       Example Features   Concurrent Programming   JIT   ClangDao   Future




Future development


       The development of Dao in the context of bioinformatics
       BioDao : future<Dao::Bioinformatics> = mt.start::{
           DevelopDaoPackages( field => Bioinformatics )
       }

             It should lead to an open source project named BioDao;
             This project will provide a large number of modules and
             packages for bioinformatics;
             It may start from screening candidate C/C++ bioinformatics
             libraries for automatic or semi-automatic binding;
             Suggestions for such libraries are highly welcome.
Motivation   Example Features    Concurrent Programming   JIT   ClangDao   Future




                                Thank you!


       Links and Contacts
       http://daovm.net
       https://github.com/daokoder
       daokoder@gmail.com
       l2fu@ucsd.edu
1 of 15

Recommended

Know yourengines velocity2011 by
Know yourengines velocity2011Know yourengines velocity2011
Know yourengines velocity2011Demis Bellot
116.1K views192 slides
Java 7 - New Features - by Mihail Stoynov and Svetlin Nakov by
Java 7 - New Features - by Mihail Stoynov and Svetlin NakovJava 7 - New Features - by Mihail Stoynov and Svetlin Nakov
Java 7 - New Features - by Mihail Stoynov and Svetlin NakovSvetlin Nakov
2.3K views141 slides
Attention mechanisms with tensorflow by
Attention mechanisms with tensorflowAttention mechanisms with tensorflow
Attention mechanisms with tensorflowKeon Kim
35.7K views67 slides
Java session13 by
Java session13Java session13
Java session13Niit Care
1K views24 slides
Java concurrency by
Java concurrencyJava concurrency
Java concurrencyHithem Ahmed
837 views32 slides
Deuce STM - CMP'09 by
Deuce STM - CMP'09Deuce STM - CMP'09
Deuce STM - CMP'09Guy Korland
1.6K views45 slides

More Related Content

What's hot

Zero-Overhead Metaprogramming: Reflection and Metaobject Protocols Fast and w... by
Zero-Overhead Metaprogramming: Reflection and Metaobject Protocols Fast and w...Zero-Overhead Metaprogramming: Reflection and Metaobject Protocols Fast and w...
Zero-Overhead Metaprogramming: Reflection and Metaobject Protocols Fast and w...Stefan Marr
3K views28 slides
06 - Qt Communication by
06 - Qt Communication06 - Qt Communication
06 - Qt CommunicationAndreas Jakl
2.2K views36 slides
Generating Assertion Code from OCL: A Transformational Approach Based on Simi... by
Generating Assertion Code from OCL: A Transformational Approach Based on Simi...Generating Assertion Code from OCL: A Transformational Approach Based on Simi...
Generating Assertion Code from OCL: A Transformational Approach Based on Simi...Shinpei Hayashi
18.5K views23 slides
[JavaOne 2011] Models for Concurrent Programming by
[JavaOne 2011] Models for Concurrent Programming[JavaOne 2011] Models for Concurrent Programming
[JavaOne 2011] Models for Concurrent ProgrammingTobias Lindaaker
1.3K views64 slides
Exploiting Concurrency with Dynamic Languages by
Exploiting Concurrency with Dynamic LanguagesExploiting Concurrency with Dynamic Languages
Exploiting Concurrency with Dynamic LanguagesTobias Lindaaker
1.5K views41 slides
Async await in C++ by
Async await in C++Async await in C++
Async await in C++cppfrug
13.8K views42 slides

What's hot(20)

Zero-Overhead Metaprogramming: Reflection and Metaobject Protocols Fast and w... by Stefan Marr
Zero-Overhead Metaprogramming: Reflection and Metaobject Protocols Fast and w...Zero-Overhead Metaprogramming: Reflection and Metaobject Protocols Fast and w...
Zero-Overhead Metaprogramming: Reflection and Metaobject Protocols Fast and w...
Stefan Marr3K views
06 - Qt Communication by Andreas Jakl
06 - Qt Communication06 - Qt Communication
06 - Qt Communication
Andreas Jakl2.2K views
Generating Assertion Code from OCL: A Transformational Approach Based on Simi... by Shinpei Hayashi
Generating Assertion Code from OCL: A Transformational Approach Based on Simi...Generating Assertion Code from OCL: A Transformational Approach Based on Simi...
Generating Assertion Code from OCL: A Transformational Approach Based on Simi...
Shinpei Hayashi18.5K views
[JavaOne 2011] Models for Concurrent Programming by Tobias Lindaaker
[JavaOne 2011] Models for Concurrent Programming[JavaOne 2011] Models for Concurrent Programming
[JavaOne 2011] Models for Concurrent Programming
Tobias Lindaaker1.3K views
Exploiting Concurrency with Dynamic Languages by Tobias Lindaaker
Exploiting Concurrency with Dynamic LanguagesExploiting Concurrency with Dynamic Languages
Exploiting Concurrency with Dynamic Languages
Tobias Lindaaker1.5K views
Async await in C++ by cppfrug
Async await in C++Async await in C++
Async await in C++
cppfrug13.8K views
Concurrency in Python by konryd
Concurrency in PythonConcurrency in Python
Concurrency in Python
konryd1.3K views
Sentence-to-Code Traceability Recovery with Domain Ontologies by Shinpei Hayashi
Sentence-to-Code Traceability Recovery with Domain OntologiesSentence-to-Code Traceability Recovery with Domain Ontologies
Sentence-to-Code Traceability Recovery with Domain Ontologies
Shinpei Hayashi19.7K views
TensorFlow Lite (r1.5) & Android 8.1 Neural Network API by Mr. Vengineer
TensorFlow Lite (r1.5) & Android 8.1 Neural Network APITensorFlow Lite (r1.5) & Android 8.1 Neural Network API
TensorFlow Lite (r1.5) & Android 8.1 Neural Network API
Mr. Vengineer5.8K views
NDK Primer (AnDevCon Boston 2014) by Ron Munitz
NDK Primer (AnDevCon Boston 2014)NDK Primer (AnDevCon Boston 2014)
NDK Primer (AnDevCon Boston 2014)
Ron Munitz437 views
Java Multiple Choice Questions and Answers by Java Projects
Java Multiple Choice Questions and AnswersJava Multiple Choice Questions and Answers
Java Multiple Choice Questions and Answers
Java Projects6.1K views
Detecting Occurrences of Refactoring with Heuristic Search by Shinpei Hayashi
Detecting Occurrences of Refactoring with Heuristic SearchDetecting Occurrences of Refactoring with Heuristic Search
Detecting Occurrences of Refactoring with Heuristic Search
Shinpei Hayashi18.8K views
Seeing with Python presented at PyCon AU 2014 by Mark Rees
Seeing with Python presented at PyCon AU 2014Seeing with Python presented at PyCon AU 2014
Seeing with Python presented at PyCon AU 2014
Mark Rees2.4K views
JCConf 2018 - Retrospect and Prospect of Java by Joseph Kuo
JCConf 2018 - Retrospect and Prospect of JavaJCConf 2018 - Retrospect and Prospect of Java
JCConf 2018 - Retrospect and Prospect of Java
Joseph Kuo570 views
Optimizing Communicating Event-Loop Languages with Truffle by Stefan Marr
Optimizing Communicating Event-Loop Languages with TruffleOptimizing Communicating Event-Loop Languages with Truffle
Optimizing Communicating Event-Loop Languages with Truffle
Stefan Marr1.3K views
What is new and cool j2se & java by Eugene Bogaart
What is new and cool j2se & javaWhat is new and cool j2se & java
What is new and cool j2se & java
Eugene Bogaart853 views
TWJUG x Oracle Groundbreakers 2019 Taiwan - What’s New in Last Java Versions by Joseph Kuo
TWJUG x Oracle Groundbreakers 2019 Taiwan - What’s New in Last Java VersionsTWJUG x Oracle Groundbreakers 2019 Taiwan - What’s New in Last Java Versions
TWJUG x Oracle Groundbreakers 2019 Taiwan - What’s New in Last Java Versions
Joseph Kuo185 views
Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020 by Johnny Sung
Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020
Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020
Johnny Sung229 views
OpenMI Developers Training by Jan Gregersen
OpenMI Developers TrainingOpenMI Developers Training
OpenMI Developers Training
Jan Gregersen270 views

Similar to L Fu - Dao: a novel programming language for bioinformatics

Cross Platform App Development with C++ by
Cross Platform App Development with C++Cross Platform App Development with C++
Cross Platform App Development with C++Joan Puig Sanz
1.6K views35 slides
Unmanaged Parallelization via P/Invoke by
Unmanaged Parallelization via P/InvokeUnmanaged Parallelization via P/Invoke
Unmanaged Parallelization via P/InvokeDmitri Nesteruk
2.4K views42 slides
A Life of breakpoint by
A Life of breakpointA Life of breakpoint
A Life of breakpointHajime Morrita
1.5K views31 slides
Towards Safe Automated Refactoring of Imperative Deep Learning Programs to Gr... by
Towards Safe Automated Refactoring of Imperative Deep Learning Programs to Gr...Towards Safe Automated Refactoring of Imperative Deep Learning Programs to Gr...
Towards Safe Automated Refactoring of Imperative Deep Learning Programs to Gr...Raffi Khatchadourian
67 views25 slides
Introduction to Software Development by
Introduction to Software DevelopmentIntroduction to Software Development
Introduction to Software DevelopmentZeeshan MIrza
8.6K views34 slides
Native Java with GraalVM by
Native Java with GraalVMNative Java with GraalVM
Native Java with GraalVMSylvain Wallez
1K views38 slides

Similar to L Fu - Dao: a novel programming language for bioinformatics(20)

Cross Platform App Development with C++ by Joan Puig Sanz
Cross Platform App Development with C++Cross Platform App Development with C++
Cross Platform App Development with C++
Joan Puig Sanz1.6K views
Unmanaged Parallelization via P/Invoke by Dmitri Nesteruk
Unmanaged Parallelization via P/InvokeUnmanaged Parallelization via P/Invoke
Unmanaged Parallelization via P/Invoke
Dmitri Nesteruk2.4K views
Towards Safe Automated Refactoring of Imperative Deep Learning Programs to Gr... by Raffi Khatchadourian
Towards Safe Automated Refactoring of Imperative Deep Learning Programs to Gr...Towards Safe Automated Refactoring of Imperative Deep Learning Programs to Gr...
Towards Safe Automated Refactoring of Imperative Deep Learning Programs to Gr...
Introduction to Software Development by Zeeshan MIrza
Introduction to Software DevelopmentIntroduction to Software Development
Introduction to Software Development
Zeeshan MIrza8.6K views
Let's make it flow ... one way by Roberto Ciatti
Let's make it flow ... one wayLet's make it flow ... one way
Let's make it flow ... one way
Roberto Ciatti118 views
2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV) by JiandSon
2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)
2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)
JiandSon1.5K views
4CS4-25-Java-Lab-Manual.pdf by amitbhachne
4CS4-25-Java-Lab-Manual.pdf4CS4-25-Java-Lab-Manual.pdf
4CS4-25-Java-Lab-Manual.pdf
amitbhachne17 views
JVM Mechanics: When Does the JVM JIT & Deoptimize? by Doug Hawkins
JVM Mechanics: When Does the JVM JIT & Deoptimize?JVM Mechanics: When Does the JVM JIT & Deoptimize?
JVM Mechanics: When Does the JVM JIT & Deoptimize?
Doug Hawkins12.7K views
Skiron - Experiments in CPU Design in D by Mithun Hunsur
Skiron - Experiments in CPU Design in DSkiron - Experiments in CPU Design in D
Skiron - Experiments in CPU Design in D
Mithun Hunsur456 views
What's new with JavaScript in GNOME: The 2020 edition (GUADEC 2020) by Igalia
What's new with JavaScript in GNOME: The 2020 edition (GUADEC 2020)What's new with JavaScript in GNOME: The 2020 edition (GUADEC 2020)
What's new with JavaScript in GNOME: The 2020 edition (GUADEC 2020)
Igalia64 views
Overview Of Parallel Development - Ericnel by ukdpe
Overview Of Parallel Development -  EricnelOverview Of Parallel Development -  Ericnel
Overview Of Parallel Development - Ericnel
ukdpe715 views
Google Web Toolkit by chris be
Google Web ToolkitGoogle Web Toolkit
Google Web Toolkit
chris be1.9K views
14.jun.2012 by Tech_MX
14.jun.201214.jun.2012
14.jun.2012
Tech_MX388 views
Intro to GPGPU Programming with Cuda by Rob Gillen
Intro to GPGPU Programming with CudaIntro to GPGPU Programming with Cuda
Intro to GPGPU Programming with Cuda
Rob Gillen3.8K views
Distributed computing with Ray. Find your hyper-parameters, speed up your Pan... by Jan Margeta
Distributed computing with Ray. Find your hyper-parameters, speed up your Pan...Distributed computing with Ray. Find your hyper-parameters, speed up your Pan...
Distributed computing with Ray. Find your hyper-parameters, speed up your Pan...
Jan Margeta730 views
Framework engineering JCO 2011 by YoungSu Son
Framework engineering JCO 2011Framework engineering JCO 2011
Framework engineering JCO 2011
YoungSu Son1.6K views

More from Jan Aerts

VIZBI 2014 - Visualizing Genomic Variation by
VIZBI 2014 - Visualizing Genomic VariationVIZBI 2014 - Visualizing Genomic Variation
VIZBI 2014 - Visualizing Genomic VariationJan Aerts
1.6K views34 slides
Visual Analytics in Omics - why, what, how? by
Visual Analytics in Omics - why, what, how?Visual Analytics in Omics - why, what, how?
Visual Analytics in Omics - why, what, how?Jan Aerts
2.5K views62 slides
Visual Analytics in Omics: why, what, how? by
Visual Analytics in Omics: why, what, how?Visual Analytics in Omics: why, what, how?
Visual Analytics in Omics: why, what, how?Jan Aerts
1.1K views49 slides
Visual Analytics talk at ISMB2013 by
Visual Analytics talk at ISMB2013Visual Analytics talk at ISMB2013
Visual Analytics talk at ISMB2013Jan Aerts
979 views35 slides
Visualizing the Structural Variome (VMLS-Eurovis 2013) by
Visualizing the Structural Variome (VMLS-Eurovis 2013)Visualizing the Structural Variome (VMLS-Eurovis 2013)
Visualizing the Structural Variome (VMLS-Eurovis 2013)Jan Aerts
945 views26 slides
Humanizing Data Analysis by
Humanizing Data AnalysisHumanizing Data Analysis
Humanizing Data AnalysisJan Aerts
712 views23 slides

More from Jan Aerts(20)

VIZBI 2014 - Visualizing Genomic Variation by Jan Aerts
VIZBI 2014 - Visualizing Genomic VariationVIZBI 2014 - Visualizing Genomic Variation
VIZBI 2014 - Visualizing Genomic Variation
Jan Aerts1.6K views
Visual Analytics in Omics - why, what, how? by Jan Aerts
Visual Analytics in Omics - why, what, how?Visual Analytics in Omics - why, what, how?
Visual Analytics in Omics - why, what, how?
Jan Aerts2.5K views
Visual Analytics in Omics: why, what, how? by Jan Aerts
Visual Analytics in Omics: why, what, how?Visual Analytics in Omics: why, what, how?
Visual Analytics in Omics: why, what, how?
Jan Aerts1.1K views
Visual Analytics talk at ISMB2013 by Jan Aerts
Visual Analytics talk at ISMB2013Visual Analytics talk at ISMB2013
Visual Analytics talk at ISMB2013
Jan Aerts979 views
Visualizing the Structural Variome (VMLS-Eurovis 2013) by Jan Aerts
Visualizing the Structural Variome (VMLS-Eurovis 2013)Visualizing the Structural Variome (VMLS-Eurovis 2013)
Visualizing the Structural Variome (VMLS-Eurovis 2013)
Jan Aerts945 views
Humanizing Data Analysis by Jan Aerts
Humanizing Data AnalysisHumanizing Data Analysis
Humanizing Data Analysis
Jan Aerts712 views
Intro to data visualization by Jan Aerts
Intro to data visualizationIntro to data visualization
Intro to data visualization
Jan Aerts6.7K views
J Wang - bioKepler: a comprehensive bioinformatics scientific workflow module... by Jan Aerts
J Wang - bioKepler: a comprehensive bioinformatics scientific workflow module...J Wang - bioKepler: a comprehensive bioinformatics scientific workflow module...
J Wang - bioKepler: a comprehensive bioinformatics scientific workflow module...
Jan Aerts907 views
S Cain - GMOD in the cloud by Jan Aerts
S Cain - GMOD in the cloudS Cain - GMOD in the cloud
S Cain - GMOD in the cloud
Jan Aerts542 views
B Temperton - The Bioinformatics Testing Consortium by Jan Aerts
B Temperton - The Bioinformatics Testing ConsortiumB Temperton - The Bioinformatics Testing Consortium
B Temperton - The Bioinformatics Testing Consortium
Jan Aerts924 views
J Goecks - The Galaxy Visual Analysis Framework by Jan Aerts
J Goecks - The Galaxy Visual Analysis FrameworkJ Goecks - The Galaxy Visual Analysis Framework
J Goecks - The Galaxy Visual Analysis Framework
Jan Aerts1.5K views
S Cain - GMOD in the cloud by Jan Aerts
S Cain - GMOD in the cloudS Cain - GMOD in the cloud
S Cain - GMOD in the cloud
Jan Aerts545 views
B Chapman - Toolkit for variation comparison and analysis by Jan Aerts
B Chapman - Toolkit for variation comparison and analysisB Chapman - Toolkit for variation comparison and analysis
B Chapman - Toolkit for variation comparison and analysis
Jan Aerts1.3K views
P Rocca-Serra - The open source ISA metadata tracking framework: from data cu... by Jan Aerts
P Rocca-Serra - The open source ISA metadata tracking framework: from data cu...P Rocca-Serra - The open source ISA metadata tracking framework: from data cu...
P Rocca-Serra - The open source ISA metadata tracking framework: from data cu...
Jan Aerts1.4K views
J Klein - KUPKB: sharing, connecting and exposing kidney and urinary knowledg... by Jan Aerts
J Klein - KUPKB: sharing, connecting and exposing kidney and urinary knowledg...J Klein - KUPKB: sharing, connecting and exposing kidney and urinary knowledg...
J Klein - KUPKB: sharing, connecting and exposing kidney and urinary knowledg...
Jan Aerts816 views
S Cheng - eagle-i: development and expansion of a scientific resource discove... by Jan Aerts
S Cheng - eagle-i: development and expansion of a scientific resource discove...S Cheng - eagle-i: development and expansion of a scientific resource discove...
S Cheng - eagle-i: development and expansion of a scientific resource discove...
Jan Aerts446 views
A Kanterakis - PyPedia: a python crowdsourcing development environment for bi... by Jan Aerts
A Kanterakis - PyPedia: a python crowdsourcing development environment for bi...A Kanterakis - PyPedia: a python crowdsourcing development environment for bi...
A Kanterakis - PyPedia: a python crowdsourcing development environment for bi...
Jan Aerts920 views
A Kalderimis - InterMine: Embeddable datamining components by Jan Aerts
A Kalderimis - InterMine: Embeddable datamining componentsA Kalderimis - InterMine: Embeddable datamining components
A Kalderimis - InterMine: Embeddable datamining components
Jan Aerts516 views
E Afgan - Zero to a bioinformatics analysis platform in four minutes by Jan Aerts
E Afgan - Zero to a bioinformatics analysis platform in four minutesE Afgan - Zero to a bioinformatics analysis platform in four minutes
E Afgan - Zero to a bioinformatics analysis platform in four minutes
Jan Aerts772 views
B Kinoshita - Creating biology pipelines with BioUno by Jan Aerts
B Kinoshita - Creating biology pipelines with BioUnoB Kinoshita - Creating biology pipelines with BioUno
B Kinoshita - Creating biology pipelines with BioUno
Jan Aerts497 views

Recently uploaded

iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas... by
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...Bernd Ruecker
50 views69 slides
Import Export Virtual Machine for KVM Hypervisor - Ayush Pandey - University ... by
Import Export Virtual Machine for KVM Hypervisor - Ayush Pandey - University ...Import Export Virtual Machine for KVM Hypervisor - Ayush Pandey - University ...
Import Export Virtual Machine for KVM Hypervisor - Ayush Pandey - University ...ShapeBlue
79 views17 slides
"Surviving highload with Node.js", Andrii Shumada by
"Surviving highload with Node.js", Andrii Shumada "Surviving highload with Node.js", Andrii Shumada
"Surviving highload with Node.js", Andrii Shumada Fwdays
53 views29 slides
Migrating VMware Infra to KVM Using CloudStack - Nicolas Vazquez - ShapeBlue by
Migrating VMware Infra to KVM Using CloudStack - Nicolas Vazquez - ShapeBlueMigrating VMware Infra to KVM Using CloudStack - Nicolas Vazquez - ShapeBlue
Migrating VMware Infra to KVM Using CloudStack - Nicolas Vazquez - ShapeBlueShapeBlue
176 views20 slides
Network Source of Truth and Infrastructure as Code revisited by
Network Source of Truth and Infrastructure as Code revisitedNetwork Source of Truth and Infrastructure as Code revisited
Network Source of Truth and Infrastructure as Code revisitedNetwork Automation Forum
52 views45 slides
2FA and OAuth2 in CloudStack - Andrija Panić - ShapeBlue by
2FA and OAuth2 in CloudStack - Andrija Panić - ShapeBlue2FA and OAuth2 in CloudStack - Andrija Panić - ShapeBlue
2FA and OAuth2 in CloudStack - Andrija Panić - ShapeBlueShapeBlue
103 views23 slides

Recently uploaded(20)

iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas... by Bernd Ruecker
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
Bernd Ruecker50 views
Import Export Virtual Machine for KVM Hypervisor - Ayush Pandey - University ... by ShapeBlue
Import Export Virtual Machine for KVM Hypervisor - Ayush Pandey - University ...Import Export Virtual Machine for KVM Hypervisor - Ayush Pandey - University ...
Import Export Virtual Machine for KVM Hypervisor - Ayush Pandey - University ...
ShapeBlue79 views
"Surviving highload with Node.js", Andrii Shumada by Fwdays
"Surviving highload with Node.js", Andrii Shumada "Surviving highload with Node.js", Andrii Shumada
"Surviving highload with Node.js", Andrii Shumada
Fwdays53 views
Migrating VMware Infra to KVM Using CloudStack - Nicolas Vazquez - ShapeBlue by ShapeBlue
Migrating VMware Infra to KVM Using CloudStack - Nicolas Vazquez - ShapeBlueMigrating VMware Infra to KVM Using CloudStack - Nicolas Vazquez - ShapeBlue
Migrating VMware Infra to KVM Using CloudStack - Nicolas Vazquez - ShapeBlue
ShapeBlue176 views
2FA and OAuth2 in CloudStack - Andrija Panić - ShapeBlue by ShapeBlue
2FA and OAuth2 in CloudStack - Andrija Panić - ShapeBlue2FA and OAuth2 in CloudStack - Andrija Panić - ShapeBlue
2FA and OAuth2 in CloudStack - Andrija Panić - ShapeBlue
ShapeBlue103 views
CloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&T by ShapeBlue
CloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&TCloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&T
CloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&T
ShapeBlue112 views
Extending KVM Host HA for Non-NFS Storage - Alex Ivanov - StorPool by ShapeBlue
Extending KVM Host HA for Non-NFS Storage -  Alex Ivanov - StorPoolExtending KVM Host HA for Non-NFS Storage -  Alex Ivanov - StorPool
Extending KVM Host HA for Non-NFS Storage - Alex Ivanov - StorPool
ShapeBlue84 views
NTGapps NTG LowCode Platform by Mustafa Kuğu
NTGapps NTG LowCode Platform NTGapps NTG LowCode Platform
NTGapps NTG LowCode Platform
Mustafa Kuğu365 views
State of the Union - Rohit Yadav - Apache CloudStack by ShapeBlue
State of the Union - Rohit Yadav - Apache CloudStackState of the Union - Rohit Yadav - Apache CloudStack
State of the Union - Rohit Yadav - Apache CloudStack
ShapeBlue253 views
Live Demo Showcase: Unveiling Dell PowerFlex’s IaaS Capabilities with Apache ... by ShapeBlue
Live Demo Showcase: Unveiling Dell PowerFlex’s IaaS Capabilities with Apache ...Live Demo Showcase: Unveiling Dell PowerFlex’s IaaS Capabilities with Apache ...
Live Demo Showcase: Unveiling Dell PowerFlex’s IaaS Capabilities with Apache ...
ShapeBlue85 views
Keynote Talk: Open Source is Not Dead - Charles Schulz - Vates by ShapeBlue
Keynote Talk: Open Source is Not Dead - Charles Schulz - VatesKeynote Talk: Open Source is Not Dead - Charles Schulz - Vates
Keynote Talk: Open Source is Not Dead - Charles Schulz - Vates
ShapeBlue210 views
CloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlue by ShapeBlue
CloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlueCloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlue
CloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlue
ShapeBlue94 views
Future of AR - Facebook Presentation by Rob McCarty
Future of AR - Facebook PresentationFuture of AR - Facebook Presentation
Future of AR - Facebook Presentation
Rob McCarty62 views
DRaaS using Snapshot copy and destination selection (DRaaS) - Alexandre Matti... by ShapeBlue
DRaaS using Snapshot copy and destination selection (DRaaS) - Alexandre Matti...DRaaS using Snapshot copy and destination selection (DRaaS) - Alexandre Matti...
DRaaS using Snapshot copy and destination selection (DRaaS) - Alexandre Matti...
ShapeBlue98 views
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N... by James Anderson
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...
James Anderson156 views
Business Analyst Series 2023 - Week 4 Session 7 by DianaGray10
Business Analyst Series 2023 -  Week 4 Session 7Business Analyst Series 2023 -  Week 4 Session 7
Business Analyst Series 2023 - Week 4 Session 7
DianaGray10126 views
The Power of Heat Decarbonisation Plans in the Built Environment by IES VE
The Power of Heat Decarbonisation Plans in the Built EnvironmentThe Power of Heat Decarbonisation Plans in the Built Environment
The Power of Heat Decarbonisation Plans in the Built Environment
IES VE69 views

L Fu - Dao: a novel programming language for bioinformatics

  • 1. Motivation Example Features Concurrent Programming JIT ClangDao Future Dao: a novel programming language for bioinformatics Limin Fu UC San Diego BOSC 2012 July 14, 2012
  • 2. Motivation Example Features Concurrent Programming JIT ClangDao Future Why a new language for bioinformatics? A simple fact: Programming languages commonly used in bioinformatics are designed before: multi-core machines started to become common; some important programming paradigms are widely accepted. Once a language has got a lot of backward compatibility to maintain, it becomes very hard to add new features or support new programming paradigms without introducing inconsistency!
  • 3. Motivation Example Features Concurrent Programming JIT ClangDao Future Dao programming language (http://daovm.net) Key Features Optional typing with type inference and static type checking; Native support for concurrent programming; LLVM-based Just-In-Time (JIT) compiling; Simple C interfaces for easy embedding and extending; Clang-based tool for automatic wrapping of C/C++ libraries;
  • 4. Motivation Example Features Concurrent Programming JIT ClangDao Future A simple example Use thread task to compute the sum of squares: # Start a thread task and return a future value: fut = mt.start( $now )::{ sum2 = 0 for( i = 1 : 1000 ) sum2 += i * i return sum2 }
  • 5. Motivation Example Features Concurrent Programming JIT ClangDao Future A simple example Use thread task to compute the sum of squares: # Start a thread task and return a future value: fut = mt.start( $now )::{ sum2 = 0 for( i = 1 : 1000 ) sum2 += i * i return sum2 } Due to type inference, variable fut will be a future value with type, future<int> It is optional to write the type explicitly as the following, fut : future<int> = mt.start( $now )::{ ...
  • 6. Motivation Example Features Concurrent Programming JIT ClangDao Future A simple example Use thread task to compute the sum of squares: # Start a thread task and return a future value: fut = mt.start( $now )::{ sum2 = 0 for( i = 1 : 1000 ) sum2 += i * i return sum2 } mt built-in module for multi-threading; mt.start()::{} a code section method to start a thread task; The thread task will be executed in a different thread.
  • 7. Motivation Example Features Concurrent Programming JIT ClangDao Future A simple example Use thread task to compute the sum of squares: # Start a thread task and return a future value: fut = mt.start( $now )::{ sum2 = 0 for( i = 1 : 1000 ) sum2 += i * i return sum2 } An enum symbol to request immediate start of the thread task. (More or less a combination of C++ enum and Ruby symbol.)
  • 8. Motivation Example Features Concurrent Programming JIT ClangDao Future Concurrent programming: parallelized code section methods Parallelized code section methods The multi-threading module mt provides a number of parallelized code section methods: mt.iterate(): iterate on array, list, map, or a number of iteration; mt.map(): map items of array, list or map to produce new array or list; mt.apply(): apply new values to the items of array, list or map; mt.find(): find the first item that satisfy a condition; Example, ls = {1,2,3,4,5,6} # Parallel iteration: mt.iterate( times => 10 )::{ [index] io.writeln( index ) } mt.iterate( ls, threads => 2 )::{ [item] io.writeln( item ) } # Parallel mapping and value application: ls2 = mt.map( ls, 2 )::{ [it] it*it } # ls2 = {1,4,9,16,25,36} mt.apply( ls, 2 )::{ [it] it*it } # ls = {1,4,9,16,25,36}
  • 9. Motivation Example Features Concurrent Programming JIT ClangDao Future Concurrent programming: asynchronous classes Asynchronous classes Asynchronous classes produce asynchronous instances; Calling a method will automatically create a thread task; Thread tasks on the same instance are queued for execution. Example, class @Clustering { routine Run(){ DoKmeansClustering() } } cls = Clustering() job = cls.Run() while( 1 ){ DoSomethingElse(); if( job.wait( 0.1 ) ) break; # wait for 0.1 second }
  • 10. Motivation Example Features Concurrent Programming JIT ClangDao Future LLVM-based Just-In-Time (JIT) compiler Based on the Low Level Virtual Machine (LLVM); Emphasis on numeric computation; Compiles a subset of Dao virtual machine instructions;
  • 11. Motivation Example Features Concurrent Programming JIT ClangDao Future LLVM-based Just-In-Time (JIT) compiler Based on the Low Level Virtual Machine (LLVM); Emphasis on numeric computation; Compiles a subset of Dao virtual machine instructions; JIT Performance Test (time in seconds) Program Argument Dao Dao+JIT Speedup Python C (-O2) fannkuch 11 100.5 22.8 4.4X 339.3 4.8 mandelbrot 4000 40.0 5.1 7.8X 158.8 3.8 nbody 10000000 63.5 19.2 3.4X 333.4 2.4 spectral-norm 5000 98.0 7.6 12.8X 985.5 7.7 binary-trees 16 64.4 64.4 1.0X 22.3 5.5 Note: benchmark programs are taken from Computer Language Benchmarks Game http://shootout.alioth.debian.org
  • 12. Motivation Example Features Concurrent Programming JIT ClangDao Future ClangDao: bringing C/C++ libraries to your finger tips Based on Clang (C Language Family Frontend for LLVM); Generate bindings directly from C/C++ header files; Support C/C++ functions, C structs, C callbacks, C++ classes and inheritance, C++ virtual functions, C++ templates (to some extent) etc.;
  • 13. Motivation Example Features Concurrent Programming JIT ClangDao Future ClangDao: bringing C/C++ libraries to your finger tips List of bindings generated by ClangDao Scientific: DaoGSL GNU Science Library (GSL) DaoBamTools BamTools DaoGenomeTools GenomeTools DaoSVM LibSVM (Support Vector Machine) Visualization: DaoVTK Visualization Toolkit DaoMathGL MathGL 2D Graphics: DaoGraphicsMagick GraphicsMagick 3D Graphics: DaoOpenGL OpenGL DaoHorde3D Horde3D Engine DaoIrrlicht Irrlicht 3D Engine Multimedia: DaoSDL Simple DirectMedia Layer (SDL) DaoSFML Simple and Fast Multimedia Library GUI: DaoFLTK Fast Light Toolkit (FLTK) Miscellaneous: DaoXML libxml2 DaoBullet Bullet Physics Engine DaoGameKit GameKit Game Engine DaoGamePlay GamePlay Game Engine
  • 14. Motivation Example Features Concurrent Programming JIT ClangDao Future Future development The development of Dao in the context of bioinformatics BioDao : future<Dao::Bioinformatics> = mt.start::{ DevelopDaoPackages( field => Bioinformatics ) } It should lead to an open source project named BioDao; This project will provide a large number of modules and packages for bioinformatics; It may start from screening candidate C/C++ bioinformatics libraries for automatic or semi-automatic binding; Suggestions for such libraries are highly welcome.
  • 15. Motivation Example Features Concurrent Programming JIT ClangDao Future Thank you! Links and Contacts http://daovm.net https://github.com/daokoder daokoder@gmail.com l2fu@ucsd.edu