OpenMP এবং MPI হল দুটি জনপ্রিয় লাইব্রেরি যা সমান্তরাল প্রোগ্রামিংয়ের জন্য ব্যবহৃত হয়। OpenMP প্রধানত একক মেশিনে মাল্টি-থ্রেডিংয়ের জন্য ব্যবহৃত হয়, যেখানে MPI (Message Passing Interface) বিতরণকৃত সিস্টেমে যোগাযোগের জন্য ব্যবহৃত হয়।
১. OpenMP
OpenMP একটি API (Application Programming Interface) যা C, C++, এবং Fortran ভাষায় মাল্টি-থ্রেডিংয়ের জন্য সমর্থন প্রদান করে। এটি প্রোগ্রামারের জন্য থ্রেড তৈরি এবং পরিচালনা করা সহজ করে তোলে।
উদাহরণ: OpenMP ব্যবহার করে সহজ গণনা
#include <stdio.h>
#include <omp.h>
int main() {
int i;
int n = 10;
// OpenMP এর সাথে থ্রেড তৈরি
#pragma omp parallel for
for (i = 0; i < n; i++) {
printf("Thread %d is processing item %d\n", omp_get_thread_num(), i);
}
return 0;
}
কার্যপ্রণালী:
- #pragma omp parallel for: এই নির্দেশিকা OpenMP কে জানায় যে
forলুপটিকে সমান্তরালভাবে চালানো হবে। - omp_get_thread_num(): এটি চলমান থ্রেডের সংখ্যা প্রদান করে।
২. MPI
MPI (Message Passing Interface) একটি স্ট্যান্ডার্ড যা বিতরণকৃত সিস্টেমে একাধিক প্রসেসের মধ্যে যোগাযোগের জন্য ব্যবহৃত হয়। এটি উচ্চ-পারফরম্যান্স কম্পিউটিং (HPC) পরিবেশে কার্যকর।
উদাহরণ: MPI ব্যবহার করে সংখ্যা যোগ
#include <stdio.h>
#include <mpi.h>
int main(int argc, char *argv[]) {
int rank, size, number;
int total = 0;
// MPI শুরু
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank); // প্রতিটি প্রসেসের র্যাঙ্ক পাওয়া
MPI_Comm_size(MPI_COMM_WORLD, &size); // মোট প্রসেস সংখ্যা পাওয়া
number = rank + 1; // প্রতিটি প্রসেসের জন্য একটি সংখ্যা নির্ধারণ
printf("Process %d has number %d\n", rank, number);
// সব প্রসেস থেকে সংখ্যা যোগ করা
MPI_Reduce(&number, &total, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
if (rank == 0) { // র্যাঙ্ক 0 এর জন্য ফলাফল দেখানো
printf("Total sum is: %d\n", total);
}
// MPI শেষ
MPI_Finalize();
return 0;
}
কার্যপ্রণালী:
- MPI_Init: MPI পরিবেশ শুরু করে।
- MPI_Comm_rank: প্রতিটি প্রসেসের র্যাঙ্ক পাওয়া যায়।
- MPI_Reduce: সব প্রসেস থেকে সংখ্যাগুলি যোগ করে।
- MPI_Finalize: MPI পরিবেশ শেষ করে।
উপসংহার
OpenMP এবং MPI উভয়ই সমান্তরাল প্রোগ্রামিংয়ের জন্য শক্তিশালী টুল। OpenMP মাল্টি-থ্রেডিংয়ের জন্য সহজ এবং সুবিধাজনক পদ্ধতি প্রদান করে, যখন MPI বিতরণকৃত সিস্টেমে প্রসেসগুলির মধ্যে যোগাযোগের জন্য কার্যকরী। এই দুটি লাইব্রেরি সফটওয়্যার ডেভেলপমেন্টে কর্মক্ষমতা বৃদ্ধি করতে সহায়ক।