1
edit
Changes
→Assignment 2
<pre>
# include <cmath> // This library enable the use of sqrt. # include <iostream> # include <ctime> # include <cuda_runtime.h> using namespace std; __global__ void primegen(bool prime, int number2,int x,int *primes_d) { int c = 0; for (int i = 1; i <= x; i++) { for ( int j = 2; j <= number2; j++) { if ( i!=j && i % j == 0 ) { prime = false; break; } } if (prime) { primes_d[c]=i; c += 1; } prime = true; } } void primenum(long double); // Prototype... int main() { long double x = 0; cout<<"\n This program will generate all prime numbers up to the"<<"\n number you have entered below...\n"; cout<<"\n Please enter a number: "; cin>> x; cout<<"\n Here are all the prime numbers up to "<<x<<".\n"; primenum(x); //function invocation... //cout<<endl<<"\nThere are "<<c //<<" prime numbers less than or equal to "<<x<<".\n\n"; return 0; } // This function will determine the primenumbers up to num. void primenum(long double x) { bool prime = true; int number2; number2 =(int) floor (sqrt (x)); //Array to hold generated primes on host int *primes_h = new int[(int)x]; //Device array to hold the primes on the device int *primes_d = new int[(int)x]; //allocate device memory and initialize device memory cudaMalloc((void**)&primes_d, (int)x * sizeof(int)); // cudaMalloc((void**)&c_d, sizeof(int)); cudaMemset(&primes_d,0,x * sizeof(int)); //error checking cudaError_t error ; int start_s=clock(); //Kernal goes here primegen<<<1,1>>>(prime,number2,(int)x,primes_d); int stop_s = clock(); // extract error code from the kernel's execution error = cudaGetLastError(); if (error != cudaSuccess) { cout << cudaGetErrorString(error) << endl; } //copy the array holding primes from device to host error =cudaMemcpy(primes_h, primes_d, ((int)x) * sizeof(int), cudaMemcpyDeviceToHost); if (error != cudaSuccess) { cout << cudaGetErrorString(error) << endl; } // cudaMemcpy(c_h, c_d, sizeof(int), cudaMemcpyDeviceToHost); //display the primes for(int i=0; i<(int)x ; i++){ if(primes_h[i]>=2&& primes_h[i]<=(int)x){ cout<<primes_h[i]<<endl; } } cout<< "time: "<< (stop_s-start_s)/double(CLOCKS_PER_SEC)<<endl; //free allocated memory delete [] primes_h; cudaFree(primes_d); getchar(); }
</pre>
=== Assignment 3 ===