Libcpucycles هي مكتبة صغيرة عامة لحساب دورات وحدة المعالجة المركزية

libcpucycles هي مكتبة مصغرة عامة لحساب دورات وحدة المعالجة المركزية. لا يتم تفصيل عدد الدورات مثل مخططات Falk ، ولكنها أكثر أجهزة ضبط الوقت المتاحة دقة للبرامج النموذجية ؛ إنها أدوات مركزية تُستخدم لفهم أداء البرامج وتحسينه.

تعد واجهة برمجة تطبيقات libcpucycles بسيطة: قم بتضمين واستدعاء cpucycles () لتلقي وقت طويل وقتما تشاء ، وربطها بـ -lcpucycles.

داخليًا ، تشتمل libcpucycles على عدادات دورة على مستوى الماكينة لـ amd64 (كل من PMC و TSC) ، و arm32 ، و arm64 (كل من PMC و VCT) ، و mips64 ، و ppc32 ، و ppc64 ، و riscv32 ، و riscv64 ، و sparc64 و x86. يشتمل libcpucycles أيضًا على أربع آليات على مستوى نظام التشغيل توفر مستويات مختلفة من الدقة: mach_absolute_time و perf_event و CLOCK_MONOTONIC وكإجراء احتياطي ، microsecond gettimeofday.

عندما يستدعي البرنامج cpucycles () لأول مرة ، يقارن libcpucycles تلقائيًا الآليات المتاحة ويختار الآلية التي تؤدي أفضل وظيفة. الاستدعاءات اللاحقة لـ cpucycles () آمنة وسريعة جدًا. يقوم برنامج cpucycles-info المرافق بطباعة ملخص لدقة عداد الدورات.

للمقارنة ، هناك واجهة برمجة تطبيقات (API) بسيطة __rdtsc () يتم توفيرها من قبل المترجمين ، ولكنها تعمل فقط على معالجات Intel / AMD وتكون بشكل عام أكثر ضوضاء من PMC. يوجد __builtin_readcyclecounter () يعمل على المزيد من وحدات المعالجة المركزية ، ولكنه يعمل فقط مع clang ولديه نفس مشكلات الضوضاء. كلتا الآليتين تجبر المتصل على تحديد ما يمكن عمله على المعالجات الأخرى. تتضمن الحزم المختلفة طبقات التجريد المحمولة الخاصة بها لحساب الدورات (انظر ، على سبيل المثال ، دورة FFTW.h ، المستخدمة للاختيار تلقائيًا من بين العديد من التطبيقات التي يوفرها FFTW) ، ولكن هذا يخلق جهدًا لكل حزمة لتتبع عدادات الدورة الأخيرة. الهدف من libcpucycles هو توفير عدّ دورات حديث مركزيًا لجميع الحزم المراد استخدامها. الإصدار: هذا هو الإصدار 2023.01.05 من صفحة الويب "المقدمة".

libcpucycles هي مكتبة مصغرة عامة لحساب دورات وحدة المعالجة المركزية. لا يتم تفصيل عدد الدورات مثل مخططات Falk ، ولكنها أكثر أجهزة ضبط الوقت المتاحة دقة للبرامج النموذجية ؛ إنها أدوات مركزية تُستخدم لفهم أداء البرامج وتحسينه.

تعد واجهة برمجة تطبيقات libcpucycles بسيطة: قم بتضمين واستدعاء cpucycles () لتلقي وقت طويل وقتما تشاء ، وربطها بـ -lcpucycles.

داخليًا ، تشتمل libcpucycles على عدادات دورة على مستوى الماكينة لـ amd64 (كل من PMC و TSC) ، و arm32 ، و arm64 (كل من PMC و VCT) ، و mips64 ، و ppc32 ، و ppc64 ، و riscv32 ، و riscv64 ، و sparc64 و x86. يشتمل libcpucycles أيضًا على أربع آليات على مستوى نظام التشغيل توفر مستويات مختلفة من الدقة: mach_absolute_time و perf_event و CLOCK_MONOTONIC وكإجراء احتياطي ، microsecond gettimeofday.

عندما يستدعي البرنامج cpucycles () لأول مرة ، يقارن libcpucycles تلقائيًا الآليات المتاحة ويختار الآلية التي تؤدي أفضل وظيفة. الاستدعاءات اللاحقة لـ cpucycles () آمنة وسريعة جدًا. يقوم برنامج cpucycles-info المرافق بطباعة ملخص لدقة عداد الدورات.

للمقارنة ، هناك واجهة برمجة تطبيقات (API) بسيطة __rdtsc () يتم توفيرها من قبل المترجمين ، ولكنها تعمل فقط على معالجات Intel / AMD وتكون بشكل عام أكثر ضوضاء من PMC. يوجد __builtin_readcyclecounter () يعمل على المزيد من وحدات المعالجة المركزية ، ولكنه يعمل فقط مع clang ولديه نفس مشكلات الضوضاء. كلتا الآليتين تجبر المتصل على تحديد ما يمكن عمله على المعالجات الأخرى. تتضمن الحزم المختلفة طبقات التجريد المحمولة الخاصة بها لحساب الدورات (انظر ، على سبيل المثال ، دورة FFTW.h ، المستخدمة للاختيار تلقائيًا من بين العديد من التطبيقات التي يوفرها FFTW) ، ولكن هذا يخلق جهدًا لكل حزمة لتتبع عدادات الدورة الأخيرة. الهدف من libcpucycles هو توفير عدّ دورات حديث مركزيًا لجميع الحزم المراد استخدامها. الإصدار: هذا هو الإصدار 2023.01.05 من صفحة الويب "المقدمة".

What's Your Reaction?

like

dislike

love

funny

angry

sad

wow