SlideShare une entreprise Scribd logo
1  sur  15
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

[JavaOne 2011] Models for Concurrent Programming
[JavaOne 2011] Models for Concurrent Programming[JavaOne 2011] Models for Concurrent Programming
[JavaOne 2011] Models for Concurrent Programming
Tobias Lindaaker
 
Concurrency in Python
Concurrency in PythonConcurrency in Python
Concurrency in Python
konryd
 
What is new and cool j2se & java
What is new and cool j2se & javaWhat is new and cool j2se & java
What is new and cool j2se & java
Eugene Bogaart
 

Tendances (20)

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...
Zero-Overhead Metaprogramming: Reflection and Metaobject Protocols Fast and w...
 
06 - Qt Communication
06 - Qt Communication06 - Qt Communication
06 - Qt Communication
 
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...
Generating Assertion Code from OCL: A Transformational Approach Based on Simi...
 
[JavaOne 2011] Models for Concurrent Programming
[JavaOne 2011] Models for Concurrent Programming[JavaOne 2011] Models for Concurrent Programming
[JavaOne 2011] Models for Concurrent Programming
 
Exploiting Concurrency with Dynamic Languages
Exploiting Concurrency with Dynamic LanguagesExploiting Concurrency with Dynamic Languages
Exploiting Concurrency with Dynamic Languages
 
Async await in C++
Async await in C++Async await in C++
Async await in C++
 
Arvindsujeeth scaladays12
Arvindsujeeth scaladays12Arvindsujeeth scaladays12
Arvindsujeeth scaladays12
 
Concurrency in Python
Concurrency in PythonConcurrency in Python
Concurrency in Python
 
Sentence-to-Code Traceability Recovery with Domain Ontologies
Sentence-to-Code Traceability Recovery with Domain OntologiesSentence-to-Code Traceability Recovery with Domain Ontologies
Sentence-to-Code Traceability Recovery with Domain Ontologies
 
TensorFlow Lite (r1.5) & Android 8.1 Neural Network API
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
 
NDK Primer (AnDevCon Boston 2014)
NDK Primer (AnDevCon Boston 2014)NDK Primer (AnDevCon Boston 2014)
NDK Primer (AnDevCon Boston 2014)
 
Java Multiple Choice Questions and Answers
Java Multiple Choice Questions and AnswersJava Multiple Choice Questions and Answers
Java Multiple Choice Questions and Answers
 
Detecting Occurrences of Refactoring with Heuristic Search
Detecting Occurrences of Refactoring with Heuristic SearchDetecting Occurrences of Refactoring with Heuristic Search
Detecting Occurrences of Refactoring with Heuristic Search
 
Seeing with Python presented at PyCon AU 2014
Seeing with Python presented at PyCon AU 2014Seeing with Python presented at PyCon AU 2014
Seeing with Python presented at PyCon AU 2014
 
JCConf 2018 - Retrospect and Prospect of Java
JCConf 2018 - Retrospect and Prospect of JavaJCConf 2018 - Retrospect and Prospect of Java
JCConf 2018 - Retrospect and Prospect of Java
 
Optimizing Communicating Event-Loop Languages with Truffle
Optimizing Communicating Event-Loop Languages with TruffleOptimizing Communicating Event-Loop Languages with Truffle
Optimizing Communicating Event-Loop Languages with Truffle
 
What is new and cool j2se & java
What is new and cool j2se & javaWhat is new and cool j2se & java
What is new and cool j2se & java
 
TWJUG x Oracle Groundbreakers 2019 Taiwan - What’s New in Last Java Versions
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
 
Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020
Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020
Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020
 
OpenMI Developers Training
OpenMI Developers TrainingOpenMI Developers Training
OpenMI Developers Training
 

Similaire à L Fu - Dao: a novel programming language for bioinformatics

