From f6af0c33fa611100f113a1bc50ba8c1da2c3c780 Mon Sep 17 00:00:00 2001 From: NunoSempere Date: Sun, 19 Nov 2023 15:40:46 +0000 Subject: [PATCH] feat: add much faster time to botec example, using parallelism --- .../more/12_time_to_botec_parallel/example | Bin 0 -> 27448 bytes .../more/12_time_to_botec_parallel/example.c | 33 ++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100755 examples/more/12_time_to_botec_parallel/example create mode 100644 examples/more/12_time_to_botec_parallel/example.c diff --git a/examples/more/12_time_to_botec_parallel/example b/examples/more/12_time_to_botec_parallel/example new file mode 100755 index 0000000000000000000000000000000000000000..3507dd119afe523d361c6c98979225e176ab1209 GIT binary patch literal 27448 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 literal 0 HcmV?d00001 diff --git a/examples/more/12_time_to_botec_parallel/example.c b/examples/more/12_time_to_botec_parallel/example.c new file mode 100644 index 0000000..4434a7c --- /dev/null +++ b/examples/more/12_time_to_botec_parallel/example.c @@ -0,0 +1,33 @@ +#include "../../../squiggle.h" +#include "../../../squiggle_more.h" +#include +#include +#include + +int main() +{ + double p_a = 0.8; + double p_b = 0.5; + double p_c = p_a * p_b; + + double sample_0(uint64_t* seed){ return 0; } + double sample_1(uint64_t* seed) { return 1; } + double sample_few(uint64_t* seed) { return sample_to(1, 3, seed); } + double sample_many(uint64_t* seed) { return sample_to(2, 10, seed); } + + int n_dists = 4; + double weights[] = { 1 - p_c, p_c / 2, p_c / 4, p_c / 4 }; + double (*samplers[])(uint64_t*) = { sample_0, sample_1, sample_few, sample_many }; + double sampler_result(uint64_t* seed) { + return sample_mixture(samplers, weights, n_dists, seed); + } + + int n_samples = 1000 * 1000; + int n_threads = 16; + double* results = malloc(n_samples * sizeof(double)); + parallel_sampler(sampler_result, results, n_threads, n_samples); + + double avg = array_sum(results, n_samples)/n_samples; + printf("Avg: %f", avg); + free(results); +}