Skip to content

Instantly share code, notes, and snippets.

View hyunsik's full-sized avatar
🏠
Working from home

Hyunsik Choi hyunsik

🏠
Working from home
View GitHub Profile
@hyunsik
hyunsik / sel_le_long_long_col_col.java
Created August 29, 2016 03:02
Select primitive in vectorized processing model
int sel_le_long_long_col_col(int vec_num, int [] res_sel_vec,
long [] col1, long [] col2, int [] sel_vec) {
int ret = 0;
if (sel_vec == null) {
for (int i = 0; i < vec_num; i++) {
if (col1[i] < col2[i]) {
res_sel_vec[ret++] = i
}
}
} else {
@hyunsik
hyunsik / map_add_long_int_col_col.java
Last active August 29, 2016 03:03
Add primitive in vectorized processing model
map_add_long_int_col_col(int vec_num, long [] result, long [] col1,
int [] col2, int [] sel_vec) {
if (sel_vec == null) {
for (int i = 0; i = 0; i < vec_num; i++) {
result[i] = col1[i] + col2[i];
}
} else {
int sel_idx;
for (int i = 0; I = 0; i < vec_num; i++) {
sel_idx = sel_vec[i];
@hyunsik
hyunsik / unrolled.c
Created August 29, 2016 02:33
unrolled for-loop
for (i = 0; i < 128; i+=4) {
a[i] = b[i] + c[i];
a[i+1] = b[i+1] + c[i+1];
a[i+2] = b[i+2] + c[i+2];
a[i+3] = b[i+3] + c[i+3];
}
@hyunsik
hyunsik / unoptimized.c
Created August 29, 2016 02:32
Unoptimized for-loop
for (i = 0; i < 128; i++) {
a[i] = b[i] + c[i];
}
@hyunsik
hyunsik / uselect_bt_void_int_bat_int_const.c
Created August 29, 2016 02:30
A primitive example of column-at-a-time model
int uselect_bt_void_int_bat_int_const(oid *output, int *input, int value, int size) {
oid i;
int j = 0;
for (i = 0; i < size; i++) {
if (input[i] > value) {
output[j++] = i;
}
}
return j;
}
@hyunsik
hyunsik / tpch_q1.sql
Created August 29, 2016 02:27
TPC-H Q1
select
l_returnflag, l_linestatus, sum(l_quantity) as sum_qty,
sum(l_extendedprice) as sum_base_price,
sum(l_extendedprice*(1-l_discount)) as sum_disc_price,
sum(l_extendedprice*(1-l_discount)*(1+l_tax)) as sum_charge,
avg(l_quantity) as avg_qty,
avg(l_extendedprice) as avg_price, avg(l_discount) as avg_disc,
count(*) as count_order
from
lineitem
@hyunsik
hyunsik / latency_comparison_numbers.txt
Created August 29, 2016 02:21
Latency Comparison Numbers
Latency Comparison Numbers
--------------------------
execute typical instruction 1 ns 1/1,000,000,000 sec
L1 cache reference 0.5 ns
Branch mispredict 5 ns
L2 cache reference 7 ns 14x L1 cache
Mutex lock/unlock 25 ns
Main memory reference 100 ns 20x L2 cache, 200x L1 cache
Compress 1K bytes with Zippy 3,000 ns
Send 1K bytes over 1 Gbps network 10,000 ns
@hyunsik
hyunsik / ColumnVector.java
Last active August 25, 2016 23:54
ColumnVector in Hive
public abstract class ColumnVector {
public boolean[] isNull;
public boolean noNulls;
public boolean isRepeating;
...
}
public class LongColumnVector extends ColumnVector {
public long[] vector;
public static final long NULL_VALUE = 1;
@hyunsik
hyunsik / VectorizedRowBatch.java
Created August 25, 2016 20:53
Vectorized row block in Hive
public class VectorizedRowBatch implements Writable {
public int numCols; // number of columns
public ColumnVector[] cols; // a vector for each column
public int size; // number of rows that qualify (i.e. haven't been filtered out)
public int[] selected; // array of positions of selected values
public int[] projectedColumns;
public int projectionSize;
...
}
@hyunsik
hyunsik / Operator.java
Created August 25, 2016 20:05
Iteration interface in Hive
/**
* Base operator implementation.
**/
public abstract class Operator<T extends OperatorDesc> implements ... {
public void initialize(Configuration hconf, ...) ...
public abstract void processOp(Object row, int tag) throws ...;
public void close(boolean abort) throws HiveException { ... }
}