CUDA kernel函数内for循环引发unspecific launch failure
    我想测试一下CUDA kernel函数中的for循环的循环次数可不可以无限大。于是我写了一个简单的代码如下:
            于是当size像下面的一千万那么大的时候,程序不正确了。显示调用核函数失败 unspecific launch failure
            我用nsight带的工具测试了一下,并不是寄存器超了或者内存分配失败或溢出,只是随着size的增加,每个warp的指令数IPW(Instructions Per Warp)会增加。是不是错误与这个有关?但是下面的程序代码看起来没有什么错误,如果换成C++的话循环多少次都可以,是不是CUDA对kernel有什么限制?我想知道它错误的原因。
            系统:Win10 pro 64bit
            IDE:Visual Studio 2015 community
            CUDA 8.0
            GPU: GTX860M 4GB

#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include "stdlib.h"
#include
using namespace std;

global void Kernel(double *M_gpu, int size)
{
for (int i = 0; i < size; i++)
{
M_gpu[i] = i / 2 + 6;
}
}

int main()
{
cudaError_t cudaStatus;
//分配CPU空间
int size = 10000000;
double M = (double *)malloc(sizeof(double)*size);
//分配GPU空间
double *M_gpu;
cudaStatus = cudaMalloc((void
*)&M_gpu, sizeof(double)*size);
if (cudaStatus != cudaSuccess)
{
cout << "分配CPU空间失败!" << cudaGetErrorString(cudaStatus) << endl; getchar(); exit(0);
}
//调用核函数
Kernel << > > (M_gpu, size);
cudaDeviceSynchronize();
cudaStatus = cudaGetLastError();
if (cudaStatus != cudaSuccess)
{
cout << "调用核函数失败!" << cudaGetErrorString(cudaStatus) << endl; getchar(); exit(0);
}
//将数据从GPU拷贝回CPU
cudaStatus = cudaMemcpy(M, M_gpu, sizeof(double)*size, cudaMemcpyDeviceToHost);
if (cudaStatus != cudaSuccess)
{
cout << "拷贝数据失败!" << cudaGetErrorString(cudaStatus) << endl; getchar(); exit(0);
}
//END
cout << "Success!" << endl;
getchar();
}

0

3个回答

用代码测试了下,跟release没有关系,上网搜索了下,好像是kernel运行超时导致kernel直接退出了。
你用nsight打开option,修改下General->WDDM TDR Display 设置大一点试试。默认是2s应该。

-1
1

应该是没有问题的,只要你的block和thread分配够用就行。试着切换成release build试试,debug有可能是分配debuginfo使用的localmem超了。

