cuda“;需要一个类型说明符";
我在第10行cuda“;需要一个类型说明符";,cuda,gpgpu,nvidia,Cuda,Gpgpu,Nvidia,我在第10行\uuuu global\uuuu.void kernel中遇到错误。我一定是做错了什么? 这是我的代码: #include <iostream> #include <stdio.h> #include <stdlib.h> #include <math.h> #include <conio.h> #include <time.h> #define F 20 __global__ void kernel(do
\uuuu global\uuuu.void kernel
中遇到错误。我一定是做错了什么?
这是我的代码:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
#include <time.h>
#define F 20
__global__ void kernel(double* dev_fitness,double* dev_prob, F)
{
int i = blockIdx.x;
double maxfit;
maxfit=dev_fitness[0];
if(i<F)
{
if(dev_fitness[i]>maxfit)
maxfit=dev_fitness[i];
}
if(i<F)
{
dev_prob[i]=(0.9*(dev_fitness[i]/maxfit))+0.1;
}
}
double prob[F];
double fitness[F];
int main()
{
double* dev_fitness;
size_t fitnessSize= F*sizeof(double);
cudaMalloc(&dev_fitness,fitnessSize);
cudaMemcpy(dev_fitness,fitness,fitnessSize,cudaMemcpyHostToDevice);
//--------------
double* dev_prob;
size_t probSize=F*sizeof(double);
cudaMalloc(&dev_prob,probSize);
cudaMemcpy(dev_prob,prob,probSize,cudaMemcpyHostToDevice);
kernel <<<F,1>>> (dev_fitness,dev_prob,F);
cudaMemcpy (fitness,dev_fitness,fitnessSize,cudaMemcpyDeviceToHost);
cudaMemcpy (prob,dev_prob,probSize,cudaMemcpyDeviceToHost);
cudaFree (dev_fitness);
cudaFree (dev_prob);
}
#包括
#包括
#包括
#包括
#包括
#包括
#定义F20
__全局无效内核(双*dev\u适应度,双*dev\u prob,F)
{
int i=块idx.x;
双最大拟合;
maxfit=dev_fitness[0];
if(imaxfit)
maxfit=dev_fitness[i];
}
如果(i)
您正试图将文字(宏F
扩展为20
)作为函数参数传递,即:
这是不正确的。请记住,宏是在编译代码之前发生的基本文本查找和替换
事实上,您不应在参数列表中放置任何表达式
幸运的是,宏在整个文件中已经可以全局访问,因此根本不需要将其传递到函数中
也就是说,简单地写下:
__global__ void kernel(double* dev_fitness,double* dev_prob)
使用#define
时,宏会按字面展开:
#define F 20
__global__ void kernel(double* dev_fitness,double* dev_prob, F) {
进入:
__global__ void kernel(double* dev_fitness,double* dev_prob, 20) {
但是,您当然不能在函数声明中使用20
!
所以
根本不要使用该参数:
\uuuu全局\uuuuu无效内核(双*dev\u适应度,双*dev\u prob)
代码将起作用,因为宏(因此,F
)是全局可见的(它们在编译之前经过预处理)
将该参数更改为适当的变量:
\uuuu全局\uuuuu无效内核(双*dev\u适应度,双*dev\u prob,双Fparam)
以及使用Fparam的函数内部的代码
然后,您可以调用kernel
提供F
作为最后一个参数
#define F 20
__global__ void kernel(double* dev_fitness,double* dev_prob, F) {
__global__ void kernel(double* dev_fitness,double* dev_prob, 20) {