简介
The swaptions application is an Intel RMS workload which
uses the Heath-Jarrow-Morton (HJM) framework to price a
portfolio of swaptions.
1.热点分析
1.1热点函数
1.2热点循环
格式说明: 热点循环-(函数执行次数-各层执行总次数)
执行百分比:热点循环占本函数执行比例
函数: HJM_SimPath_Forward_Blocking
HS.L1(8000000-128000000-128000000-1280000000-3840000000)
执行百分比:VTure
HS.L2(8000000-128000000-1280000000-7040000000-21120000000)
执行百分比:VTure
函数: serialB - CumNormalInv
se.L1(8000000-44000000-704000000-7040000000)
执行百分比:VTure
函数: Discount_Factors_Blocking
DF.L1(16000000-160000000-2560000000-14080000000)
执行百分比:10.47%
1.3 热点代码
/* 函数 HJM_SimPath_Forward_Blocking */
// HS.L1
for(int b=0; b<BLOCKSIZE; b++)
{
for(int s=0; s<1; s++)
{
for (j=1;j<=iN-1;++j)
{
for (l=0;l<=iFactors-1;++l)
{
// P1
randZ[l][BLOCKSIZE*j + b + s] = RanUnif(lRndSeed);
}
}
}
}
serialB(pdZ, randZ, BLOCKSIZE, iN, iFactors);
// HS.L2
for(int b=0; b<BLOCKSIZE; b++)
{
for (j=1;j<=iN-1;++j)
{
for (l=0;l<=iN-(j+1);++l)
{
for (i=0;i<=iFactors-1;++i)
{
// P2
dTotalShock += ppdFactors[i][l]* pdZ[i][BLOCKSIZE*j + b];
}
ppdHJMPath[j][BLOCKSIZE*l+b] = ppdHJMPath[j-1][BLOCKSIZE*(l+1)+b]+ pdTotalDrift[l]*ddelt + sqrt_ddelt*dTotalShock;
}
}
}
/* 函数 RanUnif*/
ix = *s;
k1 = ix/127773L;
ix = 16807L*( ix - k1*127773L ) - k1 * 2836L;
if (ix < 0)
{
ix = ix + 2147483647L;
}
*s = ix;
dRes = (ix * 4.656612875e-10);
/* 函数 serialB - CumNormalInv*/
//函数 serialB
// se.L1
for(int l=0;l<=iFactors-1;++l)
{
for(int b=0; b<BLOCKSIZE; b++)
{
for (int j=1;j<=iN-1;++j)
{
// P3
pdZ[l][BLOCKSIZE*j + b]= CumNormalInv(randZ[l][BLOCKSIZE*j + b]);
}
}
}
//函数 CumNormalInv
r = u;
if( x > 0.0 )
{
count[1]+=1;
r = 1.0 - u;
}
r = log(-log(r));
r = c[0] + r * (c[1] + r * (c[2] + r * (c[3] + r * (c[4] + r * (c[5] + r * (c[6] + r * (c[7] + r*c[8])))))));
if( x < 0.0 )
{
r = -r;
}
/* 函数 Discount_Factors_Blocking */
// DF.L1
for (i=1; i<=iN-1; ++i)
{
for (b=0; b<BLOCKSIZE; b++)
{
for (j=0; j<=i-1; ++j)
{
// P4
pdDiscountFactors[i*BLOCKSIZE + b] *= pdexpRes[j*BLOCKSIZE + b];
}
}
}
2.功能分析
2.1数据标签
标签 | 数据 | 注释 |
---|---|---|
m1 | ppdFactors[][] | 矩阵/一维向量 |
v1 | pdDiscountFactors[] | 一维向量 |
s1 | lRndSeed | 标量 |
HS.m1 | randZ[][] | 矩阵/一维向量 |
HS.m2 | pdZ[][] | 矩阵/一维向量 |
HS.s1 | dTotalShock | 标量 |
DF.v1 | pdexpRes[] | 一维向量 |
说明:s,v,m,t(全局数据)di.(局部数据)
2.2数据流分析
函数: HJM_SimPath_Forward_Blocking
HS.L1(12行)
P1: s1 ->HS.m1[i][],函数调用
HS.L2(30行)
P2: (m1[i][], HS.m2[i][]), HS.s1 ->HS.s1,加法树
函数:serialB
se.L1(63行)
P3: HS.m1[][i] ->HS.m2[][i],函数调用
函数:Discount_Factors_Blocking
DF.L2(93行)
P4: DF.v1[i], v1[i] ->v1[i],加法树
3.加速分析