Changes

Jump to: navigation, search

GPU610/TeamKCM

647 bytes added, 21:44, 1 December 2014
Assignment 3
===== Improved Source Code =====
<syntaxhighlight lang="cpp">
void solve(){ int j=0; int d; cudaDeviceProp prop; cudaGetDevice(&d); cudaGetDeviceProperties(&prop, d); unsigned ntpb = prop.maxThreadsDim[0]; unsigned ntpg = ntpb * prop.maxGridSize[0]; if (xGridNum > ntpg) { xGridNum = ntpg; std::cout << "n reduced to " << xGridNum << std::endl; }  double* d_x; double* d_solutionA; double* d_solutionB;  cudaMalloc((void**)&d_x, (xGridNum + 1) * sizeof(float)); cudaMalloc((void**)&d_solutionA, xGridNum * sizeof(double)); cudaMalloc((void**)&d_solutionB, xGridNum * sizeof(double)); double* d_solutionTemp;  cudaMemcpy(d_x, x, (xGridNum + 1) * sizeof(float), cudaMemcpyHostToDevice); cudaMemcpy(d_solutionA, solutionNew, xGridNum * sizeof(double), cudaMemcpyHostToDevice); cudaMemcpy(d_solutionB, solutionLast, xGridNum * sizeof(double), cudaMemcpyHostToDevice);  std::ofstream myfile; myfile.open ("output.txt"); // A = new, B = last while( j < tTotal / dt){ kernel<<<(xGridNum + ntpb - 1) / ntpb, ntpb>>>(d_solutionA, d_solutionB, d_x, xGridNum, dt, dx, K, j); j++; cudaMemcpy(solutionNew, d_solutionA, xGridNum * sizeof(double), cudaMemcpyDeviceToHost); /* myfile << "Time" << tTotal/dt << std::endl; for(int i = 0; i <= xGridNum; i++){ myfile << solutionNew[i] << ":"; } */ d_solutionTemp = d_solutionA; d_solutionA = d_solutionB; d_solutionB = d_solutionTemp; }  myfile.close(); cudaFree(d_x); cudaFree(d_solutionA); cudaFree(d_solutionB); cudaDeviceReset(); // Important }
<syntaxhighlight>

Navigation menu