• No results found

CHR syntax

N/A
N/A
Protected

Academic year: 2021

Share "CHR syntax"

Copied!
29
0
0

Bezig met laden.... (Bekijk nu de volledige tekst)

Hele tekst

(1)

Inleiding De taal Implementatie Benchmarks Conclusie

CCHR: De snelste CHR implementatie

Pieter Wuille

Promotor:

Prof. Dr. Bart Demoen Begeleider:

Dr. ir. Tom Schrijvers

29 mei 2007

1 / 29

(2)

Inleiding De taal Implementatie Benchmarks Conclusie

Overzicht

1 Inleiding

2 De taal

3 Implementatie

4 Benchmarks

5 Conclusie

(3)

Inleiding De taal Implementatie Benchmarks Conclusie

Wat is CHR?

Voorbeelden Doelstellingen

Overzicht

1 Inleiding Wat is CHR?

Voorbeelden Doelstellingen

2 De taal

3 Implementatie

4 Benchmarks

5 Conclusie

3 / 29

(4)

Inleiding De taal Implementatie Benchmarks Conclusie

Wat is CHR?

Voorbeelden Doelstellingen

CHR

Wat is CHR?

Een hoog-niveau declaratieve taaluitbreiding (van gasttaal) Regelgebaseerde omzetting van CHR constraints naar

Andere CHR constraints

Built-in constraints (door gasttaal aangeboden) In feite multiset herschrijfregels

(5)

Inleiding De taal Implementatie Benchmarks Conclusie

Wat is CHR?

Voorbeelden Doelstellingen

CHR syntax

Example

Grootst gemene deler in CHR(Prolog)

:- chr_constraint prime(+int), upto(+natural).

upto(X) <=> X<2 | true.

upto(X) ==> X>1 | Y is X-1, upto(Y), prime(X).

prime(X) \ prime(Y) <=> Z is Y mod X, Z==0 | true.

CHR Syntax

Regels voor herschrijven CHR constraint store Simplification, propagation en simpagation regels

Simplification: Rem <=> Guard | Body Propagation: Kept ==> Guard | Body Simpagation: Kept \Rem <=> Guard | Body

5 / 29

(6)

Inleiding De taal Implementatie Benchmarks Conclusie

Wat is CHR?

Voorbeelden Doelstellingen

Doelstellingen CCHR

Doelstellingen

Een zo effici¨ent mogelijke CHR implementatie schrijven C als gasttaal gebruiken

Mogelijkheden C

Veel vrijheid datastructuren Directe geheugentoegang

Bestaande optimaliserende compilers Bindings in veel andere talen

(7)

Inleiding De taal Implementatie Benchmarks Conclusie

Syntax Voorbeelden

Overzicht

1 Inleiding

2 De taal Syntax Voorbeelden

3 Implementatie

4 Benchmarks

5 Conclusie

7 / 29

(8)

Inleiding De taal Implementatie Benchmarks Conclusie

Syntax Voorbeelden

CCHR: De taal

Syntax

Binnen een cchr-blok in C code

Constraint declaraties (argumenten: meeste C types) Regels gelijkaardig aan CHR syntax

Arbitraire C expressies en statements in guard en body Lokale variabelen in guard en body

Logische variabelen zijn mogelijk

(9)

Inleiding De taal Implementatie Benchmarks Conclusie

Syntax Voorbeelden

CCHR: Voorbeeld 1

Example (Voorbeeld 1)

#include <stdio.h>

#include <stdlib.h>

#include "fib_cchr.h"/* header gegenereerd door CCHR compiler */

cchr{

constraintfib(int,long),upto(int);

begin@upto(_)==>fib(0,1L),fib(1,1L);

calc@ upto(Max),fib(N2,M2)\fib(N1,M1)<=> alt(N2==N1+1,N2-1==N1), N2<Max| fib(N2+1, M1+M2);

}

