forked from personal/squiggle.c
feat: add parallelism to get 1B lognormal samples in 11s.
This commit is contained in:
parent
c11ce6b185
commit
514a41c9f7
BIN
examples/more/11_billion_lognormals_paralell/example
Executable file
BIN
examples/more/11_billion_lognormals_paralell/example
Executable file
Binary file not shown.
30
examples/more/11_billion_lognormals_paralell/example.c
Normal file
30
examples/more/11_billion_lognormals_paralell/example.c
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
#include "../../../squiggle.h"
|
||||||
|
#include "../../../squiggle_more.h"
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
// 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.
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user