|
Multi-core Hash Joins
Main-memory hash join implementations for multi-core CPUs
|
Provides implementations for several variants of Radix Hash Join. More...
#include <sched.h>#include <pthread.h>#include <stdlib.h>#include <sys/time.h>#include <stdio.h>#include <smmintrin.h>#include <immintrin.h>#include "parallel_radix_join.h"#include "prj_params.h"#include "task_queue.h"#include "cpu_mapping.h"#include "rdtsc.h"#include "barrier.h"#include "affinity.h"#include "generator.h"Go to the source code of this file.
Classes | |
| struct | arg_t |
| struct | part_t |
| union | cacheline_t |
Macros | |
| #define | _GNU_SOURCE |
| #define | MALLOC_CHECK(M) |
| #define | HASH_BIT_MODULO(K, MASK, NBITS) (((K) & MASK) >> NBITS) |
| #define | NEXT_POW_2(V) |
| #define | MAX(X, Y) (((X) > (Y)) ? (X) : (Y)) |
| #define | SYNC_TIMERS_START(A, TID) |
| #define | SYNC_TIMER_STOP(T) |
| #define | SYNC_GLOBAL_STOP(T, TID) |
| #define | DEBUGMSG(COND, MSG, ...) |
| #define | TUPLESPERCACHELINE (CACHE_LINE_SIZE/sizeof(tuple_t)) |
Typedefs | |
| typedef struct arg_t | arg_t |
| typedef struct part_t | part_t |
| typedef struct synctimer_t | synctimer_t |
| typedef int64_t(* | JoinFunction) (const relation_t *const, const relation_t *const, relation_t *const, void *output) |
Functions | |
| struct arg_t | __attribute__ ((aligned(CACHE_LINE_SIZE))) |
| int64_t | bucket_chaining_join (const relation_t *const R, const relation_t *const S, relation_t *const tmpR, void *output) |
| uint32_t | get_hist_size (uint32_t relSize) __attribute__((always_inline)) |
| int64_t | histogram_join (const relation_t *const R, const relation_t *const S, relation_t *const tmpR, void *output) |
| void | prefetch (void *addr) __attribute__((always_inline)) |
| int64_t | histogram_optimized_join (const relation_t *const R, const relation_t *const S, relation_t *const tmpR, void *output) |
| void | radix_cluster (relation_t *restrict outRel, relation_t *restrict inRel, int32_t *restrict hist, int R, int D) |
| void | radix_cluster_nopadding (relation_t *outRel, relation_t *inRel, int R, int D) |
| void | serial_radix_partition (task_t *const task, task_queue_t *join_queue, const int R, const int D) |
| void | parallel_radix_partition (part_t *const part) |
| void | parallel_radix_partition_optimized (part_t *const part) |
| void * | prj_thread (void *param) |
| result_t * | join_init_run (relation_t *relR, relation_t *relS, JoinFunction jf, int nthreads) |
| result_t * | PRO (relation_t *relR, relation_t *relS, int nthreads) |
| result_t * | PRH (relation_t *relR, relation_t *relS, int nthreads) |
| result_t * | PRHO (relation_t *relR, relation_t *relS, int nthreads) |
| result_t * | RJ (relation_t *relR, relation_t *relS, int nthreads) |
Variables | |
| typedef | __attribute__ |
| int | numalocalize |
| int32_t ** | histR |
| tuple_t * | relR |
| tuple_t * | tmpR |
| int32_t ** | histS |
| tuple_t * | relS |
| tuple_t * | tmpS |
| int32_t | numR |
| int32_t | numS |
| int64_t | totalR |
| int64_t | totalS |
| task_queue_t ** | join_queue |
| task_queue_t ** | part_queue |
| pthread_barrier_t * | barrier |
| JoinFunction | join_function |
| int64_t | result |
| int32_t | my_tid |
| int | nthreads |
| threadresult_t * | threadresult |
| int32_t | parts_processed |
| uint64_t | timer1 |
| uint64_t | timer2 |
| uint64_t | timer3 |
| struct timeval start | end |
| tuple_t * | rel |
| tuple_t * | tmp |
| int32_t ** | hist |
| int64_t * | output |
| arg_t * | thrargs |
| uint64_t | total_tuples |
| uint32_t | num_tuples |
| int32_t | R |
| uint32_t | D |
| int | relidx |
| uint32_t | padding |
Provides implementations for several variants of Radix Hash Join.
(c) 2012, ETH Zurich, Systems Group
Definition in file parallel_radix_join.c.
| #define _GNU_SOURCE |
Definition at line 14 of file parallel_radix_join.c.
| #define DEBUGMSG | ( | COND, | |
| MSG, | |||
| ... | |||
| ) |
Debug msg logging method
Definition at line 118 of file parallel_radix_join.c.
| #define HASH_BIT_MODULO | ( | K, | |
| MASK, | |||
| NBITS | |||
| ) | (((K) & MASK) >> NBITS) |
Definition at line 64 of file parallel_radix_join.c.
| #define MALLOC_CHECK | ( | M | ) |
checks malloc() result
Definition at line 55 of file parallel_radix_join.c.
| #define MAX | ( | X, | |
| Y | |||
| ) | (((X) > (Y)) ? (X) : (Y)) |
Definition at line 84 of file parallel_radix_join.c.
| #define NEXT_POW_2 | ( | V | ) |
compute the next number, greater than or equal to 32-bit unsigned v. taken from "bit twiddling hacks": http://graphics.stanford.edu/~seander/bithacks.html
Definition at line 72 of file parallel_radix_join.c.
| #define SYNC_GLOBAL_STOP | ( | T, | |
| TID | |||
| ) |
Definition at line 110 of file parallel_radix_join.c.
| #define SYNC_TIMER_STOP | ( | T | ) |
Definition at line 109 of file parallel_radix_join.c.
| #define SYNC_TIMERS_START | ( | A, | |
| TID | |||
| ) |
Definition at line 108 of file parallel_radix_join.c.
Definition at line 129 of file parallel_radix_join.c.
| typedef int64_t(* JoinFunction) (const relation_t *const, const relation_t *const, relation_t *const, void *output) |
Definition at line 132 of file parallel_radix_join.c.
Definition at line 130 of file parallel_radix_join.c.
| typedef struct synctimer_t synctimer_t |
Definition at line 131 of file parallel_radix_join.c.
| pthread_barrier_t* barrier |
Definition at line 18 of file parallel_radix_join.c.
| uint32_t D |
Definition at line 8 of file parallel_radix_join.c.
| struct timeval start end |
Definition at line 30 of file parallel_radix_join.c.
| int32_t** hist |
Definition at line 2 of file parallel_radix_join.c.
| int32_t** histR |
Definition at line 0 of file parallel_radix_join.c.
| int32_t** histS |
Definition at line 3 of file parallel_radix_join.c.
| JoinFunction join_function |
Definition at line 19 of file parallel_radix_join.c.
| task_queue_t** join_queue |
Definition at line 12 of file parallel_radix_join.c.
| int32_t my_tid |
Definition at line 21 of file parallel_radix_join.c.
| int nthreads |
Definition at line 22 of file parallel_radix_join.c.
| uint32_t num_tuples |
Definition at line 6 of file parallel_radix_join.c.
|
extern |
An experimental feature to allocate input relations numa-local
Definition at line 47 of file generator.c.
| int32_t numR |
Definition at line 7 of file parallel_radix_join.c.
| int32_t numS |
Definition at line 8 of file parallel_radix_join.c.
| int64_t* output |
Definition at line 3 of file parallel_radix_join.c.
| uint32_t padding |
Definition at line 10 of file parallel_radix_join.c.
| task_queue_t** part_queue |
Definition at line 13 of file parallel_radix_join.c.
| int32_t parts_processed |
Definition at line 28 of file parallel_radix_join.c.
| int32_t R |
Definition at line 7 of file parallel_radix_join.c.
| tuple_t* rel |
Definition at line 0 of file parallel_radix_join.c.
| int relidx |
Definition at line 9 of file parallel_radix_join.c.
| tuple_t* relR |
Definition at line 1 of file parallel_radix_join.c.
| tuple_t* relS |
Definition at line 4 of file parallel_radix_join.c.
| int64_t result |
Definition at line 20 of file parallel_radix_join.c.
| arg_t* thrargs |
Definition at line 4 of file parallel_radix_join.c.
| threadresult_t* threadresult |
Definition at line 25 of file parallel_radix_join.c.
| uint64_t timer1 |
Definition at line 29 of file parallel_radix_join.c.
| uint64_t timer2 |
Definition at line 29 of file parallel_radix_join.c.
| uint64_t timer3 |
Definition at line 29 of file parallel_radix_join.c.
| tuple_t* tmp |
Definition at line 1 of file parallel_radix_join.c.
| tuple_t* tmpR |
Definition at line 2 of file parallel_radix_join.c.
| tuple_t* tmpS |
Definition at line 5 of file parallel_radix_join.c.
| uint64_t total_tuples |
Definition at line 5 of file parallel_radix_join.c.
| int64_t totalR |
Definition at line 9 of file parallel_radix_join.c.
| int64_t totalS |
Definition at line 10 of file parallel_radix_join.c.