int main(int argc, char **argv) { cchr_runtime_init();

cchr_add_upto_1(90);/* voeg upto(90) toe */

cchr_consloop(j,fib_2,{

printf("fib(%i,%li)\n",cchr_consarg(j,fib_2,1),(long)cchr_consarg(j,fib_2,2));

});

cchr_runtime_free();

return 0;

}

9 / 29

(10)

Inleiding De taal Implementatie Benchmarks Conclusie

Syntax Voorbeelden

CCHR: Voorbeeld 2

Example (Voorbeeld 2)

/* definieer log_int_t als een logische variabele van int’s */

logical_header(int,int,log_int_t)

/* cchr blok */

cchr {

constraint fib(int,log_int_t)

option(destr,{log_int_t_destruct($2);}) option(init,{log_int_t_copy($2);});

dup @ fib(N,M1) \ fib(N,M2) <=> { log_int_t_seteq(M1,M2); };

f01 @ fib(N,M) ==> N<2 | { log_int_t_setval(M,1); };

fn @ fib(N,M) ==> N>1 |

log_int_t M1=log_int_t_create(), log_int_t M2=log_int_t_create(), fib(N-2,M1), fib(N-1,M2),

{ log_int_t_setval(M,log_int_t_getval(M1)+log_int_t_getval(M2)); }, { log_int_t_destruct(M1); log_int_t_destruct(M2); };

}

(11)

Inleiding De taal Implementatie Benchmarks Conclusie

Overzicht CCHR Compiler Gegenereerde code Overige code

Overzicht

1 Inleiding

2 De taal

3 Implementatie Overzicht CCHR Compiler Gegenereerde code Overige code

4 Benchmarks

5 Conclusie

11 / 29

(12)

Inleiding De taal Implementatie Benchmarks Conclusie

Overzicht CCHR Compiler Gegenereerde code Overige code

Opbouw CCHR

Compilatieproces

CCHR code wordt door CCHR compiler doorlopen

C code kopi¨eren, CCHR code vertalen naar macro’s

Gegenereerde code compileren (mbv. CSM definities)

Extra libs (bv. code voor hashtable) compileren Samen linken tot executable Het resultaat is een platform-specifiek, effici¨ent programma.

(13)

Inleiding De taal Implementatie Benchmarks Conclusie

Overzicht CCHR Compiler Gegenereerde code Overige code

CCHR Compiler

13 / 29

(14)

Inleiding De taal Implementatie Benchmarks Conclusie

Overzicht CCHR Compiler Gegenereerde code Overige code

Lexer en Parser

Lexer

Geschreven mbv. Flex, die lexer in C genereert.

Splitst invoer in operatoren, haakjes, symbolen.

Deze ‘tokens’ worden aan parser gegeven.

Parser

Geschreven mbv. Bison, die parser in C genereert.

Herkent regels, code-blokken, argumenten, constraints, . . . Bouwt Abstract Syntax Tree (AST)

(15)

Inleiding De taal Implementatie Benchmarks Conclusie

Overzicht CCHR Compiler Gegenereerde code Overige code

Analyse

Analyse

Tijdens de analyse wordt de AST omgezet in een tussenvorm (semantic tree, ST)

Alle types, variabelen, constraints, rules, occurrences worden objecten met onderlinge verwijzingen ipv. strings.

Alle regels zijn omgezet naar Head Normal Form (HNF).

Onderlinge afhankelijkheden tussen variabelen en occurrences worden bepaald.

15 / 29

(16)

Inleiding De taal Implementatie Benchmarks Conclusie

Overzicht CCHR Compiler Gegenereerde code Overige code

Join ordering en code generatie

Join ordering

Voor elke constraint occurrence moet iteratievolgorde en -methode bepaald worden voor elke partner constraint.

Alle mogelijke volgordes afgaan.

Gewicht toekennen aan elke volgorde.

Volgorde met laagste gewicht kiezen.

Guard met iterator combineren (index).

Code generatie

C macro’s en een C header genereren voor elke:

