0

我不清楚什么应该是实现 sincos() 的最佳方法。我到处查找,但似乎一致认为它比单独计算 sin 和 cos 更好。下面基本上是我在内核中使用 sincos 的内容。但是,当我将它与单独做 sin 和 cos 进行对比时,它会变慢。我认为这与我使用 cPtr 和 sPtr 的方式有关。有没有更好的办法?

int idx = blockIdx.x * blockDim.x + threadIdx.x;

if (idx < dataSize)
{
    idx += lower;
    double f = ((double) idx) * deltaF;
    double cosValue;
    double sinValue;
    double *sPtr = &sinValue;
    double *cPtr = &cosValue;
    sincos(twopit * f, sPtr, cPtr);

    d_re[idx - lower] = cosValue;
    d_im[idx - lower] = - sinValue;

    //d_re[idx - lower] = cos(twopit * f);
    //d_im[idx - lower] = - sin(twopit * f);
}
4

1 回答 1

5

指针是多余的 - 你可以摆脱它们,例如

double cosValue;
double sinValue;
sincos(twopit * f, &sinValue, &cosValue);

但我不确定这会对性能产生多大影响(尽管值得一试)。

还要考虑在精度要求允许的情况下使用浮点数而不是双精度数,并使用相应的单精度函数(sincosf在这种情况下)。

于 2012-07-20T07:33:36.383 回答