Computer Programming DO লুপ Parallelization গাইড ও নোট

300

ফোরট্রানে DO লুপ Parallelization

ফোরট্রানে DO লুপ Parallelization হল একটি গুরুত্বপূর্ণ কৌশল যা বড় ডেটাসেট বা গণনামূলক অপারেশনে parallel processing করতে সাহায্য করে। এটি একটি লুপের মধ্যে একই ধরনের কাজগুলিকে একাধিক প্রসেসরে বা কোরে সমান্তরালভাবে চালানোর মাধ্যমে প্রোগ্রামের কার্যকারিতা উন্নত করে।

ফোরট্রানে DO লুপ পারালালাইজেশনের জন্য সাধারণত OpenMP (Open Multi-Processing) ব্যবহৃত হয়। OpenMP একটি API যা একাধিক থ্রেডের মাধ্যমে প্রোগ্রাম চালানোর সুবিধা প্রদান করে, যার মাধ্যমে CPU কোরগুলোর সম্পূর্ণ ব্যবহার করা যায় এবং প্রোগ্রামের পারফরম্যান্স বৃদ্ধি পায়।

১. DO লুপ Parallelization এর জন্য OpenMP ব্যবহার

OpenMP ফোরট্রানে একটি প্রোগ্রামিং মডেল হিসেবে ব্যবহৃত হয়, যা সহজেই পারালাল কম্পিউটিং সুবিধা প্রদান করে। আপনি !$OMP PARALLEL DO ডিরেকটিভ ব্যবহার করে DO লুপের মধ্যে কাজগুলো সমান্তরালভাবে চালাতে পারেন।

উদাহরণ: DO লুপ Parallelization with OpenMP

program parallel_example
    integer :: i
    real :: arr(1000), result

    ! ডেটা ইনিশিয়ালাইজ করা
    arr = 1.0

    ! OpenMP ডিরেকটিভ ব্যবহার করে DO লুপকে পারালালাইজ করা
    result = 0.0
    !$omp parallel do reduction(+:result)
    do i = 1, 1000
        result = result + arr(i)
    end do
    !$omp end parallel do

    print *, 'Result: ', result
end program parallel_example

ব্যাখ্যা:

  • !$omp parallel do: এই ডিরেকটিভটি DO লুপটিকে পারালাল করে এবং কোডের ভিতরে থাকা কাজগুলো একাধিক থ্রেডে ভাগ করে। এটি নিশ্চিত করে যে লুপের প্রতিটি iteration স্বতন্ত্রভাবে চালানো হবে।
  • reduction(+:result): এটি একটি OpenMP reduction অপারেশন, যা পারালাল লুপের মধ্যে ফলাফলগুলো সঠিকভাবে একত্রিত করতে ব্যবহৃত হয়। এখানে result ভেরিয়েবলটি সব থ্রেডে ব্যবহৃত হবে এবং শেষে তাদের যোগফল নেওয়া হবে।
  • arr(i): অ্যারের উপাদানগুলির জন্য গণনা করা হচ্ছে এবং এটি সমান্তরালভাবে করা হচ্ছে।

Note: ফোরট্রানে OpenMP ব্যবহার করার জন্য আপনার কম্পাইলারে OpenMP সমর্থন থাকতে হবে এবং সঠিক ফ্ল্যাগ (যেমন -fopenmp gfortran এর জন্য) ব্যবহার করতে হবে।

কম্পাইল এবং রান:

gfortran -fopenmp parallel_example.f90 -o parallel_example
./parallel_example

২. OpenMP ডিরেকটিভ এবং ক্লজিং অপশনস

OpenMP বিভিন্ন ধরনের ডিরেকটিভ এবং ক্লজিং অপশনস প্রদান করে যা লুপ পারালালাইজেশনকে আরও কাস্টমাইজ করতে সহায়ক। এর মধ্যে কিছু গুরুত্বপূর্ণ ডিরেকটিভ ও অপশনস:

  1. !$OMP PARALLEL: এটি কোডের যে অংশটি পারালালভাবে চলবে তা নির্দেশ করে।
  2. !$OMP DO: এটি DO লুপ কে পারালাল হিসেবে নির্দেশ করে।
  3. !$OMP END DO: পারালাল DO লুপের শেষ নির্দেশ করে।
  4. !$OMP END PARALLEL: পারালাল ব্লকের শেষ নির্দেশ করে।

উদাহরণ: OpenMP সেকশনিং

program parallel_sections
    integer :: i, result1, result2

    result1 = 0
    result2 = 0

    !$omp parallel sections
    !$omp section
    do i = 1, 500
        result1 = result1 + i
    end do
    !$omp section
    do i = 501, 1000
        result2 = result2 + i
    end do
    !$omp end parallel sections

    print *, 'Sum of first 500 numbers: ', result1
    print *, 'Sum of next 500 numbers: ', result2
end program parallel_sections

ব্যাখ্যা:

  • এখানে, parallel sections ব্যবহার করা হয়েছে। এটি কোডের দুটি আলাদা অংশকে পারালালভাবে চালানোর জন্য ব্যবহৃত হয়।
  • প্রথম section প্রথম 500 সংখ্যার যোগফল করে এবং দ্বিতীয় section পরবর্তী 500 সংখ্যার যোগফল করে।

৩. DO লুপ Parallelization এর সুবিধা

  1. পারফরম্যান্স বৃদ্ধি: ফোরট্রান কোডের পারফরম্যান্স অনেক বেড়ে যায় যখন DO লুপ এর প্রতিটি পুনরাবৃত্তি একাধিক CPU কোরে সমান্তরালভাবে রান করা হয়। এটি সিস্টেমের শক্তি সম্পূর্ণ ব্যবহার করতে সাহায্য করে।
  2. বড় ডেটাসেটের জন্য উপযোগী: যখন ডেটাসেট বড় হয় এবং একাধিক গণনা করতে হয়, তখন DO লুপ পারালালাইজেশন দ্রুত গণনা করার সুযোগ দেয়।
  3. সহজ ব্যবহার: OpenMP ডিরেকটিভ ব্যবহার করে সহজে পারালাল কম্পিউটিং করা যায়, যা কোডের পরিবর্তন এবং রক্ষণাবেক্ষণকে সহজ করে তোলে।

উপসংহার

ফোরট্রানে DO লুপ Parallelization OpenMP এর মাধ্যমে খুবই সহজ এবং কার্যকরীভাবে করা যায়। এটি প্রোগ্রামটির কার্যকারিতা অনেক উন্নত করে এবং বড় ডেটাসেটের প্রক্রিয়াকরণ দ্রুত করতে সহায়ক। আপনি OpenMP ডিরেকটিভগুলির মাধ্যমে কোডের পারফরম্যান্স বৃদ্ধি করতে পারেন এবং এটি মডুলার এবং পুনঃব্যবহারযোগ্য করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...