constraint, constraint occurrence, rule index, propagation geschiedenis, . . .

(17)

Inleiding De taal Implementatie Benchmarks Conclusie

Overzicht CCHR Compiler Gegenereerde code Overige code

Voorbeeld - CCHR code

Example

constraint fib(int,long),upto(int);

begin @ upto(_) ==> upto(0,1L), upto(1,1L);

calc @ upto(Max), fib(N2,M2) \ fib(N1,M1)

<=> alt(N2==N1+1,N2-1==N1), N2<Max

| fib(N2+1, M1+M2);

17 / 29

(18)

Inleiding De taal Implementatie Benchmarks Conclusie

Overzicht CCHR Compiler Gegenereerde code Overige code

Voorbeeld - C Macro’s

Example (generated code)

#define CODELIST_fib_2_calc_R1 \

CSM_IMMLOCAL(int,N1,CSM_ARG(fib_2,arg1)) \ CSM_IMMLOCAL(long,M1,CSM_ARG(fib_2,arg2)) \ CSM_DEFIDXVAR(fib_2,idx1,K2) \

CSM_SETIDXVAR(fib_2,idx1,K2,arg1,CSM_LOCAL(N1) + 1) \ CSM_IDXLOOP(fib_2,idx1,K2, \

CSM_IF(CSM_DIFFSELF(K2), \

CSM_IMMLOCAL(int,N2,CSM_LARG(fib_2,K2,arg1)) \ CSM_IMMLOCAL(long,M2,CSM_LARG(fib_2,K2,arg2)) \ CSM_LOOP(upto_1,K1, \

CSM_IMMLOCAL(int,Max,CSM_LARG(upto_1,K1,arg1)) \ CSM_IF(CSM_LOCAL(N2) < CSM_LOCAL(Max), \

CSM_KILLSELF(fib_2) \

CSM_ADD(fib_2,CSM_LOCAL(N2)+1,CSM_LOCAL(M1)+CSM_LOCAL(M2)) \ CSM_END \

) \ ) \ ) \ )

(19)

Inleiding De taal Implementatie Benchmarks Conclusie

Overzicht CCHR Compiler Gegenereerde code Overige code

CSM definities

CSM definities

Schermen implementatie-details af van codegenerator.

Datastructuren kunnen gewijzigd worden zonder codegenerator aan te passen.

Definieert de CSM START macro.

Gedefinieerd in bestand cchr csm.h, dat in gegenereerde header ingeladen wordt.

19 / 29

(20)

Inleiding De taal Implementatie Benchmarks Conclusie

Overzicht CCHR Compiler Gegenereerde code Overige code

Hashtables

Hashtable

Datastructuur om in O(1) tijd elementen op te zoeken.

Zelf ge¨ımplementeerd Cuckoo-hashing algoritme.

Gebruikt om indexen en propagation geschiedenis in bij te houden.

Hashfunctie

Hashtable vereist grillige functie om elementen op getallen af te beelden.

Het public-domain lookup3 algoritme gebruikt.

(21)

Inleiding De taal Implementatie Benchmarks Conclusie

Overzicht CCHR Compiler Gegenereerde code Overige code

Logische variabelen

Logische variabelen

Variabelen die een waarde kunnen hebben of niet Waarover onderlinge gelijkheden bekend kunnen zijn Ge¨ımplementeerd met een C implementatie van het Union-Find algoritme

Ook buiten CCHR bruikbaar

21 / 29

(22)

Inleiding De taal Implementatie Benchmarks Conclusie

Fibonacci

Kleiner-dan of gelijk-aan Grootste gemene deler Vergelijking

Overzicht

1 Inleiding

2 De taal

3 Implementatie

4 Benchmarks Fibonacci

Kleiner-dan of gelijk-aan Grootste gemene deler Vergelijking

5 Conclusie

(23)

Inleiding De taal Implementatie Benchmarks Conclusie

Fibonacci

