【发布时间】:2014-03-14 01:00:09
【问题描述】:
我收到的错误是:
‘blockIdx’未在此范围内声明 “
“>”标记之前的预期主表达式
“
“>”标记之前的预期主表达式
(“”指的是内核调用>>)
另外,在我收到的主要功能中:
错误:无法将参数“1”转换为“void”的“float*”到“float” kernel_wrapper(float*, float*, int, int)
cu 文件:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <math.h>
#include <curand_kernel.h>
#include <cuda_runtime.h>
#include <cuda.h>
.....
__global__ void kernel(float* A,float *B, curandState* globalState, int Asize,int Bsize)
{
...
void kernel_wrapper(float* A_host,float* B_host, int Asize ,int Bsize)
{
...
//allocate host memory
A_host=(float*)malloc(Asize*sizeof(float));
B_host=(float*)malloc(Bsize*sizeof(float));
//allocate device memory
float* A_dev,*B_dev;
cudaMalloc((void**) &A_dev,Asize* sizeof(float));
cudaMalloc((void**) &B_dev,Bsize* sizeof(float));
....
kernel<<<1,1>>>(A_host,B_host, devStates,Asize,Bsize);
...
c 文件:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/time.h>
#include <string.h>
#include <assert.h>
#include <stdarg.h>
#include <cuda.h>
#include <cuda_runtime.h>
#include "solve.cu"
extern void kernel_wrapper(float* A,float* B, int Asize ,int Bsize);
...
int main()
{...
A = (float*)malloc(N*N*sizeof(float));
B = (float*)malloc(N*HS*sizeof(float));
...
kernel_wrapper(A,B,Asize ,Bsize);
...
我编译为:
g++ -o mycode myfile.c -I/usr/local/cuda-5.5/include -L/usr/local/cuda-5.5/lib64 -lcurand -lcutil -lcudpp -lcuda -lstdc+
【问题讨论】:
-
A和B是如何声明的?而blockIdx的代码呢?
-
还有:g++是用来编译c++源的,这个是C还是C++?
-
@David Kernin:我声明为 float* A = NULL;和 B 一样,然后我像上面一样分配(A = (float*)malloc(NNsizeof(float));)。文件是 c,但我使用 g++ 来处理 cu包含 iostream 等的文件。
-
如果那是 C,它应该用 gcc 而不是 g++ 编译,并且你不能链接到 stdc++。还编译 .cu 文件,如下 Robert 所述。如果它只包含 cpp 代码,那么 g++ 也可以工作。
-
@David Kernin:好的,我将文件重命名为 cpp,当我执行 g++ -c -I/usr/local/cuda-5.5/include myfile.cpp 时,它显示所有错误为我在帖子里