MPI (Message Passing Interface) এর মাধ্যমে Distributed Computing
MPI (Message Passing Interface) একটি স্ট্যান্ডার্ড প্রোটোকল যা প্রোগ্রামগুলোকে বিভিন্ন প্রসেসরের মধ্যে ডেটা এবং বার্তা পাঠানোর মাধ্যমে যোগাযোগ করতে সক্ষম করে। এটি ডিস্ট্রিবিউটেড কম্পিউটিং বা পারালাল কম্পিউটিং এর ক্ষেত্রে অত্যন্ত গুরুত্বপূর্ণ, যেখানে একটি বৃহৎ সমস্যা একাধিক নোড বা প্রসেসরের মধ্যে ভাগ করা হয় এবং সমাধান করা হয়।
ফোরট্রানসহ বিভিন্ন প্রোগ্রামিং ভাষায় MPI ব্যবহৃত হয় ডিস্ট্রিবিউটেড কম্পিউটিং সিস্টেম তৈরি করতে, যেখানে একাধিক প্রসেস একে অপরের সঙ্গে বার্তা বা ডেটা আদান-প্রদান করে।
১. MPI কী এবং কেন ব্যবহৃত হয়?
MPI একটি প্ল্যাটফর্ম-স্বাধীন প্রোটোকল যা বিভিন্ন প্রসেসে রান করা প্রোগ্রামগুলির মধ্যে বার্তা পাঠানোর জন্য ব্যবহৃত হয়। এটি ডিস্ট্রিবিউটেড সিস্টেমে একাধিক প্রসেসরের মধ্যে সমন্বয় সাধন করতে সাহায্য করে এবং সেগুলির মধ্যে দ্রুত ও দক্ষভাবে যোগাযোগ সম্ভব করে।
- ডিস্ট্রিবিউটেড কম্পিউটিং: যেখানে একাধিক কম্পিউটার বা প্রসেস একত্রে কাজ করে, সমস্যার বিভিন্ন অংশ সমাধান করে।
- পারালাল কম্পিউটিং: একাধিক প্রসেস একযোগে সমাধান করতে সক্ষম হওয়ায় দ্রুত কাজ সম্পন্ন হয়।
MPI বার্তা আদান-প্রদান প্রক্রিয়াকে সহজ করে এবং প্রসেসিং পুওল তৈরির মাধ্যমে সমন্বিতভাবে ডেটা প্রক্রিয়া করতে সাহায্য করে।
২. MPI এর মূল বৈশিষ্ট্য
- মেসেজ পাসিং (Message Passing):
- MPI বার্তা আদান-প্রদান পদ্ধতি ব্যবহার করে একাধিক প্রসেসের মধ্যে তথ্য বা ডেটা পাঠাতে বা গ্রহণ করতে পারে। এটি প্যারালাল কম্পিউটিং এবং ডিস্ট্রিবিউটেড সিস্টেম এ খুবই কার্যকরী।
- স্কেলেবিলিটি (Scalability):
- MPI প্রোগ্রামগুলি ছোট এবং বড় স্কেল (যত বেশি প্রসেস বা নোডে রান করানো যায়) ব্যবহারের জন্য উপযুক্ত। এটি সিস্টেমের আকারের ভিত্তিতে সম্পূর্ণরূপে স্কেল করতে সক্ষম।
- বহু প্রসেসর সমর্থন (Multi-Processor Support):
- MPI একটি বা একাধিক প্রসেসর ব্যবহার করে কম্পিউটেশন সমাধান করতে সাহায্য করে, যেখানে প্রতিটি প্রসেস একটি নির্দিষ্ট কাজ সম্পাদন করে এবং পরে সেই কাজের ফলাফল একত্রিত হয়।
- বহু প্ল্যাটফর্ম সমর্থন (Cross-Platform Support):
- এটি একাধিক প্ল্যাটফর্মে কাজ করতে সক্ষম এবং একাধিক হার্ডওয়্যার এবং অপারেটিং সিস্টেমের সাথে সামঞ্জস্যপূর্ণ।
- ভার্চুয়াল শেয়ার্ড মেমরি (Virtual Shared Memory):
- MPI প্রোগ্রামগুলি সাধারণত ডিস্ক, মেমরি এবং প্রসেসরগুলি ব্যবহৃত ডিস্ট্রিবিউটেড সিস্টেমে একে অপরের মধ্যে ডেটা পাঠাতে সক্ষম হয়।
৩. MPI এর প্রধান ফাংশনসমূহ
MPI এর অনেক ফাংশন রয়েছে, যার মাধ্যমে প্রসেসগুলো একে অপরের সঙ্গে যোগাযোগ করতে পারে এবং সমন্বিতভাবে কাজ করতে পারে। কিছু গুরুত্বপূর্ণ ফাংশন হলো:
- MPI_Init: MPI লাইব্রেরি ইনিশিয়ালাইজ করে।
- MPI_Comm_size: কম্পিউটেশনাল ক্লাস্টারে প্রসেসের সংখ্যা খুঁজে বের করে।
- MPI_Comm_rank: একটি প্রসেসের র্যাঙ্ক বা আইডি খুঁজে বের করে।
- MPI_Send: একটি প্রসেস থেকে অন্য প্রসেসে ডেটা পাঠায়।
- MPI_Recv: একটি প্রসেস থেকে অন্য প্রসেসে ডেটা গ্রহণ করে।
- MPI_Finalize: MPI লাইব্রেরি শেষ করে।
৪. ফোরট্রানে MPI ব্যবহার
ফোরট্রান প্রোগ্রামিং ভাষায় MPI ব্যবহার করার জন্য, আপনাকে প্রথমে MPI লাইব্রেরি ইনস্টল করতে হবে এবং প্রোগ্রামে এর ফাংশন ব্যবহার করতে হবে। নিচে একটি সাধারণ উদাহরণ দেওয়া হলো, যেখানে দুটি প্রসেসের মধ্যে বার্তা পাঠানো এবং গ্রহণ করা হচ্ছে।
উদাহরণ (ফোরট্রানে MPI):
program mpi_example
use mpi
integer :: rank, size, ierr
integer :: msg_send, msg_recv
call MPI_Init(ierr)
call MPI_Comm_rank(MPI_COMM_WORLD, rank, ierr)
call MPI_Comm_size(MPI_COMM_WORLD, size, ierr)
if (rank == 0) then
msg_send = 100
call MPI_Send(msg_send, 1, MPI_INTEGER, 1, 0, MPI_COMM_WORLD, ierr)
print *, "Process 0 sent message: ", msg_send
elseif (rank == 1) then
call MPI_Recv(msg_recv, 1, MPI_INTEGER, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE, ierr)
print *, "Process 1 received message: ", msg_recv
end if
call MPI_Finalize(ierr)
end program mpi_exampleএখানে:
MPI_Init: MPI লাইব্রেরি ইনিশিয়ালাইজ করে।MPI_Comm_rank: প্রতিটি প্রসেসের র্যাঙ্ক (আইডি) নির্ধারণ করে।MPI_Comm_size: প্রসেসের মোট সংখ্যা নির্ধারণ করে।MPI_Send: প্রোগ্রামের প্রসেস 0 থেকে প্রসেস 1-এ ডেটা পাঠায়।MPI_Recv: প্রসেস 1 ডেটা গ্রহণ করে।MPI_Finalize: MPI সেশনটি শেষ করে।
আউটপুট:
Process 0 sent message: 100
Process 1 received message: 100৫. MPI এর সুবিধা
- প্যারালাল প্রোগ্রামিং: একাধিক প্রসেসকে একযোগে কাজ করতে সক্ষম করে, যা বৃহৎ পরিমাণের ডেটা বা জটিল সমস্যা দ্রুত সমাধান করতে সহায়ক।
- স্কেলেবিলিটি: ছোট থেকে বড় কম্পিউটিং সিস্টেমে সহজে স্কেল করা যায়।
- বহু প্রসেসরের মধ্যে যোগাযোগ: ডিস্ট্রিবিউটেড সিস্টেমে ডেটার দ্রুত আদান-প্রদান সম্ভব হয়।
- সম্পূর্ণ নিয়ন্ত্রণ: ডিস্ট্রিবিউটেড সিস্টেমের প্রতিটি প্রসেসকে সম্পূর্ণ নিয়ন্ত্রণ করা যায়।
৬. MPI এর সীমাবদ্ধতা
- কঠিন ডিবাগিং: একাধিক প্রসেস একে অপরের সঙ্গে যোগাযোগ করতে থাকে, যার ফলে ডিবাগিং চ্যালেঞ্জিং হতে পারে।
- কম্পিউটেশনাল লোড: মাঝে মাঝে ডেটার সঠিকভাবে আদান-প্রদান না হওয়া বা ডেটা প্যাকেটের দেরি হওয়া, কম্পিউটেশনাল লোড বাড়াতে পারে।
উপসংহার
MPI একটি শক্তিশালী টুল যা ডিস্ট্রিবিউটেড এবং প্যারালাল কম্পিউটিংয়ে ব্যবহৃত হয়। এটি একাধিক প্রসেসের মধ্যে যোগাযোগ এবং সমন্বয়ের জন্য কার্যকরী এবং এটি ব্যাপকভাবে সাইন্স এবং ইঞ্জিনিয়ারিং সমস্যাগুলির সমাধানে ব্যবহৃত হয়। ফোরট্রানে MPI ব্যবহার করে বড় সমস্যা ভাগ করা এবং সমাধান করা সহজ, যা দ্রুত এবং দক্ষ কম্পিউটেশন নিশ্চিত করে।
Read more