da-yoon chung daniel lu. options an option is a contract that can be bought or sold, its value is a...
TRANSCRIPT
PRICING ASIAN OPTIONS WITH THE
BINOMIAL MODEL
Da-Yoon Chung
Daniel Lu
Options
An option is a contract that can be bought or sold, its value is a function of the value of the underlying stock
An Asian option is an option whose terminal value is based on the average prices of stock at certain points in time.
Pricing Options
RecombinantBinomial Tree
Problem with Asian Options:Non-recombinant (2^N) paths we have to
consider
(Serial) Algorithm
Step 1: generate the average price tree for each (i,j), store 2*N out of iCj possible values of the
running average up to that point Requires 2*N random paths of length O(N) consisting of
up or down for each (i,j) (O(N^3) storage overhead)
Step 2: generate the option prices tree Each level of the tree depends only on the next use backwards inductive approach starting at the leaves
of the tree use linear interpolation to find an estimate of the option
price at each node
CUDA Algorithm (global memory)
Step 1: generate the average price tree Compute all random paths required using Thrust For each (i,j), the 2*N average values are computed in
parallel (one thread per node) Write all updates immediately to the global tree
Step 2: generate the option price tree Compute each level of the tree in parallel Write all updates immediately to the global tree
CUDA Algorithm (shared memory)
Step 1: generate the average price tree Again, for each (i,j), the 2*N average values are computed
in parallel (one thread per node) Store all intermediate values in shared memory to
minimize global memory accesses Use a hash function to generate the random path within
the kernel (reduce memory overhead)
Step 2: generate the option price tree Divide the tree into subtrees at the same depth in the
original tree which can be computed independently Compute one level of subtrees per kernel call Store all computations for subtrees in shared memory
Limitations
Size of shared memoryN = 64, Tree occupies N * N * (2 * N) *
sizeof(float) = 2^6 * 2^6 * (2 * 2^6) * 4 = 2^21 = 2m (48k shared memory)○ Increasingly sequential as N increases
Nature of the algorithm Step 2 of the algorithm is inherently
sequential
Results
0 50 100 150 200 2500
2
4
6
8
10
12
14
16
18
20
performance of Step 1
Speedup (Shared to serial)
Speedup(Global to Serial)
Depth of Tree (N)
Sp
eed
up
Results
10 20 30 40 50 60 70 80 90 100 1100
0.05
0.1
0.15
0.2
0.25
0.3
0.35
performance of Step 2
Speedup (Global to Serial)
Speedup (Shared to Serial)
Depth of Tree (N)
Sp
eed
up
Results
0 50 100 150 200 2500
0.5
1
1.5
2
2.5
3
3.5
4
4.5
performance of hybrid (CUDA shared step 1 + serial step 2)
Depth of Tree (N)
Sp
eed
up