nb_kernel112_ppc_altivec.c
来自「最著名最快的分子模拟软件」· C语言 代码 · 共 1,557 行 · 第 1/5 页
C
1,557 行
*/ 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 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 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 */ v1 = vec_mergeh(v19,v21);/* Oxa Oza Oxb Ozb */ v19 = vec_mergel(v19,v21);/* Oxc Ozc - - */ v21 = vec_mergeh(v20,v22);/* Oya H1xa Oyb H1xb */ v20 = vec_mergel(v20,v22);/* Oyc H1xc - - */ v22 = vec_mergeh(v23,v25);/* H1ya H2xa H1yb H2xb */ v23 = vec_mergel(v23,v25);/* H1yc H2xc - - */ v25 = vec_mergeh(v24,v26);/* H1za H2ya H1zb H2yb */ v24 = vec_mergel(v24,v26);/* H1zc H2yc - - */ v26 = vec_mergeh(v27,v0); /* H2za 0 H2zb 0 */ v27 = vec_mergel(v27,v0); /* H2zc 0 - 0 */ v2 = vec_mergeh(v1,v21); /* Oxa Oya Oza H1xa */ v21 = vec_mergel(v1,v21); /* Oxb Oyb Ozb H1xb */ v1 = vec_mergeh(v19,v20);/* Oxc Oyc Ozc H1xc */ v20 = vec_mergeh(v22,v25);/* H1ya H1za H2xa H2ya */ v22 = vec_mergel(v22,v25);/* H1yb H1zb H2xb H2yb */ v25 = vec_mergeh(v23,v24);/* H1yc H1zc H2xc H2yc */ v24 = vec_mergeh(v26,v0); /* H2za 0 0 0 */ v26 = vec_mergel(v26,v0); /* H2zb 0 0 0 */ v3 = vec_mergeh(v27,v0); /* H2zc 0 0 0 */ 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); } else if(k<(nj1-1)) { jnra = jjnr[k]; jnrb = jjnr[k+1]; j3a = 3*jnra; j3b = 3*jnrb; v1 = (vector float)vec_lvsl(0, pos+j3a); v8 = (vector float)vec_lvsl(0, pos+j3b); v2 = vec_ld(0, pos+j3a); v9 = vec_ld(0, pos+j3b); v3 = vec_ld(16, pos+j3a); v10 = vec_ld(16, pos+j3b); v4 = vec_ld(32, pos+j3a); v11 = vec_ld(32, pos+j3b); /* 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); /* 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); /* H2za - - - */ v7 = vec_perm(v4,v4,(vector unsigned char)v1); /* H2zb - - - */ v14 = vec_perm(v11,v11,(vector unsigned char)v8); /* permute 3atoms coordinates */ v1 = vec_mergeh(v5,v12);/* Oxa Oxb Oya Oyb */ v3 = vec_mergel(v5,v12);/* Oza Ozb H1xa H1xb */ v5 = vec_mergeh(v6,v13);/* H1ya H1yb H1za H1zb */ v9 = vec_mergeh(v7,v14);/* H2za H2zb - - */ v7 = vec_mergel(v6,v13);/* H2xa H2xb H2ya H2yb */ /* load i H1x */ v29 = vec_ld(128, (float *) stackdata); v2 = vec_sld(v1,v1,8); /* Oya Oyb - - */ /* load i H1y */ v30 = vec_ld(144, (float *) stackdata); v4 = vec_sld(v3,v3,8); /* H1xa H1xb - - */ /* load i H1z */ v31 = vec_ld(160, (float *) stackdata); v6 = vec_sld(v5,v5,8); /* H1za H1zb - - */ v8 = vec_sld(v7,v7,8); /* H2ya H2yb - - */ v10 = vec_sub(v29,v1); /* iH1x - jOx */ v13 = vec_sub(v29,v4); /* iH1x - jH1x */ v16 = vec_sub(v29,v7); /* iH1x - jH2x */ /* load i H2x */ v29 = vec_ld(176, (float *) stackdata); v11 = vec_sub(v30,v2); /* iH1y - jOy */ v14 = vec_sub(v30,v5); /* iH1y - jH1y */ v17 = vec_sub(v30,v8); /* iH1y - jH2y */ /* load i H2y */ v30 = vec_ld(192, (float *) stackdata); vec_st(v10, 544, (float *)stackdata); /* dx21 */ vec_st(v13, 592, (float *)stackdata); /* dx22 */ vec_st(v16, 640, (float *)stackdata); /* dx23 */ v12 = vec_sub(v31,v3); /* iH1z - jOz */ v15 = vec_sub(v31,v6); /* iH1z - jH1z */ v18 = vec_sub(v31,v9); /* iH1z - jH2z */ /* load i H2z */ v31 = vec_ld(208, (float *) stackdata); /* v10-v18 now contains iH1-jO, iH1-jH1 & iJ1-jH2 distances */ vec_st(v11, 560, (float *)stackdata); /* dy21 */ vec_st(v14, 608, (float *)stackdata); /* dy22 */ vec_st(v17, 656, (float *)stackdata); /* dy23 */ v19 = vec_sub(v29,v1); /* iH2x - jOx */ v22 = vec_sub(v29,v4); /* iH2x - jH1x */ v25 = vec_sub(v29,v7); /* iH2x - jH2x */ vec_st(v12, 576, (float *)stackdata); /* dz21 */ vec_st(v15, 624, (float *)stackdata); /* dz22 */ vec_st(v18, 672, (float *)stackdata); /* dz23 */ /* load i Ox */ v29 = vec_ld(80, (float *) stackdata); v20 = vec_sub(v30,v2); /* iH2y - jOy */ v23 = vec_sub(v30,v5); /* iH2y - jH1y */ v26 = vec_sub(v30,v8); /* iH2y - jH2y */ vec_st(v19, 688, (float *)stackdata); /* dx31 */ vec_st(v22, 736, (float *)stackdata); /* dx32 */ vec_st(v25, 784, (float *)stackdata); /* dx33 */ /* load i Oy */ v30 = vec_ld(96, (float *) stackdata); v21 = vec_sub(v31,v3); /* iH2z - jOz */ v24 = vec_sub(v31,v6); /* iH2z - jH1z */ v27 = vec_sub(v31,v9); /* iH2z - jH2z */ /* load i Oz */ v31 = vec_ld(112, (float *) stackdata); vec_st(v20, 704, (float *)stackdata); /* dy31 */ vec_st(v23, 752, (float *)stackdata); /* dy32 */ vec_st(v26, 800, (float *)stackdata); /* dy33 */ v1 = vec_sub(v29,v1); /* iOx - jOx */ v4 = vec_sub(v29,v4); /* iOx - jH1x */ v7 = vec_sub(v29,v7); /* iOx - jH2x */ vec_st(v21, 720, (float *)stackdata); /* dz31 */ vec_st(v24, 768, (float *)stackdata); /* dz32 */ vec_st(v27, 816, (float *)stackdata); /* dz33 */ v2 = vec_sub(v30,v2); /* iOy - j
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?