زبان برنامه نویسی Parallel Python

زبان برنامه نویسی Parallel Python

پایتون یک زبان برنامه نویسی سطح بالا ، تعاملی ، انعطاف پذیر ، با ویژگیها و کاربرد هایی زیاد ، شئ گرا ، تفسیر شده و امروزی است که توسط خَودو فان روسوم در سال ۱۹۹۱ در کشور هلند طراحی شد. فلسفه ایجاد آن تاکید بر دو هدف اصلی خوانایی بالای برنامه‌های نوشته شده و کوتاهی و بازدهی نسبی بالای آن است.کلمات کلیدی و اصلی این زبان به صورت حداقلی تهیه شده‌اند و در مقابل کتابخانه‌هایی که در اختیار کاربر است بسیار وسیع هستند. یک کار غیر معمول که در طراحی این زبان انجام گرفته استفاده از فاصله و جلوبردن متن برنامه برای مشخص کردن بلوک‌های مختلف کد است.

پایتون مدل‌های مختلف برنامه نویسی (از جمله شیء گرا و برنامه نویسی دستوری و تابع محور) را پشتیبانی می‌کند و برای مشخص کردن نوع متغییرها از یک سامانهٔ پویا استفاده می‌کند.این زبان از زبان‌های برنامه نویسی مفسر بوده و به صورت کامل یک زبان شی‌گرا است که در ویژگی‌ها با زبانهای تفسیری پرل، روبی، اسکیم، اسمال‌تاک و تی‌سی‌ال مشابهت دارد و از مدیریت خودکار حافظه استفاده می‌کند .پایتون بیش‌تر به عنوان یک زبان اسکریپت‌نویسی استفاده می شود اما گاهی به عنوان یک زبان برنامه نویسی هم استفاده می شود. بر اساس آمار موتورهای جستجو پایتون ۸مین زبان برنامه‌نویسی پرطرفدار جهان است.

در سیستم عامل های مختلف از قبیل Unix/Linux, Mac OS X, Windows قابل استفاده می باشد. پایتون منبع باز بوده که حقوق معنوی مالکیت آن به بنیاد نرم افزار پایتون تعلق دارد. این نرم افزار دارای ورژن های 2.x و 3.x می باشد که نسخه ی 3 آن با نسخه ی 2 سازگار نمی باشد.

با توجه به تعاریف بالا ، دلایل اصلی استفاده از پایتون که میتوان از آنها به عنوان ویژگی های پایتون نامبرد را میتوان در موارد زیر خلاصه کرد :

  1. توسعه ی برنامه سریع
  2. برای یادگیری نسبتا آسان است.
  3. تعاملی بودن
  4. بستر نرم افزاری آن در سیستم عامل های ویندوز ، لینوکس و OS/X قابل اجراست.
  5. این زبان دارای بسته های متعددی از قبیل زیر است :
  • Numpy : برای محاسبات عددی
  • Matplotlib – plotting
  • Ipython : پوسته ی تعاملی
  1. سینتکس (syntax) ساده
  2. برای نوشتن کد آسان است و بخوبی قابل خواندن است.
  3. کتابخانه ی استاندارد بزرگ
  4. دارای بسیاری از کتابخانه های third party:
  • Numpy, Scipy
  • Mpi4py
  • و…
  1. پایتون برای توسعه ی کاربرد های سریع و انعطاف پذیر قابل استفاده است ، مثلا :
  • برای توسعه دادن ، تست و اجرا کردن اسکریپت ها آسان و سریع است.
  • این زبان full featured است و در موقع نیاز با برنامه نویسی سطح بالا مثل برنامه نویسی شئ گرایی سازگار میشود.
  1. دارای پاسخ دهی سریع است و در مواقعی که به اندازه کافی سریع نباشد ، میتواند به آسانی به کد های کامپایل شده متصل شود.

نوع داده هایی که در این زبان برنامه نویسی بکار می رود به شرح زیر است :

  1. Integers    
  2. Float        
  3. Complex numbers 
  4. عملیات اصلی– +, -, * , / and **
  5. رشته ها در میان “ یا ‘ قرار می گیرند و یا عملوندهای – + و *                                                                                                                 

 

 

 

6. پایتون یک زبان تایپ شده ی پویا است.

7. متغیر ها دارای یک نوع هستند.

  • انواع ناسازگار نمیتوانند ترکیب شوند.

