【 以下文字转载自 GPGPU_HC 俱乐部 】
发信人: Echte (Liebe), 信区: GPGPU_HC
标 题: GTX 580在MATLAB上第一跑
发信站: BBS 未名空间站 (Mon Mar 3 20:48:27 2014, 美东)
3 asset (correlated) basket option (barrier)
3,000,000模拟路
2*252时间步
全双精度
用时31.850787秒
相对i-7-3770有5.3倍性能提升
感觉已经是相当不错
另外由于是basket
每个路径都涉及矩阵运算
所以没法写成elementwise的程序
估计至少丢了1/3的性能,比较遗憾
tic
R = gpuArray(3000000);
dt = gpuArray(1/252);
sqrtdt = sqrt(dt);
TTM = gpuArray(3);
T = gpuArray(TTM/dt);
N = gpuArray(3);
SLAG = gpuArray([100 100 100]');
SLAG = repmat(SLAG,[1 R]);
W = gpuArray([1/3 1/2 1/6]);
Corr = gpuArray([1 0.2 0.1; 0.2 1 0.2; 0.1 0.2 1]);
CorrU = chol(Corr);
r=gpuArray(0.03);
Vol = gpuArray([0.1 0.2 0.3]);
Barrier = gpuArray(130);
Strike = gpuArray(100);
HitBarrier=gpuArray.zeros(1,R);
VolMtx = repmat(Vol',[1 R]);
VolMtxSq = VolMtx.^2;
toc
tic
iT=gpuArray(2);
while iT<=T+1
iT = iT+1;
S = SLAG.*exp((r-0.5*VolMtxSq)*dt +...
VolMtx.*(CorrU'*gpuArray.randn(N,R))*sqrtdt);
Basket = W*S;
HitBarrier = max(HitBarrier,(Basket>=Barrier));
SLAG = S;
end
DiscPayOff = exp(-r*TTM)*...
(1-HitBarrier).*max(Basket-Strike,0);
OptionPrice = gather(mean(DiscPayOff));
toc