Kleiner-dan of gelijk-aan Grootste gemene deler Vergelijking

Benchmark: Fibonacci

1e-06 1e-05 1e-04 0.001 0.01 0.1 1 10

1 10 100 1000 10000 100000 1e+06

time

problem size Benchmark fib

swi jchr cchr c

23 / 29

(24)

Inleiding De taal Implementatie Benchmarks Conclusie

Fibonacci

Kleiner-dan of gelijk-aan Grootste gemene deler Vergelijking

Benchmark: Kleiner-dan of gelijk-aan

1e-06 1e-05 1e-04 0.001 0.01 0.1 1 10

1 10 100 1000

time

problem size Benchmark leq

swi jchr cchr c

(25)

Inleiding De taal Implementatie Benchmarks Conclusie

Fibonacci

Kleiner-dan of gelijk-aan Grootste gemene deler Vergelijking

Benchmark: Grootste gemene deler

1e-06 1e-05 1e-04 0.001 0.01 0.1 1 10 100

1 10 100 1000 10000 100000 1e+06 1e+07 1e+08

time

problem size Benchmark gcd

swi cchr c

25 / 29

(26)

Inleiding De taal Implementatie Benchmarks Conclusie

Fibonacci

Kleiner-dan of gelijk-aan Grootste gemene deler Vergelijking

Vergelijking benchmarks

SWI JCHR CCHR C

gcd 22000 - 3.4 1

fib 21000 940 8.5 1

primes 310 490 6.9 1

tak 210 110 4.3 1

leq 1100 440 9.8 1

ram 4700 11000 120.0 1

(27)

Inleiding De taal Implementatie Benchmarks Conclusie

Overzicht

1 Inleiding

2 De taal

3 Implementatie

4 Benchmarks

5 Conclusie

27 / 29

(28)

Inleiding De taal Implementatie Benchmarks Conclusie

Conclusie

Conclusie

Met deze thesis is aangetoond dat:

Een CHR implementatie in/voor C mogelijk is en dat het een snelheidswinst oplevert

(29)

Inleiding De taal Implementatie Benchmarks Conclusie

Einde

Einde

29 / 29

Referenties

GERELATEERDE DOCUMENTEN

Bijlage 3 Overzicht van de hoogste respectievelijk laagste kengetallen met bijbehorende plantperiode, teeltduur en eventueel produktie Bijlage 4 Overzicht van de gemiddelde en

monsters. Tabel 3 geeft een overzicht van het gedrag van 18 antibiotica tijden s hoogspanningselectroforese. Tabel 4 geeft een overzicht van de identiteit van

Bijlage 1: Overzicht potplantenkassen Kastanjelaan Bijlage 2: Overzicht verdeling planten over een tafel Bijlage 3: Volgorde waarin de metingen gedaan zijn Bijlage 4: Planthoogte

Figuur 1: Motivatie volgens Deci &amp; Ryan...3 Figuur 2: Motivatie van 3 VWO klas 3C op likert schaal van 0 tot 4...3 Figuur 3:Schemtisch overzicht motivationeel proces...4 Figuur

1.Terreinen en gebouwen 2.Wegen en overige infrastructuur 3.Roerende goederen 4.Leasing en soortgelijke rechten 5.Erfgoed.. Overige materiële vaste activa 1.Onroerende

zie hiervoor het Overzicht Dammers in Walbeck in de Overzichten van de Overige Plaatsen Joanna van den Bergh en Matthias Dammers zijn op 3-6-1692 in Walbeck doopgetuigen voor

1.Terreinen en gebouwen 2.Wegen en overige infrastructuur 3.Roerende goederen 4.Leasing en soortgelijke rechten 5.ErfgoedA. Overige materiële vaste activa 1.Onroerende

In tabel 3 zijn gemiddelde gegevens opgenomen van het influent, het effluent en een aantal overige gegevens. In bijlage 6 is een uitge- breid overzicht opgenomen van