HPC CODES
HPC CODES
#include <vector>
#include <queue>
#include <omp.h>
struct Node {
int data;
vector<Node*> children;
};
if (!root) return;
queue<Node*> q;
q.push(root);
while (!q.empty()) {
vector<Node*> next_level;
Node* current;
current = q.front();
q.pop();
next_level.push_back(child);
q.push(node);
int main() {
new Node{3, {
}}
}};
parallel_BFS(root);
return 0;
OUTPUT:
#include <iostream>
#include <vector>
#include <omp.h>
struct Node {
int data;
vector<Node*> neighbors;
};
if (visited[node->data]) return;
visited[node->data] = true;
if (!visited[neighbor->data]) {
parallel_DFS(neighbor, visited);
}
int main() {
vector<Node> graph(5);
graph[i].data = i;
graph[3].neighbors = {&graph[1]};
graph[4].neighbors = {&graph[2]};
parallel_DFS(&graph[0], visited);
return 0;
}
INPUT :
OUTPUT:
Code: Parallel and Sequential Sorting Algorithms with Time Comparison
#include <iostream>
#include <vector>
#include <chrono>
#include <omp.h>
#include <cstdlib>
int temp = a;
a = b;
b = temp;
int n = arr.size();
swapped = true;
if (!swapped) break;
int n = arr.size();
swapped = 1;
if (!swapped) break;
// Merge function
int i = 0, j = 0, k = left;
} else {
int main() {
int N;
cin >> N;
vector<int> original(N);
}
// Sequential Bubble Sort
bubbleSortSequential(arr);
cout << "Sequential Bubble Sort Time: " << seqBubbleTime << " ms\n";
arr = original;
start = chrono::high_resolution_clock::now();
bubbleSortParallel(arr);
end = chrono::high_resolution_clock::now();
cout << "Parallel Bubble Sort Time: " << parBubbleTime << " ms\n";
arr = original;
start = chrono::high_resolution_clock::now();
mergeSortSequential(arr, 0, N - 1);
end = chrono::high_resolution_clock::now();
cout << "Sequential Merge Sort Time: " << seqMergeTime << " ms\n";
arr = original;
start = chrono::high_resolution_clock::now();
mergeSortParallel(arr, 0, N - 1);
}
end = chrono::high_resolution_clock::now();
cout << "Parallel Merge Sort Time: " << parMergeTime << " ms\n";
return 0;
Input:
Output:
#include <iostream>
#include <omp.h>
#include <climits>
#include <chrono>
min_value = arr[i];
max_value = arr[i];
sum += arr[i];
int sum = 0;
sum += arr[i];
int main() {
int n;
cin >> n;
min_reduction(arr, n);
max_reduction(arr, n);
sum_reduction(arr, n);
average_reduction(arr, n);
auto stop = high_resolution_clock::now();
cout << "Time taken for all reductions: " << duration.count() << " ms" << endl;
delete[] arr;
return 0;
}
Input:
Output:
#include <iostream>
#include <cuda_runtime.h>
if (i < n) {
int main() {
int n = 1000000;
cudaMallocHost(&A, size);
cudaMallocHost(&B, size);
A[i] = i;
B[i] = i * 2;
cudaMalloc(&dev_A, size);
cudaMalloc(&dev_B, size);
cudaMalloc(&dev_C, size);
cudaDeviceSynchronize();
cudaFree(dev_A);
cudaFree(dev_B);
cudaFree(dev_C);
cudaFreeHost(A);
cudaFreeHost(B);
cudaFreeHost(h_C);
return 0;
Output:
#include <iostream>
#include <cuda_runtime.h>
int sum = 0;
}
int main() {
int* A, * B, * C;
int matrixSize = N * N;
A = new int[matrixSize];
B = new int[matrixSize];
C = new int[matrixSize];
initialize(A, N);
initialize(B, N);
print(A, N);
print(B, N);
int* X, * Y, * Z;
cudaMalloc(&X, matrixBytes);
cudaMalloc(&Y, matrixBytes);
cudaMalloc(&Z, matrixBytes);
// Set the number of threads per block and blocks per grid
print(C, N);
delete[] A;
delete[] B;
delete[] C;
cudaFree(X);
cudaFree(Y);
cudaFree(Z);
return 0;
}
Output: