Hi Ayrat,

Some KLEE options are turned on by default.  In particular, both 
--use-cache and --use-cex-cache are on by default.  If you disable them 
(--use-cache=false --use-cex-cache=false), I think both operations will 
take a long time.

It would be nice to have a way to display the default values on "klee 
--help"

Best wishes,
Cristian

On 12/01/11 20:52, Ayrat Khalimov wrote:
> Hi, All,
>
> Looks like there is caching somewhere in Klee/SMT even without options
> "--use-cache", "--use-cex-cache".
> Consider an example when some SMT-time-consuming operation is run twice:
> with the same symbolic data:         it takes /time/  to pass all the paths
> with two different symbolic data's: it takes 2* /time ../
>
>
> More details: example:
>
> #include <stdio.h>
> #include "klee/klee.h"
>
> void doLongOperation(char c) {
> char buf[512];
> //any SMT consuming operation: here snprintf from uClibc is used
> snprintf
> <http://www.opengroup.org/onlinepubs/009695399/functions/snprintf.html>(buf,
> sizeof
> <http://www.opengroup.org/onlinepubs/009695399/functions/sizeof.html> buf,
> "%llu\n", (unsigned long long)c);
> }
>
> int main(int argc, char** argv) {
>    klee_debug(">> start 1..\n");
>
> char symChar1;
>    klee_make_symbolic(&symChar1, sizeof
> <http://www.opengroup.org/onlinepubs/009695399/functions/sizeof.html> 
> symChar1,
> "char1");
>    klee_assume(symChar1 < 0 && symChar1 > -3); //not to make you crazy
> waiting for the end..
>    doLongOperation(symChar1);
>
>    klee_debug("<< end 1. start 2..\n");
>
> char symChar2; //comment to observe caching
>    klee_make_symbolic(&symChar2, sizeof
> <http://www.opengroup.org/onlinepubs/009695399/functions/sizeof.html> 
> symChar2,
> "char2");//..
>    klee_assume(symChar2 < 0 && symChar2 > -3); //..
>    doLongOperation(symChar2); //..
> //  doLongOperation(symChar1); //uncomment to observe caching
>
>    klee_debug("<< end 2\n");
>
> return 0;
> }
>
> Started with the command:
> ../Release/bin/klee \
>    --output-dir klee \
>    --posix-runtime --libc=uclibc --init-env \
>    --coverable-modules files.coverable \
>    --simplify-sym-indices \
>    --all-external-warnings \
>    --output-module \
>    --disable-inlining \
>    --optimize \
>    --allow-external-sym-calls \
>    --only-output-states-covering-new \
>    --max-instruction-time=3600. \
>    --max-memory-inhibit=false \
>    experiments.o
>
>
> And here is the output:
> the first experiment (with two different symbolic chars):
>  >> start 1...
> { long time }
> << end 1. start 2...
> { long time }
> end 2
>
> the second experiment (with the same symbolic char):
>  >> start 1...
> { long time }
> << end 1. start 2...
> end 2 //*it takes no time to calc the second call*
> *
> *
> *
> *
> *Could anybody comment such behaviour?*
> *
> *
> *Thanks.*
> *
> *
> *--*
> *Kind regards, *
> *Ayrat Khalimov,*
> *Ulianovsk, Russia*
> *
> *

Reply via email to