标签: nvcc

如何编译同时针对 Kepler 和 Maxwell 架构的 CUDA 应用程序?

我在台式机上进行开发,台式机有 Titan X 卡(麦克斯韦架构)。但是,生产代码运行在具有 K40 卡(开普勒架构)的服务器上。

我如何构建我的代码以便它在两个系统上都以最佳方式运行?

到目前为止,我已经使用过,compute_20,sm_20但我认为这个设置不是最佳的。

cuda nvcc

1
推荐指数
1
解决办法
1702
查看次数

如何从我编写的 __global__ 函数中获取 cuFunction?

假设我想在我编写的某些源代码上使用 CUDA 的较低级别驱动程序 API。我知道cuLaunchKernel,但我似乎无法在文档中找到如何cuFunction从函数传递给它的确切解释__global__

cuda nvcc

1
推荐指数
1
解决办法
1272
查看次数

编译 CUDA 时出错

我正在尝试编译一个 C 程序来尝试并行编程,当我尝试使用 nvcc 编译器(Nvidia)编译它时,它给了我这些错误:

inicis.cu(3): error: attribute "global" does not apply here

inicis.cu(3): error: incomplete type is not allowed

inicis.cu(3): error: identifier "a" is undefined

inicis.cu(3): error: expected a ")"

inicis.cu(4): error: expected a ";"

/usr/include/_locale.h(68): error: expected a declaration

inicis.cu(20): error: type name is not allowed

inicis.cu(21): error: type name is not allowed

inicis.cu(22): error: type name is not allowed

inicis.cu(41): error: identifier "dev_a" is undefined

inicis.cu(42): error: identifier "dev_b" is undefined

inicis.cu(43): error: identifier "dev_c" is undefined …
Run Code Online (Sandbox Code Playgroud)

c compiler-construction gcc cuda nvcc

0
推荐指数
1
解决办法
6772
查看次数

拥有GTX Titan,遇到动态并行问题

我试图从另一个内核调用CUDA内核,但得到以下错误:

