10

Thrust / CUDA 4.0を使用して簡単なアプリケーションを構築しようとしていますが、「警告:グローバルメモリスペースを想定しているため、ポインタが何を指しているのかわかりません」という警告がたくさん表示されます。

他の誰かがこれを見たことがありますか?それらを無効にするか、コードを修正するにはどうすればよいですか?

ありがとう、

アデ

これが私のコードです。

Hello.h

class DECLSPECIFIER Hello   
{ 
private:
    thrust::device_vector<unsigned long> m_device_data;

public:
    Hello(const thrust::host_vector<unsigned long>& data);
    unsigned long Sum();
    unsigned long Max();
};

Hello.cu

#include "Hello.h"

Hello::Hello(const thrust::host_vector<unsigned long>& data)
{
    m_device_data = data;
}

unsigned long Hello::Sum()
{
    return thrust::reduce(m_device_data.cbegin(), m_device_data.cend(), 0, thrust::plus<unsigned long>());
}

unsigned long Hello::Max()
{
    return *thrust::max_element(m_device_data.cbegin(), m_device_data.cend(), thrust::less<unsigned long>());
}

出力

1>  Compiling CUDA source file Hello.cu...
1>  
1>  C:\SrcHg\blog\HelloWorld\HelloWorldCuda>"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\bin\nvcc.exe" -gencode=arch=compute_10,code=\"sm_10,compute_10\" --use-local-env --cl-version 2008 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin"  -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\include"  -G0  --keep-dir "Debug" -maxrregcount=32  --machine 32 --compile  -D_NEXUS_DEBUG -g    -Xcompiler "/EHsc /nologo /Od /Zi  /MDd " -o "Debug\Hello.cu.obj" "C:\SrcHg\blog\HelloWorld\HelloWorldCuda\Hello.cu" 
1>  Hello.cu
1>  tmpxft_00001fac_00000000-0_Hello.cudafe1.gpu
1>  tmpxft_00001fac_00000000-5_Hello.cudafe2.gpu
1>  Hello.cu
1>C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\include\thrust/detail/internal_functional.h(197): warning : Cannot tell what pointer points to, assuming global memory space
1>C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\include\thrust/detail/internal_functional.h(197): warning : Cannot tell what pointer points to, assuming global memory space
1>C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\include\thrust/detail/internal_functional.h(197): warning : Cannot tell what pointer points to, assuming global memory space

これらはたくさんあります。

4

3 に答える 3

12

Fermiは、共有およびグローバルメモリスペースの統一されたアドレス指定を使用しますが、Fermi以前のメッセージは使用しません。

フェルミ以前のケースでは、アドレスを取得したときに、それを共有するかグローバルにするかがわかりません。コンパイラはそれを理解しようとしますが、理解できない場合があります。その場合、メッセージがポップアップ表示されます。99.999%のケースで「グローバルであると仮定」が正しい場合です。これは、共有メモリへのポインタが必要な場合、通常は共有変数のアドレスを明示的に取得し、コンパイラがそれを認識できるためです。

Fermiカードの場合、共有またはグローバルは実行時に(アドレスに基づいて)推定でき、コンパイラーが想定する必要はありません。

提案:これらの警告は無視してください。

于 2011-03-07T06:56:01.010 に答える
4

だから...それを理解して、ここに投稿しようと思いました。解決策はどちらかです

NVCCで-Gフラグを使用しないでください

また

そのようなデバイスをターゲットにしている場合は、arch sm_20(Fermi)用にコンパイルします

これはNVCCの既知の制限であり、スラストバグではありません。見る:

http://groups.google.com/group/thrust-users/browse_thread/thread/1914198abf646c6d/8bc00e6030b0030b?#8bc00e6030b0030b

于 2011-03-06T19:46:06.723 に答える
1

mirosoft Visual Studioを使用している場合:プロジェクト->プロパティ-> CUDA C /C++->デバイス->コード生成から; Compute_10、sm_10をcompute_20、sm_20に変更します

于 2013-05-30T12:56:48.457 に答える