forked from personal/squiggle.c
feat: start adding paralellism; recompile.
This commit is contained in:
parent
6387c0df70
commit
d3af874403
|
@ -301,7 +301,8 @@ Overall, I'd describe the error handling capabilities of this library as pretty
|
|||
|
||||
## To do list
|
||||
|
||||
- [ ] Think about whether to write a simple version of this for [uxn](https://100r.co/site/uxn.html), a minimalistic portable programming stack which, sadly, doesn't have doubles (64 bit floats)
|
||||
- [ ] Document paralellism
|
||||
- [ ] Document confidence intervals
|
||||
- [ ] Point out that, even though the C standard is ambiguous about this, this code assumes that doubles are 64 bit precision (otherwise the xorshift should be different).
|
||||
- [ ] Document rudimentary algebra manipulations for normal/lognormal
|
||||
- [ ] Think through whether to delete cdf => samples function
|
||||
|
@ -310,11 +311,11 @@ Overall, I'd describe the error handling capabilities of this library as pretty
|
|||
- complexify and use boxes for everything
|
||||
- leave as is
|
||||
- [ ] Systematize references
|
||||
- [ ] Publish online
|
||||
- [ ] Support all distribution functions in <https://www.squiggle-language.com/docs/Api/Dist>
|
||||
- [ ] do so efficiently
|
||||
- [ ] Add more functions to do algebra and get the 90% c.i. of normals, lognormals, betas, etc.
|
||||
- Think through which of these make sense.
|
||||
- [ ] Disambiguate sample_laplace--successes vs failures || successes vs total trials as two distinct and differently named functions
|
||||
|
||||
## Done
|
||||
|
||||
|
@ -373,5 +374,5 @@ Overall, I'd describe the error handling capabilities of this library as pretty
|
|||
- [ ] Consider desirability of defining shortcuts for those functions. Adds a level of magic, though.
|
||||
- [ ] Test results
|
||||
- [x] Move to own file? Or signpost in file? => signposted in file.
|
||||
- [ ] Disambiguate sample_laplace--successes vs failures || successes vs total trials as two distinct and differently named functions
|
||||
- [ ] Write twitter thread.
|
||||
- [x] Write twitter thread: now [here](https://twitter.com/NunoSempere/status/1707041153210564959); retweets appreciated.
|
||||
- [ ] ~~Think about whether to write a simple version of this for [uxn](https://100r.co/site/uxn.html), a minimalistic portable programming stack which, sadly, doesn't have doubles (64 bit floats)~~
|
||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -1,5 +1,5 @@
|
|||
#include "../../squiggle.h"
|
||||
#include "../../extra.h"
|
||||
#include "../../squiggle_more.h"
|
||||
#include <math.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
|
|
|
@ -9,12 +9,13 @@ CC=gcc # required for nested functions
|
|||
# CC=tcc # <= faster compilation
|
||||
|
||||
# Main file
|
||||
SRC=example.c ../../squiggle.c ../../extra.c
|
||||
SRC=example.c ../../squiggle.c ../../squiggle_more.c
|
||||
OUTPUT=./example
|
||||
|
||||
## Dependencies
|
||||
OPENMP=-fopenmp
|
||||
MATH=-lm
|
||||
DEPENDENCIES=$(MATH)
|
||||
DEPENDENCIES=$(MATH) $(OPENMP)
|
||||
# OPENMP=-fopenmp
|
||||
|
||||
## Flags
|
||||
|
|
Binary file not shown.
|
@ -1,5 +1,5 @@
|
|||
#include "../../squiggle.h"
|
||||
#include "../../extra.h"
|
||||
#include "../../squiggle_more.h"
|
||||
#include <math.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
# CC=tcc # <= faster compilation
|
||||
|
||||
# Main file
|
||||
SRC=example.c ../../squiggle.c ../../extra.c
|
||||
SRC=example.c ../../squiggle.c ../../squiggle_more.c
|
||||
OUTPUT=./example
|
||||
|
||||
## Dependencies
|
||||
|
|
Binary file not shown.
|
@ -1,5 +1,5 @@
|
|||
#include "../../squiggle.h"
|
||||
#include "../../extra.h"
|
||||
#include "../../squiggle_more.h"
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
|
|
@ -9,7 +9,7 @@ CC=gcc
|
|||
# CC=tcc # <= faster compilation
|
||||
|
||||
# Main file
|
||||
SRC=example.c ../../squiggle.c ../../extra.c
|
||||
SRC=example.c ../../squiggle.c ../../squiggle_more.c
|
||||
OUTPUT=example
|
||||
|
||||
## Dependencies
|
||||
|
|
Binary file not shown.
|
@ -1,5 +1,5 @@
|
|||
#include "../../squiggle.h"
|
||||
#include "../../extra.h"
|
||||
#include "../../squiggle_more.h"
|
||||
#include <math.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
|
|
|
@ -9,7 +9,7 @@ CC=gcc
|
|||
# CC=tcc # <= faster compilation
|
||||
|
||||
# Main file
|
||||
SRC=example.c ../../squiggle.c ../../extra.c
|
||||
SRC=example.c ../../squiggle.c ../../squiggle_more.c
|
||||
OUTPUT=example
|
||||
|
||||
## Dependencies
|
||||
|
|
Binary file not shown.
|
@ -1,5 +1,5 @@
|
|||
#include "../../squiggle.h"
|
||||
#include "../../extra.h"
|
||||
#include "../../squiggle_more.h"
|
||||
#include <math.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
|
|
|
@ -9,7 +9,7 @@ CC=gcc # required for nested functions
|
|||
# CC=tcc # <= faster compilation
|
||||
|
||||
# Main file
|
||||
SRC=example.c ../../squiggle.c ../../extra.c
|
||||
SRC=example.c ../../squiggle.c ../../squiggle_more.c
|
||||
OUTPUT=./example
|
||||
|
||||
## Dependencies
|
||||
|
|
Binary file not shown.
|
@ -1,5 +1,5 @@
|
|||
#include "../../squiggle.h"
|
||||
#include "../../extra.h"
|
||||
#include "../../squiggle_more.h"
|
||||
#include <math.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
|
|
|
@ -9,7 +9,7 @@ CC=gcc # required for nested functions
|
|||
# CC=tcc # <= faster compilation
|
||||
|
||||
# Main file
|
||||
SRC=example.c ../../squiggle.c ../../extra.c
|
||||
SRC=example.c ../../squiggle.c ../../squiggle_more.c
|
||||
OUTPUT=./example
|
||||
|
||||
## Dependencies
|
||||
|
|
Binary file not shown.
|
@ -1,5 +1,5 @@
|
|||
#include "../../squiggle.h"
|
||||
#include "../../extra.h"
|
||||
#include "../../squiggle_more.h"
|
||||
#include <math.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
|
|
|
@ -9,7 +9,7 @@ CC=gcc # required for nested functions
|
|||
# CC=tcc # <= faster compilation
|
||||
|
||||
# Main file
|
||||
SRC=example.c ../../squiggle.c ../../extra.c
|
||||
SRC=example.c ../../squiggle.c ../../squiggle_more.c
|
||||
OUTPUT=./example
|
||||
|
||||
## Dependencies
|
||||
|
|
Binary file not shown.
|
@ -1,5 +1,5 @@
|
|||
#include "../../squiggle.h"
|
||||
#include "../../extra.h"
|
||||
#include "../../squiggle_more.h"
|
||||
#include <math.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
|
@ -17,10 +17,10 @@ int main()
|
|||
printf("The 90%% confidence interval of Lognormal(%f, %f) is [%f, %f]\n",
|
||||
ln1.logmean, ln1.logstd,
|
||||
ln1_ci.low, ln1_ci.high);
|
||||
lognormal_params ln1_ci_paramas = convert_ci_to_lognormal_params(ln1_ci);
|
||||
lognormal_params ln1_params2 = convert_ci_to_lognormal_params(ln1_ci);
|
||||
printf("The lognormal which has 90%% confidence interval [%f, %f] is Lognormal(%f, %f)\n",
|
||||
ln1_ci.low, ln1_ci.high,
|
||||
ln1.logmean, ln1.logstd);
|
||||
ln1_params2.logmean, ln1_params2.logstd);
|
||||
|
||||
lognormal_params ln2 = convert_ci_to_lognormal_params((ci) { .low = 1, .high = 10 });
|
||||
lognormal_params ln3 = convert_ci_to_lognormal_params((ci) { .low = 5, .high = 50 });
|
||||
|
|
|
@ -9,7 +9,7 @@ CC=gcc # required for nested functions
|
|||
# CC=tcc # <= faster compilation
|
||||
|
||||
# Main file
|
||||
SRC=example.c ../../squiggle.c ../../extra.c
|
||||
SRC=example.c ../../squiggle.c ../../squiggle_more.c
|
||||
OUTPUT=./example
|
||||
|
||||
## Dependencies
|
||||
|
|
Binary file not shown.
|
@ -1,5 +1,5 @@
|
|||
#include "../../squiggle.h"
|
||||
#include "../../extra.h"
|
||||
#include "../../squiggle_more.h"
|
||||
#include <math.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
|
|
|
@ -9,7 +9,7 @@ CC=gcc # required for nested functions
|
|||
# CC=tcc # <= faster compilation
|
||||
|
||||
# Main file
|
||||
SRC=example.c ../../squiggle.c ../../extra.c
|
||||
SRC=example.c ../../squiggle.c ../../squiggle_more.c
|
||||
OUTPUT=./example
|
||||
|
||||
## Dependencies
|
||||
|
|
Binary file not shown.
|
@ -1,5 +1,5 @@
|
|||
#include "../../squiggle.h"
|
||||
#include "../../extra.h"
|
||||
#include "../../squiggle_more.h"
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
|
|
@ -9,7 +9,7 @@ CC=gcc # required for nested functions
|
|||
# CC=tcc # <= faster compilation
|
||||
|
||||
# Main file
|
||||
SRC=example.c ../../squiggle.c ../../extra.c
|
||||
SRC=example.c ../../squiggle.c ../../squiggle_more.c
|
||||
OUTPUT=./example
|
||||
|
||||
## Dependencies
|
||||
|
|
Binary file not shown.
|
@ -9,12 +9,14 @@ int main()
|
|||
// set randomness seed
|
||||
uint64_t* seed = malloc(sizeof(uint64_t));
|
||||
*seed = 1000; // xorshift can't start with a seed of 0
|
||||
|
||||
/*
|
||||
for (int i = 0; i < 100; i++) {
|
||||
double draw = sample_unit_uniform(seed);
|
||||
printf("%f\n", draw);
|
||||
|
||||
}
|
||||
}*/
|
||||
// Test division
|
||||
printf("\n%d\n", 10 % 3);
|
||||
|
||||
free(seed);
|
||||
}
|
||||
|
|
|
@ -1,15 +1,7 @@
|
|||
#include <float.h>
|
||||
#include <limits.h>
|
||||
#include <math.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/types.h>
|
||||
#include <time.h>
|
||||
|
||||
// # Key functionality
|
||||
// Define the minimum number of functions needed to do simple estimation
|
||||
// Starts here, ends until the end of the mixture function
|
||||
|
||||
// math constants
|
||||
#define PI 3.14159265358979323846 // M_PI in gcc gnu99
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
#include "squiggle.h"
|
||||
#include <float.h>
|
||||
#include <limits.h>
|
||||
#include <math.h>
|
||||
#include <limits.h>
|
||||
#include <omp.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/types.h>
|
||||
#include <time.h>
|
||||
#include "squiggle.h"
|
||||
|
||||
// math constants
|
||||
#define PI 3.14159265358979323846 // M_PI in gcc gnu99
|
||||
|
@ -18,7 +17,8 @@
|
|||
#define PROCESS_ERROR(error_msg) process_error(error_msg, EXIT_ON_ERROR, __FILE__, __LINE__)
|
||||
|
||||
// Get confidence intervals, given a sampler
|
||||
// Not in core yet because I'm not sure how much I like the interface,
|
||||
// Not in core yet because I'm not sure how much I like the struct
|
||||
// and the built-in 100k samples
|
||||
// to do: add n to function parameters and document
|
||||
|
||||
typedef struct ci_t {
|
||||
|
@ -303,3 +303,37 @@ ci convert_lognormal_params_to_ci(lognormal_params y)
|
|||
ci result = { .low = exp(loglow), .high = exp(loghigh) };
|
||||
return result;
|
||||
}
|
||||
|
||||
// Paralellism
|
||||
/*
|
||||
void paralellize(float (*sampler)(uint64_t* seed), float* results, int n_threads, int n_samples){
|
||||
if((n_samples % n_threads) != 0){
|
||||
fprintf(stderr, "Number of samples isn't divisible by number of threads, aborting\n");
|
||||
exit(1);
|
||||
}
|
||||
uint64_t** seeds = malloc(n_threads * sizeof(uint64_t*));
|
||||
for (uint64_t i = 0; i < n_threads; i++) {
|
||||
seeds[i] = malloc(sizeof(uint64_t));
|
||||
*seeds[i] = i + 1; // xorshift can't start with 0
|
||||
}
|
||||
|
||||
int i;
|
||||
#pragma omp parallel private(i)
|
||||
{
|
||||
#pragma omp for
|
||||
for (i = 0; i < n_threads; i++) {
|
||||
int lower_bound = i * (n_samples / n_threads);
|
||||
int upper_bound = ((i+1) * (n_samples / n_threads)) - 1;
|
||||
// printf("Lower bound: %d, upper bound: %d\n", lower_bound, upper_bound);
|
||||
for (int j = lower_bound; j < upper_bound; j++) {
|
||||
results[j] = sampler(seeds[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (uint64_t i = 0; i < n_threads; i++) {
|
||||
free(seeds[i]);
|
||||
}
|
||||
free(seeds);
|
||||
}
|
||||
*/
|
Loading…
Reference in New Issue
Block a user