HPC_codes
HPC_codes
Code:
import threading
class Graph:
self.V = V
self.adj[v].append(w)
threads = []
def dfs_util(v):
with self.lock:
if visited[v]:
return
visited[v] = True
local_threads = []
for n in self.adj[v]:
if not visited[n]:
t = threading.Thread(target=dfs_util, args=(n,))
local_threads.append(t)
t.start()
for t in local_threads:
t.join()
t = threading.Thread(target=dfs_util, args=(start_vertex,))
threads.append(t)
t.start()
for t in threads:
t.join()
q = Queue()
q.put(start_vertex)
visited[start_vertex] = True
q_size = q.qsize()
threads = []
def process_node():
v = q.get()
for n in self.adj[v]:
with self.lock:
if not visited[n]:
visited[n] = True
q.put(n)
for _ in range(q_size):
t = threading.Thread(target=process_node)
threads.append(t)
t.start()
for t in threads:
t.join()
# Create a graph
g = Graph(7)
g.add_edge(0, 1)
g.add_edge(0, 2)
g.add_edge(1, 3)
g.add_edge(1, 4)
g.add_edge(2, 5)
g.add_edge(2, 6)
"""
0 -------->1
| /\
| / \
| / \
v v v
2 ----> 3 4
| |
| |
v v
5 6
"""
g.parallel_dfs(0)
g.parallel_bfs(0)
print()
OUTPUT:
CODE:
import time
import multiprocessing
def bubble_sort(arr):
n = len(arr)
def parallel_bubble_sort(arr):
n = len(arr)
def odd_even_pass(is_odd):
jobs = []
p1 = multiprocessing.Process(target=odd_even_pass, args=(True,))
p1.start()
p1.join()
p2 = multiprocessing.Process(target=odd_even_pass, args=(False,))
p2.start()
p2.join()
# Print array
def print_array(arr):
if __name__ == "__main__":
n = 10
start_time = time.time()
bubble_sort(arr)
end_time = time.time()
print_array(arr)
start_time = time.time()
parallel_bubble_sort(arr_parallel)
end_time = time.time()
OUTPUT:
1 2 3 4 5 6 7 8 9 10
10 9 8 7 6 5 4 3 2 1
EXP 3
CODE:
import time
import multiprocessing
# Merge function
left = arr[low:mid+1]
right = arr[mid+1:high+1]
i=j=0
k = low
arr[k] = left[i]
i += 1
else:
arr[k] = right[j]
j += 1
k += 1
arr[k] = left[i]
i += 1
k += 1
while j < len(right):
arr[k] = right[j]
j += 1
k += 1
left_process.start()
right_process.start()
left_process.join()
right_process.join()
merge(arr, low, mid, high)
# Main function
if __name__ == "__main__":
n = 10
start_time = time.time()
merge_sort(arr, 0, n - 1)
end_time = time.time()
start_time = time.time()
parallel_merge_sort(arr_parallel, 0, n - 1)
end_time = time.time()
OUTPUT:
CODE:
#include <iostream>
#include <cuda_runtime.h>
int sum = 0;
int i = threadIdx.x;
if (i < 3) {
}
// Function to print a 3x3 matrix
int main() {
int h_C[3][3];
int h_V3[3];
// Device memory pointers
cudaMalloc((void**)&d_A, 9 * sizeof(int));
cudaMalloc((void**)&d_B, 9 * sizeof(int));
cudaMalloc((void**)&d_C, 9 * sizeof(int));
cudaMalloc((void**)&d_V1, 3 * sizeof(int));
cudaMalloc((void**)&d_V2, 3 * sizeof(int));
cudaMalloc((void**)&d_V3, 3 * sizeof(int));
printMatrix((int*)h_C);
printVector((int*)h_V3);
cudaFree(d_A);
cudaFree(d_B);
cudaFree(d_C);
cudaFree(d_V1);
cudaFree(d_V2);
cudaFree(d_V3);
return 0;
OUTPUT:
30 24 18
84 69 54
138 114 90
579