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
| Feature | Multi-threading | Parallel Processing |
|---|---|---|
| Number of threads/processes | Multiple threads within a single process | Multiple processes running simultaneously |
| Shared memory | Threads share memory within the same process | Processes do not share memory, use message passing |
| Efficiency | Suitable for tasks that require shared resources | Ideal for tasks that can be independently distributed |
| Complexity | Easier to implement but can result in race conditions | Requires more coordination between processes |
Conclusion
- Multi-threading এবং Parallel Processing হল দুটি গুরুত্বপূর্ণ কৌশল যা কোডের কর্মক্ষমতা বাড়ানোর জন্য ব্যবহার করা হয়।
- Multi-threading একাধিক থ্রেড ব্যবহার করে একাধিক কাজ সমান্তরালে সম্পাদন করতে সহায়ক।
- Parallel Processing একাধিক প্রসেসের মাধ্যমে একাধিক কোরে বা সিপিইউতে কাজ সম্পাদন করে।
- জুলিয়া ভাষায়
@threadsএবং@distributedম্যাক্রো ব্যবহার করে সহজেই থ্রেডিং এবং প্যারালাল প্রসেসিং করা যায়।
এই প্রযুক্তি দুটি বিশেষভাবে ব্যবহৃত হয় যখন একটি কাজ অনেক বেশি সময় নেয় এবং আপনি তা একাধিক প্রসেস বা থ্রেডে ভাগ করে দ্রুত করতে চান।
Read more