nb_kernel112_ppc_altivec.c
来自「最著名最快的分子模拟软件」· C语言 代码 · 共 1,557 行 · 第 1/5 页
C
1,557 行
v10 = vec_madd(v10,v1,v0); vec_st(v24,240,(float *)stackdata); /* store Vvdwtot */ /* calculate vectorial forces and accumulate fj. * v10-v18 has fs11-fs33 now. * First load iO-* dx,dy,dz vectors to v1-v9 * and load iO forces to v28,v29,v30 * use v19-v27 to accumulate j 3atoms forces */ v28 = vec_ld(256, (float *) stackdata); v29 = vec_ld(272, (float *) stackdata); v30 = vec_ld(288, (float *) stackdata); v1 = vec_ld(400, (float *) stackdata); v2 = vec_ld(416, (float *) stackdata); v23 = vec_add(v23,v9); /* incr. vctot */ v3 = vec_ld(432, (float *) stackdata); v4 = vec_ld(448, (float *) stackdata); v5 = vec_ld(464, (float *) stackdata); v6 = vec_ld(480, (float *) stackdata); vec_st(v23,224,(float *)stackdata); /* store vctot to stack */ v7 = vec_ld(496, (float *) stackdata); v8 = vec_ld(512, (float *) stackdata); v9 = vec_ld(528, (float *) stackdata); v28 = vec_madd(v10,v1,v28); v19 = vec_nmsub(v10,v1,v0); v29 = vec_madd(v10,v2,v29); v20 = vec_nmsub(v10,v2,v0); v30 = vec_madd(v10,v3,v30); v21 = vec_nmsub(v10,v3,v0); v28 = vec_madd(v11,v4,v28); v22 = vec_nmsub(v11,v4,v0); v29 = vec_madd(v11,v5,v29); v23 = vec_nmsub(v11,v5,v0); v30 = vec_madd(v11,v6,v30); v24 = vec_nmsub(v11,v6,v0); v28 = vec_madd(v12,v7,v28); v25 = vec_nmsub(v12,v7,v0); v29 = vec_madd(v12,v8,v29); v26 = vec_nmsub(v12,v8,v0); v30 = vec_madd(v12,v9,v30); v27 = vec_nmsub(v12,v9,v0); /* store these i forces, and repeat the * procedure for the iH1-* force */ vec_st(v28,256,(float *)stackdata); vec_st(v29,272,(float *)stackdata); vec_st(v30,288,(float *)stackdata); v28 = vec_ld(304,(float *) stackdata); v29 = vec_ld(320,(float *) stackdata); v30 = vec_ld(336,(float *) stackdata); /* load new vectorial distances */ v1 = vec_ld(544, (float *) stackdata); v2 = vec_ld(560, (float *) stackdata); v3 = vec_ld(576, (float *) stackdata); v4 = vec_ld(592, (float *) stackdata); v5 = vec_ld(608, (float *) stackdata); v6 = vec_ld(624, (float *) stackdata); v7 = vec_ld(640, (float *) stackdata); v8 = vec_ld(656, (float *) stackdata); v9 = vec_ld(672, (float *) stackdata); v28 = vec_madd(v13,v1,v28); v19 = vec_nmsub(v13,v1,v19); v29 = vec_madd(v13,v2,v29); v20 = vec_nmsub(v13,v2,v20); v30 = vec_madd(v13,v3,v30); v21 = vec_nmsub(v13,v3,v21); v28 = vec_madd(v14,v4,v28); v22 = vec_nmsub(v14,v4,v22); v29 = vec_madd(v14,v5,v29); v23 = vec_nmsub(v14,v5,v23); v30 = vec_madd(v14,v6,v30); v24 = vec_nmsub(v14,v6,v24); v28 = vec_madd(v15,v7,v28); v25 = vec_nmsub(v15,v7,v25); v29 = vec_madd(v15,v8,v29); v26 = vec_nmsub(v15,v8,v26); v30 = vec_madd(v15,v9,v30); v27 = vec_nmsub(v15,v9,v27); /* store these i forces, and repeat the * procedure for the iH2-* force */ vec_st(v28,304,(float *)stackdata); vec_st(v29,320,(float *)stackdata); vec_st(v30,336,(float *)stackdata); v28 = vec_ld(352,(float *) stackdata); v29 = vec_ld(368,(float *) stackdata); v30 = vec_ld(384,(float *) stackdata); /* load new vectorial distances */ v1 = vec_ld(688, (float *) stackdata); v2 = vec_ld(704, (float *) stackdata); v3 = vec_ld(720, (float *) stackdata); v4 = vec_ld(736, (float *) stackdata); v5 = vec_ld(752, (float *) stackdata); v6 = vec_ld(768, (float *) stackdata); v7 = vec_ld(784, (float *) stackdata); v8 = vec_ld(800, (float *) stackdata); v9 = vec_ld(816, (float *) stackdata); v28 = vec_madd(v16,v1,v28); v19 = vec_nmsub(v16,v1,v19); v29 = vec_madd(v16,v2,v29); v20 = vec_nmsub(v16,v2,v20); v30 = vec_madd(v16,v3,v30); v21 = vec_nmsub(v16,v3,v21); v28 = vec_madd(v17,v4,v28); v22 = vec_nmsub(v17,v4,v22); v29 = vec_madd(v17,v5,v29); v23 = vec_nmsub(v17,v5,v23); v30 = vec_madd(v17,v6,v30); v24 = vec_nmsub(v17,v6,v24); v28 = vec_madd(v18,v7,v28); v25 = vec_nmsub(v18,v7,v25); v29 = vec_madd(v18,v8,v29); v26 = vec_nmsub(v18,v8,v26); v30 = vec_madd(v18,v9,v30); v27 = vec_nmsub(v18,v9,v27); /* store these i forces */ vec_st(v28,352,(float *)stackdata); vec_st(v29,368,(float *)stackdata); vec_st(v30,384,(float *)stackdata); /* j forces present in v19-v27 */ /* Oxa Oza Oxb Ozb */ v1 = vec_mergeh(v19,v21); /* Oxc Ozc Oxd Ozd */ v19 = vec_mergel(v19,v21); /* Oya H1xa Oyb H1xb */ v21 = vec_mergeh(v20,v22); /* Oyc H1xc Oyd H1xd */ v20 = vec_mergel(v20,v22); /* H1ya H2xa H1yb H2xb */ v22 = vec_mergeh(v23,v25); /* H1yc H2xc H1yd H2xd */ v23 = vec_mergel(v23,v25); /* H1za H2ya H1zb H2yb */ v25 = vec_mergeh(v24,v26); /* H1zc H2yc H1zd H2yd */ v24 = vec_mergel(v24,v26); /* H2za 0 H2zb 0 */ v26 = vec_mergeh(v27,v0); /* H2zc 0 H2zd 0 */ v27 = vec_mergel(v27,v0); /* Oxa Oya Oza H1xa */ v2 = vec_mergeh(v1,v21); /* Oxb Oyb Ozb H1xb */ v21 = vec_mergel(v1,v21); /* Oxc Oyc Ozc H1xc */ v1 = vec_mergeh(v19,v20); /* Oxd Oyd Ozd H1xd */ v19 = vec_mergel(v19,v20); /* H1ya H1za H2xa H2ya */ v20 = vec_mergeh(v22,v25); /* H1yb H1zb H2xb H2yb */ v22 = vec_mergel(v22,v25); /* H1yc H1zc H2xc H2yc */ v25 = vec_mergeh(v23,v24); /* H1yd H1zd H2xd H2yd */ v23 = vec_mergel(v23,v24); /* H2za 0 0 0 */ v24 = vec_mergeh(v26,v0); /* H2zb 0 0 0 */ v26 = vec_mergel(v26,v0); /* H2zc 0 0 0 */ v3 = vec_mergeh(v27,v0); /* H2zd 0 0 0 */ v27 = vec_mergel(v27,v0); v29 = (vector float)vec_splat_s32(-1); /* move into position, load and add */ v30 = (vector float)vec_lvsr(0,(int *)faction+j3a); v4 = vec_ld( 0, faction+j3a); v6 = vec_ld( 16, faction+j3a); v8 = vec_ld( 32, faction+j3a); v10 = vec_perm(v0,v29,(vector unsigned char)v30); v12 = vec_perm(v0,v2,(vector unsigned char)v30); v12 = vec_add(v12,v4); v14 = vec_perm(v2,v20,(vector unsigned char)v30); v2 = vec_add(v14,v6); v16 = vec_perm(v20,v24,(vector unsigned char)v30); v20 = vec_add(v16,v8); v12 = vec_sel(v4,v12,(vector unsigned int)v10); vec_st(v12, 0, faction+j3a); v10 = vec_sld(v0,v10,12); vec_st(v2, 16, faction+j3a); v12 = vec_sel(v20,v8,(vector unsigned int)v10); vec_st(v12, 32, faction+j3a); /* Finished 1, now do 2 */ v30 = (vector float)vec_lvsr(0,(int *)faction+j3b); v4 = vec_ld( 0, faction+j3b); v6 = vec_ld( 16, faction+j3b); v8 = vec_ld( 32, faction+j3b); v10 = vec_perm(v0,v29,(vector unsigned char)v30); v12 = vec_perm(v0,v21,(vector unsigned char)v30); v24 = vec_add(v12,v4); v12 = vec_perm(v21,v22,(vector unsigned char)v30); v21 = vec_add(v12,v6); v12 = vec_perm(v22,v26,(vector unsigned char)v30); v22 = vec_add(v12,v8); v12 = vec_sel(v4,v24,(vector unsigned int)v10); vec_st(v12, 0, faction+j3b); v10 = vec_sld(v0,v10,12); vec_st(v21, 16, faction+j3b); v12 = vec_sel(v22,v8,(vector unsigned int)v10); vec_st(v12, 32, faction+j3b); /* water 3 */ v31 = (vector float)vec_lvsr(0,(int *)faction+j3c); v5 = vec_ld( 0, faction+j3c); v7 = vec_ld( 16, faction+j3c); v9 = vec_ld( 32, faction+j3c); v11 = vec_perm(v0,v29,(vector unsigned char)v31); v13 = vec_perm(v0,v1,(vector unsigned char)v31); v13 = vec_add(v13,v5); v15 = vec_perm(v1,v25,(vector unsigned char)v31); v1 = vec_add(v15,v7); v17 = vec_perm(v25,v3,(vector unsigned char)v31); v25 = vec_add(v17,v9); v13 = vec_sel(v5,v13,(vector unsigned int)v11); vec_st(v13, 0, faction+j3c); v11 = vec_sld(v0,v11,12); vec_st(v1, 16, faction+j3c); v13 = vec_sel(v25,v9,(vector unsigned int)v11); vec_st(v13, 32, faction+j3c); /* water 4 */ v31 = (vector float)vec_lvsr(0,(int *)faction+j3d); v5 = vec_ld( 0, faction+j3d); v7 = vec_ld( 16, faction+j3d); v9 = vec_ld( 32, faction+j3d); v11 = vec_perm(v0,v29,(vector unsigned char)v31); v13 = vec_perm(v0,v19,(vector unsigned char)v31); v25 = vec_add(v13,v5); v13 = vec_perm(v19,v23,(vector unsigned char)v31); v19 = vec_add(v13,v7); v13 = vec_perm(v23,v27,(vector unsigned char)v31); v23 = vec_add(v13,v9); v13 = vec_sel(v5,v25,(vector unsigned int)v11); vec_st(v13, 0, faction+j3d); v11 = vec_sld(v0,v11,12); vec_st(v19, 16, faction+j3d); v13 = vec_sel(v23,v9,(vector unsigned int)v11); vec_st(v13, 32, faction+j3d); } if(k<(nj1-2)) { jnra = jjnr[k]; jnrb = jjnr[k+1]; jnrc = jjnr[k+2]; j3a = 3*jnra; j3b = 3*jnrb; j3c = 3*jnrc; v1 = (vector float)vec_lvsl(0, pos+j3a); v8 = (vector float)vec_lvsl(0, pos+j3b); v15 = (vector float)vec_lvsl(0, pos+j3c); v2 = vec_ld(0, pos+j3a); v9 = vec_ld(0, pos+j3b); v16 = vec_ld(0, pos+j3c); v3 = vec_ld(16, pos+j3a); v10 = vec_ld(16, pos+j3b); v17 = vec_ld(16, pos+j3c); v4 = vec_ld(32, pos+j3a); v11 = vec_ld(32, pos+j3b); v18 = vec_ld(32, pos+j3c); /* Oxa Oya Oza H1xa */ v5 = vec_perm(v2,v3,(vector unsigned char)v1); /* Oxb Oyb Ozb H1xb */ v12 = vec_perm(v9,v10,(vector unsigned char)v8); /* Oxc Oyc Ozc H1xc */ v19 = vec_perm(v16,v17,(vector unsigned char)v15); /* H1ya H1za H2xa H2ya */ v6 = vec_perm(v3,v4,(vector unsigned char)v1); /* H1yb H1zb H2xb H2yb */ v13 = vec_perm(v10,v11,(vector unsigned char)v8); /* H1yc H1zc H2xc H2yc */ v20 = vec_perm(v17,v18,(vector unsigned char)v15); /* H2za - - - */ v7 = vec_perm(v4,v4,(vector unsigned char)v1); /* H2zb - - - */ v14 = vec_perm(v11,v11,(vector unsigned char)v8); /* H2zc - - - */ v21 = vec_perm(v18,v18,(vector unsigned char)v15); /* permute 3atoms coordinates */ /* Oxa Oxc Oya Oyc */ v3 = vec_mergeh(v5,v19); v5 = vec_mergel(v5,v19); /* Oza Ozc H1xa H1xc */ v19 = vec_mergeh(v12,v0); /* Oxb - Oyb - */ v12 = vec_mergel(v12,v0); /* Ozb - H1xb - */ v26 = vec_mergeh(v6,v20); /* H1ya H1yc H1za H1zc */ v16 = vec_mergel(v6,v20);/* H2xa H2xc H2ya H2yc */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?