מדידת השהיות ו-PresentMon
בדף זה
PCBenchmarkX מודד בנפרד את זמן האחזור הפנימי של העיבוד ואת זמן האחזור של פלט הפריים. מדדים תוכנתיים אלה אינם מתארים את כל המסלול מהקלקת העכבר ועד להארת הפיקסל על המסך. מחזור המדידה המלא מתואר במתודולוגיה.
גירוי תוכנתי עצמאי
Section titled “גירוי תוכנתי עצמאי”זרם מתמיד מייצר אותות במרווחים דטרמיניסטיים של 8-12 מ״ש. אם Windows מאפשר, הוא יוצר טיימר ממתין ברמת דיוק גבוהה; אחרת הוא משתמש בטיימר ממתין רגיל. ההמתנה לאירוע מתבצעת ללא סקירה רציפה, שהייתה תופסת את הליבה. רזולוציית הטיימר המערכתית הגלובלית אינה משתנה בכך.
עבור כל אות נרשמים ביומן המועד המתוכנן, היקיצה של המחולל, האות בפועל, היקיצה של המקבל, הסימולציה, שליחת הפקודות, חותמות הזמן של GPU ואירועי התצוגה. מזהה פריים משותף מקשר בין כל השלבים.
המועד המתוכנן → היקיצת המחולל → אות ↓ היקיצת המקבל ↓ CPU → פקודות → GPU ↓ Present → אירוע פלטברצפים אלה נראים בנפרד גם האיחור של הטיימר וגם זמן האחזור של היקיצת המקבל. תחילת Core Latency — זה האות בפועל, ולכן הצעד מהמועד המתוכנן ועד לאות אינו נספר במדד זה.
פירוט לפי שלבים של מסלול זמן האחזור
Section titled “פירוט לפי שלבים של מסלול זמן האחזור”התוצאה מכילה פירוט לפי שלבים של המסלול הנמדד latency_path — בנפרד עבור Baseline ו-Loaded. השלבים נספרים מהאות בפועל:
| שלב | מה נמדד |
|---|---|
signal_to_consumer_wake |
מהאות ועד היקיצת המקבל |
cpu_processing |
עיבוד CPU: הסימולציה והכנת נתוני הפריים |
cpu_end_to_submit_start |
ההשהיה מסוף עבודת ה-CPU ועד תחילת הכנת השליחה |
workload_submit_cpu_span |
הכנה וכתיבה של פקודות ה-API הגרפי |
submit_start_to_gpu_begin |
מתחילת ההכנה ועד תחילת עבודת ה-GPU; זה אינו זמן אחזור תור טהור |
gpu_execution |
ביצוע עבודת ה-GPU עצמה, במחזורי GPU |
| presentation spans | תצוגה: העטיפה של Present והמרווחים מהאות ומסוף עבודת ה-GPU ועד ScreenTime |
כל שלב ניתן כהתפלגות עם סטטיסטיקות ואחוזונים. הקטעים נספרים עבור כל זוג ציונים בנפרד, ולא על ידי חיסור של שני חציונים. אם ציון הסיום של שלב חסר או אינו מהימן, ההתפלגות שלו נשארת ריקה — אין ערכים מומצאים. האיחור של הטיימר (הפער בין המועד המתוכנן לאות בפועל) נרשם כאבחון נפרד לפני האות ואינו נכלל בערכי המסלול הכוללים.
QPC וחותמות זמן GPU עצמאיות
Section titled “QPC וחותמות זמן GPU עצמאיות”זמן ה-CPU נרשם דרך QueryPerformanceCounter. עבור ה-GPU המנוע מציב שתי timestamp query סביב העבודה הנמדדת, מקבל את תדר התור דרך GetTimestampFrequency וממיר את הפרש הטיקים למילישניות:
GPU work, ms = (GPU_end − GPU_begin) × 1000 / GPU_frequencyלפי תיעוד Microsoft בנושא D3D12 timing, timestamp query משקף את התקדמות העבודה עד סוף הצינור, ומוני ה-GPU וה-CPU מקושרים דרך GetClockCalibration.
זוג כיול של GPU/QPC מאפשר לבטא את סיום עבודת ה-GPU על אותה סקלת זמן כמו האות:
GPU_completion_QPC = calibration_QPC + (GPU_end − calibration_GPU) × QPC_frequency / GPU_frequency
Core Latency, ms = (GPU_completion_QPC − signal_QPC) × 1000 / QPC_frequencyדיוק האומדן הזה תלוי במידה רבה בכמה מדויק מיושרים שעוני ה-CPU וה-GPU. הוא בכל מקרה אינו מכסה את מסלול ה-USB של העכבר, את זמן הסריקה של המטריצה או את תגובת הפיקסל. Microsoft מתארת בנפרד את הדקויות של ציוני QPC ברמת דיוק גבוהה.
Baseline ו-Loaded
Section titled “Baseline ו-Loaded”Baseline מודד את זמן האחזור בתצורה המינימלית של העומס הזה. Loaded עובד עם עומס GPU מכויל ל-8.333333 מ״ש, כלומר לתקציב חישובי של כ-120 הרץ. המסך הפיזי עשוי להיות בתדר אחר.
הכיול משנה את המורכבות בתוך ההצללה בטווח 1-4096. מספר המעברים נשאר קבוע: ארבעה מעברי פוסט. תחילה נבחר טווח סביב הזמן היעד, לאחר מכן הוא מועמק והתצורה הנבחרת נבדקת. כדי לתפוס את אותו זמן בכרטיס מסך מהיר, יש צורך בעבודה מורכבת יותר.
ב-Performance נפח העבודה קבוע. ב-Loaded Latency העומס מכויל כך שזמן עבודת ה-GPU יהיה קרוב בכרטיסי מסך שונים. חותמות הזמן המתקבלות אינן מנורמלות לאחר המדידה.
פלט הפריימים של מבחן זמן האחזור עובר דרך מסלול תצוגה נפרד: חלון ללא מסגרת במצב flip-discard, זמן אחזור פריים מרבי (maximum frame latency) 1, אובייקט DXGI ממתין ו-tearing, אם המערכת תומכת בו. מסלול זה נפרד מהעומס הקבוע של הביצועים, שמבוצע מחוץ למאגר המסך ואינו גורם ל-Present.
תפקיד PresentMon
Section titled “תפקיד PresentMon”עבור אירועי התצוגה משמשת הספרייה PresentMon 2.5.1. זהו פרויקט ETW לניתוח אירועים גרפיים ב-Windows, המתואר על ידי מחבריו. Procmon / Process Monitor אינו משמש בצינור המדידה הזה.
PCBenchmarkX מרים הפעלת איסוף משלו, מסנן אירועים של התהליך שלו ומקשר פריימים לאותות תוכנתיים. לשם כך אין צורך בשירות נפרד ובהפעלה ידנית של PresentMon נפרד.
נשמרים מרווחים נוספים:
- מהאות ועד
Present; - מ-
PresentועדScreenTime; - מהאות ועד
ScreenTime.
ScreenTime — זהו אירוע תצוגה תוכנתי של הפריים; פוטודיודה למדידת אור מהמסך אינה משמשת. מדדי התצוגה אינם נכללים ב-PC Score; מה כן נכלל בו מתואר בחישוב הניקוד. הרמת הפעלת ETW עשויה לדרוש הרצה בשם מנהל או חברות בקבוצת «משתמשי יומן הביצועים». אם לא ניתן היה להרים את ההפעלה, בלוק האבחון הזה לא יהיה, והכשל נרשם בתוצאה במפורש. היעדר נתונים אינו שווה לזמן אחזור אפס.
זמן ה-GPU של PresentMon נשמר גם הוא בנפרד מזמן ה-D3D12 העצמאי. מפתחי PresentMon מציינים מגבלות דיוק של מדדי GPU עם HAGS. לכן המנוע אינו מחליף את חותמות הזמן העצמאיות של ה-GPU באומדן מ-ETW.
מה פותח ב-PCBenchmarkX
Section titled “מה פותח ב-PCBenchmarkX”ב-PCBenchmarkX פותחו מחולל האותות, התאמת שלבי הפריים, סימולציית ה-CPU, עומסי D3D12, כיול Loaded, סדר הבלוקים החוזרים, איסוף המדידות, העיבוד הסטטיסטי ומודל הניקוד. QPC ו-D3D12 מסופקים על ידי Windows. לאיסוף אירועים גרפיים דרך ETW משמש הפרויקט הפתוח PresentMon.
פרטים טכניים ומקורות חיצוניים נבדקו 2026-09-20 עבור מנוע 0.5.2.