در مورد پویا بودن پایتون می توان به دو مورد زیر اشاره کرد :

  1. بدون توابع جداگانه برای انواع داده های مختلف                                                                     
  2. با هر نوع عددی کار می کند.
    • بدونکدهای تکراریبه عنوان مثال،برای اعدادحقیقی و مختلط

پایتون رابط کاربر را برای Warp فراهم میکند. Warp یک چارچوب (framework) برای مدل شتاب دهنده حرف (particle accelerator modeling)

هدف آنست که موازی سازی از دید کاربر نامرئی باشد :

پایتون در مورد لیست ،دارای ساختمان داده ی قدرتمندی است که در این مورد میتوان به موارد زیر اشاره کرد :

  1. لیست های پایتون آرایه های پویا هستند.
  2. لیست آیتم ها بصورت فهرست شده هستند (فهرست از صفر شروع می شود)
  3. لیست آیتم می تواند هر شئی از پایتون باشد ، آیتم ها میتوانند از انواع مختلف باشند.
  4. آیتم های جدید میتوانند به هر مکانی از لیست اضافه شوند.
  5. آیتم ها میتوانند از هر مکانی از لیست حذف شوند.

بعنوان مثالی از لیست، در ادامه نمونه ای با کد c و همچنین پایتون آورده شده :

ابتدا با کد c :

#include <stdio.h>

#include <stdlib.h>

int comp(const void * a,const void * b)

{

  const int *ia = (const int *)a;

  const int *ib = (const int *)b;

  return *ia  ­ *ib;

}

int main(int argc, char **argv) {

  int* array;

  int i;

  array = (int*) malloc(3*sizeof(int));

  array[0] = 4;

  array[1] = 2;

  array[2] = 6;

  int* array2;

  array2 = (int*) malloc(4*sizeof(int));

  for ( i=0; i < 3; i++ )

    array2[i] = array[i];

  array2[3] = 1;

  free(array);

  array = array2;

 printf(“Before sorting\n”);

  for ( i=0; i < 4; i++ )

    printf(“%d “, array[i]);

  printf(“\n”);

  qsort(array, 4, sizeof(int),comp) ;

  printf(“After sorting\n”);

  for ( i=0; i < 4; i++ )

    printf(“%d “, array[i]);

  printf(“\n”);

}

حالا با کد پایتون :

array = [4, 2, 6]

array.append(1)

print “Before sorting”, array

array.sort()

print “After sorting”, array

از ویژگی های بارز دیگر پایتون می توان به ساختمان داده ی قدرتمند واژه نامه آن اشاره کرد :

  1. واژه نامه ها بصورت آرایه های انجمنی هستند.
  2. لیست نامرتب جفت های key – value
  3. مقادیر (Values) بوسیله ی کلید ها فهرست شده هستند.
  4. کلید ها می توانند بصورت رشته و یا اعداد باشند.
  5. مقادیر می توانند هر شئ پایتون یاشد.

مثالی از واژه نامه در پایتون :

دیتا برای عناصر شیمیایی

 

بعنوان خلاصه ای ویژگی های پایتون می توان به موارد زیر اشاره کرد :

  1. پایتون بشدت میتواند عملکرد و کارایی برنامه نویس را افزایش دهد.
  2. ساختمان داده ی قدرتمند
  3. شئ گرایی
  4. پردازش متن و ورودی/خروجی ساده
  5. نوشتاری پویا
  6. از پایتون می تواندرانبوه موازیمحاسبات با کارایی بالااستفاده کرد.
  7. ترکیب پایتون با c دارای مزایای بسیاریست :
  • دارای عملکرد و کارایی سطح بالا برای برنامه نویس
  • دارای اجرای عملکرد سطح بالا
  1. GPMA : 25% از حداکثر عملکرد و کارایی ، با 2048 هسته
  2. رابط مستقیم
  3. رابط کار
  4. MPI تعاملی

اگر زبان پایتون را با زبان c مقایسه کنیم ، به نتایج زیر خواهیم رسید :

در مورد پایتون :

  1. رشد و توسعه ی سریع
  2. اجرای کند
  3. الگوریتم های سطح بالا

در مورد زبان c :

  1. اجرای سریع
  2. رشد و توسعه ی کند
  3. کرنرلهای عددی اصلی

