Multi-threading এবং Parallel Processing

Concurrency and Parallelism (কনকারেন্সি এবং প্যারালালিজম) - জুলিয়া (Julia) - Computer Programming

402

Multi-threading এবং Parallel Processing হল কম্পিউটিংয়ের দুইটি শক্তিশালী কৌশল যা কোডের কর্মক্ষমতা এবং কার্যক্ষমতা বাড়াতে সহায়ক। জুলিয়া প্রোগ্রামিং ভাষায় এই দুটি কৌশল ব্যবহার করে আপনি আপনার কোডকে একাধিক কোরে বা থ্রেডে ভাগ করে দ্রুততর করতে পারবেন।

Multi-threading in Julia

Multi-threading হল একাধিক থ্রেড ব্যবহার করে একটি প্রোগ্রামের মধ্যে একাধিক কাজ (tasks) একসাথে সম্পাদন করার প্রক্রিয়া। একাধিক থ্রেড CPU কোরের উপর কাজ ভাগ করে দিয়ে কোডের কর্মক্ষমতা উন্নত করে।

Julia তে Multi-threading শুরু করা

জুলিয়া ভাষায় থ্রেডিং শুরু করতে Threads মডিউল ব্যবহার করা হয়। জুলিয়া থ্রেডিং ব্যবস্থাপনা সাধারণত @threads ম্যাক্রো দ্বারা পরিচালিত হয়।

Multi-threading এর মৌলিক উদাহরণ

using Base.Threads

function compute_square(x)
    return x * x
end

function parallel_computation()
    results = Vector{Int}(undef, 10)
    @threads for i in 1:10
        results[i] = compute_square(i)
    end
    return results
end

println(parallel_computation())

এখানে, @threads ম্যাক্রো ব্যবহার করা হয়েছে যাতে compute_square ফাংশনটি ১০টি আলাদা থ্রেডে চলতে পারে। এটি 10টি স্কোয়ার গণনা করবে এবং একসাথে প্রক্রিয়া করবে, যা কর্মক্ষমতা বাড়ায়।

Threads মডিউল এবং থ্রেড সংখ্যা নির্ধারণ

আপনি আপনার জুলিয়া পরিবেশে থ্রেডের সংখ্যা কনফিগার করতে পারেন। এটি JULIA_NUM_THREADS পরিবেশ চলক দ্বারা নিয়ন্ত্রিত হয়।

থ্রেড সংখ্যা নির্ধারণ:

export JULIA_NUM_THREADS=4

এটি জুলিয়া সেশন চলাকালীন ৪টি থ্রেড ব্যবহার করবে।

Thread-safe ফাংশন ব্যবহার

জুলিয়া ফাংশনগুলি thread-safe হতে হবে, যাতে একাধিক থ্রেডে একসাথে কাজ করার সময় কোনও ডেটা কনফ্লিক্ট বা রেস কন্ডিশন না হয়।

counter = 0

# সিঙ্ক্রোনাইজড থ্রেড ব্যবহার করা
function increment_counter()
    global counter
    counter += 1
end

@threads for i in 1:1000
    increment_counter()
end

println(counter)  # আউটপুট: 1000

এখানে, আপনি counter ভ্যারিয়েবলটি একাধিক থ্রেডে অ্যাক্সেস করছেন, তবে এটি থ্রেড-সেফ হতে হবে যাতে কোনো রেস কন্ডিশন সৃষ্টি না হয়।


Parallel Processing in Julia

Parallel Processing হল এমন একটি প্রক্রিয়া যেখানে একাধিক প্রসেস একই সময়ে একাধিক কোরে বা সিপিইউতে চলতে থাকে। এটি একাধিক কম্পিউটিং ইউনিট ব্যবহার করে একটি কাজ দ্রুততর করার প্রক্রিয়া।

Parallel Computing in Julia

