در مدل‌های پیچیده سیمولینک، جداول جستجو ممکن است بخش قابل‌توجهی از محاسبات شبیه‌سازی را به خود اختصاص دهند؛ به‌خصوص زمانی که تعداد Lookup Tableها زیاد باشد یا چند جدول از ورودی‌ها و نقاط شکست یکسان استفاده کنند. در چنین شرایطی، استفاده از ساختار Prelookup و Interpolation Using Prelookup می‌تواند محاسبات جستجو را از مرحله درون‌یابی جدا کرده و امکان استفاده مجدد از نتایج جستجو را فراهم کند. MathWorks این ساختار را یکی از روش‌های بهبود کارایی Lookup Tableها معرفی می‌کند. 

چرا بهینه‌سازی Lookup Table اهمیت دارد؟

در یک Lookup Table معمولی، هنگام دریافت ورودی، سیستم باید موقعیت ورودی را نسبت به Breakpointها پیدا کند و سپس مقدار خروجی مناسب را از جدول به دست آورد.

اگر تنها یک جدول کوچک در مدل وجود داشته باشد، این عملیات معمولاً هزینه محاسباتی قابل‌توجهی ندارد. اما در مدل‌های صنعتی ممکن است ده‌ها یا صدها جدول مورد استفاده قرار گیرند. در این شرایط، انجام مکرر عملیات جستجوی Breakpoint می‌تواند زمان اجرای مدل را افزایش دهد.

این موضوع به‌خصوص در مدل‌های Real-Time Simulation، Hardware-in-the-Loop و Embedded Systems اهمیت بیشتری پیدا می‌کند.

مفهوم Prelookup

بلوک Prelookup برای جدا کردن مرحله جستجوی ورودی در Breakpointها از مرحله محاسبه خروجی استفاده می‌شود.

این بلوک موقعیت ورودی را نسبت به Breakpointهای مربوطه مشخص می‌کند و اطلاعاتی مانند Index و Fraction را در اختیار مرحله بعد قرار می‌دهد.

در نتیجه، به جای اینکه هر Lookup Table به‌صورت مستقل عملیات جستجو را انجام دهد، می‌توان نتیجه این جستجو را تولید و در چند محاسبه مختلف استفاده کرد. 

Interpolation Using Prelookup چیست؟

بلوک Interpolation Using Prelookup وظیفه استفاده از اطلاعات تولیدشده توسط Prelookup برای محاسبه مقدار نهایی خروجی را بر عهده دارد.

در این ساختار، فرآیند Lookup به دو بخش مستقل تقسیم می‌شود:

  • پیدا کردن موقعیت ورودی در Breakpointها

  • انجام درون‌یابی و تعیین خروجی

این جداسازی باعث می‌شود طراحی مدل انعطاف‌پذیرتر شود و در شرایط مناسب، عملکرد محاسباتی آن نسبت به استفاده مستقیم از چند Lookup Table بهبود پیدا کند. 

مزیت اصلی اشتراک‌گذاری Prelookup

یکی از مهم‌ترین مزایای این روش زمانی دیده می‌شود که چند جدول از ورودی‌های یکسان استفاده می‌کنند.

فرض کنید چند Lookup Table دارای Breakpointهای مشترک هستند و ورودی‌های مشابهی دریافت می‌کنند. در ساختار معمولی، هر جدول می‌تواند عملیات جستجوی خود را انجام دهد.

اما با استفاده از Prelookup، یک عملیات جستجو می‌تواند انجام شود و نتیجه آن برای چند بلوک Interpolation مورد استفاده قرار گیرد.

به این ترتیب، عملیات تکراری حذف شده و محاسبات اضافی کاهش پیدا می‌کند. MathWorks نیز استفاده از یک Prelookup مشترک برای چند جدول را یکی از روش‌های افزایش سرعت اجرای مدل معرفی می‌کند. 

ارتباط Prelookup با جداول n بعدی

