Task parallelism

Task parallelism (also known as function parallelism and control parallelism) is a form of parallelization of computer code across multiple processors in parallel computing environments. Task parallelism focuses on distributing tasks—concurrently performed by processes or threads—across different processors. In contrast to data parallelism which involves running the same task on different components of data, task parallelism is distinguished by running many different tasks at the same time on the same data.[1] A common type of task parallelism is pipelining, which consists of moving a single set of data through a series of separate tasks where each task can execute independently of the others.

Description

In a multiprocessor system, task parallelism is achieved when each processor executes a different thread (or process) on the same or different data. The threads may execute the same or different code. In the general case, different execution threads communicate with one another as they work, but this is not a requirement. Communication usually takes place by passing data from one thread to the next as part of a workflow.[2]

As a simple example, if a system is running code on a 2-processor system (CPUs "a" & "b") in a parallel environment and we wish to do tasks "A" and "B", it is possible to tell CPU "a" to do task "A" and CPU "b" to do task "B" simultaneously, thereby reducing the run time of the execution. The tasks can be assigned using conditional statements as described below.

Task parallelism emphasizes the distributed (parallelized) nature of the processing (i.e. threads), as opposed to the data (data parallelism). Most real programs fall somewhere on a continuum between task parallelism and data parallelism.[3]

Thread-level parallelism (TLP) is the parallelism inherent in an application that runs multiple threads at once. This type of parallelism is found largely in applications written for commercial servers such as databases. By running many threads at once, these applications are able to tolerate the high amounts of I/O and memory system latency their workloads can incur - while one thread is delayed waiting for a memory or disk access, other threads can do useful work.

بدأ استغلال التوازي على مستوى الخيوط في الانتشار في سوق الحواسيب المكتبية مع ظهور المعالجات الدقيقة متعددة النوى . ويعود ذلك إلى أنه، لأسباب مختلفة، أصبح من غير العملي بشكل متزايد زيادة سرعة الساعة أو عدد التعليمات لكل دورة ساعة لنواة واحدة. إذا استمر هذا التوجه، فسيتعين تصميم تطبيقات جديدة تستخدم خيوطًا متعددة للاستفادة من الزيادة في القدرة الحاسوبية المحتملة. وهذا يختلف عن ابتكارات المعالجات الدقيقة السابقة التي كانت تُسرّع فيها التعليمات البرمجية الموجودة تلقائيًا بتشغيلها على حاسوب أحدث/أسرع.

مثال

يوضح الكود الزائف أدناه التوازي في تنفيذ المهام:

برنامج: ... إذا كانت وحدة المعالجة المركزية = "أ" قم بتنفيذ المهمة "أ" وإلا إذا كان CPU="b" قم بتنفيذ المهمة "ب" نهاية الشرط ... نهاية البرنامج

يهدف البرنامج إلى إنجاز مهمة إجمالية ("أ + ب"). إذا كتبنا الكود كما هو موضح أعلاه وشغلناه على نظام ثنائي المعالجات، فسيقوم بيئة التشغيل بتنفيذه على النحو التالي.

  • في نظام SPMD (برنامج واحد، بيانات متعددة)، سيقوم كلا المعالجين بتنفيذ التعليمات البرمجية.
  • في بيئة متوازية، سيتمكن كلاهما من الوصول إلى نفس البيانات.
  • تُفرّق عبارة "if" بين وحدات المعالجة المركزية. ستقرأ وحدة المعالجة المركزية "a" القيمة "صحيح" في عبارة "if"، وستقرأ وحدة المعالجة المركزية "b" القيمة "صحيح" في عبارة "else if"، وبالتالي سيكون لكل منهما مهمتها الخاصة.
  • الآن، يقوم كلا المعالجين بتنفيذ كتل برمجية منفصلة في وقت واحد، ويؤديان مهامًا مختلفة في نفس الوقت.

الكود الذي تم تنفيذه بواسطة وحدة المعالجة المركزية "أ":

برنامج: ... قم بتنفيذ المهمة "أ" ... نهاية البرنامج

الكود الذي تم تنفيذه بواسطة وحدة المعالجة المركزية "ب":

برنامج: ... قم بتنفيذ المهمة "ب" ... نهاية البرنامج

يمكن الآن تعميم هذا المفهوم ليشمل أي عدد من المعالجات.

الدعم اللغوي

يمكن دعم التوازي في المهام في لغات البرمجة العامة إما من خلال وظائف مدمجة أو مكتبات. ومن الأمثلة البارزة على ذلك:

يمكن العثور على أمثلة للغات المتوازية ذات التفاصيل الدقيقة في مجال لغات وصف الأجهزة مثل Verilog و VHDL .

انظر أيضاً

مراجع

  1. ريندرز، جيمس (10 سبتمبر 2007). "فهم التوازي بين المهام والبيانات" . ZDNet . تم الاطلاع عليه بتاريخ 8 مايو 2017 .
  2. كوين، مايكل ج. (2007). البرمجة المتوازية بلغة C باستخدام MPI و OpenMP (تحرير تاتا ماكجرو هيل ). نيودلهي: دار نشر تاتا ماكجرو هيل. ISBN  978-0070582019.
  3. هيكس، مايكل. "أساسيات التزامن" (ملف PDF) . جامعة ميريلاند: قسم علوم الحاسوب . تم الاطلاع عليه بتاريخ 8 مايو 2017 .