4

__global__ 関数で数学関数 (pow) を使用しようとしていますが、次のエラーが発生します。

 calling a __host__ function("std::pow<float, double> ") from a __global__ function is not allowed

そして、プロジェクトのプロパティの下にある「高速数学ライブラリを利用する」チェックボックスをオンにしようとしました->ビルド->設定->ツール設定->最適化と運がありません。

pow 関数内の型を確認しましたが、どちらも float であり、これらのヘッダー ファイルも含めました。

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <math.h>
#include <sys/times.h>
#include <sys/resource.h>
#include <limits.h>
#include <unistd.h>
#include <time.h>
#include <string.h>
#include "utils.h"

名前空間 std も使用しない

これを修正する方法についてのアイデアはありますか?

4

1 に答える 1

7

エラーメッセージをもっと注意深く読む必要があります。重要な情報は

std::pow<float, double>

注: <float,double>. pow倍精度引数と単精度引数を使用して を呼び出しています。CUDA 数学ライブラリは、選択した標準ライブラリ関数のテンプレート オーバーロードによって実装されますが、引数に一致するオーバーロードがありません。すべて倍精度またはすべて単精度の引数を持つようにコードを修正すると、エラーは消えます。

于 2013-02-07T21:07:34.867 に答える