محاسبه Pi در موتور محاسباتی

۱. مقدمه

ممنون که این آزمایشگاه کد رو باز کردید! آماده‌اید تا با موتور محاسباتی (Compute Engine) کمی محاسبات انجام بدیم؟

در این آزمایشگاه کد، نحوه راه‌اندازی یک ماشین مجازی جدید و اجرای برنامه‌ای برای محاسبه عدد پی را بررسی خواهیم کرد.

شما یک نمونه از موتور محاسبه (Compute Engine) ایجاد خواهید کرد، برنامه‌ای را برای محاسبه عدد پی دانلود، کامپایل و اجرا خواهید کرد. می‌توانید یک نمونه از موتور محاسبه را از طریق کنسول یا خط فرمان ایجاد کنید. این آزمایش شما را با استفاده از ابزارهای خط فرمان آشنا می‌کند.

ComputeEngine_128px.png

موتور محاسباتی (Compute Engine) ماشین‌های مجازی را در اشکال مختلف، مانند تعداد هسته‌های مختلف، اندازه حافظه و فضای ذخیره‌سازی ارائه می‌دهد. در صورت لزوم می‌توانید از ماشینی با بیش از ۱۰۰ هسته و چند صد گیگابایت حافظه استفاده کنید، اما در این مثال ما یک ماشین مجازی از پیش تعریف شده با ۲ پردازنده مجازی و ۸ گیگابایت حافظه راه‌اندازی خواهیم کرد.

ما در این آزمایشگاه کد از سری ماشین‌های N2 استفاده خواهیم کرد. این یک ماشین مجازی از خانواده ماشین‌های همه منظوره است که اکثر بارهای کاری استاندارد و ابری را هدف قرار می‌دهد. سری N2 عملکرد بالاتری در هر رشته و تمام انعطاف‌پذیری ارائه شده توسط خانواده ماشین‌های همه منظوره را دارد.

حالا، بیایید شروع کنیم!

۲. تنظیمات و الزامات

تنظیم محیط خودتنظیم

  1. وارد کنسول گوگل کلود شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب جیمیل یا گوگل ورک اسپیس ندارید، باید یکی ایجاد کنید .

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • نام پروژه ، نام نمایشی برای شرکت‌کنندگان این پروژه است. این یک رشته کاراکتری است که توسط APIهای گوگل استفاده نمی‌شود. می‌توانید آن را در هر زمانی به‌روزرسانی کنید.
  • شناسه پروژه در تمام پروژه‌های گوگل کلود منحصر به فرد است و تغییرناپذیر است (پس از تنظیم، قابل تغییر نیست). کنسول کلود به طور خودکار یک رشته منحصر به فرد تولید می‌کند؛ معمولاً برای شما مهم نیست که چیست. در اکثر آزمایشگاه‌های کد، باید به شناسه پروژه ارجاع دهید (که معمولاً با عنوان PROJECT_ID شناخته می‌شود). اگر شناسه تولید شده را دوست ندارید، می‌توانید یک شناسه تصادفی دیگر ایجاد کنید. به عنوان یک جایگزین، می‌توانید شناسه خودتان را امتحان کنید و ببینید که آیا در دسترس است یا خیر. پس از این مرحله قابل تغییر نیست و در طول پروژه باقی خواهد ماند.
  • برای اطلاع شما، یک مقدار سوم هم وجود دارد، شماره پروژه که برخی از APIها از آن استفاده می‌کنند. برای کسب اطلاعات بیشتر در مورد هر سه این مقادیر، به مستندات مراجعه کنید.
  1. در مرحله بعد، برای استفاده از منابع/API های ابری، باید پرداخت صورتحساب را در کنسول ابری فعال کنید . اجرای این آزمایشگاه کد، اگر اصلاً هزینه‌ای نداشته باشد، هزینه زیادی نخواهد داشت. برای خاموش کردن منابع به طوری که پس از این آموزش متحمل پرداخت صورتحساب نشوید، می‌توانید منابعی را که ایجاد کرده‌اید یا کل پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.

پوسته ابری گوگل

اگرچه می‌توان از راه دور و از طریق لپ‌تاپ، گوگل کلود و کامپیوت انجین را مدیریت کرد، اما در این آزمایشگاه کد، از گوگل کلود شل ، یک محیط خط فرمان که در فضای ابری اجرا می‌شود، استفاده خواهیم کرد.

این ماشین مجازی مبتنی بر دبیان، تمام ابزارهای توسعه مورد نیاز شما را در خود جای داده است. این ماشین مجازی یک دایرکتوری خانگی ۵ گیگابایتی دائمی ارائه می‌دهد و در فضای ابری گوگل اجرا می‌شود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود می‌بخشد. این بدان معناست که تنها چیزی که برای این آزمایشگاه کد نیاز دارید یک مرورگر است (بله، روی کروم‌بوک هم کار می‌کند).

  1. برای فعال کردن Cloud Shell از کنسول Cloud، کافیست روی Activate Cloud Shell کلیک کنید. b125d9eb26a46cc5.png (فقط چند لحظه طول می‌کشد تا آماده شود و به محیط متصل شود).

