 رسم اللہ الرحمن الرحیم آج ہم موڈیول 159 دسکس کریں گے موڈیول 159 جو ہے this is performance analysis کس چیز کا performance analysis ہے جو ہم نے موڈیول 158 کے اندر program دیکھا تھا اس کو ہم مختلف aspect سے ران کریں گے اور دیکھیں گے اس کی performance کو analyze کریں گے جو پریویسل ہم نے program develop کیا تھا وہ بڑا ایک سیمپلسہ اس کے اندر just ایک تھریڈ کریٹ ہوتی ہیں جتنی آپ اس کو تھریڈ سپیسفائی کریں گے اتنی وہ تھریڈ کردے گا اور ہر تھریڈ ایک سپسیفک نمبر تک انکریمنٹ پردلیے کریے اور ایک انکریمنٹ پرفوم کریں گے جو وہ سپسیفک نمبر کو پہن جائے گی وہ تھریڈ جو ہے finish ہو جائے گی بڑی سیمپلسی تھریڈز ہے جس نے کو بہت کمپلک انٹڈر اپریشنی پرفوم کرنے اس نے just ہر دفعہ انکریمنٹ کرنے اور دلیے کرنے تو اس پریویس پرگرام تھا اس کے اندر اس کو امپلیمنٹ کیا گیا تھا using mutexes آپ بڑی اسانی سے وہی چیز امپلیمنٹ کر سکتے ہیں using interlocked functions اور using critical sections یہی پرگرام آپ critical sections کے لیے امپلیمنٹ کرنے یہی پرگرام آپ interlocked functions کے لیے execute کرنے اور mutex کے لیے یہ already implemented ہے اب آپ کے پاس تین کسم کی different implementations آگیں اب ان implementations کو ہم analyze کریں گے ان implementations کو run کریں گے ہم دیکھیں گے کونسا foster run ہوتا کس کے case کے اندر زادہ overheads آ رہے ہیں اگر کسی case میں زادہ overheads آ رہے ہیں تو اس کا of course running time بھی زادہ ہوگا اور کسی case میں اگر come overheads آ رہے ہیں تو اس کا running time کم ہوگا آپ کو یاد ہوگا ہم نے previously کئی modules پہلے ایک پرگرام بنایا تھا time p time p کو آپ کوئی بھی process pass کرتے تھے تو وہ process کا running time آپ کو دیتا تھا اور running time وہ تین respect سے دیتا تھا real time کے لحاظ سے user time کے لحاظ سے اور system time کے لحاظ سے تو آپ نے اب یہ جو تین implementations بنائیں گے بلکہ in fact 4 implementations ہیں ایک implementations ہے جس کے اندر کے آپ نے کوئی synchronization construct use نہیں کیا یہ اس پرگرام کے لئے تو work کرے گی لیکن of course اگر کوئی کیسا پرگرام ہے جس کے اندر آپ کو mutual exclusion enforce کرنے کی زود پڑتی ہے تو اس کے لئے یہ چیز work نہیں کرے گی اگر logically mutual exclusion کی ضرورت ہے تو آپ اس کو enforce کریں گے اور make sure کریں گے کوئی ایسے constructs use ہوں جو کے mutual exclusion enforce کریں گے تو اس کے اندر ہم نے ایک implementations بنائیں گے without any synchronization ns have for no synchronization اس کے اندر کوئی synchronization نہیں بھی اسے میں یہ پڑا چل جائے گا کہ اگر synchronization نہیں کرتے تو تب ہمارا پرگرام کتنار time لیتا ہے اور اگر synchronization کرتے ہیں تو تب کتنار لے گا اس کے difference ہمیں یہ پڑا چل جائے گا کہ کتنار overhead ہے تو جب ہم نے without any synchronization اس پوگرام کو ران کیا تو آپ اس کا real time بھی دیکھ سکتے ہیں اس کا user time بھی دیکھ سکتے ہیں اور اس کا system time بھی دیکھ سکتے ہیں پھر بعد میں آپ نے interlocked functions کو استعمال کیا mutual exclusion enforce کیا using interlocked functions جو parameters آپ pass کریں 32 number of threads اور جو variable کی value ہے وہ آپ ساروں کی case میں same ہے 32 is the number of threads and 256000 variable کی value یعنی کہ اس value تاکہ وہ reach کرے گی thread تو thread complete ہوگی اور concurrently کتنی thread چلیں گی 32 thread چلیں گی جو ہمارا loop تھا اس loop کے اندر 32 thread چلیں گی تو آپ کے پاس یہاں پہ اس case میں دیکھ سکتے ہیں کہ اتنا total running time آرہ تیسرہ case ہے جس کے اندر آپ نے کہ critical sections کو use کیا critical sections کو use کرتے ہیں آپ کے پاس یہ running time آرہ same parameters and 32 threads and 256000 variable کی value اور mute axis mx mute axis کو استمال کیا mute axis کو استمال کر کے آپ کے پاس یہ running time آرہ اب آپ اس کو اگر analyze کریں تو آپ کو پتہ چلے گا کہ یہ والا تو case ہے جب آپ نے کسی قسم کی mutual exclusion کیا آپ سب سے پہلے جو case ہے ns والا وہ case ہے جس کے اندر آپ نے کسی بھی طرح کا mutual exclusion کا construct use نہیں کیا اس کے اندر جو time آپ کو لگ رہا ہے اور in case of interlocked function جو آپ کو time لگ رہا ہے یہ دونوں تقریباً comparable ہے اس کا مذہب ہے interlocked function کے اندر minimum overhead بہت کم overhead ہے اور interlocked function کے اندر جو time لگ رہا ہے اور critical sections کے اندر دو time لگ رہا ہے اگر اس میں 2 folds کا فرق ہے تقریباً double a time critical sections سے time جو ہے تقریباً double ہو گیا اور جو last case ہے جس کے اندر کیا میو ٹیکسز کا استعمال کر رہے ہیں میو ٹیکسز کے اندر یہ case جو ہے یہ تقریباً 3-4 folds جو ہے یہ time جو ہے انکریز ہو جاتا ہے اس کا مذہب ہے اس سے بھی زیادہ time ہمیں consume ہو رہا ہے میو ٹیکسز کیا استعمال میں تو سب سے کم overhead ہمیں کس کا نظر آ رہا ہے interlocked functions کا کچھ تدادہ ہمیں جو overhead وہ نظر آ رہا ہے critical sections کا اور اس سے بھی زیادہ overhead ہمیں نظر آ رہا ہے میو ٹیکسز کا تو ہم نے اس کے اندر دکھا کہ جو ہمارے اگر ہم نے کوئی کسی کسم کی بھی سنکرانیزیشن نہیں use کی تو اس کے اندر least overhead آئے گا کوئی overhead نہیں آئے گا اور جب ہم نے interlocked functions کا استعمال کیا تو interlocked functions کے case کے اندر تقریباً same overhead آ رہا ہے اور critical sections کی جو cost ہے وہ تقریباً interlocked functions سے ڈبل ہے اور میو ٹیکسز کی cost وہ کئی folds ہے as compared to interlocked functions اس کے اندر ہم نے دیکھا ہے کہ جی ہم نے کتی threads use کی تھی ہم نے جو number of threads use کی تھی وہ 32 تھی جو older versions ہیں windows کے اس کے اندر جو critical sections وہ scale بال نہیں ہے وہ a specific amount of threads کیلئے تو ٹیک ہے اچھا کام کرتے ہیں لیکن اس سے زیادہ وہ تقریباً fail ہو جاتے ہیں لیکن higher versions کے اندر اس کے اندر optimization کی گئی ہے اور critical sections وہ کافی scale بال بنایا گیا اس کے اندر number of threads آپ انکریز کرنے یا number of processors انکریز کرنے تو performance کی پر بہت عدہ فرق نہیں پڑا کوئی بھی ہماری جو locking ہے کی سکیم ہے وہ of course no synchronization سے زادہ time لے گی کیوں کہ آپ کو پتا ہے کہ جب آپ نے mutual exclusion force کرنے تو serialization ہوگی ایک وقت میں ایک ہی thread وہ specific code کو execute کر سکے گی تو آپ کو جو وہ parallelism کا فائدہ ہے وہ فائدہ آپ اس دران نہیں اٹھا پاتے اور mutual exclusion کرنے بھی ضروری ہے اگر وہ نہیں کریں گے تو آپ کا result وہ consistent نہیں آئے گا تو آپ کا result کا accurate ہنا result کا صحی ہونہ وہ سب سے important ہے کیکہ تو اس لئے آپ mutual exclusion یا synchronization کو discord نہیں کر سکتے میو ٹیکسز جو ہے ہم نے دیکھا ہے کہ جو وہ slow ہے performance جو ہے اس کی وہ کم ہے اور even اگر number of processors آپ انکریز کرتے جائے تو ایک certain point کے beyond میو ٹیکسز کی performance جو ہے وہ کافی degrade ہونا شروع ہو جاتی ہے تو اس چیز کا analysis ہم ایک اور program کی مدد سے بھی یا ایک اور program کی مدد سے بھی یا ایسی program کو مختلف کسم کی computer پران کرکے مختلف کسم کی frameworks پران کرکے مزید analyze کر سکتے ہیں یہ آگے ہمارے پاس ایک اور table ہے جو اس چیز کو مزید specify کرا اس table کے اندر دیکھ سکتے ہیں آپ کے پاس مختلف کسم کی processes ہیں جو پہلا processor ہے اس کے اندر جسٹ ایک core ہے ایک ہی processor ہے اور 1.4 GHz اس کی speed ہے دوسری row کے اندر آپ کے پاس دو processors ہیں اور 2.0 GHz speed ہے اور تیسری row کے اندر 4 processors ہیں اور 2.4 GHz speed ہے اور 4th row کے اندر 8 processors ہیں اور 1.7 GHz speed ہے اس میں آپ دیکھ سکتے ہیں critical section کے استعمال جون جو number of processors انکریز ہو رہے ہیں critical section کے استعمال سے جو time duration ہے جو time لگے گا وہ reduce ہو رہے ہیں یعنی کہ جب ایک processor تا time ہے وہ 14 units ہے اور جبکہ 8 processors time ہے وہ 2 units ہے لیکن متaxis کے case کے اندر آپ دیکھ سکتے ہیں جون جو number of processors انکریز ہو رہے ہیں تو overheads ہیں وہ بھی انکریز ہو رہے ہیں آپ دیکھ سکتے ہیں ایک processor کے ساتھ جو time لگرا وہ 55 units ہے 4 کے ساتھ 118 units ہے اور 8 کے ساتھ مزید انکریز ہو گئے 262 units ہے تو متaxis اگر تو single processors ہے یا کم number of processors ہے تو تو کچھ optimally work لیکن ہمیں نظر آ رہا ہے جون جو number of processors انکریز کرتے جائیں گے تو متaxis کے case کے اندر بھی آپ کو huge overheads face کرنا پہنگے