1
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
常见的cuda出错及解决方法
记录一下最近在CUDA编程上遇到的错误,觉得有必要写一写,这里也不是一点技术含量也没有的...    CUDA上获取错误信息是通过函数cudaGetErrorString()实现的,具体怎么用自己去查手册吧...下面说的是返回错误的信息以及应该如何处理。我在这方面才刚开始,处理方法都是基于实际程序,未必是通用的。    1. time out    这是因为在windows下,显卡线程
[CUDA]关于Drive API中Kernel函数参数的一个坑
在CUDA的Drive API中launch kernel 函数原型如下:CUresult CUDAAPI cuLaunchKernel(CUfunction f, unsigned int gridDimX, unsigned int gridDimY, ...
【CUDA】CUDA编程:内核kernel
内核使用__global__声明符定义,使用&amp;lt;&amp;lt;&amp;lt;...&amp;gt;&amp;gt;&amp;gt;执行配置语法指定执行某一指定内核的线程数。每一个执行内核的线程拥有一个独一无二的线程ID,通过内置的变量threadIdx访问。 下面的例子是将两个长度为N的向量A和B相加,并将结果存入向量C中。 __global__ void VecAdd(float* A, float* B, float*...
CUDA在核函数内调用核函数(动态并行 Dynamic Parallelism)
CUDA 5.0之后支持global函数内调用global函数,也就是核函数内调用核函数,即核函数的嵌套调用,也可以实现递归调用(暂未测试)。需要保证GPU计算能力3.5及以上。然后进行如下设置:1.在项目属性中, 设定 CUDA C/C++==&amp;gt;common 的Generate Relocatable Device Code为True(-rdc=true).  2. 附加依赖项添加  cu...
CUDA 核函数调用核函数
这几天需要用到kernel函数包含kernel函数的例子,于是出现了几种问题:一、error : calling a global function(“childKernel”) from a global function(“kernel”) is only allowed on the compute_35 architecture or above 原因及解决方法: 这是因为默认计算能力被设定
CUDA学习,第一个kernel函数及代码讲解
CUDA学习,第一个kernel函数及代码讲解。本博文分为三个部分,第一部分给出一个代码示例,第二部分对代码进行讲解,第三部分根据这个例子介绍如何部署和发起一个kernel函数。
GPU(CUDA)学习日记(十)------ Kernal 内核函数 参数的传递
之前做了一个项目,内核函数什么的编写都没有问题,但是处理完的图片就是会产生条纹,这个问题困扰了我很长时间(真的很长时间。。。),我的内核函数传入的参数有很多,我做过实验,在host函数中给所有的参数都cudamalloc显卡空间(当初以为这样处理会更省显存一些,毕竟是开辟的线性存储器globle memory空间),但是实验结果是每一个参数都开辟cudamalloc的话,速度会降低,显卡的显存也没
CUDA:核函数未执行,错误检查
最近在使用CUDA时,遇到某次代码在执行时,直接跳过CUDA核函数。 又由于CUDA程序本身不是非常便于调试,所以在此时如果能知道程序为什么会报错,对进一步代码改正会有非常大的帮助。解决方案在核函数之后,添加一行代码。使用此函数,就会输出核函数非常正常执行的原因。 cudaError_t cudaStatus = cudaGetLastError(); if (cudaStatus !
使用cuda对for循环进行并行的小例子
#include &amp;amp;lt;iostream&amp;amp;gt; #include &amp;amp;lt;fstream&amp;amp;gt; using namespace std; #include &amp;amp;lt;cuda_runtime.h&amp;amp;gt; __global__ void GetImage(int* imagedata,const int nx, const int ny,int tempj){ int i = thr...
CUDA C中核函数(kernel)的编写及调用
CUDA C程序中最重要的部分就是核函数(kernel)的编写和调用。在此,我们以HelloWorld程序为例,分别讲述kernel函数的编写和调用。1、kernel函数的编写:__global__ void kernel_hello(void) { printf(&quot;Hello Wrld from GPU ! \n&quot;); }修饰符__global__表示该函数从CPU端调用,然后从GPU端...
详解第一个CUDA程序kernel.cu
CUDA是一个基于NVIDIA GPU的并行计算平台和编程模型,通过调用CUDA提供的API,可以开发高性能的并行程序。CUDA安装好之后,会自动配置好VS编译环境,按照UCDA模板新建一个工程“Hello CUDA”: 建好之后,发现该工程下已经存在一个项目 kernel.cu。这个是CUDA编程的入门示例,实现的功能是两个整型数组相加,代码如下: #include "cud
cuda kernel 核函数内分配存储空间
key point: kernel内部使用new[], delete[]分配存储空间 #include #include #include #include #include #include #include using namespace std; __global__ void dev_alloc() {    int num = 10;
CUDA进阶补充篇:详析各种CUDA函数计时函数
写在前面:之前写了一篇CUDA进阶第三篇:CUDA计时方式,列出了几种当时遇到的CUDA计时方式,只是个教程式的东西,没有太多技术含量,也不太全面。前几天在CUDA Professional(45157483)群里和大佬们讨论到CUDA官方event函数在计时cpu和cpu混合代码时有问题,虎躯一震,tm这么多年要是一直用的都是错的就瞎了。今天特花时间实验探究一番。有不足之处还望各位前辈指点。
CUDA调试
Stepper Failed: Trying to step invalid warp ================================================================================ Memory Checker detected 256 access violations. error = access vi
yolov3在crowndhuman数据集上的效果
测试环境:        cpu:Intel® Core™ i5-7500 CPU @ 3.40GHz  3.40GHz        RAM:16.0G        gpu:NVIDIA GeForce GTX 1080   8G 测试程序:基于darknet框架的纯c代码 训练集:crownhuman中15000张训练图片 图片大小:416*416 训练:将yolov对crow...
CUDA学习笔记(七)分支发散和展开循环
这节是关于Branch Divergence and Unrolling Loop。(分支发散和展开循环) Avoiding Branch Divergence(避免分支发散) 有时,控制流依赖于thread索引。同一个warp中,一个条件分支可能导致很差的性能。通过重新组织数据获取模式可以减少或避免warp divergence(该问题的解释请查看warp解析篇)。 The Paralle...
CUDA 核函数运行参数
CUDA核函数运行参数 调用定义的和函数时采用类似于下面的形式: kernel&amp;lt;&amp;lt;&amp;lt;1,1&amp;gt;&amp;gt;&amp;gt;(param1,param2,...) “&amp;lt;&amp;lt;&amp;lt; &amp;gt;&amp;gt;&amp;gt;”中参数的作用是告诉我们该如何启动核函数(比如如何设置线程)。 下面我们先直接介绍参数概念,然后详细说明其意义。 1. 核函数运行参数 当我们使用 gloabl 声...
CUDA之同步函数详解
之前在写程序的时候,经常用弄混同步函数,现做出总结。 _syncthreads():线程块内线程同步;保证线程会肿的所有线程都执行到同一位置; 当整个线程块走向同一分支时才可以使用_syncthreads(),否则造成错误;一个warp内的线程不需要同步;即当执行的线程数小于warpsize时,不需要同步函数,调用一次至少需要四个时钟周期,一般需要更多时钟周期,应尽量避免使用。
CUDA 错误类型
CUDA error types Enumerator:     cudaSuccess     The API call returned with no errors. In the case of query calls, this can also mean that the operation being queried is complete (see cudaEventQue
CUDA:在GPU上实现核函数的嵌套以及编译运行
#include "../common/common.h" #include #include /* * A simple example of nested kernel launches from the GPU. Each thread displays * its information when execution begins, and also diagnostics wh
CUDA学习笔记(3) NVRTC编译库
注意,NVRTC可以高速地编译代码,但是NVRTC并不支持C++,大型工程尽量避免使用。   我们在编译CUDA工程时,会发现比C++代码的编译慢上许多,这是由于NVCC(CUDA/C++编译器)造成的,它可以兼容地编译C++代码与CUDA-C代码,但是十分低效。   我们可以用CUDA学习笔记(1)中的代码实验一下,对“kernel.cu”右键→属性,可以看到编译器是“CUDA C/C+...
CUDA的配置与入门
开始接触CUDA,我安装好后完全不知道怎么运行demo,当然也没有见到详细的安装说明。下面说说我的经验。Platform:Win XP64IDE:VS20081 获取可访问以下网址:http://www.nvidia.com/object/cuda_get.html共需下载3个应用程序,分别是:1>     CUDA Driver2>     CUDA Toolkit3>     CUDA SDK
CUDA流-数据复制与核函数执行并行
http://blog.csdn.net/u010335328/article/details/52453499 1. CUDA流介绍 CUDA流在加速应用程序方面起着重要的作用。CUDA流表示一个GPU操作队列,并且该队列中的操作将以指定的顺序执行。我们可以在流中添加一些操作,如核函数启动,内存复制等。将这些操作添加到流的顺序也就是他们的执行顺序。你可以将每个流视为GPU上的一个任务,并且这
cuda内核函数单步调试
. Nsight2.0安装及单机调试(CUDA4.0)设置经验 http://cudazone.nvidia.cn/forum/forum.PHP?mod=viewthread&tid=3106&fromuid=26732002 2. http://blog.csdn.NET/shenlan282/article/details/8026526
CUDA下四重循环两种并行方式效率分析
1 问题描述 原代码:for(int m=0;m                      for(intn=0;n                             for(inti=0;i                                    for(intj=0;j                                    {
cuda 核函数中的参数说明<<<Dg, Db, Ns, S>>>
核函数中有4个参数,分别为grid维度,block维度,每个block在共享内存中动态分配的字节数量,以及cuda stream。 kernel>> 以下内容参考自cuda8.0 cuda c programming guide. http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html 在章节B.21. Execu
[cuda]在launch kernel的过程中不能调用cudaFree
测试发现cuda的launch kernel的过程中不能释放该gpu上的显存,cuda任务被释放的显存可能被kernel调用,所以禁止在laucn kernel过程中释放该gpu上的显存。 测试代码如下: #include &amp;amp;lt;stdio.h&amp;amp;gt; #include &amp;amp;lt;thread&amp;amp;gt; #include &amp;amp;lt;unistd.h&amp;amp;gt; #include &amp;amp;lt;iost
CUDA 核函数调试:cuda-gdb,cuda printf, cuda assert 【读书笔记】
 以下为长截图,CSDN 限定了图片长度,请点击查看原图      
CUDA:核函数中几种变量所属内存的类型
CUDA:核函数中几种变量所属内存的类型 局部变量:存在寄存器中 静态数组:存在本地内存(栈)中 动态变量:存在全局内存中 __shared__(静态):存在共享内存中...
CUDA进阶第三篇:CUDA计时方式
写CUDA,追求的就是加速比,想要得到准确的时间,计时函数就是必不可少 计时通常分为两种情况,(1)直接得到接口函数的时间,一般用于得到加速比;(2)获得接口函数内核函数、内存拷贝函数等所耗时间,一般用于优化代码时。 情况(1)方法有两种,CPU计时函数和GPU计时函数。 情况(2)有三种工具nsight,nvvp,nvprof 本博客会详细介绍情况(1)的两种方法;情况(2),nsight不会用,简单介绍一下nv
CUDA: 不要在一个.cpp文件中声明kernel(即以_global_和_device_的函数)
源于网上的一个材料。 头文件kernel.h extern __global__ void kernel();实现文件kernel.cu #include #include "kernel.h" __global__ void kernel() { printf("hello world!"); } 测试test.cu: #include "kernel.h" int main(v
kernel中数组元素赋初值
kernel 中可以按照下面的方法为整个数组赋一个初值 static int pxm_to_node_map[MAX_PXM_DOMAINS] = { [0 ... MAX_PXM_DOMAINS - 1] = NUMA_NO_NODE }; 这样数组pxm_to_node_map中所有的元素都被赋值NUMA_NO_NODE 位域的操作类似 static nodemask_t nodes_f
cuda优化-展开循环
最近看到了一些循环展开优化程序性能的知识,总结一下。循环展开,即 #pragma unroll N(N为要展开的数值)。一般来说,循环展开主要是为了减少CUDA运行的分支冲突,由于GPU中SM架构的特殊性以及WARP(Half-warp)执行的严格并行性,使得循环语句有着交的的分支冲突,通过循环展开,可以有效的降价分支冲突。如: 就是完全循环展开后的形式,但是也可以不完全循环展开,只展开循环
cuda中矩阵相加编程
#include #include #include    __global__ void VecAdd(float*A, float*B, float*C, int N)  {        int i = blockDim.x * blockIdx.x + threadIdx.x;                if ( i        C[i] = A[
详解CUDA核函数及运行时参数<<<>>>
详解CUDA核函数及运行时参数 核函数是GPU每个thread上运行的程序。必须通过__gloabl__函数类型限定符定义。形式如下:                 __global__ void kernel(param list){  } 核函数只能在主机端调用,调用时必须申明执行参数。调用形式如下:                 Kernel>
CUDA浅尝辄止-----调试怎么进入内核函数
                                                              “月色被打捞起,晕开了结局”                                                                                                                            ...
CUDA内核运行时间的测量函数
方法一: cudaEvent_t start1; cudaEventCreate(&start1); cudaEvent_t stop1; cudaEventCreate(&stop1); cudaEventRecord(start1, NULL); // 需要测时间的内核函数kernel; cudaEventRecord(stop1, NULL); cudaEventSynchronize(s
cuda7.0:主机多线程流实现kernel并行
cuda7.0:新功能实现主机多线程多流之间 实现kernel并行。主机的每个线程分配一个流 采用这个新特性可以实现多流之间的kernel并发执行
当你要写一个CUDA函数计算后返回多个参数时
一点建议如果你打算利用CUDA进行一番计算后获得几个不同的返回值时 也许你会这样:cudaMalloc; …….*n cudaMemcpy(…, cudaMemcpyHostToDevice); …….*nkernelCal<<<>>>();之后,调用函数并打算用数个cudaMymcpy(…, cudaMemcpyDeviceToHost); …….*k来返回K个计算结果时,请注意:当计算
使用CuDNN进行卷积运算
CuDNN NVIDIA ® cuDNN is a GPU-accelerated library of primitives for deep neural networks. It provides highly tuned implementations of routines arising frequently in DNN applications: Convolution fo...
文章热词 统计学稳健估计opencv函数 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 python深度学习cuda 内设计培训