Thursday 13 June 2019

c++ - VISUAL STUDIO 2013 : error LNK2019: unresolved external symbol - cuRAND - Random Number Generator



I have researched for hours,




  1. MSDN Microsoft - Linker Tools Error LNK2019

  2. How to solve the error LNK2019: unresolved external symbol - function?

  3. What is an undefined reference/unresolved external symbol error and how do I fix it?

  4. Error LNK2019: unresolved external symbol _wWinMain@16 referenced in function ___tmainCRTStartup

  5. How to get rid of this error: "MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup"



    but have not found a way to resolve the following error,






Error	1	error LNK2019: unresolved external symbol _curandCreateGenerator@8 referenced in function _GPU_RNG	F:\New\Eks\Visual Studio 2013\PEOPLE PROJECTS\RNGTests\CURANDRNGLib\CURANDRNG.cu.obj	CURANDRNGLib
Error 2 error LNK2019: unresolved external symbol _curandCreateGeneratorHost@8 referenced in function _CPU_RNG F:\New\Eks\Visual Studio 2013\PEOPLE PROJECTS\RNGTests\CURANDRNGLib\CURANDRNG.cu.obj CURANDRNGLib
Error 3 error LNK2019: unresolved external symbol _curandDestroyGenerator@4 referenced in function _GPU_RNG F:\New\Eks\Visual Studio 2013\PEOPLE PROJECTS\RNGTests\CURANDRNGLib\CURANDRNG.cu.obj CURANDRNGLib
Error 4 error LNK2019: unresolved external symbol _curandSetPseudoRandomGeneratorSeed@12 referenced in function _GPU_RNG F:\New\Eks\Visual Studio 2013\PEOPLE PROJECTS\RNGTests\CURANDRNGLib\CURANDRNG.cu.obj CURANDRNGLib
Error 5 error LNK2019: unresolved external symbol _curandGenerateUniform@12 referenced in function _GPU_RNG F:\New\Eks\Visual Studio 2013\PEOPLE PROJECTS\RNGTests\CURANDRNGLib\CURANDRNG.cu.obj CURANDRNGLib





CURANDRNGLib.cu





#include 
#include
#include
#include

using namespace std;
extern "C" __declspec(dllexport) void __cdecl GPU_RNG(float* , unsigned int , unsigned int);
extern "C" __declspec(dllexport) void __cdecl CPU_RNG(float* , unsigned int , unsigned int);


extern void GPU_RNG(float * h_randomData, unsigned int dataCount, unsigned int mainSeed)
{
float * d_randomData = 0;

//allocate device memory
size_t randomDataSize = dataCount * sizeof(float);
cudaMalloc((void**)&d_randomData, randomDataSize);

curandGenerator_t m_prng;
//Create a new generator
curandCreateGenerator(&m_prng, CURAND_RNG_PSEUDO_DEFAULT);
//Set the generator options
curandSetPseudoRandomGeneratorSeed(m_prng, (unsigned long) mainSeed);
//Generate random numbers
curandGenerateUniform(m_prng, d_randomData, dataCount);
//Copy memory back to the device
cudaMemcpy(h_randomData, d_randomData, randomDataSize, cudaMemcpyDeviceToHost);
//Clean
curandDestroyGenerator(m_prng);
//free device memory
cudaFree(d_randomData);
}

extern void CPU_RNG(float * h_randomData, unsigned int dataCount, unsigned int mainSeed)
{
curandGenerator_t m_prng;
//Create a new generator
curandCreateGeneratorHost(&m_prng,CURAND_RNG_PSEUDO_DEFAULT);
//Set the generator options
curandSetPseudoRandomGeneratorSeed(m_prng, (unsigned long) mainSeed);
//Generate random numbers
curandGenerateUniform(m_prng, h_randomData, dataCount);
//Clean
curandDestroyGenerator(m_prng);
}





Should I add a #include? (I'm not good at english very much)


Answer



I guess you might have developed your code on Win32 platform. There is only basic CUDA API support but no CURAND library support on Win32. You can try switching to developing a 64-bit version. (Project -> Properties -> change the platform option on top)


No comments:

Post a Comment

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...