در جداول n-D Lookup Table، هر بُعد دارای Breakpointهای مخصوص خود است.

بنابراین با افزایش تعداد ابعاد، فرآیند تعیین موقعیت ورودی نیز پیچیده‌تر می‌شود. در چنین شرایطی جدا کردن عملیات Prelookup از Interpolation می‌تواند مزیت بیشتری داشته باشد.

برای یک جدول چندبعدی، می‌توان برای هر بُعد عملیات Prelookup را انجام داد و سپس اطلاعات حاصل را در مرحله Interpolation Using Prelookup مورد استفاده قرار داد. 

درون‌یابی n بعدی

درون‌یابی n بعدی برای زمانی استفاده می‌شود که خروجی سیستم به چند متغیر مستقل وابسته باشد.

در این حالت، Simulink موقعیت هر ورودی را در Breakpointهای مربوط به همان بُعد تعیین می‌کند و سپس بر اساس روش Interpolation انتخاب‌شده، مقدار خروجی را محاسبه می‌کند.

در n-D Lookup Table، روش‌هایی مانند Linear، Flat، Nearest، Linear Lagrange، Cubic Spline و Akima Spline در دسترس هستند؛ البته انتخاب روش مناسب به نوع داده و نیازهای مدل بستگی دارد. 

اهمیت روش جستجوی Breakpoint

Prelookup تنها برای جداسازی عملیات جستجو از درون‌یابی نیست؛ بلکه امکان انتخاب روش مناسب برای جستجوی Breakpointها را نیز فراهم می‌کند.

از روش‌های متداول می‌توان به Binary Search، Linear Search و Evenly Spaced Points اشاره کرد.

انتخاب روش مناسب به نحوه تغییر ورودی‌ها بستگی دارد. اگر ورودی‌ها در هر گام شبیه‌سازی تغییرات زیادی داشته باشند، Binary Search می‌تواند عملکرد مناسبی داشته باشد. در مقابل، اگر ورودی‌ها به‌آرامی تغییر کنند و نزدیک به مقدار قبلی باقی بمانند، Linear Search با ادامه جستجو از موقعیت قبلی می‌تواند مناسب‌تر باشد. 

Breakpointهای با فاصله مساوی

اگر Breakpointها دارای فاصله‌های مساوی باشند، Simulink می‌تواند از روش Evenly Spaced Points استفاده کند.

این روش در شرایط مناسب می‌تواند عملیات جستجو را ساده‌تر و کارآمدتر کند. همچنین در برخی کاربردهای تولید کد، به جای ذخیره تمام Breakpointها می‌توان اطلاعات فشرده‌تری درباره نقطه شروع، فاصله و تعداد نقاط استفاده کرد.

بنابراین طراحی مناسب Breakpointها می‌تواند علاوه بر دقت، بر مصرف حافظه و سرعت اجرای مدل نیز اثر بگذارد. 

نقش Prelookup در کاهش محاسبات تکراری

فرض کنید چند خروجی مختلف از یک مجموعه ورودی مشترک استفاده می‌کنند.

اگر هر خروجی توسط Lookup Table مستقل محاسبه شود، عملیات جستجوی Breakpoint ممکن است بارها تکرار شود.

با استفاده از Prelookup مشترک، موقعیت ورودی تنها یک بار تعیین شده و سپس همان اطلاعات برای چند مرحله Interpolation استفاده می‌شود.

این ویژگی به‌خصوص در مدل‌هایی که تعداد زیادی جدول وابسته به متغیرهای مشترک دارند، می‌تواند باعث کاهش قابل‌توجه محاسبات شود. 

Sub-Table Selection

یکی از قابلیت‌های مهم Interpolation Using Prelookup امکان انتخاب بخشی از داده‌های جدول برای درون‌یابی است.

این ویژگی زمانی اهمیت پیدا می‌کند که یک جدول چندبعدی شامل چندین زیرجدول باشد و همه ابعاد آن الزاماً برای عملیات Interpolation مورد استفاده نباشند.

