私は 3.0 コンピューティング機能で CUDA に C を使用しており、倍精度の組み込み対数関数を使用する必要があります。そのためにはdouble log(double x)
関数(documentation)を使用する必要があることがわかりました。しかし、倍精度スコープ内で非常に小さな数値を渡すと (例: double x = 6.73E-42
)、
log(x)
関数は を返します-Infinity
。同じ値のJavaMath.log()
関数では、 が返されます-94.802
。これは CUDA 数学ライブラリ内のバグですか、それとも何か問題がありますか?
編集:カーネル関数で使用しているコードは次のとおりです
#include "math.h"
extern "C"
__global__ void smallLog(double* in, int n)
{
int i = blockIdx.x * blockDim.x + threadIdx.x;
if (i<n){
double x = in[i];
in[i] = log(x);
}
}