小编hor*_*ann的帖子

使用cudaMemcpy时出现奇怪的错误:cudaErrorLaunchFailure

我有一个CUDA代码,其工作方式如下:

cpyDataGPU --> CPU     

while(nsteps){

    cudaKernel1<<<,>>>
    function1();    
    cudaKernel2<<<,>>>

}

cpyDataGPU --> CPU
Run Code Online (Sandbox Code Playgroud)

而function1就像这样:

function1{

    cudaKernel3<<<,>>>
    cudaKernel4<<<,>>>

    cpyNewNeedDataCPU --> GPU   // Error line
    cudaKernel5<<<,>>>
}
Run Code Online (Sandbox Code Playgroud)

根据cudaMemcpy文档,此函数可以产生4种不同的错误代码:“ cudaSuccess”,“ cudaErrorInvalidValue”,“ cudaErrorInvalidDevicePointer”和“ cudaErrorInvalidMemcpyDirection”。

但是,我收到以下错误:“ cudaErrorLaunchFailure”:“执行内核时设备上发生了异常。常见原因包括取消引用无效的设备指针和访问共享内存。在调用cudaThreadExit()之前,无法使用设备所有现有的设备内存分配都是无效的,如果程序要继续使用CUDA,则必须对其进行重新构造。”

有人对我为什么会收到此错误有任何想法吗?我究竟做错了什么?

在先前的内核调用¿之后复制数据CPU-> GPU是否有意义?问题是,我必须在每个步骤将数据复制到这里,因为它可能在每个“ while”步骤中都会更改。

提前解冻很多!!

cuda gpu gpu-programming

5
推荐指数
1
解决办法
8992
查看次数

CGAL:帮助从Delaunay Triangulation获取三角形坐标

我是CGAL的新手,我相信我的问题非常简单.

我正在尝试使用CGAL做一些Delaunay三角测量.我有一个在球体上有N个3D点的网格,我想使用这些点作为三角形的顶点对球体进行三角测量.我只需要获得结果三角形的顶点列表:

id_triangle1 vertex_1 vertex_2 vertex_3 id_triangle2 vertex_1 vertex_2 vertex_3 .......

我这样做是为了执行三角测量:

    std::vector<Point> P; 
    for(i=0;i<NSPOINTS;i++) 
            P.push_back(Point(GRID[i].x,GRID[i].y,GRID[i].z)); 

    // building Delaunay triangulation. 
    Delaunay dt(P.begin(), P.end()); 
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是我不知道如何得到最终的三角测量.我想出了如何获得face_iterator,但我不知道该怎么做:

    Delaunay::Finite_faces_iterator it; 
    for (it = dt.finite_faces_begin(); it != dt.finite_faces_end(); it++){ 
            std::cout << dt.triangle(it) << std::endl; 
    } 
Run Code Online (Sandbox Code Playgroud)

我不确定迭代三角形是否正确,如果它是......一个三角形=面部??¿,我的意思是,每个迭代器位置只有一个三角形?如何正确获取每个三角形的x,y和z?¿

delaunay triangulation cgal

4
推荐指数
1
解决办法
3362
查看次数

C++和Fortran:从C++访问Fortran公共块中的数组时出错

我正在尝试从C++访问Fortran公共块结构中的数组.
我有一个混合的示例代码与C++和Fortran.

Fortran语言:

integer a(5),b  
common  /sample/ a,b  
a(1) = 1  
a(2) = 5  
a(3) = 10  
a(4) = 15  
a(5) = 20  
b = 25  
Run Code Online (Sandbox Code Playgroud)

然后在C++中:

extern "C"{  
    extern struct{  
        int *a,b;  
}sample_;  
Run Code Online (Sandbox Code Playgroud)

从C++,如果我尝试打印值sample_.b:

printf("sample b:%d\n",sample_.b);
Run Code Online (Sandbox Code Playgroud)

我得到a(2)的值: sample b:5

如果我尝试打印任何其他数组 - 一个值,我只是得到一个segementation故障...

printf("sample_.a[1]=%d\n",(int)sample_.a[1]);  
printf("sample_.a[0]=%d\n",(int)sample_.a[0]);
Run Code Online (Sandbox Code Playgroud)

我做错了什么?¿任何想法¿?
我想,也许我必须将数组"a"的长度也传递给C++,但如果是这样,我也不知道该怎么做.

c++ integration fortran fortran-common-block

2
推荐指数
1
解决办法
1757
查看次数