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

1. مقدمه

از شما برای باز کردن این نرم افزار متشکریم! آیا آماده‌اید چند اعداد را در Compute Engine خرد کنید؟

در این کد لبه، نحوه راه اندازی یک ماشین مجازی جدید و اجرای برنامه ای برای محاسبه پی را توضیح خواهیم داد.

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

ComputeEngine_128px.png

Compute Engine ماشین های مجازی را ارائه می دهد که در اشکال مختلف مانند تعداد هسته های مختلف، اندازه حافظه و فضای ذخیره سازی کار می کنند. در صورت لزوم می توانید از ماشینی با بیش از 100 هسته و چند صد گیگابایت حافظه استفاده کنید، اما در این مثال ما یک ماشین مجازی از پیش تعریف شده 2 vCPU و حافظه 8 گیگابایتی را راه اندازی می کنیم.

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

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

2. راه اندازی و الزامات

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

Google Cloud Shell

در حالی که Google Cloud و Compute Engine را می توان از راه دور از لپ تاپ شما کار کرد، در این کد لبه از Google Cloud Shell استفاده خواهیم کرد، یک محیط خط فرمان که در Cloud اجرا می شود.

این ماشین مجازی مبتنی بر دبیان با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این دایرکتوری اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد شبکه و احراز هویت را بسیار افزایش می دهد. این بدان معنی است که تمام چیزی که برای این کد لبه نیاز دارید یک مرورگر است (بله، روی کروم بوک کار می کند).

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

1067942a9a93f70.png

Screen Shot 2017-06-14 at 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

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

3. یک نمونه Compute Engine ایجاد کنید

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

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

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

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

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

4. SSH به Instance

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

gcloud compute ssh pi-codelab

همین! اکنون در ماشین مجازی هستید. با اجرای دستور hostname می توانید هاست فعلی خود را تأیید کنید.

hostname

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

pi-codelab

5. Dependencies را نصب کنید

اکنون وابستگی های مورد نیاز برای کامپایل برنامه برای محاسبه pi را نصب می کنیم.

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.

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

حالا بیایید برنامه C++ را برای محاسبه pi کامپایل کنیم. این ساده تر از آن است که به نظر می رسد حتی اگر قبلاً در 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

7. پی را محاسبه کنید

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

./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

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

این برنامه می تواند ارقام بیشتری را محاسبه کند (در حال حاضر 100 میلیارد رقم محدود شده است). حالا بیایید 10 میلیون رقم را محاسبه کنیم و اندازه گیری کنیم که چقدر طول می کشد. ما خروجی را به یک فایل هدایت می کنیم زیرا 10 میلیون رقم پی برای مشاهده در کنسول خط فرمان کمی طولانی است.

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 ذخیره می شوند. سه خط آخر نشان می دهد که برنامه چقدر زمان برای اجرا و چه مقدار cpu استفاده کرده است.

  • real: زمان واقعی از شروع تا پایان، یعنی 9.7 ثانیه طول کشید تا 10 میلیون رقم پی در مثال بالا محاسبه شود.
  • کاربر: چقدر از زمان CPU استفاده کرده است، که بزرگتر از "واقعی" است، زیرا دستگاه دارای دو هسته CPU است و هر هسته در کل به حساب می آید.
  • sys: زمان مورد نیاز سیستم عامل برای اجرای برنامه برای پردازش وظایف سیستم مانند شبکه و I/O. این بار حدود 0.4 ثانیه طول کشید که بیشتر زمان نوشتن نتیجه روی دیسک است.

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

بیایید ارقام اول را بررسی کنیم. این دستور 100 اعشار اول (و 3 اول و نقطه اعشار) را خروجی می دهد.

head -c 102 pi10m.txt

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

3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

دستور بعدی 100 اعشار آخر را خروجی می دهد.

tail -c 100 pi10m.txt

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

610515549257985759204553246894468742702504639790565326553194060999469787333810631719481735348955897

8. Cluster را تمیز کنید

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

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

exit

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

gcloud compute instances delete pi-codelab

9. بعد چی؟

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

ما از همین زیرساخت برای محاسبه 100 تریلیون رقم پی در سال 2022 استفاده کردیم. اطلاعیه را بخوانید تا ببینید چگونه انجام دادیم. کل نتایج در سایت آزمایشی pi.delivery ما موجود است.

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

ویژگی های بیشتر Compute Engine

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

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

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