জুলিয়া ভাষায় parallel processing করতে @everywhere ম্যাক্রো ব্যবহৃত হয়। এটি বিভিন্ন প্রসেসে কোড বিতরণ করতে সাহায্য করে।

Parallel Processing এর মৌলিক উদাহরণ

using Distributed

# ৪টি প্রসেস যোগ করা
addprocs(4)

@everywhere function compute_square(x)
    return x * x
end

# একাধিক প্রসেসে কাজ বিতরণ
results = @distributed for i in 1:10
    compute_square(i)
end

println(results)

এখানে, addprocs(4) চারটি প্রসেস যোগ করেছে এবং @distributed ম্যাক্রো দ্বারা কাজটি চারটি আলাদা প্রসেসে বিতরণ করা হয়েছে। প্রতিটি প্রসেস তার নিজস্ব স্কোয়ার গণনা করবে।

@everywhere এবং @distributed

  • @everywhere ম্যাক্রো ব্যবহার করে কোডের সমস্ত অংশ সবার জন্য উপলব্ধ করা হয়।
  • @distributed ম্যাক্রো ব্যবহার করে কাজটি একাধিক প্রসেসে বিতরণ করা হয়।

Data Parallelism এবং Task Parallelism

Data Parallelism হল একটি কৌশল যেখানে একটি কাজের উপাদানগুলোকে বিভিন্ন প্রসেসে ভাগ করে নেওয়া হয়। Task Parallelism হল একটি কৌশল যেখানে বিভিন্ন আলাদা কাজ একসাথে চলতে থাকে।

Parallel Processing with Shared Data

Shared Data ব্যবহার করলে, একাধিক প্রসেস একে অপরের ডেটা শেয়ার করতে পারে। তবে এটি data race বা race conditions তৈরি করতে পারে। এই ধরনের সমস্যা এড়াতে atomic operations বা locks ব্যবহার করা হয়।

@everywhere begin
    counter = 0
    function increment_counter()
        global counter
        counter += 1
    end

    # সিঙ্ক্রোনাইজড ভাবে থ্রেডের মধ্যে ডেটা অ্যাক্সেস
    @distributed for i in 1:1000
        increment_counter()
    end
end

println(counter)  # আউটপুট: 1000

এখানে increment_counter() ফাংশনটি একাধিক প্রসেসে একযোগে এক্সিকিউট হয়ে কাউন্টার বাড়িয়ে দেয়।


Differences between Multi-threading and Parallel Processing

FeatureMulti-threadingParallel Processing
Number of threads/processesMultiple threads within a single processMultiple processes running simultaneously
Shared memoryThreads share memory within the same processProcesses do not share memory, use message passing
EfficiencySuitable for tasks that require shared resourcesIdeal for tasks that can be independently distributed
ComplexityEasier to implement but can result in race conditionsRequires more coordination between processes

Conclusion

  • Multi-threading এবং Parallel Processing হল দুটি গুরুত্বপূর্ণ কৌশল যা কোডের কর্মক্ষমতা বাড়ানোর জন্য ব্যবহার করা হয়।
  • Multi-threading একাধিক থ্রেড ব্যবহার করে একাধিক কাজ সমান্তরালে সম্পাদন করতে সহায়ক।
  • Parallel Processing একাধিক প্রসেসের মাধ্যমে একাধিক কোরে বা সিপিইউতে কাজ সম্পাদন করে।
  • জুলিয়া ভাষায় @threads এবং @distributed ম্যাক্রো ব্যবহার করে সহজেই থ্রেডিং এবং প্যারালাল প্রসেসিং করা যায়।

এই প্রযুক্তি দুটি বিশেষভাবে ব্যবহৃত হয় যখন একটি কাজ অনেক বেশি সময় নেয় এবং আপনি তা একাধিক প্রসেস বা থ্রেডে ভাগ করে দ্রুত করতে চান।

Content added || updated By
Promotion

Are you sure to start over?

Loading...