• No results found

CCHR: De snelste CHR implementatie Pieter Wuille Promotor: Prof. Dr. Bart Demoen Begeleider: Dr. ir. Tom Schrijvers 29 maart 2007

N/A
N/A
Protected

Academic year: 2021

Share "CCHR: De snelste CHR implementatie Pieter Wuille Promotor: Prof. Dr. Bart Demoen Begeleider: Dr. ir. Tom Schrijvers 29 maart 2007"

Copied!
23
0
0

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

Hele tekst

(1)

Algemeen Implementatie Resultaten

CCHR: De snelste CHR implementatie

Pieter Wuille

Promotor:

Prof. Dr. Bart Demoen Begeleider:

Dr. ir. Tom Schrijvers

29 maart 2007

(2)

Overzicht

1 Algemeen

Waarom CCHR Structuur

2 Implementatie Mogelijkheden Structuur

Logische variabelen Hashtables

3 Resultaten Performantie Voorbeelden Wat nog rest

(3)

Algemeen Implementatie Resultaten

Waarom CCHR Structuur

Overzicht

1 Algemeen

Waarom CCHR Structuur

2 Implementatie Mogelijkheden Structuur

Logische variabelen Hashtables

3 Resultaten Performantie Voorbeelden Wat nog rest

(4)

Waarom CHR in C?

Waarom CHR in C?

CHR kunnen gebruiken in pure C programma’s Een poging tot CHR heel snel maken:

Vrijheid datastructuren

Optimalisaties C compiler benutten

(5)

Algemeen Implementatie Resultaten

Waarom CCHR Structuur

Opbouw CCHR

De verschillende stappen bij het gebruik van CCHR zijn:

CCHR code

CCHR Compiler C macro’s

C Preprocessor C code

C Compiler Executable

CCHR code

Gewone C broncode

Met “cchr { . . . }” blokken in Deze blokken worden vervangen door C macro’s

(6)

Overzicht

1 Algemeen

Waarom CCHR Structuur

2 Implementatie Mogelijkheden Structuur

Logische variabelen Hashtables

3 Resultaten Performantie Voorbeelden Wat nog rest

(7)

Algemeen Implementatie Resultaten

Mogelijkheden Structuur Logische variabelen Hashtables

Mogelijkheden

CHR Constraints

CHR Constraints zijn ge¨ımplementeerd:

Willekeurige ariteit

Alle C datatypes (behalve arrays) als argumenten

Example

constraint init(int),fib(int,bignum_t) destr(destruct_bignum(&$2));

(8)

Mogelijkheden

CHR Rules

CHR Rules zijn ge¨ımplementeerd:

Propagation (K , . . .==>. . .) Simplification (R, . . .<=>. . .) Simpagation (K , . . .\ R, . . .<=>. . .)

Example

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

triv @ gcd(0) <=> true;

dec @ gcd(N) \ gcd(M) <=> M>=N | gcd(M-N);

(9)

Algemeen Implementatie Resultaten

Mogelijkheden Structuur Logische variabelen Hashtables

Mogelijkheden

Guards en Bodys

De volgende zaken zijn mogelijk als guard en body:

Voorwaardelijke expressies (enkel guard) Variabele declaraties (en initialisaties) Willekeurige C code (tussen accolades) Toe te voegen CHR contraints (enkel body)

(10)

Structuur

Source

CCHR

main lexer & parser

analyse

code generatie

C code

(11)

Algemeen Implementatie Resultaten

Mogelijkheden Structuur Logische variabelen Hashtables

Structuur - Main, Lexer, Parser

Source

CCHR main lexer & parser

analyse code generatie C code

de main module

Bevat de main() C routine Overloopt alle opgegeven sourcefiles

Roept andere modules aan voor cchr-blokken

Lexer en Parser

Geschreven in Flex en Bison resp.

Herkennen CCHR tokens en grammatica

Enkel voor CCHR blokken

(12)

Structuur - Analyse

Source

CCHR main lexer & parser

analyse code generatie C code

de analyser

Analyseert output van de parser (abstract syntax tree)

Genereert nieuwe data structuur met expressions, variabelen, constraints, regels, . . . Doet conversie naar Head Normal Form

Optimaliseert (iteratie volgorde, propagation history, indexen, . . . )

(13)

Algemeen Implementatie Resultaten

Mogelijkheden Structuur Logische variabelen Hashtables

Structuur - Code generatie

Source

CCHR main lexer & parser

analyse code generatie C code

de code-generator

Gebruikt de gegevens gegenereerd door analyser Genereert een aantal macro’s voor elke constraint/regel Voor elke constraint occurrence een macro met code

(14)

Logische variabelen

Wat?

Variabelen die niet noodzakelijk een waarde hebben Eventueel ’equalities’ tussen bekend

vgl. met Prolog

Implementatie

Gebruikt ’Union-Find’ algoritme voor efficientie Aan te roepen met een C macro

Voorlopig los van CCHR zelf

(15)

Algemeen Implementatie Resultaten

Mogelijkheden Structuur Logische variabelen Hashtables

Hashtables

Waarom?

Versnellen van opzoekingen:

Propagation-history checks

Iteratie over constraints met bepaald argument Iteratie over logische variabelen en reactivatie ervan

Implementatie

Alweer gedefinieerd door C macros Als hash-algoritme: lookup3

Als table-algoritme: cuckoo-hashing

(16)

Hashtables - Lookup3

Lookup3

Public-domain algoritme

Willekeurige bytesequenties als key

Heel uniform, gecontroleerd voor veel patronen Waarschijnlijk overkill voor heel simpele keys

(17)

Algemeen Implementatie Resultaten

Mogelijkheden Structuur Logische variabelen Hashtables

Hashtables - Cuckoo Hashing

Cuckoo Hashing

2 aparte hashtables, met onafhankelijke hashfunctie Indien een plaats bezet in table 1, overschrijven en oud element in table 2 plaatsen. Indien dat bezet is . . . Vrij simpel te implementeren

Geen aparte list per plaats nodig, en geen fragmentatie Enkel lastig om over te itereren

(18)

Hashtables - Gebruik

Wanneer?

Propagation history wordt erin bijgehouden Gelijkheden in guards worden hashtable indexen

Example

dec @ fib(N2,F1) \ fib(N1,F2) <=>

alt(N1+1==N2,N1==N2-1) | fib(N2+1,F1+F2);

(19)

Algemeen Implementatie Resultaten

Performantie Voorbeelden Wat nog rest

Overzicht

1 Algemeen

Waarom CCHR Structuur

2 Implementatie Mogelijkheden Structuur

Logische variabelen Hashtables

3 Resultaten Performantie Voorbeelden Wat nog rest

(20)

Resultaten

resultaten

test swi-prolog jchr cchr cchr(noidx) C

gcd 37.1s - 0.085s 0.085s 0.019s

fib 708s 5.0s 0.024s 1.3s 0.003s

primes 4.12s 4.3s 0.091s 0.091s 0.010s

tak 6.19s 0.57s 0.048s 21s 0.007s

ram 0.63s 0.62s 0.016s 0.0057s 0.0001s merge 0.33s 1.6s 0.036s 0.019s 0.0005s

leq 947s 2.8s 0.0008s 1.3s 0.0008s

avg 650 95 1 14 0.075

(21)

Algemeen Implementatie Resultaten

Performantie Voorbeelden Wat nog rest

Voorbeeld - CCHR code

Example

constraint fib(int,uint64_t);

begin @ init(_) ==> fib(0,1ULL), fib(1,1ULL);

calc @ init(Max), fib(N2,M2) \ fib(N1,M1) <=>

alt(N2==N1+1,N2-1==N1), N2<Max | fib(N2+1, M1+M2);

(22)

Voorbeeld - C Macros

Example (generated code)

#define CODELIST_fib_2_calc_R1 \

CSM_IMMLOCAL(int,N1,CSM_ARG(fib_2,arg1)) \ CSM_IMMLOCAL(uint64_t,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(uint64_t,M2,CSM_LARG(fib_2,K2,arg2)) \ CSM_LOOP(init_1,K1, \

CSM_IMMLOCAL(int,Max,CSM_LARG(init_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 \

) \ ) \ ) \ )

(23)

Algemeen Implementatie Resultaten

Performantie Voorbeelden Wat nog rest

Wat nog rest

Wat nog rest

Integratie logische variabelen met CCHR (en indexen erop) Nog enkele foutjes oplossen

Documentatie schrijven Thesistekst schrijven

Nog vragen?

Referenties

GERELATEERDE DOCUMENTEN

Groen: omdat het volgende kind, als het geboren wordt in een gezin waar al kinderen zijn, nog meer antistoffen nodig heeft dan het eerste kindje om besmetting met kinkhoest te

Campus Coupure: Coupure Links 653, 9000 Gent Gebouw A, lokaal A0.104 - tel: +32(0)9 264 62 17 (op het gelijkvloers, naast faculteitsbibliotheek).. Faculteit

Anders gezegd, er treedt meer attitudeverandering op in de richting van een boodschap wanneer deze de steun heeft van een meerderheid dan een minderheid, maar vooral wanneer beide

De afwezigheid van een effect zou te maken kunnen hebben met de groep ouderen waarop het onderzoek werd gericht (ongeveer de helft had cognitieve stoornis- sen; overwegend

De tweede hypothese die naar voor werd geschoven in dit onderzoek is de moderatie van transformationeel leiderschap op de relatie tussen prestatiemanagement systeem sterkte

Onze hypothese stelt dat jongeren met een hoge score op BPS-kenmerken meer aan sociale vergelijking doen op sociale media en ook sneller vijandige en/of jaloerse gevoelens

Therefore, in Chapter 3 the phenology of the above mentioned pest insects and their main natural enemies in Brussels sprouts is studied for three vegetable

Ook hier is er geen rekening gehouden met het bestaan van eetstoornissen, wel zijn deze geregistreerd via een andere vragenlijst maar in de onderzochte populatie werd geen