Hi all… I am new to CUDA. I am getting error
quadtree.cu: In function `_ZN10quadsquare12AddHeightMapERK14quadcornerdata’:
quadtree.cu:45: warning: cast to pointer from integer of different size
./quadtree.cu(45): Error: External calls are not supported (found non-inlined call to _Znwm)
when i am compiling program. My program :
#include<stdio.h>
typedef unsigned short uint16;
class quadsquare;
device struct quadcornerdata {
const quadcornerdata* Parent;
quadsquare* Square;
int ChildIndex;
int Level;
int xorg, zorg;
};
device struct quadsquare {
quadsquare* Child[4];
uint16 Error[6]; // e, s, children: ne, nw, sw, se
uint16 MinY, MaxY; // Bounds for frustum culling and error testing.
unsigned char EnabledFlags; // bits 0-7: e, n, w, s, ne, nw, sw, se
__device__ __inline__ quadsquare(quadcornerdata* pcd);
__device__ __inline__ void AddHeightMap(const quadcornerdata& cd);
};
quadsquare *root = NULL;
quadcornerdata *RootCornerData;
device quadsquare::quadsquare(quadcornerdata* pcd)
{
pcd->Square = this;
}
device void quadsquare::AddHeightMap(const quadcornerdata& cd)
{
for (int i = 0; i < 4; i++) {
quadcornerdata q;
if (Child[i] == NULL) {
[b]Child[i] = new quadsquare(&q); // Error about this line.[/b]
}
}
}
global void testKernel(quadsquare *root,quadcornerdata *RootCornerData)
{
root->AddHeightMap(*RootCornerData);
}
int main()
{
RootCornerData=(struct quadcornerdata *)malloc(sizeof(struct quadcornerdata));
*RootCornerData = (struct quadcornerdata) {NULL,NULL,0,15,0,0};
quadsquare *p;
cudaMalloc(&p, sizeof(quadsquare));
cudaMemcpy(p,root, sizeof(quadsquare), cudaMemcpyHostToDevice);
quadcornerdata *q;
cudaMalloc(&q, sizeof(quadcornerdata));
cudaMemcpy(q,RootCornerData, sizeof(quadcornerdata), cudaMemcpyHostToDevice);
testKernel<<< 1, 1 >>>(p,q);
}
I searched in forums and tried to compile as : nvcc quadtree.cu -arch=sm_20 and nvcc quadtree.cu -arch=sm_12
But , Still getting error. Can any one please tell the error what about it is and how to solve the problem ?