समानांतर गणना की मदद से टेक्स्ट में अक्षरों की आवृत्ति गिनिए।
समानांतरता का मतलब है उन कामों को साथ-साथ करना जिन्हें एक के बाद एक करके भी किया जा सकता है। इसका एक आम उदाहरण अक्षरों की आवृत्ति गिनना है। टेक्स्ट की सूची में हर अक्षर की कुल आवृत्ति निकालने के लिए समानांतरता अपनाइए।
C++ में समानांतरता पाने के कई तरीके हैं। Exercism का ऑनलाइन रनर C++17 को सपोर्ट करता है, इसलिए आप एल्गोरिदम लाइब्रेरी की एक्ज़ीक्यूशन पॉलिसी इस्तेमाल कर सकते हैं। दूसरा तरीका है थ्रेड को खुद संभालना। लेकिन ध्यान रखिए कि एक थ्रेड बनाना काफी महंगा पड़ता है (थ्रेड पूल इस्तेमाल करने से मदद मिलेगी)।
अपने कंप्यूटर पर काम करते समय आप बेशक जो चाहें इस्तेमाल कर सकते हैं। लेकिन गैर-मानक लाइब्रेरी इस्तेमाल करने वाला हल Exercism के ऑनलाइन रनर पर शायद ही चलेगा।
अपने कंप्यूटर पर काम करते समय आप चाहें तो बेंचमार्क चलाकर अंदाज़ा लगा सकते हैं कि अलग-अलग कार्यान्वयन कितनी तेज़ी देते हैं।
CMake फ्लैग EXERCISM_INCLUDE_BENCHMARK चालू करने से बेंचमार्क चालू हो जाता है:
cmake -DEXERCISM_RUN_ALL_TESTS=1 -DEXERCISM_INCLUDE_BENCHMARK=1 .
GCC में C++ स्टैंडर्ड लाइब्रेरी (libstdc++) का कार्यान्वयन TBB पर निर्भर करता है।
अगर TBB उपलब्ध नहीं है, तो सीक्वेंशियल वर्ज़न इस्तेमाल किया जाएगा, भले ही समानांतर एक्ज़ीक्यूशन माँगा गया हो।
Ubuntu पर आपको libtbb-dev पैकेज इंस्टॉल करना होगा:
apt-get install libtbb-dev
macOS पर TBB इंस्टॉल करने के लिए आप Homebrew का इस्तेमाल कर सकते हैं:
brew install tbb
Clang libc++ में वर्ज़न 17 से समानांतर एल्गोरिदम के लिए प्रायोगिक और आंशिक सपोर्ट है।
इसे चालू करने के लिए -fexperimental-library कंपाइलर फ्लैग देना होता है।
Apple Clang 15 और उससे पहले के वर्ज़न समानांतर एल्गोरिदम को सपोर्ट नहीं करते।
Linux और macOS पर हम इस अभ्यास के लिए GCC (डिफ़ॉल्ट libstdc++ के साथ) इस्तेमाल करने की सलाह देते हैं।
Microsoft का MSVC कम से कम VS 2017 15.7 से समानांतर एल्गोरिदम को सपोर्ट करता है, और इसके लिए कोई अतिरिक्त लाइब्रेरी इंस्टॉल करने की ज़रूरत नहीं होती।
Exercism पर साइन अप कीजिए और C++ को 19 कॉन्सेप्ट100 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।
हम कंकरेंसी और समानांतरता के बीच के अंतर पर नज़र डालते हैं, और देखते हैं कि JavaScript, Go, Elixir तथा Rust जैसी भाषाएँ कौन-कौन से अलग-अलग तरीके अपनाती हैं।