קל לארגן דפים בעזרת אוספים
אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
רוחב הפס של הזיכרון של נתוני הקודקודים יכול להיות צוואר בקבוק פוטנציאלי בביצועי מעבד ה-GPU של המשחק. יש כמה מוני נתונים בפרופיל של מערכת AGI שיכולים לעזור באבחון בעיות ברוחב הפס של זיכרון הקודקוד.
מונים של Qualcomm Adreno
במכשירים עם מעבדי GPU מסוג Qualcomm Adreno, חלק מהמונים הבולטים כוללים:
הגשת הצעה נגדית
תיאור
קריאת זיכרון ב-Vertex
רוחב הפס של נתוני הקודקודים שנקראים מזיכרון חיצוני.
ממוצע בייטים לקודקוד
הגודל הממוצע של נתוני הקודקוד, בבייטים.
% Vertex Fetch Stall
אחוז מחזורי השעון שבהם ה-GPU חסום בנתוני קודקוד.
מונים של ARM Mali (בשלבי פיתוח)
במכשירים עם מעבדי ARM Mali GPU, חלק מהמונים הבולטים כוללים:
הגשת הצעה נגדית
תיאור
טעינה/אחסון של ביטים לקריאה מזיכרון חיצוני
הנתונים שנקראים מהזיכרון החיצוני על ידי יחידת הטעינה/האחסון, בממוצע על ליבות ההצללה.
טעינה/אחסון של פעימות קריאה ממטמון L2
נתונים שנקראים ממטמון L2 על ידי יחידת הטעינה/האחסון, בממוצע על ליבות ההצללה.
[מידע נוסף]
כדי לחשב את רוחב הפס הכולל מתוך ממוצע הפעימות של הקריאה, מכפילים את ערך הדלפק ברוחב האפיק (בדרך כלל 16 בייט) ובמספר הכולל של ליבות ההצללה. [מידע נוסף]
ניתוח נגדי
כדי למדוד את ההתנהגות של המונים האלה, אפשר למדוד את רוחב הפס הממוצע והשיא במהלך פריים יחיד של GPU, שאפשר לתחום אותו באמצעות בלוק רציף של ניצול GPU.
איור 1: רוחב פס של קריאת זיכרון ב-Vertex עבור פריים יחיד, עם ערך ממוצע של 327MBps וערך שיא של 1.16GBps
מומלץ להגדיר רוחב פס מקסימלי לקריאת זיכרון של קודקוד שלא יעלה על 1.5GBps, ורוחב פס ממוצע שלא יעלה על 500MBps. ערכים גבוהים יותר מצביעים על אחת מכמה בעיות נפוצות:
גודל הקודקוד גדול מדי: יכול להיות שלקודקודים יש מאפייני קודקוד גדולים או מספר גדול של מאפייני קודקוד, מה שמשפיע על זמן ההצללה של הקודקודים.
אין פיצול של זרמי מאפייני הקודקוד: מאפייני הקודקוד משולבים במאגר יחיד, וכך יעילות המטמון יורדת.
יותר מדי קודקודים נשלחו לכל פריים: מודלים מורכבים או מספר גדול של מודלים עשויים לתפוס רוחב פס גדול יותר ולדרוש יותר זמן להצללה.
אפשר גם לאבחן בעיות בגודל הקודקוד באמצעות המדד Average Bytes / Vertex, שאנחנו ממליצים שלא יהיה גבוה מ-32 בייטים או קודקודים.
איור 2: גודל ממוצע של קודקוד לפריים בודד, עם ערך ממוצע של 31.3 בייט
הדרך הכי טובה לאבחן איזו מהבעיות האלה מתרחשת היא ליצור מעקב אחר פרופיל של פריים כדי לנתח פורמטים של קודקסי צלעות.
דוגמאות התוכן והקוד שבדף הזה כפופות לרישיונות המפורטים בקטע רישיון לתוכן. Java ו-OpenJDK הם סימנים מסחריים או סימנים מסחריים רשומים של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2025-07-27 (שעון UTC).
[[["התוכן קל להבנה","easyToUnderstand","thumb-up"],["התוכן עזר לי לפתור בעיה","solvedMyProblem","thumb-up"],["סיבה אחרת","otherUp","thumb-up"]],[["חסרים לי מידע או פרטים","missingTheInformationINeed","thumb-down"],["התוכן מורכב מדי או עם יותר מדי שלבים","tooComplicatedTooManySteps","thumb-down"],["התוכן לא עדכני","outOfDate","thumb-down"],["בעיה בתרגום","translationIssue","thumb-down"],["בעיה בדוגמאות/בקוד","samplesCodeIssue","thumb-down"],["סיבה אחרת","otherDown","thumb-down"]],["עדכון אחרון: 2025-07-27 (שעון UTC)."],[],[],null,["# Analyze vertex memory bandwidth usage\n\nThe memory bandwidth of vertex data can be a potential bottleneck for your game's GPU performance. There are some counters in an AGI system profile that can help diagnose vertex memory bandwidth issues.\n\nQualcomm Adreno counters\n------------------------\n\nOn devices with Qualcomm Adreno GPUs, some notable counters include:\n\n| Counter | Description |\n|----------------------|---------------------------------------------------------------------|\n| Vertex Memory Read | Bandwidth of vertex data read from external memory. |\n| Average Bytes/Vertex | Average size of vertex data, in bytes. |\n| % Vertex Fetch Stall | Percentage of clock cycles where the GPU is blocked on vertex data. |\n\nARM Mali counters (WIP)\n-----------------------\n\nOn devices with ARM Mali GPUs, some notable counters include:\n\n| Counter | Description |\n|--------------------------------------------|----------------------------------------------------------------------------------------------|\n| Load/store read beats from external memory | Data beats read from external memory by the load/store unit, averaged over the shader cores. |\n| Load/store read beats from L2 cache | Data beats read from the L2 cache by the load/store unit, averaged over the shader cores. |\n| \\[More\\] | |\n\nTo calculate the overall bandwidth from average read beats, the counter value is multiplied by the bus width (typically 16 bytes) and by the total number of shader cores. \\[More\\]\n\nCounter analysis\n----------------\n\nTo measure the behavior of these counters, you can measure the average and peak\nbandwidth over the course of a single GPU frame, which can be delineated with a\ncontiguous block of **GPU Utilization**.\n**Figure 1:**Vertex memory read bandwidth for a single frame, with an average value of 327 MBps and a peak value of 1.16 GBps\n\nWe recommend a peak vertex memory read bandwidth of no higher than 1.5 GBps, and an average bandwidth no higher than 500 MBps. Higher values are indicators of one of a few common issues:\n\n- **Vertex size is too big**: Vertices may have large vertex attributes or a large number of vertex attributes, affecting vertex shading time at large.\n- **Vertex attribute streams are not split**: Vertex attributes are interleaved into a single buffer, reducing cache efficiency.\n- **Too many vertices submitted per frame**: Complex models and/or a large number of models may take up greater bandwidth and take longer to shade.\n\nVertex size issues may also be diagnosed through the **Average Bytes / Vertex**\ntrack, which we recommend to be no higher than 32 bytes or verteces.\n**Figure 2:**Average vertex size for a single frame, with an average value of 31.3 bytes\n\nThe best way to diagnose which of these problems you may be facing is by taking a frame profile trace to [analyze vertex formats](/agi/frame-trace/vertex-formats)."]]