سی پلاس پلاس ++C یا پایتون Python

مقایسه ++C و پایتون

داشتم پروژه های نمونه Opnecv (شامل image stitching و image stitching detailed) برای تولید تصاویر پانوراما را تحلیل می کردم که به عنوان مثال درس بینایی ماشین در کلاس توضیح دهم. برای درک بیشتر، به دنبال مثالهایی با توضیحات کاملتر در وب بودم که در حین جستجو به پروژه ای رسیدم که با پایتون نوشته شده بود و خیلی خوب تمام بخشهایش توضیح داده شده بود. این شد که پایتون را به ویژوال استودیو اضافه کرده و پروژه مذکور را را کامپایل و اجرا کردم. دیدم با وجود اینکه این برنامه از نسخه باینری کتابخانه OpenCV استفاده می کند، زمان اجرا خیلی کند است. بررسی کردم دیدم مشکل سر یک تابعی هست که دو حلقه for تو در تو دارد. برای مقایسه با ++C تصمیم گرفتم کد را به ++C بنویسم و این شد که پایتون را یاد گرفتم و طی چند ساعتی، کد را به ++C تبدیل کردم.

مقایسه زمان اجرای برنامه در پایتون و ++C

نتیجه مقایسه جالب بود. غیر از حلقه for بقیه بخشها از نظر زمانی تقریبا یکسان بود چرا که هر دو از کتابخانه OpenCV استفاده می کردند که اصالتا کد ++C است. اما در حلقه for کد ++C نزدیک به ۱۰ برابر سریعتر از پایتون اجرا می شود. زمانها را ببینید:
مقایسه سی پلاس پلاس و پایتون

​زمان اجرای کد سی پلاس پلاس ۱٫۲۵ ثانیه و زمان اجرای کد پایتون ۱۰٫۴۷ ثانیه بود.
از این زمانها در پایتون حدود ۱٫۵ ثانیه مربوط به توابع داخلی OpenCV بوده و ۹ ثانیه مربوط به حلقه for تو در تو است که روی کل تصویر جاروب می شود.

در C++ کل زمان تقریبا مربوط به توابع داخلی OpenCV بوده و حلقه for تودرتو تنها ۰٫۰۰۲ ثانیه زمان برد.

لذا در کل برنامه، ++C حدود ۱۰ برابر سریعتر بوده و در حلقه for تفاوت سرعت وحشتناک است: ۹ ثانیه به ۰٫۰۰۲ ثانیه می شود ۴۵۰۰ برابر سرعت بهتر ++C نسبت به زبان اسکریپتی پایتون.

نتیجه مقایسه ++C و پایتون

پایتون بسیار ساده تر از ++C است. لذا اگر برنامه نویس حرفه ای ++C هستید در کمتر از یک روز پایتون را یاد می گیرید. سرعت کد نویسی پایتون به دلیل برخورداری از امکانات فراوان، که الان جای بحثش نیست، زیاد است. اما دو مشکل دارد: یکی اسکریپتی بودن و اجرای خط به خط که همیشه نیازمند این هستید که پایتون (همان ورژنی که شما استفاده کرده اید) در کامپیوتر مقصد نصب باشد. دوم سرعت کم در حلقه ها و دستورات شرطی.

لذا برای کاربردهایی که پردازشهای سنگین و حلقه های زیاد ندارید استفاده از پایتون خوب است. برای کارهای پردازشی یا باید سراغ ++C بروید یا اینکه اگر اصرار به استفاده از پایتون دارید، بخشهای پردازشی کد را حتما از نسخه های باینری کتابخانه های ثالث استفاده کنید.

 

Share