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
|
## 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).
|
- [ ] 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
|
- [ ] Document rudimentary algebra manipulations for normal/lognormal
|
||||||
- [ ] Think through whether to delete cdf => samples function
|
- [ ] 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
|
- complexify and use boxes for everything
|
||||||
- leave as is
|
- leave as is
|
||||||
- [ ] Systematize references
|
- [ ] Systematize references
|
||||||
- [ ] Publish online
|
|
||||||
- [ ] Support all distribution functions in <https://www.squiggle-language.com/docs/Api/Dist>
|
- [ ] Support all distribution functions in <https://www.squiggle-language.com/docs/Api/Dist>
|
||||||
- [ ] do so efficiently
|
- [ ] do so efficiently
|
||||||
- [ ] Add more functions to do algebra and get the 90% c.i. of normals, lognormals, betas, etc.
|
- [ ] Add more functions to do algebra and get the 90% c.i. of normals, lognormals, betas, etc.
|
||||||
- Think through which of these make sense.
|
- 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
|
## 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.
|
- [ ] Consider desirability of defining shortcuts for those functions. Adds a level of magic, though.
|
||||||
- [ ] Test results
|
- [ ] Test results
|
||||||
- [x] Move to own file? Or signpost in file? => signposted in file.
|
- [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
|
- [x] Write twitter thread: now [here](https://twitter.com/NunoSempere/status/1707041153210564959); retweets appreciated.
|
||||||
- [ ] Write twitter thread.
|
- [ ] ~~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 "../../squiggle.h"
|
||||||
#include "../../extra.h"
|
#include "../../squiggle_more.h"
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
|
@ -9,12 +9,13 @@ CC=gcc # required for nested functions
|
||||||
# CC=tcc # <= faster compilation
|
# CC=tcc # <= faster compilation
|
||||||
|
|
||||||
# Main file
|
# Main file
|
||||||
SRC=example.c ../../squiggle.c ../../extra.c
|
SRC=example.c ../../squiggle.c ../../squiggle_more.c
|
||||||
OUTPUT=./example
|
OUTPUT=./example
|
||||||
|
|
||||||
## Dependencies
|
## Dependencies
|
||||||
|
OPENMP=-fopenmp
|
||||||
MATH=-lm
|
MATH=-lm
|
||||||
DEPENDENCIES=$(MATH)
|
DEPENDENCIES=$(MATH) $(OPENMP)
|
||||||
# OPENMP=-fopenmp
|
# OPENMP=-fopenmp
|
||||||
|
|
||||||
## Flags
|
## Flags
|
||||||
|
|
Binary file not shown.
|
@ -1,5 +1,5 @@
|
||||||
#include "../../squiggle.h"
|
#include "../../squiggle.h"
|
||||||
#include "../../extra.h"
|
#include "../../squiggle_more.h"
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
# CC=tcc # <= faster compilation
|
# CC=tcc # <= faster compilation
|
||||||
|
|
||||||
# Main file
|
# Main file
|
||||||
SRC=example.c ../../squiggle.c ../../extra.c
|
SRC=example.c ../../squiggle.c ../../squiggle_more.c
|
||||||
OUTPUT=./example
|
OUTPUT=./example
|
||||||
|
|
||||||
## Dependencies
|
## Dependencies
|
||||||
|
|
Binary file not shown.
|
@ -1,5 +1,5 @@
|
||||||
#include "../../squiggle.h"
|
#include "../../squiggle.h"
|
||||||
#include "../../extra.h"
|
#include "../../squiggle_more.h"
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
|
@ -9,7 +9,7 @@ CC=gcc
|
||||||
# CC=tcc # <= faster compilation
|
# CC=tcc # <= faster compilation
|
||||||
|
|
||||||
# Main file
|
# Main file
|
||||||
SRC=example.c ../../squiggle.c ../../extra.c
|
SRC=example.c ../../squiggle.c ../../squiggle_more.c
|
||||||
OUTPUT=example
|
OUTPUT=example
|
||||||
|
|
||||||
## Dependencies
|
## Dependencies
|
||||||
|
|
Binary file not shown.
|
@ -1,5 +1,5 @@
|
||||||
#include "../../squiggle.h"
|
#include "../../squiggle.h"
|
||||||
#include "../../extra.h"
|
#include "../../squiggle_more.h"
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
|
@ -9,7 +9,7 @@ CC=gcc
|
||||||
# CC=tcc # <= faster compilation
|
# CC=tcc # <= faster compilation
|
||||||
|
|
||||||
# Main file
|
# Main file
|
||||||
SRC=example.c ../../squiggle.c ../../extra.c
|
SRC=example.c ../../squiggle.c ../../squiggle_more.c
|
||||||
OUTPUT=example
|
OUTPUT=example
|
||||||
|
|
||||||
## Dependencies
|
## Dependencies
|
||||||
|
|
Binary file not shown.
|
@ -1,5 +1,5 @@
|
||||||
#include "../../squiggle.h"
|
#include "../../squiggle.h"
|
||||||
#include "../../extra.h"
|
#include "../../squiggle_more.h"
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
|
@ -9,7 +9,7 @@ CC=gcc # required for nested functions
|
||||||
# CC=tcc # <= faster compilation
|
# CC=tcc # <= faster compilation
|
||||||
|
|
||||||
# Main file
|
# Main file
|
||||||
SRC=example.c ../../squiggle.c ../../extra.c
|
SRC=example.c ../../squiggle.c ../../squiggle_more.c
|
||||||
OUTPUT=./example
|
OUTPUT=./example
|
||||||
|
|
||||||
## Dependencies
|
## Dependencies
|
||||||
|
|
Binary file not shown.
|
@ -1,5 +1,5 @@
|
||||||
#include "../../squiggle.h"
|
#include "../../squiggle.h"
|
||||||
#include "../../extra.h"
|
#include "../../squiggle_more.h"
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
|
@ -9,7 +9,7 @@ CC=gcc # required for nested functions
|
||||||
# CC=tcc # <= faster compilation
|
# CC=tcc # <= faster compilation
|
||||||
|
|
||||||
# Main file
|
# Main file
|
||||||
SRC=example.c ../../squiggle.c ../../extra.c
|
SRC=example.c ../../squiggle.c ../../squiggle_more.c
|
||||||
OUTPUT=./example
|
OUTPUT=./example
|
||||||
|
|
||||||
## Dependencies
|
## Dependencies
|
||||||
|
|
Binary file not shown.
|
@ -1,5 +1,5 @@
|
||||||
#include "../../squiggle.h"
|
#include "../../squiggle.h"
|
||||||
#include "../../extra.h"
|
#include "../../squiggle_more.h"
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
|
@ -9,7 +9,7 @@ CC=gcc # required for nested functions
|
||||||
# CC=tcc # <= faster compilation
|
# CC=tcc # <= faster compilation
|
||||||
|
|
||||||
# Main file
|
# Main file
|
||||||
SRC=example.c ../../squiggle.c ../../extra.c
|
SRC=example.c ../../squiggle.c ../../squiggle_more.c
|
||||||
OUTPUT=./example
|
OUTPUT=./example
|
||||||
|
|
||||||
## Dependencies
|
## Dependencies
|
||||||
|
|
Binary file not shown.
|
@ -1,5 +1,5 @@
|
||||||
#include "../../squiggle.h"
|
#include "../../squiggle.h"
|
||||||
#include "../../extra.h"
|
#include "../../squiggle_more.h"
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -17,10 +17,10 @@ int main()
|
||||||
printf("The 90%% confidence interval of Lognormal(%f, %f) is [%f, %f]\n",
|
printf("The 90%% confidence interval of Lognormal(%f, %f) is [%f, %f]\n",
|
||||||
ln1.logmean, ln1.logstd,
|
ln1.logmean, ln1.logstd,
|
||||||
ln1_ci.low, ln1_ci.high);
|
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",
|
printf("The lognormal which has 90%% confidence interval [%f, %f] is Lognormal(%f, %f)\n",
|
||||||
ln1_ci.low, ln1_ci.high,
|
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 ln2 = convert_ci_to_lognormal_params((ci) { .low = 1, .high = 10 });
|
||||||
lognormal_params ln3 = convert_ci_to_lognormal_params((ci) { .low = 5, .high = 50 });
|
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
|
# CC=tcc # <= faster compilation
|
||||||
|
|
||||||
# Main file
|
# Main file
|
||||||
SRC=example.c ../../squiggle.c ../../extra.c
|
SRC=example.c ../../squiggle.c ../../squiggle_more.c
|
||||||
OUTPUT=./example
|
OUTPUT=./example
|
||||||
|
|
||||||
## Dependencies
|
## Dependencies
|
||||||
|
|
Binary file not shown.
|
@ -1,5 +1,5 @@
|
||||||
#include "../../squiggle.h"
|
#include "../../squiggle.h"
|
||||||
#include "../../extra.h"
|
#include "../../squiggle_more.h"
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
|
@ -9,7 +9,7 @@ CC=gcc # required for nested functions
|
||||||
# CC=tcc # <= faster compilation
|
# CC=tcc # <= faster compilation
|
||||||
|
|
||||||
# Main file
|
# Main file
|
||||||
SRC=example.c ../../squiggle.c ../../extra.c
|
SRC=example.c ../../squiggle.c ../../squiggle_more.c
|
||||||
OUTPUT=./example
|
OUTPUT=./example
|
||||||
|
|
||||||
## Dependencies
|
## Dependencies
|
||||||
|
|
Binary file not shown.
|
@ -1,5 +1,5 @@
|
||||||
#include "../../squiggle.h"
|
#include "../../squiggle.h"
|
||||||
#include "../../extra.h"
|
#include "../../squiggle_more.h"
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
|
@ -9,7 +9,7 @@ CC=gcc # required for nested functions
|
||||||
# CC=tcc # <= faster compilation
|
# CC=tcc # <= faster compilation
|
||||||
|
|
||||||
# Main file
|
# Main file
|
||||||
SRC=example.c ../../squiggle.c ../../extra.c
|
SRC=example.c ../../squiggle.c ../../squiggle_more.c
|
||||||
OUTPUT=./example
|
OUTPUT=./example
|
||||||
|
|
||||||
## Dependencies
|
## Dependencies
|
||||||
|
|
Binary file not shown.
|
@ -9,12 +9,14 @@ int main()
|
||||||
// set randomness seed
|
// set randomness seed
|
||||||
uint64_t* seed = malloc(sizeof(uint64_t));
|
uint64_t* seed = malloc(sizeof(uint64_t));
|
||||||
*seed = 1000; // xorshift can't start with a seed of 0
|
*seed = 1000; // xorshift can't start with a seed of 0
|
||||||
|
/*
|
||||||
for (int i = 0; i < 100; i++) {
|
for (int i = 0; i < 100; i++) {
|
||||||
double draw = sample_unit_uniform(seed);
|
double draw = sample_unit_uniform(seed);
|
||||||
printf("%f\n", draw);
|
printf("%f\n", draw);
|
||||||
|
|
||||||
}
|
}*/
|
||||||
|
// Test division
|
||||||
|
printf("\n%d\n", 10 % 3);
|
||||||
|
|
||||||
free(seed);
|
free(seed);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,15 +1,7 @@
|
||||||
#include <float.h>
|
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.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
|
// math constants
|
||||||
#define PI 3.14159265358979323846 // M_PI in gcc gnu99
|
#define PI 3.14159265358979323846 // M_PI in gcc gnu99
|
||||||
|
|
|
@ -1,12 +1,11 @@
|
||||||
#include "squiggle.h"
|
|
||||||
#include <float.h>
|
#include <float.h>
|
||||||
#include <limits.h>
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#include <omp.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <sys/types.h>
|
#include "squiggle.h"
|
||||||
#include <time.h>
|
|
||||||
|
|
||||||
// math constants
|
// math constants
|
||||||
#define PI 3.14159265358979323846 // M_PI in gcc gnu99
|
#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__)
|
#define PROCESS_ERROR(error_msg) process_error(error_msg, EXIT_ON_ERROR, __FILE__, __LINE__)
|
||||||
|
|
||||||
// Get confidence intervals, given a sampler
|
// 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
|
// to do: add n to function parameters and document
|
||||||
|
|
||||||
typedef struct ci_t {
|
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) };
|
ci result = { .low = exp(loglow), .high = exp(loghigh) };
|
||||||
return result;
|
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