Bonjour,
Je suis débutante en CUDa.
Je veux projeter un nuage de points (un point est défini par x, y, et z) sur un plan défini par a, b et c.
e code est le suivant
Les erreurs trouvées sont les suivantes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 #include <cuda.h> #include <cuda_runtime.h> #include <float.h> #include <cstdio> #include <io.h> #include <vector> struct G3DPoint { double _x;/*!< The x coordinates*/ double _y;/*!< The y Coordinates*/ double _z;/*!< The z coordinates*/ }; __device__ void Project(G3DPoint pt, G3DPoint pt_proj,double a, double b, double c,double d, double x_p, double y_p, double z_p) { double dist=/*abs*/(a*pt._x+b*pt._y+c*pt._z+d)/(a*a+b*b+c*c); //Mettre les coordonnées du projeté orthogonal du p_point sur p_plan pt_proj._x=pt._x-dist*a; pt_proj._y=pt._y-dist*b; pt_proj._z=pt._z-dist*c; } __global__ void ProjectPoint(std::vector<G3DPoint > * gpu_vectPts,std::vector<G3DPoint > * gpu_vectprojPoint,double a, double b, double c,double d, double x_p, double y_p, double z_p) { int idx = blockIdx.x*blockDim.x + threadIdx.x; printf("blockIdx is %d",blockIdx); if(idx >=gpu_vectPts->size() ) return; Project(gpu_vectPts->at(idx), gpu_vectprojPoint->at(idx),a,b,c,d,x_p,y_p,z_p); } void getVectOfPointProj(const std::vector<G3DPoint > & vectPts,std::vector<G3DPoint > & vectProjPoints,double a,double b,double c,double d, double x_p, double y_p, double z_p) { int threads = 512; int blocks = vectPts.size()/threads + ((vectPts.size() % threads)?1:0); std::vector<G3DPoint > *gpu_vectPts,*gpu_vectprojPoint; cudaMalloc((void**)gpu_vectPts, sizeof(G3DPoint)*vectPts.size()); cudaMalloc((void**)gpu_vectprojPoint, sizeof(G3DPoint)*vectPts.size()); vectProjPoints.resize(vectPts.size()); CheckCUDAError("Project"); cudaMemcpy(gpu_vectPts, & vectPts, vectPts.size(), cudaMemcpyHostToDevice); CheckCUDAError("Project"); printf("CUDA blocks/threads: %d %d\n", blocks, threads); ProjectPoint<<<blocks, threads>>>(gpu_vectPts, gpu_vectprojPoint, a, b, c,d, x_p, y_p, z_p); cudaThreadSynchronize(); CheckCUDAError("Search"); cudaMemcpy(& vectProjPoints, gpu_vectprojPoint, vectPts.size(), cudaMemcpyDeviceToHost); cudaFree(gpu_vectPts); cudaFree(gpu_vectprojPoint); }
D'après ce que j'ai compris est qu'il y a des erreurs dans la définition des vecteurs vectProjPoints, gpu_vectprojPoint mais je ne suis pas arriver à le résoudre.Erreur 7 error : calling a __host__ function("std::vector<G3DPoint, std::allocator<G3DPoint> > ::at") from a __global__ function("ProjectPoint") is not allowed d:\projects\new_test_kd_tree_gpu\new_test_kd_tree_gpu\Projection.cu 29 1 New_test_kd_tree_GPU
Erreur 8 error : calling a __host__ function("std::vector<G3DPoint, std::allocator<G3DPoint> > ::at") from a __global__ function("ProjectPoint") is not allowed d:\projects\new_test_kd_tree_gpu\new_test_kd_tree_gpu\Projection.cu 29 1 New_test_kd_tree_GPU
Erreur 6 error : calling a __host__ function("std::vector<G3DPoint, std::allocator<G3DPoint> > ::size") from a __global__ function("ProjectPoint") is not allowed d:\projects\new_test_kd_tree_gpu\new_test_kd_tree_gpu\Projection.cu 26 1 New_test_kd_tree_GPU
Erreur 9 error MSB3721: La commande ""C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\bin\nvcc.exe" -gencode=arch=compute_20,code=\"sm_20,compute_20\" --use-local-env --cl-version 2010 -ccbin "C:\Program Files\Microsoft Visual Studio 10.0\VC\bin" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\include" --keep-dir Release -maxrregcount=0 --machine 32 --compile -cudart static -DWIN32 -DNDEBUG -D_CONSOLE -D_MBCS -Xcompiler "/EHsc /W3 /nologo /O2 /Zi /MD " -o Release\kernel.cu.obj "D:\projects\New_test_kd_tree_GPU\New_test_kd_tree_GPU\kernel.cu"" s'est arrêtée avec le code 2. C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\CUDA 6.5.targets 593 10 New_test_kd_tree_GPU
13 IntelliSense*: expression attendue d:\projects\new_test_kd_tree_gpu\new_test_kd_tree_gpu\projection.cu 50 19 New_test_kd_tree_GPU
11 IntelliSense*: identificateur "blockDim" non défini d:\projects\new_test_kd_tree_gpu\new_test_kd_tree_gpu\projection.cu 24 26 New_test_kd_tree_GPU
10 IntelliSense*: identificateur "blockIdx" non défini d:\projects\new_test_kd_tree_gpu\new_test_kd_tree_gpu\projection.cu 24 15 New_test_kd_tree_GPU
12 IntelliSense*: identificateur "threadIdx" non défini d:\projects\new_test_kd_tree_gpu\new_test_kd_tree_gpu\projection.cu 24 39 New_test_kd_tree_GPU
Merci pour vos aides.
Partager