forked from personal/squiggle.c
		
	add beta and gamma example/tests
This commit is contained in:
		
							parent
							
								
									5e39c386f7
								
							
						
					
					
						commit
						08eb790a6d
					
				
							
								
								
									
										
											BIN
										
									
								
								examples/06_gamma_beta/example
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								examples/06_gamma_beta/example
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										50
									
								
								examples/06_gamma_beta/example.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								examples/06_gamma_beta/example.c
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,50 @@ | |||
| #include "../../squiggle.h" | ||||
| #include <stdint.h> | ||||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
| 
 | ||||
| // Estimate functions
 | ||||
| 
 | ||||
| int main() | ||||
| { | ||||
|     // set randomness seed
 | ||||
|     uint32_t* seed = malloc(sizeof(uint32_t)); | ||||
|     *seed = 1000; // xorshift can't start with 0
 | ||||
| 
 | ||||
|     int n =  1000 * 1000; | ||||
|     for (int i = 0; i < n; i++) { | ||||
|         float gamma_0 = sample_gamma(0.0, seed); | ||||
|         // printf("sample_gamma(0.0): %f\n", gamma_0);
 | ||||
|     } | ||||
| 		// printf("\n");
 | ||||
| 
 | ||||
| 		float* gamma_1_array = malloc(sizeof(float) * n); | ||||
|     for (int i = 0; i < n; i++) { | ||||
|         float gamma_1 = sample_gamma(1.0, seed); | ||||
|         // printf("sample_gamma(1.0): %f\n", gamma_1);
 | ||||
| 				gamma_1_array[i] = gamma_1; | ||||
|     } | ||||
| 		printf("gamma(1) summary statistics = mean: %f, std: %f\n", array_mean(gamma_1_array, n), array_std(gamma_1_array, n)); | ||||
| 		free(gamma_1_array); | ||||
| 		printf("\n"); | ||||
|      | ||||
| 		float* beta_1_2_array = malloc(sizeof(float) * n); | ||||
| 		for (int i = 0; i < n; i++) { | ||||
|         float beta_1_2 = sample_beta(1, 2.0, seed); | ||||
|         // printf("sample_beta(1.0, 2.0): %f\n", beta_1_2);
 | ||||
| 				beta_1_2_array[i] = beta_1_2; | ||||
|     } | ||||
| 		printf("beta(1,2) summary statistics: mean: %f, std: %f\n", array_mean(beta_1_2_array, n), array_std(beta_1_2_array, n)); | ||||
| 		free(beta_1_2_array); | ||||
| 		printf("\n"); | ||||
| 		 | ||||
| 		free(seed); | ||||
| } | ||||
| 
 | ||||
| /* 
 | ||||
| Aggregation mechanisms: | ||||
| - Quantiles (requires a sort) | ||||
| - Sum  | ||||
| - Average | ||||
| - Std | ||||
| */ | ||||
							
								
								
									
										53
									
								
								examples/06_gamma_beta/makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								examples/06_gamma_beta/makefile
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,53 @@ | |||
| # Interface: 
 | ||||
| #   make
 | ||||
| #   make build
 | ||||
| #   make format
 | ||||
| #   make run
 | ||||
| 
 | ||||
| # Compiler
 | ||||
| CC=gcc | ||||
| # CC=tcc # <= faster compilation
 | ||||
| 
 | ||||
| # Main file
 | ||||
| SRC=example.c ../../squiggle.c | ||||
| OUTPUT=example | ||||
| 
 | ||||
| ## Dependencies
 | ||||
| MATH=-lm | ||||
| 
 | ||||
| ## Flags
 | ||||
| DEBUG= #'-g' | ||||
| STANDARD=-std=c99 | ||||
| WARNINGS=-Wall | ||||
| OPTIMIZED=-O3  #-Ofast | ||||
| # OPENMP=-fopenmp
 | ||||
| 
 | ||||
| ## Formatter
 | ||||
| STYLE_BLUEPRINT=webkit | ||||
| FORMATTER=clang-format -i -style=$(STYLE_BLUEPRINT) | ||||
| 
 | ||||
| ## make build
 | ||||
| build: $(SRC) | ||||
| 	$(CC) $(OPTIMIZED) $(DEBUG) $(SRC) $(MATH) -o $(OUTPUT) | ||||
| 
 | ||||
| format: $(SRC) | ||||
| 	$(FORMATTER) $(SRC) | ||||
| 
 | ||||
| run: $(SRC) $(OUTPUT) | ||||
| 	OMP_NUM_THREADS=1 ./$(OUTPUT) && echo | ||||
| 
 | ||||
| time-linux:  | ||||
| 	@echo "Requires /bin/time, found on GNU/Linux systems" && echo | ||||
| 	 | ||||
| 	@echo "Running 100x and taking avg time $(OUTPUT)" | ||||
| 	@t=$$(/usr/bin/time -f "%e" -p bash -c 'for i in {1..100}; do $(OUTPUT); done' 2>&1 >/dev/null | grep real | awk '{print $$2}' ); echo "scale=2; 1000 * $$t / 100" | bc | sed "s|^|Time using 1 thread: |" | sed 's|$$|ms|' && echo | ||||
| 
 | ||||
| ## Profiling
 | ||||
| 
 | ||||
| profile-linux:  | ||||
| 	echo "Requires perf, which depends on the kernel version, and might be in linux-tools package or similar" | ||||
| 	echo "Must be run as sudo" | ||||
| 	$(CC) $(SRC) $(MATH) -o $(OUTPUT) | ||||
| 	sudo perf record ./$(OUTPUT) | ||||
| 	sudo perf report | ||||
| 	rm perf.data | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user