Skip to content
Snippets Groups Projects
Select Git revision
  • a89c5c103f8f07afb8cdd06fd81a3195e4b7fa8b
  • master default
  • development
  • franco
4 results

User.vue

Blame
  • tree.c 29.46 KiB
    /*
     * Implementation of a distributed memory  kd-tree
     * The idea is to have a top level domain decomposition with a shallow shared
     * top level tree between computational nodes.
     *
     * Then each domain has a different set of points to work on separately
     * the top tree serves as a map to know later on in which processor ask for
     * neighbors
     */
    #include "tree.h"
    #include "mpi.h"
    #include <math.h>
    #include <stdint.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #ifdef USE_FLOAT32
    #define MPI_MY_FLOAT MPI_FLOAT
    #else
    #define MPI_MY_FLOAT MPI_DOUBLE
    #endif
    
    #define I_AM_MASTER ctx->mpi_rank == 0
    
    #define TOP_TREE_RCH 1
    #define TOP_TREE_LCH 0
    #define NO_CHILD -1
    
    float_t *read_data_file(global_context_t *ctx, const char *fname,
                            const int file_in_float32) 
    {
    
    	FILE *f = fopen(fname, "r");
    	if (!f) 
    	{
    		printf("Nope\n");
    		exit(1);
    	}
    	fseek(f, 0, SEEK_END);
    	size_t n = ftell(f);
    	rewind(f);
    
    	int InputFloatSize = file_in_float32 ? 4 : 8;
    
    	n = n / (InputFloatSize);
    
    	float_t *data = (float_t *)malloc(n * sizeof(float_t));
    
    	if (file_in_float32) 
    	{
    		float *df = (float *)malloc(n * sizeof(float));
    		size_t fff = fread(df, sizeof(float), n, f);
    		mpi_printf(ctx, "Read %luB\n", fff);
    		fclose(f);
    
    		for (uint64_t i = 0; i < n; ++i) data[i] = (float_t)(df[i]);
    
    		free(df);
    	} 
    	else 
    	{
    		double *df = (double *)malloc(n * sizeof(double));
    		size_t fff = fread(df, sizeof(double), n, f);
    		mpi_printf(ctx, "Read %luB\n", fff);
    		fclose(f);
    
    		for (uint64_t i = 0; i < n; ++i) data[i] = (float_t)(df[i]);
    
    		free(df);