1067942a9a93f70.png

اسکرین شات 2017-06-14 ساعت 10.13.43 PM.png

پس از اتصال به Cloud Shell، باید ببینید که از قبل احراز هویت شده‌اید و پروژه از قبل روی PROJECT_ID شما تنظیم شده است.

gcloud auth list

خروجی دستور

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

خروجی دستور

[core]
project = <PROJECT_ID>

اگر به هر دلیلی پروژه تنظیم نشده باشد، کافیست دستور زیر را اجرا کنید:

gcloud config set project <PROJECT_ID>

به دنبال PROJECT_ID خود هستید؟ بررسی کنید که در مراحل راه‌اندازی از چه شناسه‌ای استفاده کرده‌اید یا آن را در داشبورد Cloud Console جستجو کنید:

cc3895eeac80db2c.png

Cloud Shell همچنین برخی از متغیرهای محیطی را به طور پیش‌فرض تنظیم می‌کند که ممکن است هنگام اجرای دستورات بعدی مفید باشند.

echo $GOOGLE_CLOUD_PROJECT

خروجی دستور

<PROJECT_ID>
  1. در نهایت، منطقه پیش‌فرض و پیکربندی پروژه را تنظیم کنید.
gcloud config set compute/zone us-central1-f

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

۳. یک نمونه موتور محاسباتی ایجاد کنید

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

بیایید ابتدا یک نمونه n2-standard-2 با نام pi-codelab با سیستم عامل Debian 11 ایجاد کنیم. همچنین از Balanced Persistent Disk (PD) برای Boot Volume استفاده خواهیم کرد. PD های Balanced توسط درایوهای حالت جامد (SSD) پشتیبانی می‌شوند و عملکرد و هزینه را متعادل می‌کنند. اگر Zone پیش‌فرض را در بخش Setup and Requirements انتخاب نکرده باشید، از شما پرسیده می‌شود که از کدام Zone استفاده کنید.

gcloud compute instances create pi-codelab \
--machine-type=n2-standard-2 \
--image-project=debian-cloud \
--image-family=debian-11 \
--boot-disk-type=pd-balanced

نتیجه دستور باید به شکل زیر باشد:

