1. مقدمة
شكرًا على فتح هذا الدرس التطبيقي حول الترميز. هل أنت مستعد لإجراء بعض العمليات الحسابية على Compute Engine؟
في هذا الدرس التطبيقي، سنشرح كيفية بدء تشغيل جهاز افتراضي جديد وتنفيذ برنامج لحساب قيمة pi.
ستنشئ جهاز Compute Engine افتراضيًا، ثم ستنزّل برنامجًا وتجمّعه وتشغّله لحساب قيمة pi. يمكنك إنشاء مثيل Compute Engine من "وحدة التحكّم" أو سطر الأوامر. سيرشدك هذا الدرس التطبيقي إلى كيفية استخدام أدوات سطر الأوامر.

توفّر خدمة Compute Engine أجهزة افتراضية تعمل بأشكال مختلفة، مثل عدد مختلف من النوى وحجم الذاكرة وسعة التخزين. يمكنك استخدام جهاز يحتوي على أكثر من 100 نواة وعدة مئات من غيغابايت من الذاكرة إذا لزم الأمر، ولكن في هذا المثال، سنطلق جهازًا افتراضيًا محدّدًا مسبقًا يحتوي على وحدتَي معالجة مركزية افتراضيتَين وذاكرة بسعة 8 غيغابايت.
سنستخدم سلسلة آلات N2 في هذا الدرس التطبيقي. وهي آلة افتراضية من عائلة الآلات للأغراض العامة تستهدف معظم أحمال العمل العادية وأحمال العمل المتوافقة مع السحابة الإلكترونية. تتميّز السلسلة N2 بأداء أعلى لكل سلسلة محادثات وجميع الميزات المرنة التي توفّرها عائلة الأجهزة للأغراض العامة.
لنبدأ الآن!
2. الإعداد والمتطلبات
إعداد البيئة بالسرعة التي تناسبك
- سجِّل الدخول إلى Google Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.



- اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها Google APIs. ويمكنك تعديله في أي وقت.
- رقم تعريف المشروع هو معرّف فريد في جميع مشاريع Google Cloud ولا يمكن تغييره (لا يمكن تغييره بعد ضبطه). تنشئ Cloud Console سلسلة فريدة تلقائيًا، ولا يهمّك عادةً ما هي. في معظم دروس البرمجة، عليك الرجوع إلى رقم تعريف المشروع (يتم تحديده عادةً على أنّه
PROJECT_ID). إذا لم يعجبك رقم التعريف الذي تم إنشاؤه، يمكنك إنشاء رقم تعريف عشوائي آخر. يمكنك بدلاً من ذلك تجربة اسم مستخدم من اختيارك ومعرفة ما إذا كان متاحًا. ولا يمكن تغييرها بعد هذه الخطوة وستبقى سارية طوال مدة المشروع. - للعلم، هناك قيمة ثالثة، وهي رقم المشروع الذي تستخدمه بعض واجهات برمجة التطبيقات. يمكنك الاطّلاع على مزيد من المعلومات حول هذه القيم الثلاث في المستندات.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد/واجهات برمجة تطبيقات Cloud. لن تكلفك تجربة هذا الدرس البرمجي الكثير من المال، إن وُجدت تكلفة على الإطلاق. لإيقاف الموارد كي لا يتم تحصيل رسوم منك بعد هذا البرنامج التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع بأكمله. يمكن لمستخدمي Google Cloud الجدد الاستفادة من برنامج الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.
Google Cloud Shell
على الرغم من إمكانية تشغيل Google Cloud وCompute Engine عن بُعد من الكمبيوتر المحمول، سنستخدم في هذا الدرس التطبيقي حول الترميز Google Cloud Shell، وهي بيئة سطر أوامر تعمل في السحابة الإلكترونية.
يتم تحميل هذا الجهاز الظاهري المستند إلى Debian بجميع أدوات التطوير التي تحتاج إليها. توفّر هذه الخدمة دليلًا منزليًا دائمًا بسعة 5 غيغابايت وتعمل في Google Cloud، ما يؤدي إلى تحسين أداء الشبكة والمصادقة بشكل كبير. يعني ذلك أنّ كل ما تحتاج إليه لهذا الدرس التطبيقي حول الترميز هو متصفّح (نعم، يمكن استخدامه على جهاز Chromebook).
- لتفعيل Cloud Shell من Cloud Console، ما عليك سوى النقر على تفعيل Cloud Shell
(يستغرق توفير البيئة والاتصال بها بضع لحظات فقط).


بعد الاتصال بـ 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:

