如何在CUDA中复制2D数组?
我是库达(Cuda)的新手,仍然试图弄清楚事情,所以这个问题可能很愚蠢,但我似乎无法弄清楚这个问题. 我正在尝试将2D阵列复制到GPU.数组的大小为n*n(平方阵列).我正在尝试使用MallocPitch()&cudaMemcpy2D()复制它.问题是我似乎只是在复制数组的第一行,而没有其他内容.我找不到我到底在做错什么. 我的代码: void function(){ double A[N][N]; //code to fill out the array. double* d_A; size_t pitch; cudaMallocPitch(&d_A, &pitch, N * sizeof(double), N); cudaMemcpy2D(d_A, pitch, A, N * sizeof(double) , N * sizeof(double), N, cudaMemcpyHostToDevice); int
24 2024-04-09
编程技术问答社区
为什么gcc和NVCC(g++)看到两个不同的结构尺寸?
我正在尝试将CUDA添加到90年代后期写入的现有单线螺纹C程序中. 要这样做,我需要混合两种语言C和C ++(NVCC是C ++编译器). 问题在于,C ++编译器将结构视为一定大小,而C编译的结构与略有不同的大小相同.那很糟.我真的很困惑,因为我找不到4个字节差异的原因. /usr/lib/gcc/i586-suse-linux/4.3/../../../../i586-suse-linux/bin/ld: Warning: size of symbol `tree' changed from 324 in /tmp/ccvx8fpJ.o to 328 in gpu.o 我的C ++看起来像 #include #include #include "assert.h" extern "C" { #include "structInfo.h" //contains the structure declaration }
8 2024-04-08
编程技术问答社区
用gcc连接CUDA静态库或共享库时出现未定义引用错误
GCC和CUDA问题 嗨, 我已经编译了一个CUDA共享库,但无法将其与使用它的主要程序链接.我正在使用GCC 编译主计划 代码: simplemain.c #include #include void fcudadriver(); int main() { printf("Main \n"); fcudadriver(); return 0; } test.cu __global__ void fcuda() { } void fcudadriver() { fcuda>>(); } i编译test.cu as->它可以工作 nvcc --compiler-options '-fPIC' -o libtest.so --sh
20 2024-04-08
编程技术问答社区
为什么nvcc不能用boost::spirit编译一个CUDA文件?
我试图将cuda与现有的aplication集成,使用boost :: spirit. 隔离问题,我发现以下代码不会复制NVCC: main.cu: #include int main(){ exit(0); } 用nvcc -o cudaTest main.cu汇编我会发现很多错误,可以看到但是,如果我将文件名更改为main.cpp,然后使用nvcc再次编译,则可以使用.这里发生了什么,我该如何修复? 解决方案 nvcc有时会在编译复杂的模板代码(例如Boost)中遇到困难,即使仅在__host__函数中使用该代码. 当文件的扩展名为.cpp时,nvcc不执行任何解析,而是将代码转发给主机编译器,这就是为什么您根据文件扩展而观察到不同的行为. . 如果可能 我还要确保尝试nvcc与最近的 cuda 4.1 . nvcc的模板支持随着每个版本而改善.
10 2024-04-02
编程技术问答社区
使用nvcc和c++11编译错误,需要最小的失败例子
以下代码(最初来自Boost)无法使用nvcc 7.0启用NVCC 7.0启用: #include template struct result_of_always_void { typedef void type; }; template struct cpp0x_result_of_impl {}; template struct cpp0x_result_of_impl()(std::declval()))>::type > { typedef decltype(std::declval()(std::declval())) type; };
16 2024-04-02
编程技术问答社区
告诉NVCC不要预处理主机代码,以避免BOOST_COMPILER的重新定义。
我有一个.cu文件,其中包含主机和设备代码: // device code __global__ void myKernel() { ... } // host code #include boost::mutex myMutex; int main() { ... } 如您所见,我确实包括Boost的静音功能.当我编译文件时,由于以下警告,我会遇到错误: warning C4005: 'BOOST_COMPILER': Macro-Redefinition c:\boost\include\boost-1_49_0\boost\config\compiler\visualc.hpp 因此,我假设NVCC处理设备和主机代码的所有预处理.我是对的吗,如果是,我该如何避免并将预处理传递给Cl.exe(MSVC 2010,Win7)? 我已经尝试将主机代码放入单独的HPP/CPP文件中,并将此文件包含在Cu文件中
8 2024-04-02
编程技术问答社区
安装cudatoolkit时缺少Nvcc?
我沿着Pytorch安装了 的cuda conda install pytorch torchvision cudatoolkit=10.0 -c pytorch 但是,似乎没有随身携带NVCC.如果我想使用例如nvcc -V,我会发现找不到NVCC的错误,并且我应该使用sudo apt install nvidia-cuda-toolkit.安装它 我可以这样做吗(我不想尝试,然后发现它不起作用/使整个CUDA设置弄乱). 这是错误还是预期的行为? 我正在使用Ubuntu 18.04,并具有CUDA 10.2 解决方案 使用Pytorch 1.4安装10.1的cudatoolkit时遇到了这个问题. 有一个conda-forge软件包https://anaconda.org/conda-forge/cudatoolkit-dev.安装此后,nvcc以及其他CUDA库将在/home/li/anaconda3/envs//pkgs/cuda-
18 2024-01-26
编程技术问答社区
不支持的GPU架构compute_30在支持CUDA 5的GPU上。
我目前正在尝试在最新的CUDA工具包上编译Darknet,即11.1版.我有一个能够运行CUDA版本5的GPU,即GEFORCE 940m.但是,在使用最新的CUDA工具包重建DarkNet时,它说 NVCC致命:不支持的GPU架构'Compute_30' COMPUTE_30用于版本3,当我的GPU可以运行版本5时,它如何失败 我的代码是否可能检测到我的英特尔图形卡,而不是我的NVIDIA GPU?如果是这样,是否可以更改检测? 解决方案 支持compute_30的支持已被删除,以 CUDA 10.2 .因此,如果您使用的是NVCC,请确保使用此标志来定位DarkNet构建系统中正确的体系结构 -gencode=arch=compute_50,code=sm_50 您可能还需要使用此方法来避免对架构的警告. . -Wno-deprecated-gpu-targets 其他解决方案 我添加了以下内容: makefiletemp = open
16 2023-12-25
编程技术问答社区
链接错误。命令行中缺少DSO
我是Linux的新手(使用Ubuntu 14.04 LTS 64位),来自Windows,并试图通过我的现有CUDA项目进行移植. 通过 链接时 /usr/local/cuda/bin/nvcc -arch=compute_30 -code=sm_30,compute_30 -o Main.o Display.o FileUtil.o Timer.o NeuralNetwork.o -L/usr/lib -L/usr/local/lib -L/usr/lib/x86_64-linux-gnu -L/usr/local/cuda/lib64 -lGLEW -lglfw3 -lGL -lGLU -lcuda -lcudart 我遇到以下错误: /usr/bin/ld: /usr/local/lib/libglfw3.a(x11_clipboard.c.o): undefined reference to symbol 'XConvertSelection' //usr/
20 2023-12-15
编程技术问答社区
为什么nvcc找不到我的Visual C++安装?
我正在使用NVIDIA 3100m的核心i5上运行Windows 7 Pro X64,这是CUDA兼容的. 我尝试过安装来自Nvidia的32位和64位CUDA工具包,不幸的是,我都无法编译任何内容. NVCC说"找不到支持的CL版本.只有MSVC 8.0和MSVC 9.0得到支持". 我使用Windows 7 SDK安装了X86和X86-64编译器(两个拱门的编译器版本15.00.30729.01).两个编译器都可以正常运行;我已经使用它们构建和测试了C ++代码.我尝试从设置32位和64位编译的命令外壳中运行NVCC,并使用-ccbin命令行选项将其指向NVCC,将其指向Visual C ++安装目录. 处理此设置的正确方法是什么?有什么办法使NVCC对发生的事情更详细? -v旗并不可怕.理想情况下,使它显示出它在发现的内容与期望找到的东西.如果我安装Visual C ++ Express,这会更好吗?还是仅支持与CUDA一起使用的VC ++的商业版? 解决方
18 2023-12-05
编程技术问答社区
我如何在Windows上用CUDA使用其他的C++编译器?
我正在尝试使用CUDA构建一个简单的应用程序,并且我一直在尝试几个小时,而我只是无法在Windows上使用它. NVCC绝对拒绝没有Visual Studio的编译器,而这些编译器不支持我需要的内容.我尝试使用NVCC与Clang建造,但它只是要求我使用Visual Studio的编译器.我还尝试过直接使用Clang,因为它现在支持CUDA,但是我收到此错误: clang++.exe: error: Unsupported CUDA gpu architecture: compute_52 这对我来说毫无意义,因为我拥有cuda工具包7.5版本,而我的图形卡是GTX 970(其中两个).我已经广泛地搜索了这一点,到处遇到的任何地方,这个人总是遇到的错误是他们的cuda工具包 解决方案 cuda Windows工具链您仍然可以使用另一个编译器来编译非CUDA主机代码,然后使用NVCC和VS工具链链接该代码. 其他解决方案 尝试使用clang-cl,--cubin=cla
16 2023-12-05
编程技术问答社区
使用CreateProcess调用nvcc.exe
我们目前使用一个模拟JIT编译器,用于CUDA,其中NVCC.EXE在某些文件上被调用,并生成了结果.ptx文件. bool executeWindowsProcess(ofstream &logFF) { STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); char cmd[] = "\"C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v5.0\\bin\\nvcc.exe\""; char args[] = "\"C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v5.0\\bin\\nvcc.exe\" --
10 2023-12-04
编程技术问答社区
我如何设置nvcc以使用Windows SDK 7.1中的Visual C++ Express 2010 x64?
我正在使用Windows SDK 7.1(添加64位编译器)构建具有Visual C ++ Express 2010的64位应用程序.当我在32位模式下使用NVCC时,它运行良好.当我以64位模式使用它时,我会得到此错误: nvcc fatal : Visual Studio configuration file '(null)' could not be found for installation at 'C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\x86_amd64/../../..' 我该怎么做才能向NVCC提供正确的文件? 解决方案 好吧,我找到了解决方案. NVCC正在寻找Program Files\Microsoft Visual Studio 10.0\VC\bin\amd64中的vcvars64.bat文件,但它仅存在于Vs的专业版本中.您必须手动将其放置在内部: CALL
22 2023-12-04
编程技术问答社区
CUDA。NVCC在断言时给出控制表达式为常数的警告
我在这样的断言语句中获取警告controlling expression is constant: assert(... && "error message"); 为什么要警告这个断言?我如何抑制此警告? NVCC是NVIDIA CUDA编译器,我认为它基于LLVM.当相同编译与GCC或Visual C ++编译器罚款时,为什么会发出此警告? 解决方案 便携式替代方案(可能包裹在宏中)将是: { const bool error_message = true; assert([...] && error_message); } 清除我的意思: #define myAssert(msg, exp) { const bool msg(true); assert(msg && (exp)); } // usage: myAssert(ouch, a && b); ...给出例如: 断言" ouch &&(A && b)"
24 2023-11-27
编程技术问答社区
什么时候与寄存器/局部变量一起使用volatile?
用挥发性预选赛在CUDA中声明寄存器数组的含义是什么? 当我尝试使用寄存器数组的挥发性关键字尝试时,它将溢出寄存器内存的数量删除到本地内存. (即迫使CUDA使用寄存器代替本地记忆)这是预期的行为吗? 我找不到有关CUDA文档中登记阵列的挥发性用法的任何信息. 这是两个版本的PTXA -V输出 带有挥发性预选赛 __volatile__ float array[32]; ptxas -v输出 ptxas info : Compiling entry function '_Z2swPcS_PfiiiiS0_' for 'sm_20' ptxas info : Function properties for _Z2swPcS_PfiiiiS0_ 88 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads ptxas info : Used 47 registe
26 2023-11-25
编程技术问答社区
有没有人真正让NVCC和英特尔编译器一起工作?
试图让NVCC使用英特尔编译器的许多问题.它不起作用,我明白了. 人们给出的最常见的答案是使用NVCC/CL.EXE将设备代码编译到库中,然后单独编译主机代码并将其链接.我正在尝试这个,但是却一无所获. 在VS2012中,我创建了一个带有2个项目的解决方案 - 一个CUDA,另一个Console应用程序. 我将CUDA项目设置为将VS2012编译到静态库中.它没问题. 我已将控制台应用程序设置为Intel 14.0,并将其作为EXE编译.我还为"其他库依赖关系"添加了正确的路径,并通过"其他依赖关系"告诉了编译器有关CUDA库的信息(我还告诉它有关cudart_static.lib). 还设置了构建依赖性,以首先编译CUDA项目. 但是,此设置不好.给我一个错误,即使Google都亏了: Error 5 error MSB4057: The target "ComputeLegacyManifestEmbedding" does not
24 2023-11-24
编程技术问答社区
nvcc.exe链接错误 Microsoft Visual Studio配置文件'vcvars64.bat'无法找到
我想从Windows命令行中使用nvcc -ptx,但是我总是收到此错误消息: NVCC:致命错误:Microsoft Visual Studio配置文件" VCVARS64.BAT"在'C:\ Program Files(x86)\ Microsoft Visual S的安装中找不到bat' tudio 11.0 \ vc \ bin/../..' 我正在使用VS 2012 Express Edition.解决方案是什么? 解决方案 我设法解决了该问题并与MS Visual Studio Express 2012,我在这里所做的工作: 安装了MS Visual Studio 2012 Express 安装cuda_5.5.20_winvista_win7_win8_general_64,截至2014-01-16 的最新版本 来自此目录:C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin,我已将X8
42 2023-11-23
编程技术问答社区
VS2010编译器和cuda错误:链接规范与之前的 "hypot "不兼容
当我尝试在64位Windows 7上使用vs 2010中的2010年在Debug 64位配置构建项目时,我会发现此错误以及其他两个错误. 错误:链接规范与Math.h Line 161中的先前" hypot"不相容 错误:链接规范与Math.h Line 161中的以前的" hypotf"不相容 错误:函数" ABS(长)"已经在Math_functions中定义了.H行534 我在32位构建中没有得到这些错误.此外,VS2008的64位构建工作.这个问题是否有适当的工作,还是我应该等到NVCC支持2010年编译器? ? 解决方案 是的,这在VS2010中进行了更改: /* hypot and hypotf are now part of the C99 Standard */ static __inline double __CRTDECL hypot(_In_ double _X, _In_ double _Y) { return _hypot(_X,
44 2023-11-23
编程技术问答社区
如何使用英特尔 C++ 编译器与 CUDA nvcc?
我在Microsoft Visual Studio 2008上使用了NVIDIA CUDA 4.1. 我还安装了Intel Parallel Studio XE 2011. 默认情况下,NVIDIA的C编译器nvcc.exe使用Microsoft的C编译器cl.exe编译其C代码. 如何更改设置,以便nvcc使用英特尔的C编译器icl.exe. 解决方案 不幸的是,您不能(或至少它的高度未经许可). Windows支持的唯一编译器是Visual Studio.除非有任何变化,并且现在它们支持英特尔的编译器,我不建议使用它们 http://forums.nvidia.com/index.php?showtopic=153975
18 2023-11-20
编程技术问答社区
从命令行运行nvcc时出现的问题
我需要使用命令行中的NVCC编译CUDA .CU文件.该文件为" vectoradd_kernel.cu",并包含以下代码: extern "C" __global__ void VecAdd_kernel(const float* A, const float* B, float* C, int N) { int i = blockDim.x * blockIdx.x + threadIdx.x; if (i
14 2023-11-20
编程技术问答社区