Traceback (most recent call last):
  File "C:\temp\GPU Program Shell.py", line 22, in <module>
    """)
  File "C:\Python33\lib\site-packages\pycuda\compiler.py", line 262, in __init__
    arch, code, cache_dir, include_dirs)
  File "C:\Python33\lib\site-packages\pycuda\compiler.py", line 252, in compile
    return compile_plain(source, options, keep, nvcc, cache_dir)
  File "C:\Python33\lib\site-packages\pycuda\compiler.py", line 134, in compile_plain
    cmdline, stdout=stdout.decode("utf-8"), stderr=stderr.decode("utf-8"))
pycuda.driver.CompileError: nvcc compilation of         c:\users\karste~1\appdata\local\temp\tmpgq8t45\kernel.cu failed
[command: nvcc --cubin -arch sm_35 -m64 -Ic:\python33\lib\site-packages\pycuda\cuda kernel.cu]
[stderr:
kernel.cu(14): error: kernel launch from __device__ or __global__ functions requires separate         compilation mode
Run Code Online (Sandbox Code Playgroud)

我的理解是,这与动态并行性有关,而与此错误相关的另一个问题是由于用户没有适当的硬件.我有一个GTX Titan,所以它应该是兼容的.我错过了什么?

编辑

添加"options = [' …

cuda nvcc pycuda

0
推荐指数
1
解决办法
1861
查看次数

使用nvcc编译给出"没有这样的文件或目录"

我正在尝试在Ubuntu上使用nvcc编译CUDA代码.但是,当我这样做时,我得到了这个输出:

> make
/usr/local/cuda/bin/nvcc -m64 --ptxas-options="-v" -gencode arch=compute_11,code=sm_11 -gencode arch=compute_13,code=sm_13 -gencode arch=compute_20,code=sm_20 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -o main main.cu
gcc: No such file or directory
make: *** [main] Error 1
Run Code Online (Sandbox Code Playgroud)

即使我正在尝试编译只包含主函数的文件,它仍然无效:

> /usr/local/cuda/bin/nvcc main.cu 
gcc: No such file or directory
Run Code Online (Sandbox Code Playgroud)

nvcc似乎对--version有所反应,所以它肯定存在.我不知道为什么它会调用gcc.

c++ cuda nvcc

0
推荐指数
1
解决办法
2054
查看次数

无法解密nvlink错误

我正在尝试用它来构建一个项目nvcc.我收到了nvlink error:我见过的最令人烦恼的消息.

这是链接声明:

nvcc    -rdc=true -arch=sm_21 -O3 -Xcompiler -fPIC -I"/usr/local/ACE_wrappers" -I"/usr/local/ACE_wrappers/TAO" -I"/usr/local/DDS" -I"/usr/include/Qt" -I"/usr/include/QtCore" -I"/usr/include/QtGui" -I"../../include" -I"../../include/DDS" -I"../../include/CoordinateTransforms" -I"../../include/DDS/IDLBrokerTemplates" -I"../../def/IDL" -I"../../def/CMD" -I"../../def/XSD" -I"../../src/NetAcquire" -I"/usr/local/ACE_wrappers/TAO/orbsvcs" -I"/usr/local/include/lct.7.5.4" -L"." -L"/usr/local/ACE_wrappers/lib" -L"/usr/local/DDS/lib" -L"/usr/lib64" -L"/usr/local/lib64" -L"../../def/IDL/lib" -L"../../def/XSD" -L"/usr/local/lib" .obj/../../src/Component.o .obj/../../src/COM.o .obj/../../src/DDS/EntityManager.o .obj/../../src/IDLBrokerTemplates/CommandManager.o .obj/../../src/IDLBrokerTemplates/OptionManager.o .obj/../../include/ApplicationProcessStateReporter_moc.o .obj/../../src/Application.o .obj/../../src/CoordinateTransforms/Site.o .obj/../../src/CoordinateTransforms/Geodesy.o .obj/../../src/CoordinateTransforms/Earth.o .obj/../../src/CoordinateTransforms/StateVector.o .obj/../../src/CoordinateTransforms/KeplerianImpact.o .obj/../../src/CoordinateTransforms/GeodeticPosition.o .obj/../../src/IDLBrokerTemplates/MeasurandSubscription.o .obj/../../src/NetAcquire/NetAcquire.o .obj/DataLossFlightTimeImpl.o .obj/DataLossFlightTime.o .obj/DftTable.o .obj/OptionListener.o .obj/PrimaryListener.o .obj/MissionTimeListener.o .obj/DeadMan.o .obj/main.o .obj/../../src/XML/spline.o .obj/../../src/XML/FpTable.o -l"naps-x86_64" -l"naio-x86_64" -l"nalct-x86_64" -l"curl" -l"TAO_Messaging" -l"TAO_Valuetype" -l"TAO_PI_Server" -l"TAO_PI" -l"TAO_CodecFactory" -l"TAO_CosNaming" -l"armadillo" -l"boost_filesystem" -l"boost_system" -l"xerces-c" -l"jarssXSD" -l"OpenDDS_Tcp" -l"JARSSRTv10" -l"QtNetwork" …
Run Code Online (Sandbox Code Playgroud)

cuda nvcc nvlink

0
推荐指数
1
解决办法
1507
查看次数

使用nvcc编译器使用-G参数进行编译时,GPU性能不佳

我正在做一些测试,我意识到在编译时使用-G参数会给我一个糟糕的表现,而不是没有它.

我查看了Nvidia的文档:

--device-debug (-G)                         
    Generate debug information for device code. 
Run Code Online (Sandbox Code Playgroud)

但它并没有帮助我知道为什么给我这么糟糕的表现.它在哪里产生这个调试信息?何时?这可能是造成这种糟糕表现的原因?

debugging performance gpu nvcc thrust

0
推荐指数
1
解决办法
686
查看次数

CUDA常量内存值不正确

我一直在阅读与常量内存相关的许多SO问题,但我仍然不明白为什么我的程序无效.总的来说,它看起来如下

Common.cuh

__constant__ int numElements;

__global__
void kernelFunction();
Run Code Online (Sandbox Code Playgroud)

Common.cu

#include "Common.cuh"
#include <stdio.h>

__global__
kernelFunction()
{
   printf("NumElements = %d", numElements);
}
Run Code Online (Sandbox Code Playgroud)

Test.cu

#include "Common.cuh"

int main()
{
   int N = 100;
   cudaMemcpyToSymbol(numElements,&N,sizeof(int));
   kernelFunction<<<1,1>>>();
   cudaDeviceSynchronize();
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

它编译时没有错误,但是当打印numElementsI 的值时,只获得一个随机值.有人能指出我正确的方向来理解这一点吗?

cuda nvcc

0
推荐指数
1
解决办法
652
查看次数

nvcc的可执行文件大于gcc/g ++和OpenCL

这只是我注意到的事情,如果有理由的话,我很好奇.

使用Nvidia的nvcc编译器从Ubuntu 14.04上的cuda 7.0工具包编译一些标准的helloworld代码会产生以下大小的可执行文件:

liang@liang-EX58-UD3R:~/Documents/cuda-test$ nvcc cudahello.cu -o cudahello
liang@liang-EX58-UD3R:~/Documents/cuda-test$ ls -lah cudahello
-rwxrwxr-x 1 liang liang 508K Jun 25 12:08 cudahello
Run Code Online (Sandbox Code Playgroud)

该程序只是一个简单的hello world程序,没有内核调用:

//cudahello.cu
#include <iostream>

int main(){
    std::cout << "helloworld\n";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

另一方面,OpenCL更多是C++可执行文件的预期大小:

liang@liang-EX58-UD3R:~/Documents/opencl-test$ g++ -Wall -std=c++11 oclhello.cpp -lOpenCL -o oclhello
liang@liang-EX58-UD3R:~/Documents/opencl-test$ ls -lah oclhello
-rwxrwxr-x 1 liang liang 8.9K Jun 25 12:08 oclhello
Run Code Online (Sandbox Code Playgroud)

这也是一个简单的helloworld计划:

//oclhello.cpp
#include <CL/cl.h>
#include <iostream>

int main(){
    std::cout << "helloworld";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

CUDA可执行文件是否有相当大的原因?我发现即使在C/C++程序中使用OpenCL函数,可执行文件也不会增长到CUDA可执行文件的大小.

c++ cuda g++ opencl nvcc

0
推荐指数
1
解决办法
224
查看次数

CUDA nvcc建立图书馆链

我的目标是:library2.so正在使用library1.somycode.o正在使用(库应该链接)library2.so(也许library1.so).

源代码是(省略一行头文件):

library1.cu:

__device__ void func1_lib1(void){}
Run Code Online (Sandbox Code Playgroud)

library2.cu:

#include "library1.h"
__global__ void func1_lib2(void)
{
    func1_lib1();
}
extern "C"
void func2_lib2(void)
{
    func1_lib2<<<1,1>>>();
}
Run Code Online (Sandbox Code Playgroud)

mycode.c中:

#include "library2.h"
int main(void)
{
    func2_lib2();
}
Run Code Online (Sandbox Code Playgroud)

我正在根据 Makefile 构建共享库

broken:
    rm -f *.o *.so
    nvcc -arch=sm_30 --compiler-options '-fPIC' -dc library1.cu
    nvcc -arch=sm_30 --compiler-options '-fPIC' -dlink -o cuda-lib1.o library1.o
    gcc  -shared -Wl,-soname,library1.so -o library1.so library1.o uda-lib1.o
    nvcc -arch=sm_30 --compiler-options '-fPIC' -dc library2.cu
    nvcc -arch=sm_30 --compiler-options '-fPIC' …
Run Code Online (Sandbox Code Playgroud)

cuda dynamic-linking nvcc

0
推荐指数
1
解决办法
1629
查看次数

在c ++项目中包含一个静态cuda库

我有一个模板化的静态CUDA库,我希望将其包含在一个通用的c ++项目中.当我包含库的头文件时,编译器崩溃并说它无法解析特定于CUDA的符号.当然g ++编译器无法解释这些符号.我知道这个问题,但我不知道如何使用nsight IDE解决这个问题.

我正在使用nsight,cuda/nvcc库和c ++/g ++项目.

控制台输出:

make all 
Building file: ../src/MedPrak.cpp
Invoking: GCC C++ Compiler
g++ -I/home/voodoocode/Praktikum/MedPrak/PrivateRepo/MedPrakCuda/src -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/MedPrak.d" -MT"src/MedPrak.d" -o "src/MedPrak.o" "../src/MedPrak.cpp"

In file included from ../src/cudaWrapper.cu:8:0,
                 from ../src/MedPrak.cpp:3:

/home/voodoocode/Praktikum/MedPrak/PrivateRepo/MedPrakCuda/src/kernel.h:15:23: error: ‘__global__’ does not name a type
 template <typename T> __global__ void squareVector(T *input, T *output, int size) {
Run Code Online (Sandbox Code Playgroud)

编辑:忘了提到我有一个cuda项目,其文件与库中的文件相同.cuda项目编译正常并且运行正常,所以我认为我的代码中没有大的错误.

Edit2:避免"模板库"的想法.我有一个围绕实际模板类的包装器.所以没有"空"库.

c++ cuda g++ nvcc nsight

-1
推荐指数
1
解决办法
2515
查看次数

减去两个整数会导致设备代码中出现整数下溢

在我的cuda设备代码中,我正在检查,其中我减去线程的id和blockDim以查看天气与否,我可能想要使用的数据在范围内.但是当这个数字低于0时,它似乎又回到了最大值.

#include <iostream>
#include <cuda_runtime.h>
#include <device_launch_parameters.h>

float input[] =
{
1.5f, 2.5f, 3.5f,
4.5f, 5.5f, 6.5f,
7.5f, 8.5f, 9.5f,
};

__global__ void underflowCausingFunction(float* in, float* out)
{
    int id = (blockDim.x * blockIdx.x) + threadIdx.x;
    out[id] = id - blockDim.x;
}

int main()
{
    float* in;
    float* out;

    cudaMalloc(&in, sizeof(float) * 9);
    cudaMemcpy(in, input, sizeof(float) * 9, cudaMemcpyHostToDevice);
    cudaMalloc(&out, sizeof(float) * 9);

    underflowCausingFunction<<<3, 3>>>(in, out);

    float recivedOut[9];
    cudaMemcpy(recivedOut, out, sizeof(float) * 9, cudaMemcpyDeviceToHost);

    cudaDeviceSynchronize();

    std::cout << recivedOut[0] << " …
Run Code Online (Sandbox Code Playgroud)

c++ cuda integer-overflow underflow nvcc

-2
推荐指数
1
解决办法
62
查看次数

什么是g ++和nvcc的选项-O3?

我是nvcc的新手,我见过一个库,用g ++和nvcc选项-O3进行编译.

CC=g++
CFLAGS=--std=c++11 -O3
NVCC=nvcc
NVCCFLAGS=--std=c++11 -arch sm_20 -O3
Run Code Online (Sandbox Code Playgroud)

什么是-O3在做什么?

c++ cuda compilation nvcc

-7
推荐指数
1
解决办法
1207
查看次数