Add 'projects/rocprofiler-sdk/' from commit 'bf0fad1d5406fbc51403ba1aa9621a9d4a9bce2b'
git-subtree-dir: projects/rocprofiler-sdk git-subtree-mainline:50a90550e9git-subtree-split:bf0fad1d54
Cette révision appartient à :
@@ -0,0 +1,376 @@
|
||||
--
|
||||
-- Useful summary views
|
||||
--
|
||||
--
|
||||
-- Sorted list of kernels which consume the most overall time
|
||||
CREATE VIEW IF NOT EXISTS
|
||||
`top_kernels` AS
|
||||
SELECT
|
||||
S.display_name AS name,
|
||||
COUNT(K.kernel_id) AS total_calls,
|
||||
SUM(K.end - K.start) / 1000.0 AS total_duration,
|
||||
(SUM(K.end - K.start) / COUNT(K.kernel_id)) / 1000.0 AS average,
|
||||
SUM(K.end - K.start) * 100.0 / (
|
||||
SELECT
|
||||
SUM(A.end - A.start)
|
||||
FROM
|
||||
`rocpd_kernel_dispatch` A
|
||||
) AS percentage
|
||||
FROM
|
||||
`rocpd_kernel_dispatch` K
|
||||
INNER JOIN `rocpd_info_kernel_symbol` S ON S.id = K.kernel_id
|
||||
AND S.guid = K.guid
|
||||
GROUP BY
|
||||
name
|
||||
ORDER BY
|
||||
total_duration DESC;
|
||||
|
||||
--
|
||||
-- GPU utilization metrics including kernels and memory copy operations
|
||||
CREATE VIEW IF NOT EXISTS
|
||||
`busy` AS
|
||||
SELECT
|
||||
A.agent_id,
|
||||
AG.type,
|
||||
GpuTime,
|
||||
WallTime,
|
||||
GpuTime * 1.0 / WallTime AS Busy
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
agent_id,
|
||||
guid,
|
||||
SUM(END - start) AS GpuTime
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
agent_id,
|
||||
guid,
|
||||
END,
|
||||
start
|
||||
FROM
|
||||
`rocpd_kernel_dispatch`
|
||||
UNION ALL
|
||||
SELECT
|
||||
dst_agent_id AS agent_id,
|
||||
guid,
|
||||
END,
|
||||
start
|
||||
FROM
|
||||
`rocpd_memory_copy`
|
||||
)
|
||||
GROUP BY
|
||||
agent_id,
|
||||
guid
|
||||
) A
|
||||
INNER JOIN (
|
||||
SELECT
|
||||
MAX(END) - MIN(start) AS WallTime
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
END,
|
||||
start
|
||||
FROM
|
||||
`rocpd_kernel_dispatch`
|
||||
UNION ALL
|
||||
SELECT
|
||||
END,
|
||||
start
|
||||
FROM
|
||||
`rocpd_memory_copy`
|
||||
)
|
||||
) W ON 1 = 1
|
||||
INNER JOIN `rocpd_info_agent` AG ON AG.id = A.agent_id
|
||||
AND AG.guid = A.guid;
|
||||
|
||||
--
|
||||
-- Overall performance summary including kernels and memory copy operations
|
||||
CREATE VIEW
|
||||
`top` AS
|
||||
SELECT
|
||||
name,
|
||||
COUNT(*) AS total_calls,
|
||||
SUM(duration) / 1000.0 AS total_duration,
|
||||
(SUM(duration) / COUNT(*)) / 1000.0 AS average,
|
||||
SUM(duration) * 100.0 / total_time AS percentage
|
||||
FROM
|
||||
(
|
||||
-- Kernel operations
|
||||
SELECT
|
||||
ks.display_name AS name,
|
||||
(kd.end - kd.start) AS duration
|
||||
FROM
|
||||
`rocpd_kernel_dispatch` kd
|
||||
INNER JOIN `rocpd_info_kernel_symbol` ks ON kd.kernel_id = ks.id
|
||||
AND kd.guid = ks.guid
|
||||
UNION ALL
|
||||
-- Memory operations
|
||||
SELECT
|
||||
rs.string AS name,
|
||||
(END - start) AS duration
|
||||
FROM
|
||||
`rocpd_memory_copy` mc
|
||||
INNER JOIN `rocpd_string` rs ON rs.id = mc.name_id
|
||||
AND rs.guid = mc.guid
|
||||
UNION ALL
|
||||
-- Regions
|
||||
SELECT
|
||||
rs.string AS name,
|
||||
(END - start) AS duration
|
||||
FROM
|
||||
`rocpd_region` rr
|
||||
INNER JOIN `rocpd_string` rs ON rs.id = rr.name_id
|
||||
AND rs.guid = rr.guid
|
||||
) operations
|
||||
CROSS JOIN (
|
||||
SELECT
|
||||
SUM(END - start) AS total_time
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
END,
|
||||
start
|
||||
FROM
|
||||
`rocpd_kernel_dispatch`
|
||||
UNION ALL
|
||||
SELECT
|
||||
END,
|
||||
start
|
||||
FROM
|
||||
`rocpd_memory_copy`
|
||||
UNION ALL
|
||||
SELECT
|
||||
END,
|
||||
start
|
||||
FROM
|
||||
`rocpd_region`
|
||||
)
|
||||
) TOTAL
|
||||
GROUP BY
|
||||
name
|
||||
ORDER BY
|
||||
total_duration DESC;
|
||||
|
||||
-- Kernel summary by name
|
||||
CREATE VIEW
|
||||
`kernel_summary` AS
|
||||
WITH
|
||||
avg_data AS (
|
||||
SELECT
|
||||
name,
|
||||
AVG(duration) AS avg_duration
|
||||
FROM
|
||||
`kernels`
|
||||
GROUP BY
|
||||
name
|
||||
),
|
||||
aggregated_data AS (
|
||||
SELECT
|
||||
K.name,
|
||||
COUNT(*) AS calls,
|
||||
SUM(K.duration) AS total_duration,
|
||||
SUM(CAST(K.duration AS REAL) * CAST(K.duration AS REAL)) AS sqr_duration,
|
||||
A.avg_duration AS average_duration,
|
||||
MIN(K.duration) AS min_duration,
|
||||
MAX(K.duration) AS max_duration,
|
||||
SUM(CAST((K.duration - A.avg_duration) AS REAL) * CAST((K.duration - A.avg_duration) AS REAL)) / (COUNT(*) - 1) AS variance_duration,
|
||||
SQRT(
|
||||
SUM(CAST((K.duration - A.avg_duration) AS REAL) * CAST((K.duration - A.avg_duration) AS REAL)) / (COUNT(*) - 1)
|
||||
) AS std_dev_duration
|
||||
FROM
|
||||
`kernels` K
|
||||
JOIN avg_data A ON K.name = A.name
|
||||
GROUP BY
|
||||
K.name
|
||||
),
|
||||
total_duration AS (
|
||||
SELECT
|
||||
SUM(total_duration) AS grand_total_duration
|
||||
FROM
|
||||
aggregated_data
|
||||
)
|
||||
SELECT
|
||||
AD.name AS name,
|
||||
AD.calls,
|
||||
AD.total_duration AS "DURATION (nsec)",
|
||||
AD.sqr_duration AS "SQR (nsec)",
|
||||
AD.average_duration AS "AVERAGE (nsec)",
|
||||
(CAST(AD.total_duration AS REAL) / TD.grand_total_duration) * 100 AS "PERCENT (INC)",
|
||||
AD.min_duration AS "MIN (nsec)",
|
||||
AD.max_duration AS "MAX (nsec)",
|
||||
AD.variance_duration AS "VARIANCE",
|
||||
AD.std_dev_duration AS "STD_DEV"
|
||||
FROM
|
||||
aggregated_data AD
|
||||
CROSS JOIN total_duration TD;
|
||||
|
||||
--
|
||||
-- Kernel summary by region name
|
||||
CREATE VIEW
|
||||
`kernel_summary_region` AS
|
||||
WITH
|
||||
avg_data AS (
|
||||
SELECT
|
||||
region,
|
||||
AVG(duration) AS avg_duration
|
||||
FROM
|
||||
`kernels`
|
||||
GROUP BY
|
||||
region
|
||||
),
|
||||
aggregated_data AS (
|
||||
SELECT
|
||||
K.region AS name,
|
||||
COUNT(*) AS calls,
|
||||
SUM(K.duration) AS total_duration,
|
||||
SUM(CAST(K.duration AS REAL) * CAST(K.duration AS REAL)) AS sqr_duration,
|
||||
A.avg_duration AS average_duration,
|
||||
MIN(K.duration) AS min_duration,
|
||||
MAX(K.duration) AS max_duration,
|
||||
SUM(CAST((K.duration - A.avg_duration) AS REAL) * CAST((K.duration - A.avg_duration) AS REAL)) / (COUNT(*) - 1) AS variance_duration,
|
||||
SQRT(
|
||||
SUM(CAST((K.duration - A.avg_duration) AS REAL) * CAST((K.duration - A.avg_duration) AS REAL)) / (COUNT(*) - 1)
|
||||
) AS std_dev_duration
|
||||
FROM
|
||||
`kernels` K
|
||||
JOIN avg_data A ON K.region = A.region
|
||||
GROUP BY
|
||||
K.region
|
||||
),
|
||||
total_duration AS (
|
||||
SELECT
|
||||
SUM(total_duration) AS grand_total_duration
|
||||
FROM
|
||||
aggregated_data
|
||||
)
|
||||
SELECT
|
||||
AD.name AS name,
|
||||
AD.calls,
|
||||
AD.total_duration AS "DURATION (nsec)",
|
||||
AD.sqr_duration AS "SQR (nsec)",
|
||||
AD.average_duration AS "AVERAGE (nsec)",
|
||||
(CAST(AD.total_duration AS REAL) / TD.grand_total_duration) * 100 AS "PERCENT (INC)",
|
||||
AD.min_duration AS "MIN (nsec)",
|
||||
AD.max_duration AS "MAX (nsec)",
|
||||
AD.variance_duration AS "VARIANCE",
|
||||
AD.std_dev_duration AS "STD_DEV"
|
||||
FROM
|
||||
aggregated_data AD
|
||||
CROSS JOIN total_duration TD;
|
||||
|
||||
--
|
||||
-- Memory copy summary
|
||||
CREATE VIEW
|
||||
`memory_copy_summary` AS
|
||||
WITH
|
||||
avg_data AS (
|
||||
SELECT
|
||||
name,
|
||||
AVG(duration) AS avg_duration
|
||||
FROM
|
||||
`memory_copies`
|
||||
GROUP BY
|
||||
name
|
||||
),
|
||||
aggregated_data AS (
|
||||
SELECT
|
||||
MC.name,
|
||||
COUNT(*) AS calls,
|
||||
SUM(MC.duration) AS total_duration,
|
||||
SUM(CAST(MC.duration AS REAL) * CAST(MC.duration AS REAL)) AS sqr_duration,
|
||||
A.avg_duration AS average_duration,
|
||||
MIN(MC.duration) AS min_duration,
|
||||
MAX(MC.duration) AS max_duration,
|
||||
SUM(
|
||||
CAST((MC.duration - A.avg_duration) AS REAL) * CAST((MC.duration - A.avg_duration) AS REAL)
|
||||
) / (COUNT(*) - 1) AS variance_duration,
|
||||
SQRT(
|
||||
SUM(
|
||||
CAST((MC.duration - A.avg_duration) AS REAL) * CAST((MC.duration - A.avg_duration) AS REAL)
|
||||
) / (COUNT(*) - 1)
|
||||
) AS std_dev_duration
|
||||
FROM
|
||||
`memory_copies` MC
|
||||
JOIN avg_data A ON MC.name = A.name
|
||||
GROUP BY
|
||||
MC.name
|
||||
),
|
||||
total_duration AS (
|
||||
SELECT
|
||||
SUM(total_duration) AS grand_total_duration
|
||||
FROM
|
||||
aggregated_data
|
||||
)
|
||||
SELECT
|
||||
AD.name AS name,
|
||||
AD.calls,
|
||||
AD.total_duration AS "DURATION (nsec)",
|
||||
AD.sqr_duration AS "SQR (nsec)",
|
||||
AD.average_duration AS "AVERAGE (nsec)",
|
||||
(CAST(AD.total_duration AS REAL) / TD.grand_total_duration) * 100 AS "PERCENT (INC)",
|
||||
AD.min_duration AS "MIN (nsec)",
|
||||
AD.max_duration AS "MAX (nsec)",
|
||||
AD.variance_duration AS "VARIANCE",
|
||||
AD.std_dev_duration AS "STD_DEV"
|
||||
FROM
|
||||
aggregated_data AD
|
||||
CROSS JOIN total_duration TD;
|
||||
|
||||
--
|
||||
-- Memory allocation summary
|
||||
CREATE VIEW
|
||||
`memory_allocation_summary` AS
|
||||
WITH
|
||||
avg_data AS (
|
||||
SELECT
|
||||
type AS name,
|
||||
AVG(duration) AS avg_duration
|
||||
FROM
|
||||
`memory_allocations`
|
||||
GROUP BY
|
||||
type
|
||||
),
|
||||
aggregated_data AS (
|
||||
SELECT
|
||||
MA.type AS name,
|
||||
COUNT(*) AS calls,
|
||||
SUM(MA.duration) AS total_duration,
|
||||
SUM(CAST(MA.duration AS REAL) * CAST(MA.duration AS REAL)) AS sqr_duration,
|
||||
A.avg_duration AS average_duration,
|
||||
MIN(MA.duration) AS min_duration,
|
||||
MAX(MA.duration) AS max_duration,
|
||||
SUM(
|
||||
CAST((MA.duration - A.avg_duration) AS REAL) * CAST((MA.duration - A.avg_duration) AS REAL)
|
||||
) / (COUNT(*) - 1) AS variance_duration,
|
||||
SQRT(
|
||||
SUM(
|
||||
CAST((MA.duration - A.avg_duration) AS REAL) * CAST((MA.duration - A.avg_duration) AS REAL)
|
||||
) / (COUNT(*) - 1)
|
||||
) AS std_dev_duration
|
||||
FROM
|
||||
`memory_allocations` MA
|
||||
JOIN avg_data A ON MA.type = A.name
|
||||
GROUP BY
|
||||
MA.type
|
||||
),
|
||||
total_duration AS (
|
||||
SELECT
|
||||
SUM(total_duration) AS grand_total_duration
|
||||
FROM
|
||||
aggregated_data
|
||||
)
|
||||
SELECT
|
||||
'MEMORY_ALLOCATION_' || AD.name AS name,
|
||||
AD.calls,
|
||||
AD.total_duration AS "DURATION (nsec)",
|
||||
AD.sqr_duration AS "SQR (nsec)",
|
||||
AD.average_duration AS "AVERAGE (nsec)",
|
||||
(CAST(AD.total_duration AS REAL) / TD.grand_total_duration) * 100 AS "PERCENT (INC)",
|
||||
AD.min_duration AS "MIN (nsec)",
|
||||
AD.max_duration AS "MAX (nsec)",
|
||||
AD.variance_duration AS "VARIANCE",
|
||||
AD.std_dev_duration AS "STD_DEV"
|
||||
FROM
|
||||
aggregated_data AD
|
||||
CROSS JOIN total_duration TD;
|
||||
Référencer dans un nouveau ticket
Bloquer un utilisateur