diff --git a/parallel.cu b/parallel.cu index 9b92286056644e319038db74cd7321749c92c8f3..7ba454a18386368992c57911b0ccfe92bff6902b 100644 --- a/parallel.cu +++ b/parallel.cu @@ -6,13 +6,19 @@ #define TRUE 1 #define FALSE 0 #define INF LONG_MAX -// #define N_THREADS 10 +#define N_BLOCKS 100 +#define N_THREADS 1 #define OUTPUT_FILE_PATH "parallel_result.txt" +__host__ __device__ void print_matrix(long matrix[], int n_row, int n_col); +__host__ __device__ void print_array(long arr[], int len); +__host__ __device__ long *initialize_matrix(int random_number, int n); +__host__ __device__ long *initialize_result(int n); +__host__ __device__ void write_output(long matrix[], int n_row, int n_col, double time); __global__ @@ -86,8 +92,6 @@ int main (int argc, char **argv) { /* Read number of vertices */ printf("Number of vertices (n): "); scanf("%d", &n); - printf("Number of blocks : "); scanf("%d", &num_blocks); - printf("Number of threads : "); scanf("%d", &num_threads); matrix = initialize_matrix(13517142, n); printf("\nGenerated %d * %d matrix.\n", n, n); @@ -96,9 +100,9 @@ int main (int argc, char **argv) { start = clock(); - int sub_n = n / (num_blocks * num_threads); + int sub_n = n / (N_BLOCKS * N_THREADS); - dijkstra<<<num_blocks,num_threads>>>(n, sub_n, matrix, result); + dijkstra<<<N_BLOCKS,N_THREADS>>>(n, sub_n, matrix, result); cudaDeviceSynchronize(); @@ -111,6 +115,7 @@ int main (int argc, char **argv) { cudaFree(matrix); } +__host__ __device__ void print_matrix(long matrix[], int n_row, int n_col) { for (int i = 0; i < n_row; i++) { for (int j = 0; j < n_col; j++) { @@ -120,6 +125,7 @@ void print_matrix(long matrix[], int n_row, int n_col) { } } +__host__ __device__ void print_array(long arr[], int len) { for (int i = 0; i < len; i++) { printf("%ld ", arr[i]); @@ -127,6 +133,7 @@ void print_array(long arr[], int len) { printf("\n"); } +__host__ __device__ void write_output(long matrix[], int n_row, int n_col, double time) { FILE * file; file = fopen (OUTPUT_FILE_PATH,"w"); @@ -140,6 +147,7 @@ void write_output(long matrix[], int n_row, int n_col, double time) { fclose (file); } +__host__ __device__ long *initialize_matrix(int random_number, int n) { /* Initialize variables */ long *matrix; @@ -151,7 +159,7 @@ long *initialize_matrix(int random_number, int n) { if (i == j) { matrix[i * n + j] = 0; } else { - long dist = (rand() % 9) + 1; + long dist = rand(); matrix[i * n + j] = dist; matrix[j * n + i] = dist; } @@ -160,6 +168,7 @@ long *initialize_matrix(int random_number, int n) { return matrix; } +__host__ __device__ long *initialize_result(int n) { long *result; cudaMallocManaged(&result, n*n*sizeof(long));