برای مثال، ممکن است یک جدول سه‌بعدی از چندین جدول دوبعدی تشکیل شده باشد. اگر شرایط مدل مشخص کند که تنها برخی از این زیرجداول مورد نیاز هستند، می‌توان از Sub-Table Selection برای محدود کردن بخش مورد استفاده بهره گرفت.

این روش می‌تواند تعداد عملیات درون‌یابی را کاهش دهد و در نتیجه عملکرد مدل را بهبود ببخشد. 

مقایسه n-D Lookup Table با Prelookup

بلوک n-D Lookup Table برای بسیاری از کاربردها ساده‌ترین انتخاب است؛ زیرا جستجو و درون‌یابی را در یک ساختار واحد انجام می‌دهد.

اما زمانی که کنترل بیشتری بر فرآیند محاسبات مورد نیاز باشد، استفاده از Prelookup و Interpolation Using Prelookup مزایای بیشتری دارد.

این ساختار به‌ویژه زمانی مناسب است که:

  • چند جدول Breakpoint مشترک دارند.

  • چند خروجی از ورودی‌های یکسان استفاده می‌کنند.

  • سرعت اجرای مدل اهمیت زیادی دارد.

  • نیاز به کنترل جداگانه فرآیند جستجو و درون‌یابی وجود دارد.

  • مدل برای تولید کد یا اجرای بلادرنگ آماده می‌شود.

MathWorks نیز ترکیب Prelookup و Interpolation Using Prelookup را معادل عملکرد یک n-D Lookup Table معرفی می‌کند، با این تفاوت که این ساختار انعطاف‌پذیری بیشتری برای بهینه‌سازی فراهم می‌کند. 

انتخاب روش درون‌یابی

بهینه‌سازی تنها به کاهش عملیات جستجو محدود نمی‌شود. روش Interpolation نیز بر سرعت و دقت مدل تأثیر دارد.

Linear Interpolation معمولاً گزینه‌ای مناسب برای مدل‌هایی است که سرعت محاسبات اهمیت زیادی دارد.

روش‌های Spline می‌توانند برای داده‌هایی که رفتار نرم‌تری دارند مناسب باشند، اما ممکن است نسبت به روش‌های ساده‌تر محاسبات بیشتری نیاز داشته باشند.

بنابراین انتخاب روش درون‌یابی باید با توجه هم‌زمان به دقت عددی، سرعت اجرا و ماهیت داده‌ها انجام شود. 

بهینه‌سازی برای چند جدول مشترک

در مدل‌های بزرگ ممکن است چند n-D Lookup Table از Breakpointهای یکسان استفاده کنند.

اگر این جداول شرایط لازم را داشته باشند، می‌توان ساختار مدل را به گونه‌ای تغییر داد که یک Prelookup مشترک ایجاد شود و چند بلوک Interpolation از نتایج آن استفاده کنند.

در نسخه‌های جدید Simulink، Model Transformer می‌تواند Lookup Tableهایی را که شرایط لازم را دارند شناسایی کرده و ساختار آن‌ها را به Prelookup مشترک و چند بلوک Interpolation تبدیل کند. 

شرایط مناسب برای اشتراک‌گذاری Prelookup

برای تبدیل خودکار چند Lookup Table به ساختار مشترک، جداول باید شرایط مشخصی داشته باشند.

از جمله مهم‌ترین شرایط می‌توان به استفاده از منبع ورودی یکسان، Breakpointهای مشترک، مشخصات داده سازگار و پارامترهای الگوریتمی مشابه اشاره کرد.

اگر این شرایط برقرار نباشد، اشتراک‌گذاری یک Prelookup ممکن است امکان‌پذیر یا مناسب نباشد. 

بهینه‌سازی مصرف حافظه

یکی دیگر از مزایای طراحی صحیح Lookup Table، کنترل مصرف حافظه است.