Unmanaged Parallelization via P/Invoke
Unmanaged Parallelization via P/InvokeUnmanaged Parallelization via P/Invoke
Unmanaged Parallelization via P/Invoke
Dmitri Nesteruk
 
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...
Towards Safe Automated Refactoring of Imperative Deep Learning Programs to Gr...
Raffi Khatchadourian
 
4CS4-25-Java-Lab-Manual.pdf
4CS4-25-Java-Lab-Manual.pdf4CS4-25-Java-Lab-Manual.pdf
4CS4-25-Java-Lab-Manual.pdf
amitbhachne
 
14.jun.2012
14.jun.201214.jun.2012
14.jun.2012
Tech_MX
 
Intro to GPGPU Programming with Cuda
Intro to GPGPU Programming with CudaIntro to GPGPU Programming with Cuda
Intro to GPGPU Programming with Cuda
Rob Gillen
 

Similaire à L Fu - Dao: a novel programming language for bioinformatics (20)

Cross Platform App Development with C++
Cross Platform App Development with C++Cross Platform App Development with C++
Cross Platform App Development with C++
 
Unmanaged Parallelization via P/Invoke
Unmanaged Parallelization via P/InvokeUnmanaged Parallelization via P/Invoke
Unmanaged Parallelization via P/Invoke
 
A Life of breakpoint
A Life of breakpointA Life of breakpoint
A Life of breakpoint
 
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...
Towards Safe Automated Refactoring of Imperative Deep Learning Programs to Gr...
 
Introduction to Software Development
Introduction to Software DevelopmentIntroduction to Software Development
Introduction to Software Development
 
Native Java with GraalVM
Native Java with GraalVMNative Java with GraalVM
Native Java with GraalVM
 
Let's make it flow ... one way
Let's make it flow ... one wayLet's make it flow ... one way
Let's make it flow ... one way
 
2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)
2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)
2013.02.02 지앤선 테크니컬 세미나 - Xcode를 활용한 디버깅 팁(OSXDEV)
 
4CS4-25-Java-Lab-Manual.pdf
4CS4-25-Java-Lab-Manual.pdf4CS4-25-Java-Lab-Manual.pdf
4CS4-25-Java-Lab-Manual.pdf
 
JVM Mechanics: When Does the JVM JIT & Deoptimize?
JVM Mechanics: When Does the JVM JIT & Deoptimize?JVM Mechanics: When Does the JVM JIT & Deoptimize?
JVM Mechanics: When Does the JVM JIT & Deoptimize?
 
Skiron - Experiments in CPU Design in D
Skiron - Experiments in CPU Design in DSkiron - Experiments in CPU Design in D
Skiron - Experiments in CPU Design in D
 
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)
What's new with JavaScript in GNOME: The 2020 edition (GUADEC 2020)
 
Overview Of Parallel Development - Ericnel
Overview Of Parallel Development -  EricnelOverview Of Parallel Development -  Ericnel
Overview Of Parallel Development - Ericnel
 
Google Web Toolkit
Google Web ToolkitGoogle Web Toolkit
Google Web Toolkit
 
14.jun.2012
14.jun.201214.jun.2012
14.jun.2012
 
Intro to GPGPU Programming with Cuda
Intro to GPGPU Programming with CudaIntro to GPGPU Programming with Cuda
Intro to GPGPU Programming with Cuda
 
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...
Distributed computing with Ray. Find your hyper-parameters, speed up your Pan...
 
NodeJS for Beginner
NodeJS for BeginnerNodeJS for Beginner
NodeJS for Beginner
 
Framework engineering JCO 2011
Framework engineering JCO 2011Framework engineering JCO 2011
Framework engineering JCO 2011
 
Getting Native with NDK
Getting Native with NDKGetting Native with NDK
Getting Native with NDK
 

Plus de Jan Aerts

Visual Analytics in Omics - why, what, how?
Visual Analytics in Omics - why, what, how?Visual Analytics in Omics - why, what, how?
Visual Analytics in Omics - why, what, how?
Jan Aerts
 
