我有一个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”步骤中都会更改。
提前解冻很多!!
我是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?¿
我正在尝试从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++,但如果是这样,我也不知道该怎么做.