در مدل‌های بزرگ، حجم Breakpointها و Table Data می‌تواند قابل‌توجه باشد. استفاده مناسب از انواع داده، کاهش داده‌های غیرضروری و انتخاب صحیح ساختار جدول می‌تواند به کاهش Memory Footprint کمک کند.

همچنین MathWorks امکان تنظیم مستقل نوع داده برای Breakpointها و Table Data را در ساختار Prelookup و Interpolation Using Prelookup فراهم کرده است؛ این قابلیت می‌تواند برای مدیریت حافظه در مدل‌های بزرگ اهمیت داشته باشد. 

پیش‌محاسبه ضرایب درون‌یابی

در برخی شرایط، Simulink و ابزارهای مرتبط با تولید کد امکان Precompute Coefficients را فراهم می‌کنند.

هدف این قابلیت، کاهش محاسباتی است که در زمان اجرای مدل برای تعیین ضرایب درون‌یابی انجام می‌شود.

در صورت مناسب بودن شرایط، ضرایب مورد نیاز از قبل محاسبه می‌شوند و عملیات زمان اجرا ساده‌تر می‌شود. این روش می‌تواند تعداد عملیات تقسیم، جمع و ضرب مورد نیاز را کاهش داده و برای کاربردهایی که Latency اهمیت دارد مفید باشد. 

اهمیت بهینه‌سازی برای سیستم‌های بلادرنگ

در شبیه‌سازی معمولی ممکن است چند عملیات اضافی Lookup Table تأثیر قابل‌توجهی بر عملکرد مدل نداشته باشند.

اما در سیستم‌های Real-Time، زمان اجرای هر مرحله باید در محدوده مشخصی باقی بماند.

به همین دلیل، کاهش عملیات جستجوی تکراری، انتخاب روش مناسب جستجوی Breakpoint و استفاده از Interpolation کارآمد می‌تواند در دستیابی به عملکرد بلادرنگ مؤثر باشد.

نقش Lookup Table در تولید کد

Lookup Tableها تنها برای شبیه‌سازی استفاده نمی‌شوند و در فرآیند Model-Based Design و تولید کد نیز کاربرد دارند.

در این شرایط، نحوه ذخیره Breakpointها، Table Data، نوع داده و روش جستجو می‌تواند بر حافظه و سرعت کد تولیدشده اثر بگذارد.

برای مثال، Inline کردن برخی پارامترهای عددی Lookup Table می‌تواند در شرایط مناسب باعث کاهش مصرف RAM و ROM و افزایش سرعت اجرای کد شود. 

توجه به عملیات تقسیم در Prelookup

یکی از نکات مهم در بهینه‌سازی Prelookup مربوط به Breakpointهایی است که با فاصله مساوی تعریف شده‌اند.

اگر فاصله Breakpointها مناسب نباشد، روش Evenly Spaced Points ممکن است نیازمند عملیات تقسیم باشد که در برخی سخت‌افزارها می‌تواند پرهزینه باشد.

MathWorks توصیه می‌کند در شرایطی که Breakpointها قابل تنظیم نیستند و روش Evenly Spaced Points استفاده می‌شود، ویژگی‌های فاصله Breakpointها از نظر هزینه محاسباتی بررسی شوند. در برخی کاربردهای سخت‌افزاری، فاصله‌های توان دو می‌توانند امکان جایگزینی عملیات تقسیم با عملیات شیفت را فراهم کنند. 

انتخاب Direct Lookup به جای Interpolation

همیشه استفاده از Interpolation ضروری نیست.

اگر ورودی مستقیماً یک شاخص معتبر برای دسترسی به عنصر جدول باشد و هدف تنها بازیابی داده باشد، Direct Lookup Table (n-D) می‌تواند گزینه مناسب‌تری باشد.

در این حالت، عملیات Interpolation و Extrapolation حذف می‌شود و جدول مستقیماً برای دسترسی به داده استفاده می‌شود. 

