From 514a41c9f7b42ebe18f08a546ff956f57b4603e1 Mon Sep 17 00:00:00 2001 From: NunoSempere Date: Sun, 19 Nov 2023 15:40:13 +0000 Subject: [PATCH] feat: add parallelism to get 1B lognormal samples in 11s. --- .../11_billion_lognormals_paralell/example | Bin 0 -> 27288 bytes .../11_billion_lognormals_paralell/example.c | 30 ++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100755 examples/more/11_billion_lognormals_paralell/example create mode 100644 examples/more/11_billion_lognormals_paralell/example.c diff --git a/examples/more/11_billion_lognormals_paralell/example b/examples/more/11_billion_lognormals_paralell/example new file mode 100755 index 0000000000000000000000000000000000000000..31ba715478ee9317737b88dd9ae76a7bb51ae396 GIT binary patch literal 27288 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 +#include +#include + +// Estimate functions +int main() +{ + // set randomness seed + // uint64_t* seed = malloc(sizeof(uint64_t)); + // *seed = 1000; // xorshift can't start with 0 + // ^ not necessary, because parallel_sampler takes care of the seed. + + int n_samples = 1000 * 1000 * 1000; + int n_threads = 16; + double sampler(uint64_t* seed){ + return sample_lognormal(0, 10, seed); + } + double* results = malloc(n_samples * sizeof(double)); + + parallel_sampler(sampler, results, n_threads, n_samples); + double avg = array_sum(results, n_samples)/n_samples; + printf("Average of 1B lognormal(0,10): %f", avg); + + free(results); + + // free(seed); + // ^ not necessary, because parallel_sampler takes care of the seed. +}