问题标签 [nvcc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - CUDA 和 C 的 Makefile
我正在开发一个使用 .c 和 .cu 文件的项目。原始包完全是用 C 语言编写的,并且有自己的 Makefile(它工作得很好)。我将 .cu 文件添加到项目中,现在我想修改 Makefile 以便将所有内容编译在一起。
这是我的尝试:
项目结构如下:
- 项目
- 包括
- 源目录
- 它
其他文件夹
其中include包含所有 .h 文件,sourcedir包含 .c 和 .cu 文件(只有一个 .cu 文件);它有Makefile。
我的 Makefile 的问题是,当我在it文件夹中进行make时,我收到一堆错误,告诉我具有 main() 函数的文件(sourcedir文件夹中的it.c)没有链接到任何来自其他库的函数。我的 .cu 文件也是如此。
你能给我一些关于我的 Makefile 可能有什么问题的提示吗?我将以下 Stackoverflow 帖子用作参考: makefile for C++/CUDA project
谢谢你的帮助,
弗拉德
编辑:
这是原始的 Makefile,它适用于 .c 文件。您能帮我添加一些内容以便将 .cu 文件与其他文件一起编译吗?再次感谢。
后期编辑:
我对 Makefile 做了一些更改,对其进行了一些清理,现在我只收到了一些错误,这些错误与 .cu 未链接到 .c 文件这一事实有关,反之亦然。
所以现在我收到这些错误:
感谢您耐心阅读我的帖子。
gcc - GPU计算SDK中的cutil链接
我一直在尝试链接到 NVIDIA 发布的 GPU Computing SDK 的 cutil.h 中的函数。
目前,我只是想编译这段简单的代码:
使用以下命令:
只得到以下错误:
如果我要添加标志,ld 也找不到 -lcutil。我应该链接到一个静态库,但由于某种原因,这永远不会奏效。这是我尝试过的:
我已经更改了我的 .bashrc 文件,以便 LD_LIBRARY_PATH 包含静态库的路径
##########< CULA >导出 CULA_ROOT=/usr/local/cula
出口 CULA_INC_PATH=$CULA_ROOT/包括
导出 CULA_BIN_PATH_32=$CULA_ROOT/bin
导出 CULA_BIN_PATH_64=$CULA_ROOT/bin64
导出 CULA_LIB_PATH_32=$CULA_ROOT/lib
导出 CULA_LIB_PATH_64=$CULA_ROOT/lib64
##########< CUDA >导出 PATH=$PATH:/usr/local/cuda/bin
导出 LD_LIBRARY_PATH=:/usr/local/cuda/lib64
导出 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CULA_LIB_PATH_64
导出 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/libnvvp/
导出 CUDA_SDK_ROOT_DIR=/home/sj755/NVIDIA_GPU_Computing_SDK/C
导出 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CUDA_SDK_ROOT_DIR/lib
我也试过重命名
libcutil_x86_64.a
为libcutil.a
,仍然没有。尝试提取存档,创建共享对象文件并链接到它:
ar -x libcutil_x86_64.a
gcc -I /usr/include/GL/ -L /usr/include/GL/ -lglut -lGL -lGLU -lX11 -lXmu -lXi -lm -lpthread -shared *.cpp.o -o libcutil.so
nvcc -lcutil -I /home/sj755/NVIDIA_GPU_Computing_SDK/C/common/inc/ -L /home/sj755/NVIDIA_GPU_Computing_SDK/C/lib/libcutil.so cutiltest.cu
只为得到以下/usr/bin/ld: cannot find -lcutil
我在这里忘记了哪一步?
boost - 编译 Boost.python 和 cuda 代码
我想编译parallel.cu
并python_wrapper.cpp
在哪里python_wrapper.cpp
使用Boost.python
将方法公开parallel.cu
给python。
我对cuda
和都是新手Boost.python
。
从他们的手册和谷歌中,我找不到如何让他们说话。
一些网站说,我应该做类似的事情
但我知道编译代码的唯一方法Boost.python
是使用bjam
.
已经尝试集成nvcc
到bjam
中,但我无法让它们工作。
并行.cuh
python_wrapper.cpp
如何编译这些文件?
我听说过PyCuda
,但我需要在我的文件中包含Boost
和thrust
库。
另外,如果可能的话,我想坚持一个标准的命令行驱动的编译过程。.cu
compiler-construction - 为 CUDA C/C++ 编译器添加永久包含和库路径
我目前正在做一些工作,包括使用CULA库和 GPU Computing SDK 的库。
编译时,我必须在使用 NVCC 编译时使用以下标志:
即使这样工作得很好,我也厌倦了每次都必须指定包含和库路径。有什么方法可以运行编译器而无需提供以下参数:
visual-studio-2010 - QtCreator 的 qmake 与 nvcc 和 CUDA,Windows 7
我见过许多将 QtCreator 与 CUDA 结合起来的旧尝试,但它们都不再起作用了。
所以我开始这个话题,以便为每个人提供一个新的参考。
首先,我尝试使用以下命令编译书中提到的代码:
但我得到了错误:类型名称“size_t”的无效重新声明。
我唯一能做的就是使用 Visual Studio 2010 编译《CUDA 应用程序设计与开发》一书中的示例代码;但是,VS2010 不是我想要使用的环境。所以我去日志文件并获取它使用的执行命令,它是以下内容:
此命令创建一个目标文件。我可以成功地为 seqCuda.cu 中的示例代码执行它,但我不知道如何从目标文件转到可执行文件。我想在 Qt 中使用 qmake 文件来做到这一点。
谁能告诉我这个编译命令的重要部分是什么,以及如何在 qmake 文件中以正确的方式合并它?
现在我的问题是,我试图反汇编这个命令并用 qmake 重写它,是的,我在黑暗中刺伤,并且无法获得任何令人满意的结果。以下是我在 qmake 中的“尝试”。如果您可以将以下 qmake 中的任何命令替换为环境变量,我将不胜感激,尤其是 VC2010 bin 目录。
g++ - /usr/bin/ld: 矮人错误
我正在尝试使用 nvcc 编译一个复杂的应用程序,并且需要将编译器从 mpic++ 更改为 g++,因为我遇到了这个错误:
什么是矮人?这个错误是什么意思?
有什么技巧可以解决吗?我在这里缺少什么有用的信息?
cuda - CUDA nvcc慢主机代码
我在使用 nvcc 编译器时遇到问题。我发现使用 nvcc 4.2 编译的主机代码的运行速度比使用 g++ 4.4.6 编译的相同代码慢 5 倍。我正在使用 NVIDIA SDK Makefile 模板来编译发布配置中的代码。在这两种情况下,都使用了 -O2 优化。这怎么可能,因为 nvcc 应该将主机代码传递给主机编译器。有任何想法吗?
这是我的生成文件:
linker - 构建包含 CUDA 推力代码的库
使用 CUDA 5,现在可以构建包含 cuda 代码并与 nvcc 链接的库。
在这种情况下链接时,仅由头文件组成的推力会导致多个定义错误。
无论如何,在没有经过并将推力转换为头文件和代码文件并将其构建为库的情况下,是否存在这个问题?
compiler-construction - 使用 sm_21 编译时出现 CUDA 4.2 nvcc (cicc) 错误
我有一个奇怪的问题!我有一张 GTX 560 Ti 卡(计算能力 2.1),用于开发我的 CUDA 应用程序。
现在经过几百次编译,我得到了一个错误。也就是说,编译阶段停止,而 cicc 进程并未终止。但是当我更改每个块号的线程数时,它有时可能会编译。(对于 64 个线程,它会在 1024 个线程中崩溃)。
有没有人有这么奇怪的错误。另一件事是,使用 sm_13 每次都会编译,但使用 -arch=sm_21 则不会。但正如我所说,它使用这个选项运行了数百次,但现在它不再工作了。有什么建议么?
cuda - -use-fast-math 选项是否将 SP 乘法转换为内在函数?
我快速浏览了 CUDA 编程指南 wrt -use-fast-math optimizations,虽然附录 C 提到了要转换为内在函数的除法,但没有提到乘法。我问这个问题的原因是,我的内核有很多乘法。我知道 NVCC 会尝试融合乘法和加法(当使用常规的“*”和“+”运算符时,并且内在函数永远不会合并到 FMAD 操作中)。但是,如果我的代码是乘法繁重的,那么如果使用舍入 SP 内在函数会有好处__fmul_rn
吗?
所以有两个问题:
-use-fast-math 选项是否将使用“*”运算符的乘法转换为像 __fmul_rn 这样的 SP 内在函数?
手动编码乘法以显式使用 __fmul_rn 是否会带来性能优势?一个例子或一些数字可以帮助我理解。