پایتون چگونه کار میکند؟

معماری :

  1. موتور
  • وظیفه ی موتور این است که فرمان ها (commands) را در بستر شبکه حرکت دهد.
  • به ازای هر هسته از یک موتور استفاده می شود.

Blocks code – : کنترل کننده دارای یک API ناهمزمان

  1. کنترل کننده ی client
  • رابطی برای کار کردن با مجموعه ای از موتورها
  • هاب
  • مجموعه ای از زمان بندی

معماری موازی

  1. هاب
  • مسیر اتصالات موتور ، schedulers و clients را نگه میدارد.
  • حالت خوشه ای دارد.
  1. Scheduler
  • تمام اقداماتی که میتواند در موتور صورت گیرد ، از طریق یک scheduler انجام میشود.

 

موتورهای خود را روشن کنید!:

  1. ساده ترین روش

ipcluster start –n=4 –

  1. روش های دیگر شامل :

Ipcontroller –

Ipengine –

  1. فراموش نکنید که موتور خود را خاموش کنید!

وقتی که برنامه پایتون اجرا می شود ، اعمال زیر را انجام دهید :

  1. py را در ماشین مقصد اجرا کنید.
  2. pp Server را در ماشین کنترل کننده اجرا کنید.
  3. تابعی که قادر به اجرا شدن بصورت موازی است را بنویسید.
  4. با اجرا کردن آن از پایتون لذت ببرید.

مثلا برای تقریب زدن انتگرال (sin(x بوسیله ی روش Riemann Sums :

ppserver.py را اجرا کنید :

 

import pp , commands , os , math , sys

# l i s t of hosts

hosts = [ “massive ” , ” harvard ” , ” blanca ” , ” la−plat a ” , ” uncompahgre ” , ” crestone ” ]

# conver t host names to i p addresses ( reqd by pp )

ppservers = t uple (map( lambda x : commands . getoutput (

” grep %s / etc / hosts | cut −f 1 “%x ) , hosts ) )

# s t a r t ppservers on machines i n ppservers

pr int ” St a r t i n g servers : “

# needed i f you have pp i n s t a l l e d on your l o c a l account

exp_arg = ’ expor t PYTHONPATH=/ s / chopin / b / grad / labador f / l i b / pyth

# run ppserver . py non−i n t e r a c t i v e l y

serv_arg = ’ ppserver . py < / dev / n u l l > / dev / n u l l & ’

for s in hosts :

os . spawnv ( os .P_WAIT, ’ / usr / bin / ssh ’ , [ ’ ’ , s , exp_arg , serv_arg ] )

 

 

سرور و کار را آغاز کنید :

# s t a r t the l o c a l job daemon

job_server = pp . Server ( ncpus=0 , ppservers=ppservers )

# the f u n c t i o n t h a t i s d i s t r i b u t e d to the machines

def i n t e g r a t e ( x1 , x2 , f ) :

# height and width of the box

h = f ( x2−((x1−x2 ) / 2 ) )

w = x2−x1

# area of the box

v = h∗w

return v

برای اجرای موازی آماده شوید :

 

# prepare v a r i a b l e s needed to p a r a l l e l i z e job

f = math . s in

dx = 0.001

max_i = 1

rng = [ i ∗dx for i in range ( i n t (max_i / dx ) ) ]

jobs = [ ]

# submi t jobs f o r p a r a l l e l execut ion

for x in rng :

jobs . append ( job_server . submi t ( integrate , ( x , x+dx , f ) , ( ) , ( ) ) )

# wai t f o r our jobs to f i n i s h

job_server . wai t ( )

 

 

مراجع :

Python in High performance computing)   Jussi Enkovaara(

http://ipython.org/ipython-doc/dev

http://minrk.github.com/scipy-tutorial-2011

Python in a Parallel Environment   (Dave Grote – LLNL & LBNL)

Parallel Python) presented by Adam Labadorf ,This email address is being protected from spambots. You need JavaScript enabled to view it.)

 برای اطلاع از فن آوری های نوین ارتباطی شبکه های وایرلس و ماکرویو و مراکز تلفنی تحت شبکه از کانال تلگرامی ما به آدرسهای Wireless_tech@ و Voip_Tech@  دیدن فرمایید.

ارسال نظر

آدرس ایمیل شما منتشر نخواهد شد.