E***e 发帖数: 3430 | 1 【 以下文字转载自 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 |
h******6 发帖数: 2697 | 2 跑个矩阵相乘你会更惊讶的 那个叫什么cuBlast |
P**H 发帖数: 1897 | |
E***e 发帖数: 3430 | 4 那肯定的不过对我来说没多大用
【在 h******6 的大作中提到】 : 跑个矩阵相乘你会更惊讶的 那个叫什么cuBlast
|
E***e 发帖数: 3430 | 5 拿个MATLAB code来我帮你跑下
只要不是跑好几个小时的那种
【在 P**H 的大作中提到】 : 有没有解sparse eigen的?
|
t*****z 发帖数: 1598 | 6 我的双路580也快到了,什么时候请楼主替我benchmark下看 |
E***e 发帖数: 3430 | 7 双卡我还真不知道怎么玩
【在 t*****z 的大作中提到】 : 我的双路580也快到了,什么时候请楼主替我benchmark下看
|
a******1 发帖数: 2340 | 8 我有超频的4770K和3930K也可以试试
还有HD 7770 |
e***e 发帖数: 3872 | 9 好像就是exp,rand,.*和+,都是elementwise的吧
5.3的加速比,用parallel toolbox應該也差得不多 ,用Intel performance lib,會
比matlab再快50%左右
不過如果用混合精度+cublas,我估計能在現在基礎上再快4倍以上,另外有些函數
magma比cuda 5.0的cublas還快些
【在 E***e 的大作中提到】 : 双卡我还真不知道怎么玩
|
E***e 发帖数: 3430 | 10 公司实际状况比较复杂
开发这东西不能光看性能
还要看编程难易,要看公司里其他的analyst能不能pick up
CUDA如果开发出来速度快但是代码都没第二个人可以维护
老板也不会采纳
长远上看ArrayFire/C++可能是比较折中的选择
【在 e***e 的大作中提到】 : 好像就是exp,rand,.*和+,都是elementwise的吧 : 5.3的加速比,用parallel toolbox應該也差得不多 ,用Intel performance lib,會 : 比matlab再快50%左右 : 不過如果用混合精度+cublas,我估計能在現在基礎上再快4倍以上,另外有些函數 : magma比cuda 5.0的cublas還快些
|
e***e 发帖数: 3872 | 11 gpuArray支持混合精度:
S=exp(...); % all single operands. dunno if preallocation of S would help
SLAG=SLAG.*double(S);
Basket=W*SLAG;
... % HiBarrier: int32
当然如果单步迭代的误差需要在exp(10^-7)以下,never mind
【在 E***e 的大作中提到】 : 公司实际状况比较复杂 : 开发这东西不能光看性能 : 还要看编程难易,要看公司里其他的analyst能不能pick up : CUDA如果开发出来速度快但是代码都没第二个人可以维护 : 老板也不会采纳 : 长远上看ArrayFire/C++可能是比较折中的选择
|
E***e 发帖数: 3430 | 12 matlab上单精度性能没多少提升
然后算出来的东西还有bias
所以也就懒得深究了
【在 e***e 的大作中提到】 : gpuArray支持混合精度: : S=exp(...); % all single operands. dunno if preallocation of S would help : SLAG=SLAG.*double(S); : Basket=W*SLAG; : ... % HiBarrier: int32 : 当然如果单步迭代的误差需要在exp(10^-7)以下,never mind
|