ورود

View Full Version : Seriality -vs- Parallelity



myid4ever
شنبه 09 خرداد 1394, 14:53 عصر
سلام
خوبین؟
سوال برنامه نویسانه دارم
ببخشید
من یه برنامه تو متلب نوشتم
یعنی زبانش فعلن مهم نیست، چون فکر میکنم توی همه ی زبان های برنامه نویسی دیگه هم این موضوع وجود داره.
ماهیت برنامه ی من، اجرای اون به صورت سریاله
اما میخوام کاری کنم که تا حد ممکن موازی به نظر برسه
لطفن اگه حوصله دارین توجه کنید
نمیدونم چطور توضیح بدم.
با یه مثال توضیح میدم.
فرض کنید که من توی سالن امتحانات نشستم.
دست بر قضا یه تقلب هم دارم که دوست دارم کل سالن از اون بهره مند بشن، چون جواب سوالی رو دارم که 6 نمره داره و دوست دارم همه این 6 نمره رو بگیرن..
پس کاری که میکنم چیه؟ تقلب رو به تعداد دلخواه توی برگه هایی می نویسم.
یه برگه رو میدم به نفر جلویی و بهش میگم : نوشتی بده به جلوییت
نفر جلویی هم به همین ترتیب و .... تا زمانی که تقلب به انتهای سالن برسه
این از این
تا اینجا همه چیز به صورت سریال انجام شده
اما موضوعی که هست چیه؟
توی دنیای واقعی اینجوری نیست که من تقلب رو بدم به جلویی و منتظر بشینم تا برگه به انتهای سالن برسه و بعد برگه تقلب بعدی رو بدم به نفر پشت سری
درواقع کاری که میخوام بکنم چیه؟
میخوام همون زمان که یه برگه تقلب رو میدم به نفر جلویی ، بعدش سرمو برگردونم عقب و یه برگه هم بدم به نفر پشت سری و بعدش به نفر راستی و بعدش به نفر چپی...
درواقع تصور کنید که من یه گره توی شبکه هستم، و از این قابلیت برخوردارم که همزمان بسته هایی رو به چند جهت دلخواه ارسال کنم.
متوجه منظورم شدین؟
اینجا باز همه چیز به صورت سریاله ، اما اگر دقت کنید یه رگه هایی از موازی بودن رو در خودش داره، چون من دیگه منتظر نمیشینم تا برگه به ته کلاس برسه و بعد برگه های تقلب بعدی رو به دوستای دیگه برسونم !

میشه راهنمایی کنید که راه حل این مشکل چیه؟

درضمن تصور کنید که من دقیقن یه همچین موردی رو توی متلب پیاده سازی کردم

ممون میشم روش فکر کنید و اگه مقدوره من رو راهنمایی کنید.

اگه دوست داشتین بیشتر مسئله رو پیچیده تصور کنید، لطف کنید تصور بفرمائید که فرضن یه جای دیگه از سالن امتحانات ، یک نفر دیگه هم هست که همزمان با من ، یا قبل یا بعد از من میخواد همچین عملیاتی رو انجام بده...

rahnema1
شنبه 09 خرداد 1394, 15:15 عصر
سلام . ورود شما را خوش آمد میگم. اونقدر تو نخ این ماجرا رفتم که اصلا یادم رفتم چه کاری می خواد انجام بشه :لبخندساده: شما کدی را نوشتید یا مثلا چیز خاصی را می خواهید پیاده سازی کنید؟

myid4ever
شنبه 09 خرداد 1394, 18:24 عصر
سلام.
مرسی بابت خوشامد گویی.
بله برنامه موردنظر رو نوشتم، اما با این کیفیت که عرض کردم، یعنی توی برنامه من همه چیز داره به صورت ترتیبی انجام میشه. درواقع این بحث، بحث پیاده‎سازی یک پروتکل مسیریابی در شبکه حسگر هستش.
شاید تصویر ضمیمه درک بهتری از موضوعی که مدنظر بنده هستش رو در اختیار شما قرار بده.
131813
درضمن شما توی این تصویر، تصور کنید که روی این خطوط مستقیم، چندین node پشت سر هم واقع شدن و این مسیر تقریبن به صورت مستقیم داره طی میشه.
حالا اما مطابق با این تصویر، توی برنامه ای که من نوشتم، همه چیز داره به صورت ترتیبی داره انجام میشه.
یعنی چی؟ یعنی توی برنامه من اینجوری هستش که ابتدا رویداد شماره یک sense میشه، بعد عامل شماره یک برای این رویداد صادر میشه تا به مرزهای شبکه میرسه و متوقف میشه.
بعد از عامل شماره یک، نوبت عامل شماره دو هست که ارسال میشه و...
و به ازای هر رویداد فرضاً پنج عامل داره ارسال میشه.
و وقتی همه عاملهای رویداد شماره یک ارسال شدن، تازه میتونیم رویداد دوم رو sense کنیم و دوباره همین داستان تکرار بشه.
اما طبیعت شبکه ها اینجوری نیست، ینی همه چیز به صورت موازی و البته همزمان انجام میشه یعنی اینجوری نیست که صبر کنیم تا رویداد شماره یک اجساس بشه، بعد عامل های مرتبط با اون فرستاده بشن و بعد از اون رویداد شماره دو احساس بشه و عامل های مرتبط با اون فرستاده بشن و ....
فرضن شما تصور کنید که در میانه ارسال عامل شماره دو از رویداد اول هستیم که رویداد شماره دو در شبکه اتفاق میفته و به محض وقوع رویداد باید عامل‎های مرتبط با اون فرستاده بشن.
امیدوارم متوجه منظور بنده شده باشین.
با سپاس مجدد

