firstname lastname cern ph-sft ch-1211 geneva 23 sftweb.cern.ch root.cern.ch cling – past, present...

Post on 20-Jan-2016

226 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Firstname LastnameCERN PH-SFT

CH-1211 Geneva 23sftweb.cern.ch

root.cern.ch

Cling – Past, Present and FutureCling – Past, Present and Future

V. Vassilev, P. Canal, A. Naumann, P. RussoV. Vassilev, P. Canal, A. Naumann, P. Russo

CERN, PH-SFT & FermiLabCERN, PH-SFT & FermiLab

sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14

March 2013

Role of C++ Interpreter in ROOT

o Load/Store C++ objectsoRuntime Dynamism

• TFile::Open(“http://...”)• gDirectory->Get(“hist”)• python runReco.py

o Fast Prototyping

2

Limited C++ language support for reflection and type introspection.

ROOT

CINT

Reflection

TPluginManager

IO

...

PyR

OO

T

Type Info

TClass

sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14

March 2013

LLVM Toolchain As an Alternative

o LLVM Core “The LLVM Project is a collection of modular and reusable compiler and toolchain technologies...”

• More than 120 active contributorsApple, ARM, Google, Qualcomm, QuIC, NVidia, AMD and more

• ~250 commits/weekoClang

“The goal of the Clang project is to create a new C, C++, Objective C and Objective C++ front-end for the LLVM compiler.“

• More than 100 active contributorsApple, ARM, AMD and more

• ~150 commits/week

3

sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14

March 2013

In The Meanwhile: LLVM

4

LLVM and Clang “The LLVM Project is a collection of modular and reusable compiler and

toolchain technologies...”

sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14

March 2013

Cling's Dual Personality

oAn interpreter – looks like an interpreter and behaves like an interpreterCling follows the read-evaluate-print-loop (repl) concept.

oMore than interpreter – built on top of compiler libraries (Clang and LLVM)Contains interpreter parts and compiler parts. More of an interactive compiler or an interactive compiler interface for clang.

5

No need to compile Cling/ROOT with Clang/LLVM or having clang installed on the OS

sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14

March 2013

Cling Is Better Than CINT

o Full C++ support incl. C++11o Stable and informative intermediate representations of the

sourceoBeing developed with the vision to be used in multithreaded

environment (an interpreter object per thread)

6

sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14

March 2013

Full C++ Support

o Templates and STL are not an issue

7

sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14

March 2013

Full C++ Support

oNatural path to the new standards C++11/C++*

8

sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14

March 2013

Full C++ Support

oNatural path to the new standards C++11/C++*

9

sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14

March 2013

Full C++ Support

o Boost is not a dream

10

sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14

March 2013

Diagnostics

oColumn numbers and caret diagnosticsCaretDiagnostics.C:4:13: warning: '.*' specified field precision is missing a matching 'int' argumentprintf("%.*d"); ~~^~

oRange highlightingRangeHighlight.C:14:39: error: invalid operands to binary expression ('int' and 'A')return y + func(y ? ((SomeA.X + 40) + SomeA) / 42 + SomeA.X : SomeA.X); ~~~~~~~~~~~~ ^ ~~~~~~

12

sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14

March 2013

Diagnostics

13

o Pointer vs Referencesinput_line_410:2:6: error: member reference type 'TNamed' is not a pointernRef->GetName();~~~~^

input_line_413:2:7: error: member reference type 'TNamed *' is a pointer; maybe you meant to use '->’?nPtr1.GetName();~~~~^ ->

o Fix-it hintsFixItHints.C:7:27: warning: use of GNU old-style field designator extensionstruct point origin = { x: 0.0, y: 0.0 }; ^~ .x = FixItHints.C:12:3: error: use of undeclared identifier 'floot'; did you mean 'float’? floot p; ^~~~ float

sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14

March 2013

Diagnostics

o AmbiguitiesAmbiguities.C:20:30: error: return type of virtual function 'Clone' is not covariant with the return type of the function it overrides (ambiguous conversion from derived class 'TeachingAssistant' to base class 'Person': class TeachingAssistant -> class Student -> class Person class TeachingAssistant -> class Teacher -> class Person)virtual TeachingAssistant* Clone() const; ^Ambiguities.C:7:19: note: overridden virtual function is herevirtual Person* Clone() const; ^

o Templatesinput_line_401:2:2:error: use of class template LorentzVector requires template arguments LorentzVector v; ^Math/GenVector/LorentzVectorfwd.h:28:39: note: template is declared here template<class CoordSystem> class LorentzVector; ~~~~~~~~~~~~~~~~~~~~~~~~ ^

14

Personvirtual void

Clone()

Personvirtual void

Clone()

TeachingAssistantvirtual void Clone()TeachingAssistantvirtual void Clone()

StudentStudent TeacherTeacher

sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14

March 2013

Diagnostics

15

o Macro expansionsMacroExpansionInformation.C:14:7: error: invalid operands to binary expression ('int' and 'A’) X = MAX(X, *SomeA); ^~~~~~~~~~~~~~MacroExpansionInformation.C:5:24: note: expanded from macro 'MAX’#define MAX(A, B) ((A) > (B) ? (A) : (B)) ~~~ ^ ~~~

o Template instantiationsinput_line_395:2:18: error: no matching constructor for initialization of 'PtEtaPhiEVector' (aka 'LorentzVector<PtEtaPhiE4D<double> >’)PtEtaPhiEVector v2( "v1.Rho()", v1.Eta(), v1.Phi(), v1.E() ); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~Math/GenVector/LorentzVector.h:77:8: note: candidate constructor not viable: no known conversion from 'const char [9]' to 'const Scalar’ (aka 'const double') for 1st argumentLorentzVector(const Scalar & a,^Math/GenVector/LorentzVector.h:88:17: note: candidate constructor template not viable: requires single argument 'v', but 4 arguments were provided explicit LorentzVector(const LorentzVector<Coords> & v ) : ^

sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14

March 201316

sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14

March 2013

Data Flow

17

Machine Code (x86, Alpha, ...)

Compilation Engine (clang)

Compilation Engine (clang)

Transformation Engine

Transformation Engine

⑤②③④⑥ClingCling

⑧①, ② –Text③, ④, ⑤, ⑥ – Abstract Syntax Tree⑦ - LLVM Bit Code⑧ -Target Machine Code

LLVM Execution

Engine

LLVM Execution

Engine

sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14

March 2013

Compilation Engine

18

Clang ParserClang Parser

Clang Code Generator

Clang Code Generator

LLVM Execution

Engine

LLVM Execution

Engine

Transformation Engine

Transformation Engine

ClingCling

sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14

March 2013

Transformation Engine

o TransactionCling represents the incremental input as a set of AST nodes.

o Transaction TransformersCling enables each transaction to be further customized by other clients by implementing a transaction transformer.

o Interpreter CallbacksImplements callbacks for the “interesting” events.

19

ClingCling Transformation Engine

Transformation Engine

Transaction

TransactionTransaction

sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14

March 201320

LLVM EE-s have complete target info Thus calling into compiled libraries is not an issue.

No boundary interpreted/compiled world Possible to derive from compiled classes, proper calculation of offsets and so on.

Machine Code (x86, Alpha, ...)

Compiled libs(.so)

��

LLILLI LLVMJIT

LLVMJIT MCJITMCJIT

Execution Engine

sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14

March 2013

Challenges

o Incompatible concepts like compilation and interpretationMany tasks that are trivial for an interpreter become a nightmare for a compiler.

oMake C++ usable at the promptIncorporate the experience we have with CINT. First step: adopt the successful usability extensions from CINT.

21

sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14

March 2013

Extending C++ Language

22

[root]$ sin(12);void wrapper() { sin(12);}

[root]$ [root]$

int i = 12;sin(i);

void wrapper1() { int i = 12;}

void wrapper2() { sin(i);} ?

sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14

March 2013

Extending C++ Language

23

[root]$ [root]$

void wrapper1() { int i = 12; printf("%d\n",i);}

void wrapper2() { printf("%f\n", sin(i));}

int i = 12;

int i = 12; printf("%d\n",i);printf("%f\n",sin(i));

oWrap the inputo Look for declarationso Extract the declarations one level up, as global declarations

sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14

March 2013

Streaming Execution Results

24

[root]$ [root]$

int i = 12(int) 12sin(i)(double) -5.365729e-01

[root]$

[root]$

std::string s = “Hello”(std::string) @0x7fff65ae783cc_str: “Hello”enum e { e1 = 12, e2 = 13, e3 = 13}; e1(enum e) (e::e1) : (int) 12

[root]$ HelloWorld(void (void)) Function @0x108880030 at /tmp/HelloWorld.h:2:void HelloWorld() { printf("HelloWorld!\n");}

sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14

March 2013

Error Recovery

o Filled input-by-input (aka Transaction)o Incorrect inputs must be discarded as a whole

25

sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14

March 2013

Implicit auto keyword

26

i = 5; f = new TNamed(“a”, ”b”)

sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14

March 2013

Late Binding

27

if (cond) {

TFile* F = 0;

if (is_day_of_month_even())

F = TFile::Open("even.root");

else

F = TFile::Open("odd.root");

hist->Draw();

}

hist->Draw();

sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14

March 2013

Late Binding

28

if (cond) {

TFile* F = 0;

if (is_day_of_month_even())

F = TFile::Open("even.root");

else

F = TFile::Open("odd.root");

gCling->EvaluateT<void>("hist->Draw()", ...);

}

hist->Draw();

sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14

March 2013

Code Unloading

29

[root]$ [root]$ [root]$ [root]$ [root]$ [root]$ [root]$ [root]$

.L Calculator.hCalculator calc;calc.Add(3, 1)(int) 2 //WTF!?*.L Calculator.hCalculator calc;calc.Add(3, 1)(int) 4 //

// Calculator.hclass Calculator { int Add(int a, int b) { return a + b; }...};

// Calculator.hclass Calculator { int Add(int a, int b) { return a - b; }...};

* What's That Function

sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14

March 2013

Future Plans

oMigrate to MCJIT• Object file emitted to memory• Runtime dynamic linker

oWindows 64 Supporto Tools

• Automatic Differentiation

30

sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14

March 2013

o See Tomas Gahr’s demo later at the workshop

Thank you!

31

sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14

March 2013

Backup slides

32

sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14

March 2013

Pre-Compiled Headers/Modules

Carefully crafted data structures designed to improve translator's performance:oReduce lexical, syntax and semantic analysisoLoaded “lazily” on demand

33

sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14

March 2013

Pre-Compiled Headers/Modules

Design advantages:oLoading is significantly faster than re-parsingoMinimize the cost of readingoRead times don't depend on sizeoCost of generating isn't large

34

sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14

March 201335

PCH PCM

sftweb.cern.chroot.cern.ch vvassilev/ROOT Users Workshop 11-14

March 2013

PCH vs PCM

oWhere we should get it from? Who knows more about types than the translator?

36

CINT

Reflection

Type Info

Not very descriptive

GCCXML

Reflex

top related