المسارات
/
C++
C++
/
التمارين
/
تكرار الحروف بالتوازي
تكرار الحروف بالتوازي

تكرار الحروف بالتوازي

متوسط

التعليمات

احسب تكرار الحروف في النصوص باستخدام الحوسبة المتوازية.

التوازي يعني إنجاز مهام على التوازي يمكن أيضًا إنجازها بشكل تسلسلي. مثال شائع هو حساب تكرار الحروف. استخدم التوازي لحساب التكرار الكلي لكل حرف في مصفوفة من النصوص.

ملاحظات إضافية حول التنفيذ بلغة C++

توجد عدة أساليب لتحقيق التوازي في 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، يمكنك استخدام Homebrew لتثبيت TBB:

brew install tbb

يقدّم Clang libc++ بدءًا من الإصدار 17 دعمًا تجريبيًا جزئيًا للخوارزميات المتوازية. لتفعيله، يجب تمرير علامة المترجم -fexperimental-library.

لا تدعم إصدارات Apple Clang حتى الإصدار 15 الخوارزميات المتوازية.

على Linux وmacOS ننصح باستخدام GCC (إلى جانب libstdc++ الافتراضية) في هذا التمرين.

يدعم MSVC من Microsoft الخوارزميات المتوازية منذ VS 2017 15.7 على الأقل، دون الحاجة إلى تثبيت أي مكتبة إضافية.

تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
C++ Exercism

مستعد لبدء تكرار الحروف بالتوازي؟

سجّل في Exercism لتتعلّم وتتقن C++ عبر 19 مفهومًا100 تمرين، وإرشاد بشري حقيقي، وكل ذلك مجانًا.

تعمّق في تكرار الحروف بالتوازي!

نستكشف الفروق بين التزامن والتوازي، ونطّلع على أساليب مختلفة تعتمدها لغات مثل JavaScript وGo وElixir وRust.