问题标签 [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.

0 投票
1 回答
2823 浏览

c++ - 如何将英特尔 C++ 编译器与 CUDA nvcc 一起使用?

我在 Microsoft Visual Studio 2008 上使用 NVIDIA CUDA 4.1。我还安装了 Intel Parallel Studio XE 2011。

默认情况下,NVIDIA 的 C 编译器nvcc.exe使用微软的 C 编译器cl.exe来编译其 C 代码。

如何更改设置以便nvcc使用 Intel's C Compiler icl.exe

0 投票
1 回答
1313 浏览

cuda - 在 cuda 代码中循环

我运行了一些更新浮点数组的 CUDA 代码。我有一个包装函数,如如何编译 CUDA 代码然后将其链接到 C++ 项目?这个问题。

在我的 CUDA 函数中,我创建了一个像这样的 for 循环......

现在的问题是,如果 X 等于 100 的值,一切正常,但如果 X 等于 1000000,我的向量没有得到更新(几乎就像 for 循环内的代码没有被执行)

现在在包装函数内部,如果我在 for 循环中调用 CUDA 函数,它仍然可以正常工作,(但由于某种原因,比我简单地在 CPU 上执行相同的过程要慢得多)像这样......

有谁知道为什么我可以在包装函数中循环一百万次,而不是简单地调用一次 CUDA“更新”函数,然后在该函数内部启动一百万的 for 循环?

0 投票
2 回答
16089 浏览

cuda - /usr/bin/ld: 找不到 -lcudart

我在尝试编译 CUDA 程序时收到以下消息:

/usr/bin/ld: 找不到 -lcudart

以前从来没有遇到过这种错误。我的 PATH 有问题吗?

这是编译命令:

gfortran -g -O2 -ffree-line-length-none -I../shared/ -o ../../bin/xspecfem3D ../../obj/spec/program_specfem3D.o ../../ obj/spec/specfem3D_par.o ../../obj/spec/PML_init.o ../../obj/spec/compute_boundary_kernel.o ../../obj/spec/compute_kernels.o ../. ./obj/spec/compute_forces_acoustic.o ../../obj/spec/compute_forces_acoustic_pot.o ../../obj/spec/compute_forces_acoustic_PML.o ../../obj/spec/compute_forces_elastic.o .. /../obj/spec/compute_forces_elastic_Dev.o ../../obj/spec/compute_forces_elastic_noDev.o ../../obj/spec/compute_forces_elastic_Dev_openmp.o ../../obj/spec/compute_add_sources_acoustic.o ../../obj/spec/compute_add_sources_elastic.o ../../obj/spec/compute_coupling_acoustic_el.o ../../obj/spec/compute_coupling_elastic_ac.o ../../obj/spec/compute_stacey_acoustic .o ../../obj/spec/compute_stacey_elastic.o ../../obj/spec/compute_gradient.o ../../obj/spec/compute_interpolated_dva.o ../../obj/spec/initialize_simulation.o ../../obj/spec/read_mesh_databases.o ../ ../obj/spec/setup_GLL_points.o ../../obj/spec/write_movie_output.o ../../obj/spec/create_color_image.o ../../obj/spec/write_seismograms.o . ./../obj/spec/write_output_ASCII.o ../../obj/spec/detect_mesh_surfaces.o ../../obj/spec/setup_movie_meshes.o ../../obj/spec/read_topography_bathymetry。 o ../../obj/spec/setup_sources_receivers.o ../../obj/spec/prepare_timerun.o ../../obj/spec/iterate_time.o ../../obj/spec/ finalize_simulation.o ../../obj/spec/save_adjoint_kernels.o ../../obj/spec/specfem3D.o ../../obj/spec/assemble_MPI_vector.o ../../obj/规格/make_gravity.o ../../obj/spec/noise_tomography.o ../../lib/libspecfem.a ../../obj/spec/check_fields_cuda.cuda.o ../../obj/spec/compute_add_sources_acoustic_cuda.cuda.o ../../obj/spec/compute_add_sources_elastic_cuda.cuda.o ../../obj/spec/compute_coupling_cuda.cuda.o ../../obj/spec/ compute_forces_acoustic_cuda.cuda.o ../../obj/spec/compute_forces_elastic_cuda.cuda.o ../../obj/spec/compute_kernels_cuda.cuda.o ../../obj/spec/compute_stacey_acoustic_cuda.cuda.o ../../obj/spec/compute_stacey_elastic_cuda.cuda.o ../../obj/spec/it_update_displacement_cuda.cuda.o ../../obj/spec/noise_tomography_cuda.cuda.o ../.. /obj/spec/prepare_mesh_constants_cuda.cuda.o ../../obj/spec/transfer_fields_cuda.cuda.o ../../obj/spec/write_seismograms_cuda.cuda.o ../../obj/spec/ save_and_compare_cpu_vs_gpu.cudacc.o ../../obj/spec/serial.o -lcuda -lcudart -lcublaso ../../obj/spec/compute_coupling_cuda.cuda.o ../../obj/spec/compute_forces_acoustic_cuda.cuda.o ../../obj/spec/compute_forces_elastic_cuda.cuda.o ../. ./obj/spec/compute_kernels_cuda.cuda.o ../../obj/spec/compute_stacey_acoustic_cuda.cuda.o ../../obj/spec/compute_stacey_elastic_cuda.cuda.o ../../obj/spec /it_update_displacement_cuda.cuda.o ../../obj/spec/noise_tomography_cuda.cuda.o ../../obj/spec/prepare_mesh_constants_cuda.cuda.o ../../obj/spec/transfer_fields_cuda.cuda。 o ../../obj/spec/write_seismograms_cuda.cuda.o ../../obj/spec/save_and_compare_cpu_vs_gpu.cudacc.o ../../obj/spec/serial.o -lcuda -lcudart -lcublaso ../../obj/spec/compute_coupling_cuda.cuda.o ../../obj/spec/compute_forces_acoustic_cuda.cuda.o ../../obj/spec/compute_forces_elastic_cuda.cuda.o ../. ./obj/spec/compute_kernels_cuda.cuda.o ../../obj/spec/compute_stacey_acoustic_cuda.cuda.o ../../obj/spec/compute_stacey_elastic_cuda.cuda.o ../../obj/spec /it_update_displacement_cuda.cuda.o ../../obj/spec/noise_tomography_cuda.cuda.o ../../obj/spec/prepare_mesh_constants_cuda.cuda.o ../../obj/spec/transfer_fields_cuda.cuda。 o ../../obj/spec/write_seismograms_cuda.cuda.o ../../obj/spec/save_and_compare_cpu_vs_gpu.cudacc.o ../../obj/spec/serial.o -lcuda -lcudart -lcublas/obj/spec/compute_stacey_acoustic_cuda.cuda.o ../../obj/spec/compute_stacey_elastic_cuda.cuda.o ../../obj/spec/it_update_displacement_cuda.cuda.o ../../obj/spec/ noise_tomography_cuda.cuda.o ../../obj/spec/prepare_mesh_constants_cuda.cuda.o ../../obj/spec/transfer_fields_cuda.cuda.o ../../obj/spec/write_seismograms_cuda.cuda.o ../../obj/spec/save_and_compare_cpu_vs_gpu.cudacc.o ../../obj/spec/serial.o -lcuda -lcudart -lcublas/obj/spec/compute_stacey_acoustic_cuda.cuda.o ../../obj/spec/compute_stacey_elastic_cuda.cuda.o ../../obj/spec/it_update_displacement_cuda.cuda.o ../../obj/spec/ noise_tomography_cuda.cuda.o ../../obj/spec/prepare_mesh_constants_cuda.cuda.o ../../obj/spec/transfer_fields_cuda.cuda.o ../../obj/spec/write_seismograms_cuda.cuda.o ../../obj/spec/save_and_compare_cpu_vs_gpu.cudacc.o ../../obj/spec/serial.o -lcuda -lcudart -lcublaso -lcuda -lcudart -lcublaso -lcuda -lcudart -lcublas

/usr/bin/ld: 找不到 -lcudart

collect2: ld 返回 1 个退出状态

编辑:

我已将链接命令更改为

gfortran -g -O2 -ffree-line-length-none -I../shared/ -L$CUDA_HOME/lib [其余如下]

我所有的 PATH 似乎都没问题,但我仍然遇到同样的错误。

编辑2:

错误是我试图编译的代码是 64 位的,所以我需要为路径提供一组不同的 .so's ,它们位于

/usr/local/cuda/lib64

现在编译运行良好,没有任何问题。

0 投票
1 回答
1460 浏览

c++ - Cuda (NVCC) 编译器的_ITERATOR_DEBUG_LEVEL?

有谁知道 NVCC 设置的 _ITERATOR_DEBUG_LEVEL 是什么?

我在 VS2010 的 Cmake 项目中工作,尝试链接项目时出现链接错误:

我可以将 c++ 文件的 _ITERATOR_DEBUG_LEVEL 设置为 0,但是它不再与其他一些库链接。所以我需要一种方法来使 nvcc 编译为 2 级。

在发布模式下使用所有内容都有效,因此级别似乎设置正确。用于编译的命令行如下所示:

0 投票
1 回答
1104 浏览

cuda - CUDA 的 nvcc 不能正确编译三元运算符/条件简写?

编辑
这是您编译的一个小程序,您可以自己查看这些错误......

运行时MyKernel2,将正确的输出写入数组:

MyKernel1运行时,使用相同的基于三元的 idx 分配,所有结果都为零:

PrintMethod1(使用三元边界)运行时,它会出现段错误,基本上陷入无限循环。注意,这是在主机端!!

运行时PrintMethod2,输出打印正常如上所示。

这是我的编译命令:

关于我唯一的线索是它抱怨两个内核都有一个不正确的参数,尽管它看起来是正确的并且得到了正确的结果MyKernel2

我认为上面的例子几乎是评论者可以根据下面的描述自己尝试的,但它可以节省你编写代码的时间和精力!

让我知道是否还有其他可以发布的内容,以帮助解决这个问题。

原始问题

大多数 C 编译器,由 lang. 标准支持三元运算符。

例如

然而,令人惊讶的是nvcc,当它们在内核中使用时,CUDA 似乎剥离了一些三元运算符并用零替换它们......

我通过申请cuPrintf检查有问题的代码块发现了这一点。例如,假设我有两个内核为它们的输出共享一个全局数组。第一个内核处理第一块元素。第二个内核获得一个偏移量,以指示在数组中跳转多远,以免覆盖第一个内核的元素。偶数和奇数的偏移量不同。

所以我可以写:

但是编写近乎等效的速记语法会更加紧凑和可读(在我看来)。

后一个代码虽然总是会产生一个零,因为 CUDA 的编译器会剪掉速记条件。

我意识到此功能代码被滥用并导致线程分歧,但在简单的情况下,如果编译器正确处理它,它似乎与标准条件没有任何不同。

这是编译器中的错误还是故意不支持?

有谁知道这个功能是否会出现在 CUDA 中?

我很惊讶地发现这是我寻址失败和段错误的根源......

编辑
这是一个标准的 C 功能,我误读并错误地说它是非标准的。

编辑 2
我曾为编译器说“窒息而死”。“死”绝对是不恰当的术语。相反,nvcc完成了编译,但显然已经剥离了基于三元运算符的赋值并将其替换为零。后来这会回来并咬我,因为没有将内容写入正确的位置,而这些位置又被用作双索引方案中的索引。这些索引是在 CPU 端的总结期间使用的,因此段错误发生在 CPU 端,但由编译器截图驱动。

我正在使用编译器 v4.1 并已-O2打开。看来优化器可能正在优化三元运算中使用的变量,这可能是此错误的根源。

容易出错的三元运算与我上面给出的示例几乎相同,但涉及到大量的加法运算。

我计划遵循以下评论者的建议并向 NVIDIA 提交错误报告,但我将这篇文章作为对其他人的警告。

编辑 3

这里有一个稍微净化过的完整声明,它总是产生零:

0 投票
1 回答
948 浏览

gcc - 使用 nvcc 时 fopen 无法打开可写文件

编辑:我认为问题是由于 nvcc 调用 C++ 编译器而不是 C 编译器,因为当我不将 malloc(3) 调用转换为 char* 时收到错误。我通过以下方式得出这个断言:从 void* 到 char** 的无效转换

编辑编辑:如果我使用 fileO = fopen(version, "w"); 效果很好 绕过 strcpy 和 strcat 调用。(哈哈,我说的是猫叫声……)

所以我有一个 CUDA 程序,我从同一程序的顺序版本(非 CUDA)中收集了一些文件 I/O。完全相同的代码适用于常规 gcc 编译,但不适用于 nvcc。我知道 nvcc 将 C/C++ 分流到本机 C++ 编译器,但由于某种原因,它只是没有打开可写文件。我已经打开和关闭了另一个文件流,用于在上面的代码中读取数据,但我在我的顺序版本中这样做,它在那里工作正常。

以下是相关代码:

我每次都收到“写入文件创建失败”。

有任何想法吗?

0 投票
3 回答
926 浏览

cuda - CUDA 带宽测试.cu

我想在 CUDA SDK 中编译和运行 bandwidthTest.cu。编译时遇到以下两个错误:

我怎么解决这个问题?

0 投票
1 回答
614 浏览

cuda - 在 CUDA SDK 中的 bandwidthTest.cu 中检测到堆栈粉碎

我想在 CUDA SDK 中运行 bandwidthTest。它因堆栈粉碎检测到的错误而终止。我怎么解决这个问题?????我使用 make 命令运行该程序并制作文件。我无法更改代码中的任何内容。

0 投票
2 回答
2607 浏览

cuda - deviceQuery 程序 - 多处理器数 = 0

我已经在 CUDA SDK 中执行了 deviceQuery 程序。文件中多处理器和内核的数量为 0,我确定这不是真的。可能是什么原因?

0 投票
1 回答
5368 浏览

cuda - nvcc --ptxas-options=-v(寄存器和内存使用)错误

我想用 nvcc 的 --ptxas-options=-v 标志编译我的 cuda 程序,以实现寄存器和内存使用,以便在 CUDA GPU 占用计算器中使用它们。

错误:标识符“atomicAdd”未定义

我在内核中使用了 atomicAdd。我怎么解决这个问题?