يضبط Cloud Shell أيضًا بعض متغيرات البيئة تلقائيًا، ما قد يكون مفيدًا عند تنفيذ الأوامر المستقبلية.
echo $GOOGLE_CLOUD_PROJECT
ناتج الأمر
<PROJECT_ID>
- أخيرًا، اضبط المنطقة التلقائية وإعدادات المشروع.
gcloud config set compute/zone us-central1-f
يمكنك اختيار مجموعة متنوعة من المناطق المختلفة. لمزيد من المعلومات، يُرجى الاطّلاع على المناطق والأقاليم.
3- إنشاء مثيل في Compute Engine
أولاً، سننشئ جهازًا افتراضيًا باستخدام أداة سطر الأوامر gcloud. يمكنك أيضًا استخدام وحدة التحكّم إذا كنت تفضّل ذلك، ولكن من الأسهل تكرار سطر الأوامر وشرحه.
لنبدأ أولاً بإنشاء آلة افتراضية من النوع n2-standard-2 باسم pi-codelab مع استخدام Debian 11 كنظام تشغيل. سنستخدم أيضًا "القرص الدائم المتوازن" (PD) لوحدة تخزين التمهيد. تستند الأقراص الدائمة المتوازنة إلى محركات أقراص ذو حالة صلبة (SSD) وتوازن بين الأداء والتكلفة. سيُطلب منك اختيار المنطقة التي تريد استخدامها إذا لم تحدّد المنطقة التلقائية في قسم "الإعداد والمتطلبات".
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، يُرجى الانتقال إلى صفحة المرجع.
4. الوصول إلى الجهاز الافتراضي باستخدام بروتوكول النقل الآمن (SSH)
لإجراء عملية SSH في الجهاز الظاهري من سطر الأوامر، نفِّذ الأمر التالي.
gcloud compute ssh pi-codelab
هذا كل شيء! أنت الآن على الجهاز الافتراضي. يمكنك تأكيد المضيف الحالي من خلال تنفيذ أمر اسم المضيف.
hostname
سيعرض الأمر اسم المضيف لبيئة shell الحالية.
pi-codelab
5- تثبيت التبعيات
الآن، سنثبّت التبعيات اللازمة لتجميع البرنامج من أجل حساب قيمة 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
يأخذ برنامج 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. تصف الأسطر الثلاثة الأخيرة مقدار الوقت الذي استغرقه تشغيل البرنامج ومقدار وحدة المعالجة المركزية التي استخدمها.
- الوقت الفعلي: هو الوقت الفعلي من البداية إلى النهاية، ما يعني أنّ حساب 10 ملايين رقم من أرقام باي استغرق 9.7 ثانية في المثال أعلاه.
- user: مقدار وقت وحدة المعالجة المركزية الذي تم استخدامه، وهو أكبر من "الوقت الفعلي" لأنّ الجهاز يحتوي على نواتَي وحدة معالجة مركزية ويتم احتساب كل نواة ضمن الإجمالي.
- sys: الوقت الذي استغرقه نظام التشغيل لتشغيل البرنامج من أجل معالجة مهام النظام، مثل الشبكة والإدخال/الإخراج استغرقت هذه العملية حوالي 0.4 ثانية، وهو الوقت اللازم لكتابة النتيجة على القرص.
يمكننا إلقاء نظرة على الملف pi10m.txt والاطّلاع على أول وآخر 100 رقم من كل منهما.
لنتحقّق من الأرقام الأولى. يعرض هذا الأمر أول 100 رقم عشري (والأرقام الثلاثة الأولى والفاصلة العشرية).
head -c 102 pi10m.txt
يجب أن تبدو النتيجة على النحو التالي.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
يعرض الأمر التالي آخر 100 رقم عشري.
tail -c 100 pi10m.txt
يجب أن تبدو النتيجة على النحو التالي.
610515549257985759204553246894468742702504639790565326553194060999469787333810631719481735348955897
8. تنظيف المجموعة
لا تنسَ إيقاف مثيل Compute Engine، وإلا سيستمر في العمل وتراكم التكاليف.
إذا كنت تستخدم الجهاز الافتراضي (متصلاً باستخدام SSH)، سجِّل الخروج أولاً عن طريق تنفيذ الأمر exit أولاً.
exit
بعد ذلك، شغِّل الأمر gcloud compute instances delete التالي لحذف الجهاز الافتراضي والأقراص المرتبطة به. سيُطلب منك تأكيد حذف المرجع.
gcloud compute instances delete pi-codelab
9. ما هي الخطوات التالية؟
تهانينا، لقد أكملت هذا الدرس التطبيقي حول الترميز في Compute Engine وحسبت 10 ملايين رقم من أرقام Pi.
استخدمنا البنية الأساسية نفسها لحساب 100 تريليون رقم من أرقام باي في عام 2022. يمكنك الاطّلاع على الإشعار لمعرفة كيف كان أداؤنا. تتوفّر النتائج الكاملة على موقعنا الإلكتروني التجريبي pi.delivery.
يمكنك الاطّلاع على آخر الأخبار حول الحوسبة والحوسبة عالية الأداء في مدونة Google Cloud.
المزيد من ميزات Compute Engine
تتضمّن Compute Engine مجموعة شاملة من الميزات. ننصحك بالاطّلاع على بعض هذه الموارد :
- الأجهزة الافتراضية الاستباقية: https://cloud.google.com/compute/docs/instances/create-start-preemptible-instance
- عُقد المستأجر الفردي - https://cloud.google.com/compute/docs/nodes/create-nodes
- وحدات معالجة الرسومات ووحدات معالجة الموتّرات - https://cloud.google.com/compute/docs/gpus/add-gpus
- أجهزة Windows الافتراضية - https://cloud.google.com/compute/docs/instances/windows/creating-managing-windows-instances
- مراجع التصنيفات: https://cloud.google.com/compute/docs/labeling-resources
- نقل الأجهزة الافتراضية إلى Compute Engine - https://cloud.google.com/compute/docs/vm-migration/
تقديم ملاحظاتك
- يُرجى تخصيص بعض الوقت لإكمال الاستطلاع القصير جدًا.