Visual Analytics talk at ISMB2013
Visual Analytics talk at ISMB2013Visual Analytics talk at ISMB2013
Visual Analytics talk at ISMB2013
Jan Aerts
 
Visualizing the Structural Variome (VMLS-Eurovis 2013)
Visualizing the Structural Variome (VMLS-Eurovis 2013)Visualizing the Structural Variome (VMLS-Eurovis 2013)
Visualizing the Structural Variome (VMLS-Eurovis 2013)
Jan Aerts
 

Plus de Jan Aerts (20)

VIZBI 2014 - Visualizing Genomic Variation
VIZBI 2014 - Visualizing Genomic VariationVIZBI 2014 - Visualizing Genomic Variation
VIZBI 2014 - Visualizing Genomic Variation
 
Visual Analytics in Omics - why, what, how?
Visual Analytics in Omics - why, what, how?Visual Analytics in Omics - why, what, how?
Visual Analytics in Omics - why, what, how?
 
Visual Analytics in Omics: why, what, how?
Visual Analytics in Omics: why, what, how?Visual Analytics in Omics: why, what, how?
Visual Analytics in Omics: why, what, how?
 
Visual Analytics talk at ISMB2013
Visual Analytics talk at ISMB2013Visual Analytics talk at ISMB2013
Visual Analytics talk at ISMB2013
 
Visualizing the Structural Variome (VMLS-Eurovis 2013)
Visualizing the Structural Variome (VMLS-Eurovis 2013)Visualizing the Structural Variome (VMLS-Eurovis 2013)
Visualizing the Structural Variome (VMLS-Eurovis 2013)
 
Humanizing Data Analysis
Humanizing Data AnalysisHumanizing Data Analysis
Humanizing Data Analysis
 
Intro to data visualization
Intro to data visualizationIntro to data visualization
Intro to data visualization
 
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...
J Wang - bioKepler: a comprehensive bioinformatics scientific workflow module...
 
S Cain - GMOD in the cloud
S Cain - GMOD in the cloudS Cain - GMOD in the cloud
S Cain - GMOD in the cloud
 
B Temperton - The Bioinformatics Testing Consortium
B Temperton - The Bioinformatics Testing ConsortiumB Temperton - The Bioinformatics Testing Consortium
B Temperton - The Bioinformatics Testing Consortium
 
J Goecks - The Galaxy Visual Analysis Framework
J Goecks - The Galaxy Visual Analysis FrameworkJ Goecks - The Galaxy Visual Analysis Framework
J Goecks - The Galaxy Visual Analysis Framework
 
S Cain - GMOD in the cloud
S Cain - GMOD in the cloudS Cain - GMOD in the cloud
S Cain - GMOD in the cloud
 
B Chapman - Toolkit for variation comparison and analysis
B Chapman - Toolkit for variation comparison and analysisB Chapman - Toolkit for variation comparison and analysis
B Chapman - Toolkit for variation comparison and analysis
 
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...
P Rocca-Serra - The open source ISA metadata tracking framework: from data cu...
 
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...
J Klein - KUPKB: sharing, connecting and exposing kidney and urinary knowledg...
 
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...
S Cheng - eagle-i: development and expansion of a scientific resource discove...
 
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...
A Kanterakis - PyPedia: a python crowdsourcing development environment for bi...
 
A Kalderimis - InterMine: Embeddable datamining components
A Kalderimis - InterMine: Embeddable datamining componentsA Kalderimis - InterMine: Embeddable datamining components
A Kalderimis - InterMine: Embeddable datamining components
 
E Afgan - Zero to a bioinformatics analysis platform in four minutes
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
 
B Kinoshita - Creating biology pipelines with BioUno
B Kinoshita - Creating biology pipelines with BioUnoB Kinoshita - Creating biology pipelines with BioUno
B Kinoshita - Creating biology pipelines with BioUno
 

Dernier

EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 

Dernier (20)

Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 

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