我仍然很擅长使用SSE,并且我正在尝试2*Pi为该命令的双精度输入实现模数1e8(其结果将被输入到一些矢量化的三角形计算中).
我目前对代码的尝试是基于以下的想法mod(x, 2*Pi) = x - floor(x/(2*Pi))*2*Pi:
#define _PD_CONST(Name, Val) \
static const double _pd_##Name[2] __attribute__((aligned(16))) = { Val, Val }
_PD_CONST(2Pi, 6.283185307179586); /* = 2*pi */
_PD_CONST(recip_2Pi, 0.159154943091895); /* = 1/(2*pi) */
void vec_mod_2pi(const double * vec, int Size, double * modAns)
{
__m128d sse_a, sse_b, sse_c;
int i;
int k = 0;
double t = 0;
unsigned int initial_mode;
initial_mode = _MM_GET_ROUNDING_MODE();
_MM_SET_ROUNDING_MODE(_MM_ROUND_DOWN);
for (i = 0; i < Size; i += …Run Code Online (Sandbox Code Playgroud)