Skip to content

Commit b158166

Browse files
committed
Add first 2 experiments
1 parent b67ea09 commit b158166

File tree

13 files changed

+2792
-48
lines changed

13 files changed

+2792
-48
lines changed

configure/monetdb/dss.ddl

+70
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
-- Sccsid: @(#)dss.ddl 2.1.8.1
2+
CREATE TABLE NATION ( N_NATIONKEY INTEGER NOT NULL,
3+
N_NAME CHAR(25) NOT NULL,
4+
N_REGIONKEY INTEGER NOT NULL,
5+
N_COMMENT VARCHAR(152));
6+
7+
CREATE TABLE REGION ( R_REGIONKEY INTEGER NOT NULL,
8+
R_NAME CHAR(25) NOT NULL,
9+
R_COMMENT VARCHAR(152));
10+
11+
CREATE TABLE PART ( P_PARTKEY INTEGER NOT NULL,
12+
P_NAME VARCHAR(55) NOT NULL,
13+
P_MFGR CHAR(25) NOT NULL,
14+
P_BRAND CHAR(10) NOT NULL,
15+
P_TYPE VARCHAR(25) NOT NULL,
16+
P_SIZE INTEGER NOT NULL,
17+
P_CONTAINER CHAR(10) NOT NULL,
18+
P_RETAILPRICE DECIMAL(15,2) NOT NULL,
19+
P_COMMENT VARCHAR(23) NOT NULL );
20+
21+
CREATE TABLE SUPPLIER ( S_SUPPKEY INTEGER NOT NULL,
22+
S_NAME CHAR(25) NOT NULL,
23+
S_ADDRESS VARCHAR(40) NOT NULL,
24+
S_NATIONKEY INTEGER NOT NULL,
25+
S_PHONE CHAR(15) NOT NULL,
26+
S_ACCTBAL DECIMAL(15,2) NOT NULL,
27+
S_COMMENT VARCHAR(101) NOT NULL);
28+
29+
CREATE TABLE PARTSUPP ( PS_PARTKEY INTEGER NOT NULL,
30+
PS_SUPPKEY INTEGER NOT NULL,
31+
PS_AVAILQTY INTEGER NOT NULL,
32+
PS_SUPPLYCOST DECIMAL(15,2) NOT NULL,
33+
PS_COMMENT VARCHAR(199) NOT NULL );
34+
35+
CREATE TABLE CUSTOMER ( C_CUSTKEY INTEGER NOT NULL,
36+
C_NAME VARCHAR(25) NOT NULL,
37+
C_ADDRESS VARCHAR(40) NOT NULL,
38+
C_NATIONKEY INTEGER NOT NULL,
39+
C_PHONE CHAR(15) NOT NULL,
40+
C_ACCTBAL DECIMAL(15,2) NOT NULL,
41+
C_MKTSEGMENT CHAR(10) NOT NULL,
42+
C_COMMENT VARCHAR(117) NOT NULL);
43+
44+
CREATE TABLE ORDERS ( O_ORDERKEY INTEGER NOT NULL,
45+
O_CUSTKEY INTEGER NOT NULL,
46+
O_ORDERSTATUS CHAR(1) NOT NULL,
47+
O_TOTALPRICE DECIMAL(15,2) NOT NULL,
48+
O_ORDERDATE DATE NOT NULL,
49+
O_ORDERPRIORITY CHAR(15) NOT NULL,
50+
O_CLERK CHAR(15) NOT NULL,
51+
O_SHIPPRIORITY INTEGER NOT NULL,
52+
O_COMMENT VARCHAR(79) NOT NULL);
53+
54+
CREATE TABLE LINEITEM ( L_ORDERKEY INTEGER NOT NULL,
55+
L_PARTKEY INTEGER NOT NULL,
56+
L_SUPPKEY INTEGER NOT NULL,
57+
L_LINENUMBER INTEGER NOT NULL,
58+
L_QUANTITY DECIMAL(15,2) NOT NULL,
59+
L_EXTENDEDPRICE DECIMAL(15,2) NOT NULL,
60+
L_DISCOUNT DECIMAL(15,2) NOT NULL,
61+
L_TAX DECIMAL(15,2) NOT NULL,
62+
L_RETURNFLAG CHAR(1) NOT NULL,
63+
L_LINESTATUS CHAR(1) NOT NULL,
64+
L_SHIPDATE DATE NOT NULL,
65+
L_COMMITDATE DATE NOT NULL,
66+
L_RECEIPTDATE DATE NOT NULL,
67+
L_SHIPINSTRUCT CHAR(25) NOT NULL,
68+
L_SHIPMODE CHAR(10) NOT NULL,
69+
L_COMMENT VARCHAR(44) NOT NULL);
70+

configure/monetdb/initTPCH8.txt

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
-- Load data
2+
COPY 5 records INTO region FROM '/home/hanfeng/edbt21/monetdb/tpch/db8/region.tbl' using DELIMITERS '|';
3+
COPY INTO customer FROM '/home/hanfeng/edbt21/monetdb/tpch/db8/customer.tbl' using DELIMITERS '|';
4+
COPY INTO lineitem FROM '/home/hanfeng/edbt21/monetdb/tpch/db8/lineitem.tbl' using DELIMITERS '|';
5+
COPY INTO nation FROM '/home/hanfeng/edbt21/monetdb/tpch/db8/nation.tbl' using DELIMITERS '|';
6+
COPY INTO orders FROM '/home/hanfeng/edbt21/monetdb/tpch/db8/orders.tbl' using DELIMITERS '|';
7+
COPY INTO partsupp FROM '/home/hanfeng/edbt21/monetdb/tpch/db8/partsupp.tbl' using DELIMITERS '|';
8+
COPY INTO part FROM '/home/hanfeng/edbt21/monetdb/tpch/db8/part.tbl' using DELIMITERS '|';
9+
COPY INTO supplier FROM '/home/hanfeng/edbt21/monetdb/tpch/db8/supplier.tbl' using DELIMITERS '|';
10+
11+
-- Add primary keys
12+
ALTER TABLE REGION ADD PRIMARY KEY (R_REGIONKEY);
13+
ALTER TABLE NATION ADD PRIMARY KEY (N_NATIONKEY);
14+
ALTER TABLE PART ADD PRIMARY KEY (P_PARTKEY);
15+
ALTER TABLE SUPPLIER ADD PRIMARY KEY (S_SUPPKEY);
16+
ALTER TABLE PARTSUPP ADD PRIMARY KEY (PS_PARTKEY,PS_SUPPKEY);
17+
ALTER TABLE CUSTOMER ADD PRIMARY KEY (C_CUSTKEY);
18+
ALTER TABLE LINEITEM ADD PRIMARY KEY (L_ORDERKEY,L_LINENUMBER);
19+
ALTER TABLE ORDERS ADD PRIMARY KEY (O_ORDERKEY);
20+
21+
-- Add foreign keys
22+
ALTER TABLE NATION ADD FOREIGN KEY (N_REGIONKEY) references REGION(R_REGIONKEY);
23+
ALTER TABLE SUPPLIER ADD FOREIGN KEY (S_NATIONKEY) references NATION(N_NATIONKEY);
24+
ALTER TABLE CUSTOMER ADD FOREIGN KEY (C_NATIONKEY) references NATION(N_NATIONKEY);
25+
ALTER TABLE PARTSUPP ADD FOREIGN KEY (PS_SUPPKEY) references SUPPLIER(S_SUPPKEY);
26+
ALTER TABLE PARTSUPP ADD FOREIGN KEY (PS_PARTKEY) references PART(P_PARTKEY);
27+
ALTER TABLE ORDERS ADD FOREIGN KEY (O_CUSTKEY) references CUSTOMER(C_CUSTKEY);
28+
ALTER TABLE LINEITEM ADD FOREIGN KEY (L_ORDERKEY) references ORDERS(O_ORDERKEY);
29+
ALTER TABLE LINEITEM ADD FOREIGN KEY (L_PARTKEY,L_SUPPKEY) references PARTSUPP(PS_PARTKEY, PS_SUPPKEY);
30+
31+

experiment/bs/matlab/BlkSchls.m

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
function OptionPrice = BlkSchls(sptprice,strike,rate,volatility,time,otype)
2+
% DOUBLE&1*?&REAL DOUBLE&1*?&REAL DOUBLE&1*?&REAL DOUBLE&1*?&REAL DOUBLE&1*?&REAL DOUBLE&1*?&REAL
3+
xSqrtTime = sqrt(time);
4+
xLogTerm = log( sptprice ./ strike );
5+
xRiskFreeRate = rate;
6+
xDen = volatility .* xSqrtTime;
7+
xPowerTerm = volatility .* volatility .* 0.5;
8+
9+
xD1 = ((xRiskFreeRate + xPowerTerm) .* time + xLogTerm) ./ xDen;
10+
xD2 = xD1 - xDen;
11+
12+
invs2xPI = 0.39894228040143270286;
13+
NofXd1 = CNDF( xD1, invs2xPI );
14+
NofXd2 = CNDF( xD2, invs2xPI );
15+
16+
FutureValueX = strike .* ( exp( -(rate).*(time) ) );
17+
OptionPrice = otype .* ((FutureValueX .* (1.0 - NofXd2)) - (sptprice .* (1.0 - NofXd1)));
18+
OptionPrice = OptionPrice + (~otype) .* ((sptprice .* NofXd1) - (FutureValueX .* NofXd2));
19+
end
20+

experiment/bs/matlab/CNDF.m

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
function OutputX = CNDF(InputX, invs2xPI)
2+
sign = InputX < 0;
3+
xInput = abs(InputX);
4+
expValues = exp(-0.5 .* (InputX .* InputX));
5+
xNPrimeofX = invs2xPI .* expValues;
6+
xK2 = 1.0 ./ (1.0 + 0.2316419 .* xInput);
7+
xK2_2 = xK2 .* xK2;
8+
xK2_3 = xK2 .* xK2_2;
9+
xK2_4 = xK2 .* xK2_3;
10+
xK2_5 = xK2 .* xK2_4;
11+
xLocal_1 = xK2 .* 0.319381530;
12+
xLocal_2 = (xK2_2 .* -0.356563782) + (xK2_3 .* 1.781477937) + (xK2_4 .* -1.821255978) + xK2_5 .* 1.330274429;
13+
xLocal = 1.0 - xNPrimeofX .* (xLocal_2 + xLocal_1);
14+
OutputX = (sign .* (1.0 - xLocal)) + (~sign) .* xLocal;
15+
end
16+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
MATLAB is selecting SOFTWARE OPENGL rendering.
2+
[data/in_1M.txt] Loading ...
3+
[data/in_1M.txt] Loaded in 6.18 s
4+
[data/in_1M.txt] The average elapsed time with 10 runs (ms): 60.709
5+
Columns 1 through 7
6+
7+
0.0605 0.0608 0.0609 0.0612 0.0613 0.0602 0.0602
8+
9+
Columns 8 through 10
10+
11+
0.0605 0.0604 0.0611
12+
13+
Verify top 10 option prices
14+
4.7594
15+
0.8086
16+
3.7146
17+
8.5917
18+
2.1334
19+
10.8956
20+
14.4216
21+
18.6309
22+
1.8150
23+
5.8503
24+
25+
MATLAB is selecting SOFTWARE OPENGL rendering.
26+
[data/in_2M.txt] Loading ...
27+
[data/in_2M.txt] Loaded in 9.44 s
28+
[data/in_2M.txt] The average elapsed time with 10 runs (ms): 145.033
29+
Columns 1 through 7
30+
31+
0.2686 0.2158 0.1189 0.1162 0.1204 0.1204 0.1222
32+
33+
Columns 8 through 10
34+
35+
0.1224 0.1235 0.1220
36+
37+
Verify top 10 option prices
38+
4.7594
39+
0.8086
40+
3.7146
41+
8.5917
42+
2.1334
43+
10.8956
44+
14.4216
45+
18.6309
46+
1.8150
47+
5.8503
48+
49+
MATLAB is selecting SOFTWARE OPENGL rendering.
50+
[data/in_4M.txt] Loading ...
51+
[data/in_4M.txt] Loaded in 15.83 s
52+
[data/in_4M.txt] The average elapsed time with 10 runs (ms): 491.287
53+
Columns 1 through 7
54+
55+
0.4491 0.4548 0.4610 0.4615 0.4603 0.5232 0.5422
56+
57+
Columns 8 through 10
58+
59+
0.4964 0.4738 0.5906
60+
61+
Verify top 10 option prices
62+
4.7594
63+
0.8086
64+
3.7146
65+
8.5917
66+
2.1334
67+
10.8956
68+
14.4216
69+
18.6309
70+
1.8150
71+
5.8503
72+
73+
MATLAB is selecting SOFTWARE OPENGL rendering.
74+
[data/in_8M.txt] Loading ...
75+
[data/in_8M.txt] Loaded in 28.56 s
76+
[data/in_8M.txt] The average elapsed time with 10 runs (ms): 1008.538
77+
Columns 1 through 7
78+
79+
0.9877 0.9876 1.1844 1.0271 0.9571 0.9641 0.9689
80+
81+
Columns 8 through 10
82+
83+
0.9682 1.0892 0.9510
84+
85+
Verify top 10 option prices
86+
4.7594
87+
0.8086
88+
3.7146
89+
8.5917
90+
2.1334
91+
10.8956
92+
14.4216
93+
18.6309
94+
1.8150
95+
5.8503
96+

experiment/bs/matlab/readme.md

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
Run scales (1/2/4/8) and save results to the folder `log/`
2+
3+
time ./run.sh
4+
5+
Run an individual scale for code debugging
6+
7+
matlab19 -batch "run('data/in_1M.txt', 1)"
8+
9+
Description of the MATLAB function `run`
10+
11+
run(<input_data_path>, <num_of_runs>)
12+
13+
Data folder
14+
15+
data/
16+
in_1M.txt
17+
in_2M.txt
18+
in_4M.txt
19+
in_8M.txt
20+
21+

experiment/bs/matlab/run.m

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
function run(input_file, runs)
2+
fprintf('[%s] Loading ...\n', input_file);
3+
tic;
4+
data = readtable(input_file, 'Delimiter', ' ', 'ReadVariableNames', false);
5+
% fetch columns of the input table, data
6+
sptprice = table2array(data(:,1));
7+
strike = table2array(data(:,2));
8+
rate = table2array(data(:,3));
9+
divq = table2array(data(:,4));
10+
volatility = table2array(data(:,5));
11+
time = table2array(data(:,6));
12+
optiontype = string(table2array(data(:,7))) == 'P'; % convert cells to strings
13+
divs = table2array(data(:,8));
14+
dgrefval = table2array(data(:,9));
15+
load_time = toc;
16+
fprintf('[%s] Loaded in %.2f s\n', input_file, load_time);
17+
elapsed = zeros(1, runs);
18+
for id = 1:5
19+
OptionPrice = BlkSchls(sptprice,strike,rate,volatility,time,optiontype);
20+
end
21+
for id = 1:runs
22+
tic;
23+
OptionPrice = BlkSchls(sptprice,strike,rate,volatility,time,optiontype);
24+
elapsed(id) = toc;
25+
end
26+
fprintf('[%s] The average elapsed time with %d runs (ms): %.3f\n', input_file, runs, mean(elapsed)*1000);
27+
disp(elapsed);
28+
disp('Verify top 10 option prices');
29+
disp(OptionPrice(1:10));
30+
end
31+
32+
% Read file
33+
% https://www.mathworks.com/help/matlab/ref/readtable.html

experiment/bs/matlab/run.sh

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#!/bin/bash
2+
log="log"
3+
log_matlab="$log/log_matlab.txt"
4+
matlab19="/usr/local/pkgs/matlab/R2019a/bin/matlab -nodesktop"
5+
runs=10
6+
7+
mkdir -p $log && rm -f ${log_matlab}
8+
9+
echo "Running MATLAB (save to log/log_matlab.txt) ..."
10+
scales=(1 2 4 8)
11+
for sf in "${scales[@]}"
12+
do
13+
${matlab19} -batch "run('data/in_${sf}M.txt', $runs)" >> ${log_matlab}
14+
done
15+
16+
## debug code
17+
## matlab19 -batch "run('data/in_1M.txt', 1)"
18+

0 commit comments

Comments
 (0)