weird things appeared again when i use Visual Studio for CUDA programming (really hate VS qwq).
I remembered compiling and running fine previously, but this time it failed even with an extremely simple program. From the error info I guess it may involve the compiling environment but I have no idea how to fix it.
Thanks for help
using VS2022; CUDA toolkit 11.7
the program aimed to compile
#include <iostream>
#include <math.h>
// function to add the elements of two arrays
__global__
void add(int n, float *x, float *y)
{
int index = blockIdx.x * blockDim.x + threadIdx.x;
int stride = gridDim.x * blockDim.x; // total thread num
for (int i = index; i < n; i += stride)
y[i] = x[i] + y[i];
}
int main(void)
{
int N = 1 << 20; // 1M elements
float *x;
float *y;
cudaMallocManaged(&x, N * sizeof(float));
cudaMallocManaged(&y, N * sizeof(float));
// initialize x and y arrays on the host
for (int i = 0; i < N; i++) {
x[i] = 1.0f;
y[i] = 2.0f;
}
// Run kernel on 1M elements on the CPU
int blockSize = 256; // thread per block
int numBlocks = (N + blockSize - 1) // blockSize;
add<<<numBlocks, blockSize>>>(N, x, y);
// Wait for GPU to finish before accessing on host
cudaDeviceSynchronize();
// Check for errors (all values should be 3.0f)
float maxError = 0.0f;
for (int i = 0; i < N; i++)
maxError = fmax(maxError, fabs(y[i]-3.0f));
std::cout << "Max error: " << maxError << std::endl;
// Free memory
cudaFree(x);
cudaFree(y);
return 0;
}
when i try to compile it in Visual Studio, error occurred and the info is as follows:
Code | Description |
---|---|
MSB372 | The command ""D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\bin\nvcc.exe" -gencode=arch=compute_52,code=\"sm_52,compute_52\" --use-local-env -ccbin "D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\bin\HostX64\x64" -x cu -I"D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include" -I"D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include" -G --keep-dir x64\Debug -maxrregcount=0 --machine 64 --compile -cudart static -g -DWIN32 -DWIN64 -D_DEBUG -D_CONSOLE -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /Fdx64\Debug\vc143.pdb /FS /Zi /RTC1 /MDd " -o D:\0_Personal_File\CUDA\cuda_by_example\cuda_by_example\cuda-demo\cuda-demo\x64\Debug\add.cu.obj "D:\0_Personal_File\CUDA\cuda_by_example\cuda_by_example\cuda-demo\cuda-demo\add.cu"" exited with code 1. |
so i try to use commandline for compiling (thinking it may be clearer):
D:\0_Personal_File\CUDA\cuda_by_example\cuda_by_example\cuda-demo\cuda-demo>nvcc add.cu -o add.exe
and the error info display:
add.cu
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\vcruntime.h(197): error: invalid redeclaration of type name "size_t"
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\vcruntime_new.h(48): error: first parameter of allocation function must be of type "size_t"
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\vcruntime_new.h(53): error: first parameter of allocation function must be of type "size_t"
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\vcruntime_new.h(59): error: first parameter of allocation function must be of type "size_t"
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\vcruntime_new.h(64): error: first parameter of allocation function must be of type "size_t"
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\vcruntime_new.h(166): error: first parameter of allocation function must be of type "size_t"
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\vcruntime_new.h(182): error: first parameter of allocation function must be of type "size_t"
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\vcruntime_new_debug.h(26): error: first parameter of allocation function must be of type "size_t"
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\vcruntime_new_debug.h(34): error: first parameter of allocation function must be of type "size_t"
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(409): error: class template "std::_Is_memfunptr" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(1699): error: class template "std::result_of" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(1699): error: class template "std::result_of" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(1799): error: class template "std::_Function_args" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(1799): error: class template "std::_Function_args" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(1799): error: class template "std::_Function_args" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(1799): error: class template "std::_Function_args" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(1799): error: class template "std::_Function_args" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(1799): error: class template "std::_Function_args" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(1799): error: class template "std::_Function_args" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(1799): error: class template "std::_Function_args" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(1799): error: class template "std::_Function_args" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(1799): error: class template "std::_Function_args" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(1799): error: class template "std::_Function_args" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(1799): error: class template "std::_Function_args" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(1799): error: class template "std::_Function_args" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(1799): error: class template "std::_Function_args" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(1799): error: class template "std::_Function_args" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(1799): error: class template "std::_Function_args" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(1799): error: class template "std::_Function_args" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(1799): error: class template "std::_Function_args" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(1799): error: class template "std::_Function_args" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(1799): error: class template "std::_Function_args" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(1799): error: class template "std::_Function_args" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(1799): error: class template "std::_Function_args" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(1799): error: class template "std::_Function_args" has already been defined
D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\include\type_traits(1799): error: class template "std::_Function_args" has already been defined
D:\Windows Kits\10\include\10.0.19041.0\ucrt\malloc.h(55): error: more than one instance of overloaded function "_alloca" has "C" linkage
D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\crt/common_functions.h(125): error: first parameter of allocation function must be of type "size_t"
D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\crt/common_functions.h(126): error: first parameter of allocation function must be of type "size_t"
D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\crt/common_functions.h(267): error: first parameter of allocation function must be of type "size_t"
D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\crt/common_functions.h(268): error: first parameter of allocation function must be of type "size_t"
D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\sm_20_intrinsics.hpp(132): error: cannot overload functions distinguished by return type alone
D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\sm_20_intrinsics.hpp(133): error: cannot overload functions distinguished by return type alone
D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\sm_20_intrinsics.hpp(134): error: cannot overload functions distinguished by return type alone
D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\sm_20_intrinsics.hpp(135): error: cannot overload functions distinguished by return type alone
D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\sm_20_intrinsics.hpp(136): warning #1581-D: declaration overloads built-in function "__nv_cvta_global_to_generic_impl"
D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\sm_20_intrinsics.hpp(136): error: more than one instance of overloaded function "__nv_cvta_global_to_generic_impl" has "C" linkage
D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\sm_20_intrinsics.hpp(137): warning #1581-D: declaration overloads built-in function "__nv_cvta_shared_to_generic_impl"
D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\sm_20_intrinsics.hpp(137): error: more than one instance of overloaded function "__nv_cvta_shared_to_generic_impl" has "C" linkage
D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\sm_20_intrinsics.hpp(138): warning #1581-D: declaration overloads built-in function "__nv_cvta_constant_to_generic_impl"
D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\sm_20_intrinsics.hpp(138): error: more than one instance of overloaded function "__nv_cvta_constant_to_generic_impl" has "C" linkage
D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\sm_20_intrinsics.hpp(139): warning #1581-D: declaration overloads built-in function "__nv_cvta_local_to_generic_impl"
D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\sm_20_intrinsics.hpp(139): error: more than one instance of overloaded function "__nv_cvta_local_to_generic_impl" has "C" linkage
D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\sm_32_intrinsics.hpp(104): error: asm operand type size(8) does not match type/size implied by constraint 'r'
D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\sm_32_intrinsics.hpp(105): error: asm operand type size(8) does not match type/size implied by constraint 'r'
D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\sm_32_intrinsics.hpp(109): error: asm operand type size(8) does not match type/size implied by constraint 'r'
D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\sm_32_intrinsics.hpp(110): error: asm operand type size(8) does not match type/size implied by constraint 'r'
D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\sm_32_intrinsics.hpp(111): error: asm operand type size(8) does not match type/size implied by constraint 'r'
D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\sm_32_intrinsics.hpp(112): error: asm operand type size(8) does not match type/size implied by constraint 'r'
D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\sm_32_intrinsics.hpp(113): error: asm operand type size(8) does not match type/size implied by constraint 'r'
D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\sm_32_intrinsics.hpp(114): error: asm operand type size(8) does not match type/size implied by constraint 'r'
D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\sm_32_intrinsics.hpp(115): error: asm operand type size(8) does not match type/size implied by constraint 'r'
D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\sm_32_intrinsics.hpp(116): error: asm operand type size(8) does not match type/size implied by constraint 'r'
D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\sm_32_intrinsics.hpp(117): error: asm operand type size(8) does not match type/size implied by constraint 'r'
D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\sm_32_intrinsics.hpp(118): error: asm operand type size(8) does not match type/size implied by constraint 'r'
D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\sm_32_intrinsics.hpp(119): error: asm operand type size(8) does not match type/size implied by constraint 'r'
D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\sm_32_intrinsics.hpp(120): error: asm operand type size(8) does not match type/size implied by constraint 'r'
D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\sm_32_intrinsics.hpp(122): error: asm operand type size(8) does not match type/size implied by constraint 'r'
D:\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\sm_32_intrinsics.hpp(123): error: asm operand type size(8) does not match type/size implied by constraint 'r'
Error limit reached.
100 errors detected in the compilation of "add.cu".
However the most amusing thing is, it runs well when I compile it (add.cu) in cmd created by myself (not from Visual Studio).
D:\0_Personal_File\TMPTEST>nvcc add.cu -o add_cuda.exe
add.cu
Creating library add_cuda.lib and object add_cuda.exp
I solved it (but is still confused without knowing the reason behind)!
Here is the solution I followed
In short, you may uncheck the "Beta: Use Unicode UTF-8 for world wide language support" box in the Region Settings.(I've checked it for another tool nsys, which is the utils to analysis the cuda, and its python somehow requires utf-8)
I noticed some messy code in the "output" of VS terminal, so I tried the solution above suspiciouly and, suprisingly, it worked!