NetWasm از سرعت ۲٫۸ برابری نسبت به Mono AOT در Benchmark‌ها خبر داد

چرا مهم است

اگر اجرای C# در مرورگر برایت مطرح است، این گزارش مقایسه NetWasm و Mono AOT را هم در micro-benchmark و هم در DoomSharp ارائه می‌کند. زمان rebuild و حجم فایل‌های منتشرشده هم در آن اندازه‌گیری شده‌اند.

قبل از خواندن، این‌ها را بدان۵ مفهوم
Benchmark

آزمونی برای اندازه‌گیری و مقایسه ویژگی‌هایی مانند زمان اجرا در شرایط مشخص است.

بیشتر درباره این مفهوم

runtime

محیطی که اجرای برنامه و خدمات لازم هنگام اجرای آن را فراهم می‌کند.

بیشتر درباره این مفهوم

transaction

مجموعه‌ای از عملیات که به‌عنوان یک واحد در نظر گرفته می‌شوند.

بیشتر درباره این مفهوم

AOT

روشی که در آن code پیش از اجرای برنامه compile می‌شود، نه هنگام اجرای آن.

در حال نگارش

JIT

روشی که در آن بخشی از code هنگام اجرای برنامه به دستورهای قابل‌اجرا compile می‌شود.

در حال نگارش

در گزارش تازه NetWasm،؜ نتایج مقایسه اجرای C# با Mono AOT،؜ یعنی runtime پشت AOT در Blazor،؜ منتشر شده است. نویسنده می‌گوید NetWasm در مجموع ۲٬۲۱۳ مورد micro-benchmark،؜ با محاسبه میانگین هندسی، حدود ۲٫۸ برابر سریع‌تر بوده است. از این تعداد، ۲٬۲۰۸ مورد از مجموعه dotnet/performance Microsoft آمده‌اند؛ مجموعه‌ای که تیم .NET برای بررسی runtime استفاده می‌کند.

در نتایج تفکیکی، سرعت NetWasm نسبت به Mono AOT برای System.Runtime.Intrinsics برابر ۴٫۴ برابر، برای System.Numerics برابر ۲٫۸ برابر، برای Runtime برابر ۲٫۴ برابر، برای System.Memory برابر ۲ برابر و برای Math برابر ۱٫۲ برابر گزارش شده است. این اعداد نتایج مقایسه منتشرشده از سوی نویسنده‌اند.

نمونه عملی گزارش، DoomSharp از David Fowler است. دو build از موتور یکسان، محتوای Freedoom یکسان و adapter یکسان Canvas/WebAudio استفاده کرده‌اند. build مبتنی بر NetWasm 0.11.1 با O3 و NetWasmGC،؜ در headless Chromium روی M1 Max،؜ تعداد ۱۲۰ frame را در ۱٬۷۵۰ میلی‌ثانیه تولید کرده؛ زمان Blazor AOT برابر ۲٬۲۳۶ میلی‌ثانیه بوده است. این مقایسه سرعت ۱٫۲۸ برابری را نشان می‌دهد. حجم فایل‌های منتشرشده با Brotli نیز به‌ترتیب ۰٫۶۹ و ۳٫۶۷ مگابایت بوده است. اجرای همان موتور در Wasmtime،؜ خارج از مرورگر، حدود ۵۰ درصد سریع‌تر گزارش شده است.

برای NetWasmGC نیز سه workload شامل یک transaction کامل، نگه‌داشتن گراف object‌ها و تغییرات مکرر UI بررسی شده‌اند. سرعت آن‌ها نسبت به Mono AOT به‌ترتیب ۲، ۳ و ۳٫۵ برابر گزارش شده است؛ در مقایسه با JIT نسخه desktop از .NET 11 نیز هر سه بین ۱٫۱ تا ۲ برابر سریع‌تر بوده‌اند.

تغییر دیگر در نسخه 0.11،؜ نگه‌داشتن خروجی compile هر method در build مخصوص debug است تا rebuild فقط بخش تغییرکرده را compile کند. در نمونه DoomSharp،؜ تغییر یک method زمان rebuild را از ۲۹٫۳ به ۱٫۶ ثانیه رسانده است. پشتیبانی از dotnet watch با بارگذاری دوباره صفحه، فراخوانی مستقیم method‌های دارای [JSExport] از صفحه بدون Web Worker و معرفی framework جامعه‌محور NetWasm.UI نیز در گزارش آمده‌اند.

نکته کلیدی

عدد ۲٫۸ برابر را میانگین هندسی مجموعه آزمون‌ها بدان، نه نتیجه همه اجراها. برای مقایسه DoomSharp،؜ زمان ۱۲۰ frame،؜ محیط headless Chromium روی M1 Max و تنظیمات build را کنار نتیجه در نظر بگیر.

خواندن مقاله اصلی (در زبانه‌ی جدید باز می‌شود)
برچسب‌ها (۴)