I have a visual studio c++ project (with VS 2010 and insight 2) which contains a cuda file. Here’s the code
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() ) );
}
and finally 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 );
}
This code comes from : here
My problem is that when I build the project, it gives me this error:
Hello.cu(5): fatal error C1083: Cannot open include file: 'Hello.h': No such file or directory
However, when I right click on the “include “Hello.h”” it finds the file just fine.
I’ve added the folder where my .h are in the additionnal include directories of the project. So I really don’t know why it couldn’t open the file.
I don’t know if it’s more of a configuration problem of just maybe a c++ thing I forgot…
Your .cu file will have most likely have a custom build rule to make use of NVCC. Right-click the .cu file and look at its properties. The build rule will again contain a section for additional include directories. Make sure the directory containing your header is present there as well.