بهینه‌سازی باید بر اساس رفتار ورودی انجام شود

یکی از اشتباهات رایج این است که یک روش جستجو برای تمام Lookup Tableها انتخاب شود.

در حالی که بهترین روش به رفتار ورودی بستگی دارد.

اگر ورودی‌ها تغییرات سریع و گسترده داشته باشند، یک روش جستجو می‌تواند مناسب‌تر باشد؛ اما اگر تغییرات ورودی آهسته و پیوسته باشند، روش دیگری ممکن است عملکرد بهتری ارائه دهد.

بنابراین تحلیل رفتار سیگنال‌های ورودی پیش از انتخاب Index Search Method اهمیت زیادی دارد. 

جمع‌بندی

Prelookup و Interpolation Using Prelookup ابزارهایی مهم برای بهینه‌سازی Lookup Tableها در Simulink هستند. این ساختار با جدا کردن عملیات جستجوی Breakpoint از فرآیند درون‌یابی، امکان استفاده مجدد از نتایج جستجو را فراهم می‌کند و در مدل‌هایی که چند جدول ورودی‌های مشترک دارند می‌تواند تعداد محاسبات تکراری را کاهش دهد. 

در جداول n بعدی، این موضوع اهمیت بیشتری پیدا می‌کند؛ زیرا با افزایش ابعاد، تعداد عملیات مورد نیاز برای تعیین موقعیت ورودی و انجام درون‌یابی افزایش می‌یابد. انتخاب صحیح روش جستجو، روش درون‌یابی، ساختار Breakpointها، نوع داده و نحوه اشتراک‌گذاری Prelookup می‌تواند به بهبود سرعت شبیه‌سازی، کاهش مصرف حافظه و آماده‌سازی بهتر مدل برای تولید کد کمک کند.

در پروژه‌های بزرگ، هدف صرفاً ایجاد یک Lookup Table با دقت مناسب نیست؛ بلکه باید ساختار جدول به‌گونه‌ای طراحی شود که دقت عددی، سرعت محاسبات، مصرف حافظه و الزامات اجرای بلادرنگ هم‌زمان در نظر گرفته شوند.

کلیدواژه ها : Prelookup-پیش‌جستجو-Interpolation Using Prelookup-درون‌یابی با پیش‌جستجو-n-D Lookup Table-جدول جستجوی چندبعدی-2-D Lookup Table-جدول جستجوی دوبعدی-n-D Interpolation-درون‌یابی چندبعدی-Lookup Table Optimization-بهینه‌سازی جدول جستجو-Lookup Table Performance-عملکرد جدول جستجو-Breakpoint-نقطه شکست-Breakpoint Search-جستجوی نقاط شکست-Index Search Method-روش جستجوی شاخص-Binary Search-جستجوی دودویی-Linear Search-جستجوی خطی-Evenly Spaced Points-نقاط با فاصله مساوی-Linear Interpolation-درون‌یابی خطی-Cubic Spline-اسپلاین مکعبی-Akima Spline-اسپلاین آکیما-Interpolation Optimization-بهینه‌سازی درون‌یابی-Sub-Table Selection-انتخاب زیرجدول-Table Data-داده جدول-Table Memory-حافظه جدول-Memory Optimization-بهینه‌سازی حافظه-Real-Time Simulation-شبیه‌سازی بلادرنگ-Code Generation-تولید کد-Model Transformer-تبدیل‌کننده مدل-Simulink Model Optimization-بهینه‌سازی مدل سیمولینک-Computational Efficiency-کارایی محاسباتی-Simulation Performance-عملکرد شبیه‌سازی-Execution Speed-سرعت اجرا-Nonlinear Modeling-مدل‌سازی غیرخطی-Function Approximation-تقریب تابع-Direct Lookup Table-جدول جستجوی مستقیم-Lookup Table Optimization in Simulink-بهینه‌سازی جداول جستجو در سیمولینک