View Full Version : سوال: Lazarus Performance
Moharram
جمعه 17 آبان 1398, 19:18 عصر
سلام
یه الگوریتم پردازشی داریم تو دلفی و میخواهیم تو لینوکس هم یه خروجی از اون داشته باشیم.
قبلا همین کد رو به جاوا تبدیل کرده بودیم و تو اون سرعت مطلوب نبود و احتمال دادیم که شاید به خاطر JVM کند شده باشه
برای راحتی کار، به جای تبدیل الگوریتم به یه زبان دیگه همون برنامه دلفی رو با اندکی تغییر تو لازاروس تحت لینوکس اجرا کردیم.
اما سرعت اجرای برنامه، خیلی کمتر از نسخه دلفی شد، به نحویکه زمان اجرای برنامه لازاروس حدود بیست برابر بیشتر از برنامه دلفی طول کشید!!!
خودم انتظار داشتم تو لازاروس به یه سرعت برابر با دلفی برسم بخصوص اینکه ظاهرا خبری از ماشین مجازی مثل JVM نیست و کد داره Native اجرا میشه.
نظر دوستان چیه؟
البته این رو هم اضافه کنم که تا همین جای کار، سرعت لازاروس خیلی بهتر از جاوا شده!
خیلی ممنون از توجهی که کردید.
pe32_64
جمعه 17 آبان 1398, 21:58 عصر
سلام
یه الگوریتم پردازشی داریم تو دلفی و میخواهیم تو لینوکس هم یه خروجی از اون داشته باشیم.
قبلا همین کد رو به جاوا تبدیل کرده بودیم و تو اون سرعت مطلوب نبود و احتمال دادیم که شاید به خاطر JVM کند شده باشه
برای راحتی کار، به جای تبدیل الگوریتم به یه زبان دیگه همون برنامه دلفی رو با اندکی تغییر تو لازاروس تحت لینوکس اجرا کردیم.
اما سرعت اجرای برنامه، خیلی کمتر از نسخه دلفی شد، به نحویکه زمان اجرای برنامه لازاروس حدود بیست برابر بیشتر از برنامه دلفی طول کشید!!!
خودم انتظار داشتم تو لازاروس به یه سرعت برابر با دلفی برسم بخصوص اینکه ظاهرا خبری از ماشین مجازی مثل JVM نیست و کد داره Native اجرا میشه.
نظر دوستان چیه؟
البته این رو هم اضافه کنم که تا همین جای کار، سرعت لازاروس خیلی بهتر از جاوا شده!
خیلی ممنون از توجهی که کردید.
نسخه دلفی تون حتما قدیمی هستش .در نسخه های جدید میتونید مستقیم در خود دلفی برا Linux پروژه رو کامپایل کنید.
Moharram
شنبه 18 آبان 1398, 18:19 عصر
با تشکر از پاسخی که دادید ...
احتمالا منظورتون نسخه 10.2 به بعد Delphi هستش که میشه با ابزار PAServer خروجی تو Linux گرفت. البته ظاهرا فقط برنامه های کنسولی رو میشه اجرا کرد و شاید تو نسخه های جدیدتر بشه برنامه UI دار رو هم اجرا کرد ...
هدف نهایی اینه که اون ماژول پردازشی به شکل یه فایل so.* (معادل dll.* تو ویندوز) دربیاد و بشه از اون تو محیط های Multiplatform دیگه مثل Java و QT استفاده کرد.
البته ظاهرا تو Delphi 10.2 میشه یه پروژه از نوع Windows Library ایجاد کرد و با Target لینوکس و با استفاده از PAServer یک خروجی so.* ساخت که در حال تست این روش هستم ...
الان سوالی که باقی می مونه اینه که بالاخره Performance لازاروس چی میشه این وسط ... ؟
pe32_64
شنبه 18 آبان 1398, 21:43 عصر
با تشکر از پاسخی که دادید ...
احتمالا منظورتون نسخه 10.2 به بعد Delphi هستش که میشه با ابزار PAServer خروجی تو Linux گرفت. البته ظاهرا فقط برنامه های کنسولی رو میشه اجرا کرد و شاید تو نسخه های جدیدتر بشه برنامه UI دار رو هم اجرا کرد ...
هدف نهایی اینه که اون ماژول پردازشی به شکل یه فایل so.* (معادل dll.* تو ویندوز) دربیاد و بشه از اون تو محیط های Multiplatform دیگه مثل Java و QT استفاده کرد.
البته ظاهرا تو Delphi 10.2 میشه یه پروژه از نوع Windows Library ایجاد کرد و با Target لینوکس و با استفاده از PAServer یک خروجی so.* ساخت که در حال تست این روش هستم ...
الان سوالی که باقی می مونه اینه که بالاخره Performance لازاروس چی میشه این وسط ... ؟
درود
بنده برنامه نویس دلفی نیستم ولی حدس میزم کاری که میخواهید رو بشه به راحتی انجام داد. باید پروژتون FireMonkey باشه و نه vcl.
Moharram
دوشنبه 20 آبان 1398, 18:04 عصر
سلام
اون تست رو انجام دادم، یعنی با Delphi 10.2 پروژه رو برای Linux کامپایل کردم و با ابزار PAServer نسخه لینوکسی اون هم درست شد...
اما جالب اینجاست که تو تست سرعت اجرای الگوریتم دقیقا شبیه لازاروس شد؛ یعنی خود دلفی هم کدی درست کرد که با Performance لازاروس برابری کرد ...
الان میشه یه نتیجه ای گرفت و اون اینه که حداقل تقصیر از لازاروس نبوده و محیط اجرا که اینجا لینوکس بوده، ظاهرا بیشتر دخیل بوده تو این ماجرای Performance ...
حالا باید عنوان سوال رو تغییر داد: به اینصورت که یک کد ثابت چرا باید تو یه Platform دیگه با سرعت دیگه ای اجرا بشه؟ شاید هم اصل سوال اشتباه باشه و ما نباید انتظار Performance های یکسان تو Platform های مختلف داشته باشیم ... !
BORHAN TEC
سه شنبه 28 آبان 1398, 21:23 عصر
به دو نکته توجه داشته باشید. در لازاروس مد کامپایل رو روی release قرار بدید. همچنین تنظیمی هم وجود داره که میتونید میزان بهینه سازی کد خروجی رو تعیین کنید.
Delphi Coder
یک شنبه 12 اسفند 1403, 02:39 صبح
اگر موضوع رو مشخص تر مطرح میکردید بهتر بود. الگوریتم پردازشی خیلی زیاده از حد کلی هست. لازاروس هم در کل پرفورمنس خوبی داره. یکی از مواردی که میتونه باعث بشه همچین تفاوت فاحشی بین زمان اجرای دلفی و لازاروس ببینید این هست که در الگوریتم محاسبه جذر داشته باشید. امروزه تقریبا قریب به اتفاق تمامی کمپایلر ها از دستورات SSE برای جذر استفاده میکنند درحالی که لازاروس همون دستورات سنتی قبل SSE هست. اگر این یک مورد رو چشم پوشی کنیم لازاروس بهینه سازی خیلی قدرتمندی داره در برخی موارد شاید بشه با gcc مقایسه کرد و عموما سطح o3 از دلفی سریعتر هست.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.