2011-11-17 66 views
0

我有一個包含cuda文件的Visual Studio C++項目(包含VS 2010和insight 2)。下面的代碼無法在.cu中打開包含文件

Hello.h:

#pragma once 

#pragma warning(push) 
#pragma warning(disable:4996) 
#include "thrust\device_vector.h" 
#pragma warning(pop) 

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

private: 
    thrust::device_vector<unsigned long> m_data; 
} 

Hello.cu:

#include "thrust\host_vector.h" 
#include "thrust\device_vector.h" 
#include "thrust\extrema.h" 

#include "Hello.h" 

using namespace ::thrust; 

Hello::Hello(const thrust::host_vector<unsigned long>& data) 
    : m_data(data.cbegin(), data.cend()) 
{ 
} 

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

unsigned long 
Hello::Max() 
{ 
    return(*max_element(m_data.cbegin(), m_data.cend())); 
} 

最後的main.cpp:

#ifdef _WIN32 
    #define WINDOWS _LEAN_AND_MEAN 
    #define NOMINMAX 
    #include <Windows.h> 
#endif 

#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 
#include <math.h> 
#include <ppl.h> //parallel patterns library 

#include "Hello.h" 

using namespace ::Concurrency; 

int 
main(int argc, char** argv) 
{ 
    printf("Generating data...\n"); 
    thrust::host_vector<unsigned long> host_data(100000); 
    thrust::generate(host_data.begin(), host_data.end(), rand); 
    printf("generated %d numbers\n", host_data.size()); 

    parallel_invoke(
     [host_data]() 
    { 
     printf("\nRunning host code...\n"); 
     unsigned long host_result = thrust::reduce(host_data.cbegin(), 
      host_data.cend(), 0, thrust::plus<unsigned long>()); 
     printf("The sum is %d\n", host_result); 

     host_result = *thrust::max_element(host_data.cbegin(), 
      host_data.cend(), thrust::less<unsigned long>()); 
     printf("The max is %d\n", host_result); 
    }, 
     [host_data]() 
    { 
     printf("\nCopying data to device...\n"); 
     Hello hello(host_data); 

     printf("\nRunning CUDA device code...\n"); 
     unsigned long device_result = hello.Sum(); 
     printf("The sum is %d\n", device_result); 

     printf("\nRunning CUDA device code...\n"); 
     device_result = hello.Max(); 
     printf("The max is %d\n", device_result); 
    } 
    ); 

    return(0); 
} 

代碼來自:here

M Ÿ問題是,當我生成項目,它給了我這個錯誤:

Hello.cu(5): fatal error C1083: Cannot open include file: 'Hello.h': No such file or directory 

然而,當我用鼠標右鍵點擊「包括‘Hello.h’」找到文件就好了。

我已經添加了我的.h文件夾在項目的其他include目錄中。所以我真的不知道爲什麼它無法打開文件。

我不知道這是否是更大的配置問題,只是也許一個C++件事我忘了...

回答

1

你.CU文件將最有可能有一個自定義生成規則,以充分利用NVCC的。右鍵單擊.cu文件並查看其屬性。構建規則將再次包含其他包含目錄的部分。確保包含標題的目錄也存在。

+0

非常感謝,正是我所需要的 – nevero

相關問題