Payamvdn/NorthPersian_fa_wiki huggingface dataset:
هاتاویز مونتاین پاینز (به انگلیسی: Hathaways Mountain Pines) یک منطقهٔ مسکونی در ایالات متحده آمریکا است که در شهرستان کالاوراس، کالیفرنیا واقع شده است. هاتاویز مونتاین پاینز ۱٬۰۵۱ متر بالاتر از سطح دریا واقع شده است.
هورلتون (به انگلیسی: Hurleton) یک منطقهٔ مسکونی در ایالات متحده آمریکا است که در شهرستان بیوت، کالیفرنیا واقع شده است. هورلتون ۴۸۷ متر بالاتر از سطح دریا قرار دارد.
ایندیان هیلز (به انگلیسی: Indian Hills) یک منطقهٔ مسکونی در ایالات متحده آمریکا است که در شهرستان کالاوراس، کالیفرنیا واقع شده است. ایندیان هیلز ۹۶۱ متر بالاتر از سطح دریا قرار دارد.
تخریب عصبی با تجمع آهن در مغز () یا به اختصار «NBIA» گروه ناهمگونی از اختلالات عصبی است که پژوهش ها دربارهٔ آنان ادامه دارد و در آنها، آهن در عقده های قاعده ای مغز رسوب می کند و موجب دیستونی پیشرونده و/یا علائم شبه پارکینسون و/یا سفتی عضلانی (اسپاسیته) و/یا تحلیل رفتن عصب چشم ها و/یا اضمحلال شبکیه و/یا اختلالات روان پزشکی مختلف و/یا اختلالات گوناگون عصبی می شود. برخی از این بیماری ها با چندین ژن در مسیر متابولیسم چربی مرتبط هستند. NBIA یک بیماری مجزا نیست، بلکه گروهی از بیماری های عصبی است که آهن در مغز رسوب کرده و اجسام کروی شکل آکسونی در دستگاه عصبی مرکزی به وجود می آید. تجمع آهن در هر نقطه ای از مغز ممکن است رخ دهد اما در نواحی توده سیاه، جسم مخطط، گوی رنگ پریده و هستهٔ دندانه دار مخچه شایع تر است. علائم این بیماری ها شامل ترکیبی از انواع اختلالات حرکتی، مشکلات روانی، تشنج، اختلالات بینایی و افت عملکرد ذهنی است. علت بروز این بیماری ها، جهش های متعدد در ژن هایی است که مستقیماً در متابولیسم آهن شرکت دارند به همراه اختلال در متابولیسم فسفولیپیدها، سِـرامیدها و برخی اختلالات لیزوزومی و همچنین جهش در ژن هایی اس
ت که هنوز عملکرد آن ها مشخص نشده است. بیماری در هر سنی می تواند آغاز شود: از کودکی تا میانسالی. انواع. گونه های دیگر. علاوه بر موارد فوق، چندین گونهٔ نادر و ناشناخته از NBIA شناسایی شده است که جزئیات آن به خوبی معلوم نیست. مشخصهٔ تمامی این ها نیز تجمع آهن در مغز و تخریب آن، به ویژه در ناحیهٔ عقده های قاعده ای است. تشخیص. بر حسب اینکه فرد چه علامتی دارد، اسکن حامل دوپامین مغز (DaTSCAN)، سونوگرافی فراصوتی داپلر جمجمه، برش نگاری با گسیل پوزیترون و گاهی ام آرآی از جمله روش هایی است که با آن ها می توان مکان رسوب آهن و انواع مختلف NBIA را تشخیص داد. در این مواقع، بیماری را به دو گروه تقسیم بندی می کنند: (۱) زودهنگام، پیشرفت سریع (۲) دیررس، پیشرفت آهسته. گروه اول، تظاهر کلاسیک بیماری است و گروه دوم تظاهر نامتداول آن است. تظاهر بیماری همچنین به سن فرد بستگی دارد. مثلاً چه میزان آهن رسوب یافته و توانایی های شناختی-ذهنی فرد چقدر است. درمان. درمان مؤثری برای این بیماری ها هنوز پیدا نشده است. در بسیاری از بیماران، تحریک الکتریکی گوی رنگ پریده، شدت دیستونی را کاهش می دهد، اما جلوی تخریب عصبی را نمی گیرد. مابین تظاهرات انو
اع مختلف این بیماری و همچنین این بیماری با سایر بیماری های مغز و اعصاب، هم پوشانی و شباهت هایی وجود دارد و همین موضوع موجب تشخیص اشتباه می شود. درمان های موجود علائم را کاهش یا بهبود می بخشد، اما جلوی رسوب آهن در مغز را نمی گیرند. داروهای عصبی-روانی همچون داروهای دوپامینرژیک، آنتی کولینرژیک و تترابنازین جهت درمان علائم استفاده می شوند، اما تأثیری بر سرانجام و عاقب بیماری ندارند.
کیستر (به انگلیسی: Kister) یک منطقهٔ مسکونی در ایالات متحده آمریکا است که در شهرستان بیوت، کالیفرنیا واقع شده است. کیستر ۱٬۴۷۱ متر بالاتر از سطح دریا واقع شده است.
کوماندورسکی ویلیج (به انگلیسی: Komandorski Village) یک منطقهٔ مسکونی در ایالات متحده آمریکا است که در شهرستان آلامدا، کالیفرنیا واقع شده است. کوماندورسکی ویلیج ۱۱۳ متر بالاتر از سطح دریا واقع شده است.
لاست سیتی (به انگلیسی: Lost City) یک منطقهٔ مسکونی در ایالات متحده آمریکا است که در شهرستان کالاوراس، کالیفرنیا واقع شده است. لاست سیتی ۳۲۱ متر بالاتر از سطح دریا قرار دارد.
لین پارک ایکرز (به انگلیسی: Lynn Park Acres) یک منطقهٔ مسکونی در ایالات متحده آمریکا است که در شهرستان کالاوراس، کالیفرنیا قرار داد. لین پارک ایکرز ۸۳۰ متر بالاتر از سطح دریا واقع شده است.
نیمسیو (به انگلیسی: Nimshew) یک منطقهٔ مسکونی در ایالات متحده آمریکا است که در شهرستان بیوت، کالیفرنیا واقع شده است. نیمسیو ۷۶۴ متر بالاتر از سطح دریا قرار دارد.
پاولتون (به انگلیسی: Powellton) یک منطقهٔ مسکونی در ایالات متحده آمریکا است که در شهرستان بیوت، کالیفرنیا قرار دارد. پاولتون ۱٬۱۰۴ متر بالاتر از سطح دریا واقع شده است.
وایت پاینز (به انگلیسی: White Pines) یک منطقهٔ مسکونی در ایالات متحده آمریکا است که در شهرستان کالاوراس، کالیفرنیا واقع شده است. وایت پاینز ۱٬۱۹۱ متر بالاتر از سطح دریا قرار دارد.
مالدن (به انگلیسی: Malden) یک منطقهٔ مسکونی در ایالات متحده آمریکا است که در شهرستان پرتر، ایندیانا واقع شده است. مالدن ۲۱۶ متر بالاتر از سطح دریا قرار دارد.
پوگو (به انگلیسی: Pogo) یک منطقهٔ مسکونی در ایالات متحده آمریکا است که در آلاباما واقع شده است. پوگو ۱۶۰٫۹۴ متر بالاتر از سطح دریا واقع شده است.
کارنیتین او-استیل ترانسفراز () که با نام اختصاری CRAT شناخته می شود، یک آنزیم است که در انسان توسط ژن «"CRAT"» کدگذاری می شود. این آنزیم واکنش شیمیایی زیر را کاتالیز می کند که طی آن ریشه استیل، موجب جایگزینی اتم هیدروژن در ریشهٔ هیدروکسیل اصلی، بجای کارنیتین می شود. اهمیت بالینی. جهش در ژن CRAT، فرد را در معرض ابتلا به مشکلات شدید مغزی و قلبی قرار می دهد. از طرفی کاهش فعالیت این آنزیم در بیماران مبتلا به آلزایمر دیده شده است. این آنزیم و خانوادهٔ آنزیمی مشابه اش، بطور بالقوه ممکن است از اهداف درمانی مهم در دیابت نوع ۲ و سایر بیماری ها باشند.
الیزابت والدهایم (زاده ۱۳ آوریل ۱۹۲۲ – درگذشته ۲۸ فوریه ۲۰۱۷) بانوی اول سابق اتریش بود. او همسر کورت والدهایم رئیس جمهور اتریش بین سال های ۱۹۸۶ تا ۱۹۹۲ (میلادی) بود. الیزابت والدهایم در ۲۸ فوریه ۲۰۱۷، در سن ۹۴ سالگی در وین درگذشت.
نیکولاس فون ورمان (۲۴ دسامبر ۱۸۹۵ - ۲۶ اکتبر ۱۹۵۹) یک ژنرال با پیشینه پروسی بود که در ارتش آلمان نازی خدمت میکرد. ژنرال فون ورمان بیشتر طول جنگ جهانی دوم را در عملیات های جبهه شرق سپری کرد و در سال ۱۹۴۴ در دوره کوتاهی فرمانده ارتش نهم را فرماندهی کرد. در همین مدت اندک او در سرکوب قیام ورشو دخالت داشت، اما این سرکوب شامل نابودی پایتخت لهستان و قتل عام تمام ساکنان آن به همراهی نیروهای اس اس بود. پس از آن در روز ۴ مه ۱۹۴۵ و در بحبوحه روزهای پایانی جنگ جهانی دوم، فون ورمان به عنوان فرمانده دژ آلپ که در حقیقت وجود خارجی نداشت منصوب شد. فون ورمان از دریافت کنندگان صلیب شوالیه آهنین است و نهایتاً در ۲۶ اکتبر ۱۹۵۶ در برشتس گادن فوت کرد.
در علم کامپیوتر، بهینه سازی برنامه یا بهینه سازی نرم افزار، روند اصلاح یک سیستم نرم افزاری است تا بعضی از جنبه های آن را کارآمدتر کند یا از منابع کمتر استفاده کند. به طور کلی، یک برنامه کامپیوتری ممکن است بهینه شود تا سریعتر اجرا شود یا بتوان آن را با ذخیره حافظه کمتر یا با استفاده از منابع دیگر یا حتی قدرت کمتری خلق کرد عمومی. اگر چه کلمه "بهینه سازی" ریشه در "بهینه"دارد، فرایند بهینه سازی برای تولید یک سیستم به طور مطلوب نادر است. سیستم بهینه تنها در یک برنامه یا برای یک مخاطب مطلوب است. ممکن است مقدار زمانی که یک برنامه برای انجام برخی کارها طی می کند یا حافظه بیشتری که مصرف می کند را کاهش دهد. در یک برنامه کاربردی که فضای حافظه در اصل کم است، ممکن است به صورت عمدی یک الگوریتم کندتر را برای استفاده از حافظه کمتر انتخاب شود. اغلب طراحی "یک اندازه که به همه اختصاص داده می شود " وجود دارد که در همه موارد به خوبی کار می کند، بنابراین مهندسان به منظور بهینه سازی ویژگی هایی که بیشترین توجه را به خود جلب می کنند، در کنار هم قرار می گیرند.. علاوه بر این تلاش لازم برای ساختن یک قطعه نرم افزاری به طور کامل بهینه است
- حتی درصورت ناتوانی برای هر گونه پیشرفت در ان - تقریباً همیشه بیش از معقول بودن برای مزایایی است که شامل می شود؛ بنابراین فرایند بهینه سازی ممکن است قبل از رسیدن به یک راه حل کاملاً مطلوب متوقف شود. خوشبختانه، اغلب موارد این است که بیشترین پیشرفت در اوایل روند انجام می شود. سطح بهینه سازی. بهینه سازی می تواند در سطوح مختلف رخ دهد. به طور معمول، سطوح بالاتر تأثیر بیشتری دارند و بعداً در یک پروژه تغییر می کنند و نیاز به تغییرات قابل توجهی دارند و اگر مجبور باشند تغییرات لازم را انجام دهند بازنویسی کامل خواهند شد؛ بنابراین بهینه سازی می تواند به طور معمول از طریق پالایش از بالا به پایین ادامه یابد، با دستاوردهای بزرگ تر اولیه و با کار کمتر به دست می آید، و پس از آن دستاوردهای کوچکتر و نیاز به کار بیشتر. با این حال، در برخی موارد عملکرد کلی بستگی به عملکرد بخش های بسیار پایین برنامه دارد و تغییرات کوچک در مراحل اولیه در مورد جزئیات پایین سطح می تواند تأثیرات ناخوشایندی داشته باشد. به طور معمول به بهره وری در یک پروژه توجه می شود - هرچند که این تغییرات قابل توجه است - اما بهینه سازی عمده اغلب به عنوان یک پالایش
در نظر گرفته می شود که دیر یا زود انجام شود. در پروژه های در حال اجرا دیگر، به طور معمول چرخه بهینه سازی وجود دارد، در حالیکه بهبود یک منطقه محدودیت های دیگری را نشان می دهد و معمولاً زمانی کاهش می یابد که عملکرد قابل قبول باشد یا سودو هزینه بیش از حد کوچک باشد. عملکرد بخشی از مشخصات برنامه است - یک برنامه که آهسته باشدبه طور غیرقابل اجتناب برای هدف مناسب نیست: یک بازی ویدیویی با ۶۰ هرتز (فریم در ثانیه) قابل قبول است، اما ۶ فریم در ثانیه غیرقابل قبول و خسته کننده است - عملکرد از ابتدا مورد بررسی قرار می گیرد تا اطمینان حاصل شود که سیستم قادر به ارائه عملکرد کافی می باشد و سیستم نهایی (با بهینه سازی) به عملکرد قابل قبول دست می یابد. این موضوع گاهی اوقات اینطور برداشت می شود که بهینه سازی همیشه می تواند دیر تر انجام شود، و در نتیجه سیستم های نمونه اولیه که - اغلب به میزان زیاد یا بیشتر هستند - و حتی سیستم هایی که در نهایت خرابی هستند، زیرا از لحاظ معماری نمی توانند به عملکردی که هدف خود قرار داده اند دست یابند. مانند اینتل ۴۳2 (1981)که سال ها همکاری را برای دستیابی به یک عملکرد قابل قبول مانند آن که (Java (1995
بتواند عملکرد قابل قبولی را با(HotSpot (1999 داشته باشد را انجام دادند. درجه ای که عملکرد بین نمونه اولیه و سیستم تولیدی را نشان می دهد تغییر می کند و چگونگی ارتقای آن بهینه سازی می شود، که می تواند منبع مهمی از عدم اطمینان و خطر نمونه باشد. در بالاترین سطح طراحی ممکن است بهینه سازی انجام شود تا بهترین استفاده را از منابع موجود، اهداف، محدودیت های مورد انتظار داشته باشیم. طراحی معماری یک سیستم عمدتاً بر عملکرد آن تأثیر می گذارد. به عنوان مثال، یک سیستم که وابسته به زمان تأخیر شبکه ها است (که در آن زمان تأخیر شبکه محدودیت اصلی عملکرد کلی است) بهینه سازی می شود تا زمان ان را به حداقل برساند، در حالت ایدئال یک درخواست واحد (یا هیچ درخواست، مانند یک پروتکل فشار) به جای چند دور دفعات صورت می گیرد در اصل نشان می دهد که انتخاب ها به اهداف طراحی بستگی دارد: هنگام طراحی یک کامپایلر، اگر تدوین سریع اولویت کلیدی باشد، طراحی یک کامپایلر یک گذر سریعتر از یک کامپایلر چند گذر (با فرض انجام کار مشابه) انجام می شود، اما اگر سرعت خروجی کد هدف باشد، یک کامپایلر چندتایی بهتر به هدف می رسد، حتی اگر طول بکشد. انتخاب پلاتفرم و زبا
ن برنامه نویسی در این سطح رخ می دهد و تغییر آن ها اغلب نیازمند بازنویسی کامل است، هرچند یک سیستم ماژولار ممکن است اجازه بازنویسی تنها برخی از مؤلفه ها را بدهد - مثلاً یک برنامه پایتون ممکن است بخش های عملکردی حیاتی را در C بازنویسی کند. سیستم، انتخاب معماری (مدل سرویس گیرنده-رویس دهنده ، همتابه همتا و غیره) در سطح طراحی رخ می دهد و ممکن است دشوار باشد، به خصوص اگر تمام اجزای سازنده را نمی توان جایگزین کرد (به عنوان مثال مشتریان قدیمی). با در نظر گرفتن یک طرح کلی، انتخاب خوبی از الگوریتم های کارآمد و ساختار داده ها و اجرای کارآمد این الگوریتم ها و ساختارهای داده ها، در ادامه آمده است. پس از طراحی، انتخاب الگوریتم ها و ساختارهای داده بر کارایی بیش از هر جنبه دیگر برنامه تأثیر می گذارد. به طور کلی، ساختار داده ها بیشتر از الگوریتم ها تغییر می کند، زیرا فرضیه ساختار داده ها و فرضیه های عملکرد آن در طول برنامه استفاده می شود، هرچند این می تواند با استفاده از انواع داده های انتزاعی در تعاریف تابع به حداقل برسد و تعاریف ساختار داده ها محدود شود به چند مکان برای الگوریتم ها این به طور عمده شامل اطمینان از اینکه الگور
یتم ها ثابت (O (1، لگاریتمی (O(log "n"، خطی (O ("n" یا در برخی موارد (log-line O(n log nدر ورودی (هر دو در فضا و زمان). الگوریتم هایی با پیچیدگی درجه دوم(O ("n" 2 در مقیاس شکست می یابند، و حتی الگوریتم های خطی باعث می شود که مشکلات به صورت مکرر فراخوانی شوند و به طور معمول با احتمالات ثابت یا لگاریتمی جایگزین شوند. فراتر از نظم نسبیت رشد، عوامل پایدار اهمیت دارد: الگوریتم کند تراز الگوریتم سریعتر یا کوچکتر (به عنوان ساده تر)، فقط زمانی هر دو با ورودی کوچک مواجه می شوند، که در واقعیت اتفاق بیفتد. اغلب الگوریتم ترکیبی بهترین عملکرد را به وجود می آورد، به این دلیل که این تغییرات با اندازه تغییر می کند. یک روش کلی برای بهبود عملکرد، اجتناب از کار است. یک مثال خوب استفاده از یک مسیر سریع برای موارد معمول است، بهبود عملکرد با اجتناب از کار غیر ضروری. به عنوان مثال، با استفاده از یک الگوریتم طرح بندی متن ساده برای متن لاتین، تنها تغییر در الگوریتم طرح پیچیده برای اسکریپت های پیچیده مانند دیواناگری. یکی دیگر از روش های مهم ذخیره سازی، به ویژه مموایز کردن، که از محاسبات بیش از حد جلوگیری می کند. با توجه به اهمیت ذخیره
سازی، اغلب سطوح ذخیره سازی در یک سیستم وجود دارد که می تواند مشکلاتی را از استفاده از حافظه ایجاد کند و مسائل مربوط به صحت از حافظه های غیرمجاز. فراتر از الگوریتم ها و اجرای آن ها در انتزاعی و ماشین آلات بتن و کد منبع سطح انتخاب می تواند تفاوت قابل توجهی است. برای مثال در اوایل C کامپایلر codice_1 شد و آهسته تر از codice_2 به صورت بی قید و شرط حلقه زیرا codice_3 ارزیابی ۱ و سپس یک پرش شرطی که تست شده اگر درست شد در حالی که codice_4 تا به حال بی قید و شرط پرش. برخی از بهینه سازی (مثل این یکی) امروزه می توان با بهینه سازی کامپایلر. این بستگی به منبع زبان دستگاه مورد نظر زبان و کامپایلر و می تواند دشوار به درک یا پیش بینی و تغییرات در طول زمان است و این کلید جایی که درک درستی از کامپایلر و کد دستگاه می تواند عملکرد را بهبود بخشد. حلقه-ناوردا کد حرکت و بازگشت ارزش بهینه سازی نمونه هایی از بهینه سازی است که کاهش نیاز به کمکی متغیر و حتی می تواند منجر به اجرای سریع تر و با اجتناب از دور-در مورد بهینه سازی. بین منبع و سطح کامپایل، دستورالعمل ها و فلگ های ساخت را می توان برای تنظیم گزینه های عملکرد در کد منبع و کامپ
ایلر به ترتیب استفاده کرد، از جمله استفاده از پیش پردازنده تعریف می شود که برای مثال برای غیرفعال کردن ویژگی های نرم افزار غیر ضروری، بهینه سازی برای مدل های خاص پردازنده یا قابلیت های سخت افزاری، یا پیش بینی شاخه، سیستم های توزیع نرم افزار مبتنی بر منبع مانند پورت های BSD و انتقال جنتو ها و این صورتی ازشکل بهینه سازی است. استفاده از یک کامپایلر بهینه سازی شده مستلزم اطمینان از اینکه برنامه اجرایی حداقل به همان اندازه که کامپایلر می تواند پیش بینی کند بهینه سازی شده باشد. در پایین ترین سطح، نوشتن کد با استفاده از یک زبان مونتاژ، طراحی شده برای یک پلتفرم سخت افزاری خاص می تواند کارآمدترین و کمترین کد را تولید کند، در صورتی که برنامه نویس از رکورد کامل دستورالعملهای ماشین استفاده کند. به همین دلیل، بسیاری از سیستم عامل های مورد استفاده در سیستم های جاسازی شده به طور سنتی در کد اسمبلر نوشته شده اند. برنامه ها (به غیر از برنامه های بسیار کوچک) به ندرت از زمان شروع و پایان در مونتاژ به علت زمان و هزینه درگیر می شوند. اکثر آن ها از یک زبان سطح بالا به مونتاژ و دست بهینه شده از آنجا جمع شده اند. هنگامی که بازده قطعا
ت مهم تر از اندازه هستند، ممکن است در یک زبان سطح بالا نوشته شوند. با کامپایلرهای پیشرفته تر بهینه سازیو پیچیدگی CPUهای اخیر، بیشتر است که کد کارآمدتری را از آنچه که کامپایلر تولید می کند، بنویسید و پروژه های کوچک به این روش بهینه سازی نهایی نیاز دارند. امروزه کد نوشته می شود تا به عنوان ماشین های بسیاری بتواند اجرا شود. به عنوان یک نتیجه، برنامه نویسان و کامپایلرها همیشه از دستورالعمل های کارآمدتر ارائه شده توسط پردازنده های جدیدتر یا پیش فرض مدل های قدیمی تر استفاده نمی کنند. علاوه بر این، کدهای مونتاژ شده برای یک پردازنده خاص بدون استفاده از چنین دستورالعمل های تنظیم شده است که ممکن است در پردازنده دیگری غیرقطعی باشند، و انتظار تنظیم متفاوت از کد را دارند. به طور معمول امروز، به جای اینکه در زبان اسمبلی بنویسیم، برنامه نویسان از یک disassembler برای تجزیه و تحلیل خروجی یک کامپایلر استفاده می کنند و کد منبع بالا را تغییر می دهند تا بتوان آن را به طور مؤثر تر کامپایل کرد یا متوجه شد که چرا آن ناکارآمد است. کامپایلرها فقط در زمان اجرا می توانند کد ماشین را بر اساس داده های زمان اجرا، تولید کنند. این تکنیک به
اولین موتورهای بیان منظم می رسد و با Java HotSpot و V8 برای جاوا اسکریپت گسترش پبدا کرده است. در برخی موارد بهینه سازی سازگاری ممکن است قادر به انجام بهینه سازی زمان اجرا بیش از توانایی کامپایلرهای استاتیک با تنظیم پارامترهای پویا با توجه به ورودی های واقعی یا سایر عوامل باشد. بهینه سازی پروفایل هدایت شده یک روش بهینه سازی تلفیقی پیش از زمان (AOT) بر اساس پروفایل های زمان اجرا است و شبیه به یک متد استاتیکی «مورد متوسط» که از تکنیک پویا بهینه سازی سازگاری است. کد خودمحور می تواند در پاسخ به شرایط زمان اجرا به منظور بهینه سازی کد تغییر کند. این در برنامه های زبان مونتاژ رایج بود. برخی از طرح های CPU می توانند برخی از بهینه سازی ها را در زمان اجرا انجام دهند. بعضی از نمونه ها عبارتند , , و . کامپایلرها می توانند به این برنامه کمک کنند که از ویژگی های این CPU بهره مند شوند، مثلاً از طریق برنامه ریزی دستورالعمل. بهینه سازی بستر وابسته و مستقل. بهینه سازی کد را می توان همچنین به طور گسترده به عنوان طبقه بندی پلت فرم های وابسته و تکنیک های مستقل از پلتفرم دانست. در حالی که آن هایی که در اکثر یا تمام سیستم عامل ها مؤ
ثر هستند، تکنیک های وابسته به پلت فرم از ویژگی های خاص یک پلت فرم استفاده می کنند یا به پارامترهای بسته به پلت فرم تک یا حتی بر روی پردازنده تک تک تکیه می کنند؛ بنابراین ممکن است نوشتن یا تولید نسخه های مختلف از همان کد برای پردازنده های مختلف مورد نیاز باشد. به عنوان مثال، در مورد بهینه سازی سطح کامپایل، تکنیک های مستقل از پلت فرم، تکنیک های عمومی هستند (مانند حلقه، کاهش تماس های عملکردی، رویه های کارآمد حافظه، کاهش شرایط و غیره)، که اکثر معماری های CPU را در یک مسیر مشابه را شامل می شود یک نمونه عالی از بهینه سازی مستقل از پلت فرم با حلقه درونی نشان داده شده است، جایی که یک حلقه با یک حلقه درونی مشاهده شد، محاسبات بیشتری را در هر واحد زمان انجام می دهد تا یک حلقه بدون آن یا یک حلقه داخلی در حالی که حلقه است به حساب آورد. به طور کلی، این ها به منظور کاهش کل مسیر آموزش مورد نیاز برای تکمیل برنامه یا کاهش کل استفاده از حافظه در طول فرایند خدمت می کنند. از سوی دیگر، تکنیک های وابسته به پلت فرم شامل برنامه ریزی دستورالعمل، هماهنگی در سطح دروس، سطح هماهنگی داده ها، تکنیک های بهینه سازی حافظه پنهان (یعنی پارامترها
ی متفاوت در سیستم عامل های مختلف) و برنامه ریزی دستورالعمل مطلوب حتی در پردازنده های مختلف همان معماری ممکن است. کاهش قدرت. وظایف محاسباتی را می توان با روش های مختلف با کارایی متفاوت انجام داد. یک نسخه کارآمد با قابلیت معادل به عنوان یک کاهش قدرت شناخته شده است. برای مثال، کد قطعه زیر C را در نظر بگیرید که قصد دارد مجموع اعداد صحیح را از ۱ به N بدست آورد: int i, sum = 0; for (i = 1; i &lt;= N; ++i) { sum += i; printf("sum: %d ", sum); این کد (با فرض وجود سرریز حسی) می تواند با استفاده از یک فرمول ریاضی مانند: int sum = N * (1 + N) / 2; printf("sum: %d ", sum); بهینه سازی، گاهی اوقات توسط یک کامپایلر بهینه سازی انجام می شود، این است که یک روش (الگوریتم) را انتخاب کنید که کارایی بیشتری در محاسبات است، در حالی که حفظ همان کارکرد. هم مهم است برای رفع برخی از این تکنیک ها، کارایی الگوریتمی را مشاهده می کنید. با این حال، بهبود قابل توجهی در عملکرد اغلب می تواند با حذف قابلیت های بیرونی به دست آید. بهینه سازی همیشه یک فرایند واضح یا بصری نیست. در مثال بالا، نسخه بهینه شده ممکن است در مقایسه با نسخه اصلی کندتر از نس
خه اصلی باشد اگر N به اندازه کافی کوچک باشد و سخت افزار خاص در انجام عملیات علاوه بر اضافه کردن و حلقه بیش از ضرب و تقسیم، بسیار سریعتر اتفاق می افتد. در برخی موارد، با این حال، بهینه سازی مبتنی بر استفاده از الگوریتم های پیچیده تر یا استفاده از «موارد خاص» و «حقه های ویژه» و انجام پیچیده تجارت است. برنامه به طور کامل بهینه شده ممکن است دشوار باشد و از این رو ممکن است خطاهای بیشتری را نسبت به نسخه های غیرمتعارف داشته باشد. بعلاوه، حذف برخی از مشکلات واضح، برخی از بهینه سازی های سطح کد باعث کاهش قابلیت نگهداری می شود. بهینه سازی به طور کلی بر بهبود تنها یک یا دو جنبه از عملکرد تمرکز می کند: زمان اجرا، استفاده از حافظه، فضای دیسک، پهنای باند، مصرف برق یا برخی از منابع دیگر. این معمولاً نیاز به یک trade-offدارد؛ که در آن یک عامل به هزینه دیگران بهینه سازی شده است. به عنوان مثال، افزایش حجم حافظه پنهان باعث بهبود عملکرد در زمان اجرا می شود، اما مصرف حافظه نیز افزایش می یابد. سایر موارد رایج شامل وضوح و مختصر کد است. مواردی وجود دارد که برنامه نویس بهینه سا باید تصمیم بگیرد که نرم افزار را برای برخی عملیات بهتر کن
د، اما هزینه عملیات دیگر کمتر کارآمد است. این ترکیبات ممکن است گاهی غیر فنی باشد مانند زمانی که یک رقیب نتیجه یک معیار را منتشر کرده است که باید به منظور بهبود موفقیت تجاری مورد ضرب و شتم قرار گیرد، اما احتمالاً با استفاده از نرمال بودن نرم افزار کمتر کارآمد می شود. چنین تغییراتی گاهی اوقات به شوخی به عنوان "pessimizations" اشاره شده است. تنگنا. بهینه سازی ممکن است شامل یافتن یک تنگنا در یک سیستم باشد - یک جزء که عامل محدودکننده در عملکرد است. از لحاظ کد، این اغلب یک نقطه داغ است - قسمت بحرانی کد که مصرف کننده اولیه منابع مورد نیاز است - هرچند که این می تواند عامل دیگری مانند زمان تأخیر I / O یا پهنای باند شبکه باشد. در علم کامپیوتر، مصرف منابع اغلب به نوعی توزیع قانون قدرت پیوسته است و اصل پارتو را می توان به بهینه سازی منابع با توجه به اینکه ۸۰٪ از منابع معمولاً با استفاده از ۲۰٪ از عملیات مورد استفاده قرار می گیرد. در مهندسی نرم افزار اغلب یک تقریب بهتر است که ۹۰٪ زمان اجرای برنامه کامپیوتری صرف ۱۰٪ از کد انجام می شود (قانون ۹۰/۱۰ در این زمینه شناخته می شود). الگوریتم پیچیده تر و ساختار داده ها با بسیاری ا
ز اقلام خوب عمل می کند، در حالی که الگوریتم های ساده برای مقادیر کوچک داده ها مناسب تر هستند - زمان راه اندازی، زمان شروع و عوامل ثابت الگوریتم پیچیده تر می تواند مزیت را بیش از حد و در نتیجه الگوریتم ترکیبی یا سازگار الگوریتم ممکن است سریعتر از هر الگوریتم تک باشد. یک پروفیل عملکرد می تواند مورد استفاده قرار گیرد تا محدودیت تصمیم های مربوط به عملکرد که مطابق با شرایط است. در برخی موارد، اضافه کردن حافظه بیشتر می تواند کمک کند که برنامه را سریعتر اجرا کند. به عنوان مثال، یک برنامه فیلتر معمولاً هر خط را مطالعه می کند و فوراً آن خط را خروجی می کند. این تنها با استفاده از حافظه کافی برای یک خط استفاده می کند، اما عملکرد به طور معمول ضعیف است، به دلیل تأخیر هر خواندن دیسک. با خواندن کل فایل و سپس نوشتن نتیجه فیلتر شده، می توان عملکرد را بسیار بهبود داد، هرچند که از حافظه بسیار بیشتری استفاده می کند. ذخیره سازی نتایج مشابه نیز مؤثر است، هرچند که نیاز به استفاده از حافظه بزرگتر نیز دارد. وقت بهینه سازی. بهینه سازی می تواند خوانایی را کاهش دهد و کد را اضافه کند که فقط برای بهبود عملکرد استفاده می شود. این ممکن است
برنامه ها یا سیستم ها را پیچیده تر کند و آن ها را برای حفظ و اشکال زدایی سخت تر کند. در نتیجه، بهینه سازی یا تنظیم عملکرد اغلب در پایان مرحله توسعه انجام می شود. دونالد نوت دو اظهار نظر در مورد بهینه سازی انجام داد: "ما باید در مورد بهره وری کوچک توجه داشته باشیم، حدود ۹۷٪ زمان می گویند: بهینه سازی زود هنگام ریشه همه شر است. با این حال ما نباید فرصت هایمان را در این ۳٪ بحرانی گذراندیم " «در رشته های مهندسی تأسیس شده، بهبود ۱۲٪، به راحتی به دست آمده، هرگز به عنوان حاشیه ای به حساب نمی آید و من معتقدم که همان دیدگاه باید در مهندسی نرم افزار غلبه کند» «بهینه سازی زود هنگام» یک عبارت است که برای توصیف وضعیتی که یک برنامه نویس اجازه می دهد ملاحظات عملکرد به طراحی یک قطعه کد برسد. این می تواند در نتیجه یک طراحی باشد که به اندازه کافی نبوده یا کدی باشد که نادرست است، زیرا کد با بهینه سازی پیچیده شده است و برنامه نویسان با بهینه سازی آن را پرت می کنند. در هنگام تصمیم گیری در مورد اینکه آیا برای بهینه سازی بخش خاصی از برنامه، قانون قانون آمدال همیشه باید مورد توجه قرار گیرد: تأثیر بر برنامه کلی بسیار بستگی دارد به این
که چقدر زمان واقعی در بخش خاصی صرف می شود، که همیشه از نگاه کردن به کد مشخص نیست بدون تجزیه و تحلیل عملکرد یک روش بهتر این است که ابتدا کد را از طرح طراحی و سپس کد / کد نمایشی / معیار را ببینید تا ببینیم کدام قسمت باید بهینه شود. طراحی ساده و ظریف اغلب در این مرحله آسان تر می شود و پروفایل می تواند مشکلات عملکرد غیرمنتظره ای را نشان دهد که با بهینه سازی زود هنگام مواجه نخواهد شد. در عمل، اغلب لازم است که در هنگام طراحی نرم افزار ابتدا اهداف عملکرد را ذکر کنید، اما برنامه نویس اهداف طراحی و بهینه سازی را متعادل می کند. کامپایلرهای مدرن و سیستم عامل بسیار کارآمد هستند، زیرا عملکرد در نظر گرفته شده اغلب با شکست مواجه می شود. به عنوان مثال، داده های ذخیره شده در سطح برنامه که مجدداً در سطح سیستم عامل ذخیره می شوند، در اجرای بهبود نمی یابند. با این حال، هنگامی که برنامه نویس بهینه سازی های شکست خورده را از کد تولید حذف می کند، یک مورد نادر است. درست است پیشرفت های سخت افزاری اغلب از هیچگونه پیشرفت بالقوه اجتناب ناپذیر است، با این وجود کد پوششی در آینده به مدت طولانی پس از پایان دادن به هدف آن، ادامه خواهد یافت. ما
کروها. بهینه سازی در طول توسعه کد با استفاده از ماکرو در فرم های مختلف در زبان های مختلف صورت می گیرد. در بعضی از زبان های رویه ای، مانند C و C ++، ماکروها با استفاده از جایگزینی نشانه اجرا می شوند. امروزه، توابع درون خطی می تواند به عنوان یک جایگزین امن در بسیاری موارد استفاده شود. در هر دو حالت، بدن تابع مجهز می تواند به وسیله کامپایلر بهینه سازی کامپایل زمان بیشتری را انجام دهد، از جمله تأخیر ثابت، که ممکن است برخی از محاسبات را برای زمان کامپایل حرکت کند. در بسیاری از زبان های برنامه نویسی کاربردی، ماکروها با استفاده از پارسا زمان جایگزینی درختان تجزیه کننده / درخت های انتزاعی نحو اجرا می شوند که ادعا می کند آن ها را برای استفاده ایمن تر می کند. از آنجایی که در بسیاری از موارد از تفسیر استفاده می شود، این یکی از راه های اطمینان از این است که چنین محاسباتی تنها در زمان تجزیه انجام می شود و گاهی اوقات تنها راه است. لیسپ این سبک از ماکرو را ایجاد کرد و چنین ماکروهای اغلب به نام "ماکرو مانند Lisp" نامیده می شود. یک اثر مشابه را می توان با استفاده از metaprogramming قالب در C ++ بدست آورد. در هر دو مورد، کار ب