Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2010 glext visual studio cuda_Visual Studio 2010_Parallel Processing_Cuda - Fatal编程技术网

Visual studio 2010 glext visual studio cuda

Visual studio 2010 glext visual studio cuda,visual-studio-2010,parallel-processing,cuda,Visual Studio 2010,Parallel Processing,Cuda,我目前在一个并行计算课上,用的是一本叫《Cuda示例》的书。在本书的第4章中,我使用了一些包含“GL/glut.h”和“GL/glext.h”的include的.h文件,我有在线安装glut的步骤,并遵循了这些步骤。我认为这是有效的,但我不确定。然后我试图找到glext的方向,但在这方面我似乎找不到那么多。我确实找到了一个.h文件,并试图通过将其包含在GL文件夹中来使用它。这似乎不起作用,因为我在编译类似以下内容时收到错误: 错误1错误:不允许从设备/\u全局函数(“julia”)调用主机函数(

我目前在一个并行计算课上,用的是一本叫《Cuda示例》的书。在本书的第4章中,我使用了一些包含“GL/glut.h”和“GL/glext.h”的include的.h文件,我有在线安装glut的步骤,并遵循了这些步骤。我认为这是有效的,但我不确定。然后我试图找到glext的方向,但在这方面我似乎找不到那么多。我确实找到了一个.h文件,并试图通过将其包含在GL文件夹中来使用它。这似乎不起作用,因为我在编译类似以下内容时收到错误:

错误1错误:不允许从设备/\u全局函数(“julia”)调用主机函数(“cuComplex::cuComplex”)。C:\Users\Laptop\Documents\visualstudio 2010\Projects\Lab1\Lab1.cu 29 1 Lab1

我想这是因为我需要更多的glext.h,比如.dll和类似于glut的东西,但我不确定。在此方面的任何帮助都将不胜感激。多谢各位

编辑:-这是我正在使用的代码,除了前两个include语句和.h文件外,我没有改变书中的代码:谢谢您的帮助

#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include "book.h"
#include "cpu_bitmap.h"

#define DIM 1000

struct cuComplex {
    float r;
    float i;
    cuComplex( float a, float b) : r(a), i(b) {}
    __device__ float magnitude2(void) {
        return r*r + i*i;
    }
    __device__ cuComplex operator* (const cuComplex& a) {
        return cuComplex(r*a.r - i*a.i, i*a.r + r*a.i);
    }
    __device__ cuComplex operator+ (const cuComplex& a) {
        return cuComplex(r+a.r, i+a.i);
    }
};

__device__ int julia( int x, int y) {
    const float scale = 1.5;
    float jx = scale * (float)(DIM/2 -x)/(DIM/2);
    float jy = scale * (float)(DIM/2 - y)/(DIM/2);

    cuComplex c(-0.8, .156);
    cuComplex a(jx, jy);

    int i = 0;
    for(i=0;i<200;i++) {
        a = a * a + c;
        if(a.magnitude2() > 1000)
            return 0;
    }

    return 1;
}

__global__ void kernel(unsigned char *ptr ) {
    //map from threadIdx/BlockIdx to pixel position
    int x = blockIdx.x;
    int y = blockIdx.y;
    int offset = x + y * gridDim.x;
    //now claculate the value at that position
    int juliaValue = julia(x,y);
    ptr[offset*4 + 0] = 255 * juliaValue;
    ptr[offset*4 + 1] = 0;
    ptr[offset*4 + 2] = 0;
    ptr[offset*4 + 3] = 255;
}

int main( void ) {
    CPUBitmap bitmap(DIM, DIM);
    unsigned char *dev_bitmap;
    HANDLE_ERROR(cudaMalloc((void**)&dev_bitmap, bitmap.image_size()));
    dim3    grid(DIM,DIM);
    kernel<<<grid,1>>>( dev_bitmap );
    HANDLE_ERROR( cudaMemcpy( bitmap.get_ptr(), dev_bitmap, bitmap.image_size(), cudaMemcpyDeviceToHost));
    bitmap.display_and_exit();
    HANDLE_ERROR( cudaFree( dev_bitmap ));
}
#包括“cuda_runtime.h”
#包括“设备启动参数.h”
#包括“book.h”
#包括“cpu_bitmap.h”
#定义尺寸1000
结构复合{
浮子r;
浮点数i;
cuComplex(float a,float b):r(a),i(b){}
__装置浮点数2(空隙){
返回r*r+i*i;
}
__设备_uuu复杂运算符*(常数cuComplex&a){
返回cuComplex(r*a.r-i*a.i,i*a.r+r*a.i);
}
__设备u uuu复合运算符+(常数cuComplex&a){
返回cuComplex(r+a.r,i+a.i);
}
};
__设备_uu_uu_uu_uu_u_uu_u_u_u_u_u_u_u_u_u_u_u_u_u;{
恒浮标度=1.5;
浮动jx=刻度*(浮动)(尺寸/2-x)/(尺寸/2);
浮动jy=刻度*(浮动)(尺寸/2-y)/(尺寸/2);
复合物c(-0.8,.156);
c复合物a(jx,jy);
int i=0;
对于(i=0;i 1000)
返回0;
}
返回1;
}
__全局无效内核(无符号字符*ptr){
//从threadIdx/BlockIdx映射到像素位置
int x=blockIdx.x;
int y=块idx.y;
int offset=x+y*gridDim.x;
//现在计算该位置的值
int juliaValue=julia(x,y);
ptr[offset*4+0]=255*juliaValue;
ptr[offset*4+1]=0;
ptr[offset*4+2]=0;
ptr[偏移量*4+3]=255;
}
内部主(空){
CPUBitmap位图(变暗,变暗);
无符号字符*dev_位图;
处理错误(cudamaloc((void**)和dev_位图,bitmap.image_size());
dim3网格(DIM,DIM);
内核(dev_位图);
HANDLE_ERROR(cudaMemcpy(bitmap.get_ptr(),dev_bitmap,bitmap.image_size(),cudaMemcpyDeviceToHost));
位图。显示_和_退出();
处理错误(cudaFree(dev_位图));
}

尝试添加以下内容

原始代码:

cuComplex( float a, float b) : r(a), i(b) {}
修改:

__host__ __device__ cuComplex( float a, float b ) : r(a), i(b)  {}
它为我解决了这个问题。我也不需要你添加的两个include文件,但是你可以根据你的构建过程来选择

CUDA程序由两种类型的代码组成:主机代码和设备代码。主机代码在主机CPU上运行,不能在GPU上运行;设备代码在GPU上运行,不能在CPU上运行。如果您不以任何方式装饰您的程序,那么它将是所有的主机代码。但是,一旦你开始添加由关键字如“全局”或“设备”描述的CUDA部分,那么你的程序将包含一些设备代码

您收到的编译器错误表明设备上运行的函数试图使用为CPU编译的代码。这是不允许的,编译器将不允许这样做。这个例子是不寻常的,因为在某个时间点(在写这本书的时候),它可能没有生成这个错误,而且cuComplex结构中的代码似乎用_uu设备_u关键字修饰。但是,在我修改的代码行的结构的最外层,没有关键字标识_uuuuu设备uuuu。当我添加_uuu设备_uu主机uuu关键字时,这会告诉编译器“对于此逻辑部分,创建设备编译版本和主机编译版本的代码”。这明确地告诉编译器您希望能够在设备中使用这段代码。加上这一点,我们已经正确地引导了编译器,它不再抱怨了


显然,在本例中,编译器生成设备代码所需的装饰级别发生了变化。据推测,对于较旧的编译器,结构中的_uuuuu设备uuuuu关键字足以让编译器知道它必须生成可由cuComplex类型调用的运算符的设备版本。

我认为错误与是否包含GL/glut等无关。如果您发布正在使用的代码,可能是最好的(您可以编辑问题以执行此操作)。您是否根据书中的内容对其进行了修改?谢谢,我按照您的建议将代码添加到注释中,我不认为我从书中对其进行了修改。谢谢,这确实允许它进行编译,但当我尝试运行它时,我的显示驱动程序停止工作。您对此有何建议?您是否愿意解释一下这一点更改?谢谢我已经更新了答案,并解释了代码更改。关于显示驱动程序问题,您是否能够运行任何其他CUDA代码?您是否只看到此代码存在此问题,或者它是否发生在任何CUDA代码中?我能够运行CUDA sdk示例,以及本书前面使用向量求和和和和ba的示例碳化硅补充。这是我尝试运行的唯一其他代码,我发现驱动程序停止响应。根据错误消息,如果这很重要的话,驱动程序是306.23。再次感谢您的帮助。代码应该显示一个分形图像。您看到了吗?在我的笔记本电脑上,代码运行大约需要1秒,然后f显示分形图像,但在其他GPU上可能较慢。如果