PDA

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 قرار بدید. همچنین تنظیمی هم وجود داره که میتونید میزان بهینه سازی کد خروجی رو تعیین کنید.