Created [https://www.googleapis.com/compute/v1/projects/xxx/zones/us-central1-f/instances/pi-codelab].
NAME: pi-codelab
ZONE: us-central1-f
MACHINE_TYPE: n2-standard-2
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.XX
EXTERNAL_IP: XX.XX.XX.XX
STATUS: RUNNING

لطفاً توجه داشته باشید که فیلدهای INTERNAL_IP و EXTERNAL_IP هر بار که یک ماشین مجازی جدید ایجاد می‌کنید، تغییر می‌کنند.

اگر می‌خواهید درباره دستور gcloud compute instances create بیشتر بدانید، لطفاً به صفحه مرجع مراجعه کنید.

۴. اتصال SSH به نمونه

برای SSH کردن به نمونه از طریق خط فرمان، دستور زیر را اجرا کنید.

gcloud compute ssh pi-codelab

همین! حالا شما روی ماشین مجازی هستید. می‌توانید با اجرای دستور hostname از میزبان فعلی خود مطمئن شوید.

hostname

این دستور نام میزبان محیط پوسته فعلی را نمایش می‌دهد.

pi-codelab

۵. نصب وابستگی‌ها

اکنون وابستگی‌های مورد نیاز برای کامپایل برنامه جهت محاسبه عدد پی را نصب خواهیم کرد.

sudo apt update
sudo apt -y install build-essential libgmp-dev libmpfr-dev libfmt-dev

این فرآیند چند دقیقه طول می‌کشد. حالا بیایید بررسی کنیم که آیا کامپایلر ++C شما کار می‌کند یا خیر.

c++ --version

این دستور در صورت نصب صحیح، اطلاعات نسخه کامپایلر را نمایش می‌دهد.

c++ (Debian 10.2.1-6) 10.2.1 20210110
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

۶. کامپایل کردن برنامه

حالا بیایید برنامه ++C برای محاسبه عدد پی را کامپایل کنیم. این برنامه حتی اگر قبلاً با ++C برنامه‌نویسی نکرده باشید، ساده‌تر از آن چیزی است که به نظر می‌رسد. همه پیش‌نیازها در مرحله قبل نصب شده‌اند، بنابراین فقط باید کد منبع را دریافت و کامپایل کنیم.

ابتدا، کد منبع را دریافت و ذخیره کنید. این مرحله یک فایل منبع را از GitHub دانلود کرده و آن را با نام pi.cc در دایرکتوری فعلی ذخیره می‌کند.

curl -OL https://raw.githubusercontent.com/GoogleCloudPlatform/pi-delivery/main/codelab/pi.cc

در مرحله بعد، کامپایلر C++ را اجرا کنید تا کد منبع ذخیره شده را کامپایل کند.

c++ -opi pi.cc -std=c++17 -O3 -march=native -lgmp -lmpfr -lpthread -lfmt

کامپایلر در صورت موفقیت چیزی خروجی نمی‌دهد. بیایید بررسی کنیم که آیا فایل اجرایی را دارید یا خیر:

ls pi

این دستور ls باید نام فایل برنامه را در صورت وجود، نمایش دهد.

pi

۷. محاسبه عدد پی

برنامه‌ی pi یک آرگومان می‌گیرد که تعداد ارقام مورد محاسبه است. برای مثال، بیایید ۱۰۰ رقم اعشار اول عدد پی را محاسبه کنیم.

./pi 100

برنامه در کمتر از یک ثانیه تمام می‌شود و چیزی شبیه به این را خروجی می‌دهد:

Calculating 100 digits of pi...
Internal precision = 348 bits
Number of terms = 9, digits per term = 14.181647462725477
Summation series complete. Final steps...
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

خط آخر، ۱۰۰ رقم اعشار اول عدد پی است. تبریک می‌گویم، شما همین الان از کامپیوتر خواستید که محاسبات را برای شما انجام دهد!

این برنامه می‌تواند ارقام بیشتری را محاسبه کند (در حال حاضر سقف آن ۱۰۰ میلیارد رقم است). حال بیایید ۱۰ میلیون رقم را محاسبه کنیم و مدت زمان لازم را اندازه‌گیری کنیم. خروجی را به یک فایل هدایت می‌کنیم زیرا ۱۰ میلیون رقم عدد پی برای مشاهده در کنسول خط فرمان کمی طولانی است.

time ./pi 10000000 > pi10m.txt

خروجی برنامه چیزی شبیه به این است:

Calculating 10000000 digits of pi...
Internal precision = 33219296 bits
Number of terms = 705138, digits per term = 14.181647462725477
Summation series complete. Final steps...

real    0m9.702s
user    0m14.839s
sys     0m0.364s

این بار ارقام را شامل نمی‌شود زیرا آنها در فایل pi10m.txt ذخیره شده‌اند. سه خط آخر توضیح می‌دهند که برنامه چقدر زمان برای اجرا نیاز داشته و چقدر از پردازنده را استفاده کرده است.

  • واقعی: زمان واقعی از ابتدا تا انتها، به این معنی که محاسبه 10 میلیون رقم عدد پی در مثال بالا 9.7 ثانیه طول کشیده است.
  • کاربر: چقدر از زمان CPU استفاده کرده است، که بزرگتر از مقدار "واقعی" است زیرا دستگاه دو هسته CPU دارد و هر هسته در کل زمان محاسبه می‌شود.
  • sys: زمانی که سیستم عامل برای اجرای برنامه جهت پردازش وظایف سیستمی مانند شبکه و ورودی/خروجی نیاز داشت. این بار حدود ۰.۴ ثانیه طول کشید که عمدتاً زمان نوشتن نتیجه روی دیسک است.

می‌توانیم نگاهی به فایل pi10m.txt بیندازیم و ۱۰۰ رقم اول و آخر هر کدام را ببینیم.

بیایید اولین ارقام را بررسی کنیم. این دستور ۱۰۰ رقم اعشار اول (و ۳ و ممیز اول) را نمایش می‌دهد.

head -c 102 pi10m.txt

نتیجه باید به این شکل باشد.

3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

دستور بعدی ۱۰۰ رقم اعشار آخر را نمایش می‌دهد.

tail -c 100 pi10m.txt

نتیجه باید به این شکل باشد.

610515549257985759204553246894468742702504639790565326553194060999469787333810631719481735348955897

۸. کلاستر را تمیز کنید

فراموش نکنید که نمونه Compute Engine خود را خاموش کنید، در غیر این صورت به کار خود ادامه می‌دهد و هزینه‌ها را افزایش می‌دهد.

اگر روی ماشین مجازی هستید (از طریق SSH متصل هستید)، ابتدا با اجرای دستور exit از سیستم خارج شوید.

exit

سپس، دستور gcloud compute instances delete زیر را برای حذف نمونه و دیسک‌های مرتبط اجرا کنید. از شما خواسته می‌شود که حذف منبع را تأیید کنید.

gcloud compute instances delete pi-codelab

۹. قدم بعدی چیست؟

تبریک می‌گویم، شما این آزمایشگاه کد موتور محاسباتی را به پایان رساندید و 10 میلیون رقم عدد پی را محاسبه کردید!

ما از همین زیرساخت برای محاسبه ۱۰۰ تریلیون رقم عدد پی در سال ۲۰۲۲ استفاده کردیم. برای مشاهده نحوه عملکرد ما، اطلاعیه را بخوانید. کل نتایج در سایت آزمایشی pi.delivery ما موجود است.

با آخرین اخبار مربوط به محاسبات و محاسبات با کارایی بالا در وبلاگ Google Cloud همراه باشید!

ویژگی‌های بیشتر موتور محاسباتی

موتور محاسبه (Compute Engine) مجموعه‌ای غنی از ویژگی‌ها را دارد. شاید بخواهید برخی از این موارد را بررسی کنید:

نظرات خود را با ما در میان بگذارید

  • لطفا کمی وقت بگذارید و نظرسنجی بسیار کوتاه ما را تکمیل کنید.