kernel函数没有执行,不知道问题出在哪
小弟是初学者,刚刚上手写了一个程序,结果能编译通过但是执行的时候kernel函数根本没有执行,我的系统环境是fedora 19, cuda toolbox 6.0, IDE 是nsight eclipse,可以运行nvidia的范例程序。 后来我就写了一段简单代码看看是不是kernel调用的时候出了问题,我的代码如下:
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<math.h>
#include<cuda.h>
#include<cuda_runtime.h>
#include"cu_complex_operation.cuh"
#include"chol_common.h"
__global__ void chol_kernel(
double *d_U,
const int n,
const int k )
{
const uint td=blockDim.x*blockIdx.x+threadIdx.x;
*d_U=11111;
}
void chol(
int n,
double *pR)
{
cudaError_t error;
double *d_x
double *y=(double*)malloc(sizeof(double));
double *m=(double*)malloc(sizeof(double));
error=cudaMalloc((void **) &d_x, sizeof(double));
if(error !=cudaSuccess){
printf("cudaMalloc d_U returned error code %d, line(%d)\n", error, __LINE__);
}
error=cudaMemcpy(d_x, y, sizeof(double), cudaMemcpyHostToDevice );
if(error!=cudaSuccess){
printf("cudaMemcpy U to d_U returned error code %d, line(%d)\n", error, __LINE__);
}
chol_kernel<<<1, 1>>>(d_x, n, n);
error=cudaMemcpy(m, d_x, sizeof(double), cudaMemcpyDeviceToHost );
*pR=*m;
free(y);
free(m);
cudaFree(d_x);
}
原本这个程序的kernel实现的是其他功能,现在为了简化问题我就用一个赋值的函数代替了。y是输入,m是输出,照理说m最后输出的应该是11111,但是实际上m输出之后还是0,kernel函数没有实现功能,小弟初次写cuda程序不知道是kernel写的有问题还是host端调用的时候出了问题,看了一些范例程序,也没看出来我这里的问题出在哪,困扰了好几天了。
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<math.h>
#include<cuda.h>
#include<cuda_runtime.h>
#include"cu_complex_operation.cuh"
#include"chol_common.h"
__global__ void chol_kernel(
double *d_U,
const int n,
const int k )
{
const uint td=blockDim.x*blockIdx.x+threadIdx.x;
*d_U=11111;
}
void chol(
int n,
double *pR)
{
cudaError_t error;
double *d_x
double *y=(double*)malloc(sizeof(double));
double *m=(double*)malloc(sizeof(double));
error=cudaMalloc((void **) &d_x, sizeof(double));
if(error !=cudaSuccess){
printf("cudaMalloc d_U returned error code %d, line(%d)\n", error, __LINE__);
}
error=cudaMemcpy(d_x, y, sizeof(double), cudaMemcpyHostToDevice );
if(error!=cudaSuccess){
printf("cudaMemcpy U to d_U returned error code %d, line(%d)\n", error, __LINE__);
}
chol_kernel<<<1, 1>>>(d_x, n, n);
error=cudaMemcpy(m, d_x, sizeof(double), cudaMemcpyDeviceToHost );
*pR=*m;
free(y);
free(m);
cudaFree(d_x);
}
原本这个程序的kernel实现的是其他功能,现在为了简化问题我就用一个赋值的函数代替了。y是输入,m是输出,照理说m最后输出的应该是11111,但是实际上m输出之后还是0,kernel函数没有实现功能,小弟初次写cuda程序不知道是kernel写的有问题还是host端调用的时候出了问题,看了一些范例程序,也没看出来我这里的问题出在哪,困扰了好几天了。
...全文
相关推荐
OOPS,kernel panic问题解决方法
详解OOPS,kernel panic的定位方法
动态获取kernel32.dll函数
动态获取kernel32.dll实现无导入表的hello world
KERNEL32 API函数
一个非常全的KERNEL32[1].DLL API函数库文档。
浅谈在linux kernel中打印函数调用的堆栈的方法
下面小编就为大家带来一篇浅谈在linux kernel中打印函数调用的堆栈的方法。小编觉得挺不错的。现在就分享给大家。也给大家做个参考。一起跟随小编过来看看吧
kernel32.dll文件
kernel3.dll文件,用于替换被损坏的dll文件,内有各种版本,32位和64位皆可用