rahnema1
شنبه 09 خرداد 1394, 19:38 عصر
نکات جالبی هست من هم در حد دانش خودم یه چیزهایی متوجه شدم حتما شما به طور تخصصی مقالات یا متون متعددی را برای این کار دارید مطالعه می کنید احتمالا در اونجا راه حل های مختلفی ارائه شده باشه
حالا این چیزهایی که شما اشاره می کنید خیلی ها مربوط به امکانات سخت افزاری می شه
الان سوال شما دقیقا چیه؟ یعنی می خواهید بدونید چه نرم افزارهایی مثلا برای شبیه سازی این شبکه می تونه استفاده بشه؟
یا در متلب یا سایر زبانهای برنامه نویسی چه امکاناتی وجود داره؟
من فکر می کنم شما یک از نرم افزارهای agent based modeling را بررسی کنید

myid4ever
شنبه 09 خرداد 1394, 20:33 عصر
مرسی از راهنمایی تون.
ولی فکر میکنم من با چیزایی که گفتم، ذهن شما رو منحرف کردم.
من اصلن دنبال چیزایی که شما فرمودین نیستم !
سوال من اینه که آیا راهکاری به نظر شما میرسه که من بتونم همین برنامه ای که دارم رو جوری در سورس کد اون اعمال تغییرات کنم که این ملزومات برآورده بشه یا خیر؟
برای من بحث سخت افزاری اصلن مطرح نیست ، من فکر میکنم به تکنیک های کد نویسی مربوط باشه.
به باور من میشه با تغییر کُد هم به این هدف نائل شد، اما راهکار رسیدن به این هدف رو هنوز نمیدونم.
مثلن یکی از چیزایی که خیلی ذهنم رو مشغول کرده و احساس میکنم شاید به جواب برسه ، اینه:
همونطور که عرض کردم شرط خاتمه حرکت یک عامل، رسیدن به مرزهای شبکه هستش.
من پیش خودم گفتم شاید بشه با یه تکنیکی، چیزی، یه جوری کد رو تغییر داد که بشه فرضن یک گام از عامل اول طی بشه (بررسی بشه که آیا شرط خاتمه برآورده شده یا خیر)، بعد یک گام از عامل دوم، (و بررسی شرط) ،بعد یک گام از عامل سوم (و بررسی شرط) و بعد یک گام از عامل چهارم (و بررسی شرط) و بعد یک گام از عامل پنجم (و بررسی شرط) و سپس دوباره برگردیم به پیمایش گام دوم از عامل یک و پیمایش گام دوم از عامل دو و پیمایش گام دوم از عامل سه و پیمایش گام دوم از عامل چهار و پیمایش گام دوم از عامل پنج و بعد پیمایش گام سوم از عامل ها و... تا زمانی که بالاخره شرط های خاتمه ارضاء بشن و مابقی تا زمان ارضای شرط به کار خودشون ادامه بدن....
اگه راهکاری به ذهن شما میرسه، ممنون میشم بعنوان پیشکسوت راهنمایی بفرمائید.
مرسی که مطالعه کردین.
تشکر.

rahnema1
شنبه 09 خرداد 1394, 21:21 عصر
همین طور که گفتم من اصلا به اندازه شما در این زمینه مطالعه نکردم و صورت مساله اون طور که برای شما روشنه برای من روشن نیست. مثلا این «عامل» چیه؟ مثلا مثل یک بسته داده هست که در شبکه فرستاده می شه؟ وقتی بسته فرستاده شد مگه می شه گامهای اون را سنجید؟
یعنی اون طور که مساله در ذهن شما شکل گرفته برای یکی مثل من واضح نیست