- 317 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 12:35:35 ]
- インラインアセンブラはスレ違いかもしれないけど質問。
Xeonで動かそうと思って double func(double *sx, double *cx, double *sy, double *cy, int xe, int ye) { double sum = 0; for (int ix = 0; ix < xe; ix++) { double sx1 = sx[ix]; double cx1 = cx[ix]; for (int iy = 0; iy < ye; iy++) { double sy1 = sy[iy]; double cy1 = cy[iy]; sum += (cx1 * cy1 - sx1 * sy1) + (cx1 * sy1 + sx1 * cy1); } } return sum; } こげな関数のループ内部を asm volatile( " movsd %1, %%xmm0; movhpd %3, %%xmm0; movapd %%xmm0, %%xmm2 movsd %2, %%xmm1; movhpd %4, %%xmm1; movapd %%xmm1, %%xmm3 mulpd %%xmm1, %%xmm0; movhlps %%xmm0, %%xmm1; subsd %%xmm1, %%xmm0 mulpd %%xmm3, %%xmm2; movhlps %%xmm2, %%xmm3; addsd %%xmm3, %%xmm2 addsd %0, %%xmm0; addsd %%xmm0, %%xmm2; movsd %%xmm2, %0" : "=g" (sum) : "g" (cx[ix]), "g" (cy[iy]), "g" (sx[ix]), "g" (sy[iy]) : "%xmm0", "%xmm1", "%xmm2", "%xmm3" ); こう書いてみたんだが、もっと効率上げられないもんかな。 ループ部はiccの各種最適化に頼りたいから残しておきたいんだが。
|

|