int main() { cout << "Beispielprogramm fuer Sobel-Operator mit CUDA-Umgebung" << endl; // --Grauwertbild einlesen und Speicher auf dem Host allokieren unsigned char* ipicture=0; int length=0,width=0; readpgm("pic/starbucks.pgm",ipicture,length,width); // --Speicher auf dem Device (GPU) allokieren int memsize=length*width; unsigned char* device_ipicture=0,*device_opicture=0; // --Speicher fuer Ein- sowie Ausgabebild cudaMalloc((void**)&device_ipicture,memsize); cudaMalloc((void**)&device_opicture,memsize); // --Speicher vom Host auf das Device kopieren cudaMemcpy(device_ipicture,ipicture,memsize,cudaMemcpyHostToDevice); // --Kernelfunktion starten sobel(device_ipicture,device_opicture,length,width); // --Speicher vom Device auf den Host kopieren unsigned char* opicture=new unsigned char[memsize]; cudaMemcpy(opicture,device_opicture,memsize,cudaMemcpyDeviceToHost); // --Speicher auf dem Device freigeben cudaFree(device_ipicture); cudaFree(device_opicture); savepgm("result.pgm",opicture,length,width); // --Speicher auf dem Host freigeben delete ipicture; delete opicture; return 0; }