time-to-botec

Benchmark sampling in different programming languages
Log | Files | Refs | README

samples.c (799B)


      1 #include "squiggle_c/squiggle.h"
      2 #include "squiggle_c/squiggle_more.h"
      3 #include <stdio.h>
      4 #include <stdlib.h>
      5 
      6 double cumsum_p0 = 0.6;
      7 double cumsum_p1 = 0.8;
      8 double cumsum_p2 = 0.9;
      9 double cumsum_p3 = 1.0;
     10 
     11 double sampler_result(uint64_t * seed)
     12 {
     13 
     14     double p = sample_uniform(0, 1, seed);
     15     if(p< cumsum_p0){
     16         return 0;
     17     } else if (p < cumsum_p1){
     18         return 1;
     19     } else if (p < cumsum_p2){
     20         return sample_to(1,3, seed);
     21     } else {
     22         return sample_to(2, 10, seed);
     23     } 
     24 }
     25 
     26 int main()
     27 {
     28 
     29     int n_samples = 1000 * 1000, n_threads = 16;
     30     double* results = malloc((size_t)n_samples * sizeof(double));
     31     sampler_parallel(sampler_result, results, n_threads, n_samples);
     32     printf("Avg: %f\n", array_sum(results, n_samples) / n_samples);
     33     free(results);
     34 }