Files
rocm-systems/source/share/rocprofiler-sdk-rocpd/summary_views.sql
T

1390 righe
39 KiB
SQL

--
-- 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 AS total_duration,
(SUM(K.end - K.start) / COUNT(K.kernel_id)) / 1000 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,
SUM(END - start) AS GpuTime
FROM
(
SELECT
agent_id,
END,
start
FROM
`rocpd_kernel_dispatch`
UNION ALL
SELECT
dst_agent_id AS agent_id,
END,
start
FROM
`rocpd_memory_copy`
)
GROUP BY
agent_id
) 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;
--
-- summaries
--
--
-- 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,
CAST(SUM(K.duration * 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((K.duration - A.avg_duration) * (K.duration - A.avg_duration)) / (COUNT(*) - 1) AS variance_duration,
SQRT(SUM((K.duration - A.avg_duration) * (K.duration - A.avg_duration)) / (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,
CAST(SUM(K.duration * 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((K.duration - A.avg_duration) * (K.duration - A.avg_duration)) / (COUNT(*) - 1) AS variance_duration,
SQRT(SUM((K.duration - A.avg_duration) * (K.duration - A.avg_duration)) / (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,
CAST(SUM(MC.duration * 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((MC.duration - A.avg_duration) * (MC.duration - A.avg_duration)) / (COUNT(*) - 1) AS variance_duration,
SQRT(SUM((MC.duration - A.avg_duration) * (MC.duration - A.avg_duration)) / (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,
CAST(SUM(MA.duration * 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((MA.duration - A.avg_duration) * (MA.duration - A.avg_duration)) / (COUNT(*) - 1) AS variance_duration,
SQRT(SUM((MA.duration - A.avg_duration) * (MA.duration - A.avg_duration)) / (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;
--
-- Scratch Memory summary
CREATE VIEW
`scratch_memory_summary` AS
WITH
avg_data AS (
SELECT
operation AS name,
AVG(END - start) AS avg_duration
FROM
`scratch_memory`
GROUP BY
operation
),
aggregated_data AS (
SELECT
SM.operation AS name,
COUNT(*) AS calls,
SUM(SM.end - SM.start) AS total_duration,
CAST(SUM((SM.end - SM.start) * (SM.end - SM.start)) AS REAL) AS sqr_duration,
A.avg_duration AS average_duration,
MIN(SM.end - SM.start) AS min_duration,
MAX(SM.end - SM.start) AS max_duration,
SUM((SM.end - SM.start - A.avg_duration) * (SM.end - SM.start - A.avg_duration)) / (COUNT(*) - 1) AS variance_duration,
SQRT(
SUM((SM.end - SM.start - A.avg_duration) * (SM.end - SM.start - A.avg_duration)) / (COUNT(*) - 1)
) AS std_dev_duration
FROM
`scratch_memory` SM
JOIN avg_data A ON SM.operation = A.name
GROUP BY
SM.operation
),
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
ORDER BY
AD.total_duration DESC;
--
-- HIP summary
CREATE VIEW
`hip_api_summary` AS
WITH
avg_data AS (
SELECT
name,
AVG(duration) AS avg_duration
FROM
`regions`
WHERE
category LIKE 'HIP_%'
GROUP BY
name
),
aggregated_data AS (
SELECT
R.name,
COUNT(*) AS calls,
SUM(R.duration) AS total_duration,
CAST(SUM(R.duration * R.duration) AS REAL) AS sqr_duration,
A.avg_duration AS average_duration,
MIN(R.duration) AS min_duration,
MAX(R.duration) AS max_duration,
SUM((R.duration - A.avg_duration) * (R.duration - A.avg_duration)) / (COUNT(*) - 1) AS variance_duration,
SQRT(SUM((R.duration - A.avg_duration) * (R.duration - A.avg_duration)) / (COUNT(*) - 1)) AS std_dev_duration
FROM
`regions` R
JOIN avg_data A ON R.name = A.name
WHERE
R.category LIKE 'HIP_%'
GROUP BY
R.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;
--
-- HSA summary
CREATE VIEW
`hsa_api_summary` AS
WITH
avg_data AS (
SELECT
name,
AVG(duration) AS avg_duration
FROM
`regions`
WHERE
category LIKE 'HSA_%'
GROUP BY
name
),
aggregated_data AS (
SELECT
R.name,
COUNT(*) AS calls,
SUM(R.duration) AS total_duration,
CAST(SUM(R.duration * R.duration) AS REAL) AS sqr_duration,
A.avg_duration AS average_duration,
MIN(R.duration) AS min_duration,
MAX(R.duration) AS max_duration,
SUM((R.duration - A.avg_duration) * (R.duration - A.avg_duration)) / (COUNT(*) - 1) AS variance_duration,
SQRT(SUM((R.duration - A.avg_duration) * (R.duration - A.avg_duration)) / (COUNT(*) - 1)) AS std_dev_duration
FROM
`regions` R
JOIN avg_data A ON R.name = A.name
WHERE
R.category LIKE 'HSA_%'
GROUP BY
R.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;
--
-- RCCL API summary
CREATE VIEW
`rccl_summary` AS
WITH
avg_data AS (
SELECT
name,
AVG(duration) AS avg_duration
FROM
`regions`
WHERE
category LIKE 'RCCL_%'
GROUP BY
name
),
aggregated_data AS (
SELECT
R.name,
COUNT(*) AS calls,
SUM(R.duration) AS total_duration,
CAST(SUM(R.duration * R.duration) AS REAL) AS sqr_duration,
A.avg_duration AS average_duration,
MIN(R.duration) AS min_duration,
MAX(R.duration) AS max_duration,
SUM((R.duration - A.avg_duration) * (R.duration - A.avg_duration)) / (COUNT(*) - 1) AS variance_duration,
SQRT(SUM((R.duration - A.avg_duration) * (R.duration - A.avg_duration)) / (COUNT(*) - 1)) AS std_dev_duration
FROM
`regions` R
JOIN avg_data A ON R.name = A.name
WHERE
R.category LIKE 'RCCL_%'
GROUP BY
R.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
ORDER BY
AD.total_duration DESC;
--
-- ROCJPEG API summary
CREATE VIEW
`rocjpeg_summary` AS
WITH
avg_data AS (
SELECT
name,
AVG(duration) AS avg_duration
FROM
`regions`
WHERE
category LIKE 'ROCJPEG_%'
GROUP BY
name
),
aggregated_data AS (
SELECT
R.name,
COUNT(*) AS calls,
SUM(R.duration) AS total_duration,
CAST(SUM(R.duration * R.duration) AS REAL) AS sqr_duration,
A.avg_duration AS average_duration,
MIN(R.duration) AS min_duration,
MAX(R.duration) AS max_duration,
SUM((R.duration - A.avg_duration) * (R.duration - A.avg_duration)) / (COUNT(*) - 1) AS variance_duration,
SQRT(SUM((R.duration - A.avg_duration) * (R.duration - A.avg_duration)) / (COUNT(*) - 1)) AS std_dev_duration
FROM
`regions` R
JOIN avg_data A ON R.name = A.name
WHERE
R.category LIKE 'ROCJPEG_%'
GROUP BY
R.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
ORDER BY
AD.total_duration DESC;
--
-- ROCDECODE API summary
CREATE VIEW
`rocdecode_summary` AS
WITH
avg_data AS (
SELECT
name,
AVG(duration) AS avg_duration
FROM
`regions`
WHERE
category LIKE 'ROCDECODE_%'
GROUP BY
name
),
aggregated_data AS (
SELECT
R.name,
COUNT(*) AS calls,
SUM(R.duration) AS total_duration,
CAST(SUM(R.duration * R.duration) AS REAL) AS sqr_duration,
A.avg_duration AS average_duration,
MIN(R.duration) AS min_duration,
MAX(R.duration) AS max_duration,
SUM((R.duration - A.avg_duration) * (R.duration - A.avg_duration)) / (COUNT(*) - 1) AS variance_duration,
SQRT(SUM((R.duration - A.avg_duration) * (R.duration - A.avg_duration)) / (COUNT(*) - 1)) AS std_dev_duration
FROM
`regions` R
JOIN avg_data A ON R.name = A.name
WHERE
R.category LIKE 'ROCDECODE_%'
GROUP BY
R.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
ORDER BY
AD.total_duration DESC;
--
-- Domain summary
CREATE VIEW
`domain_summary` AS
WITH
kernel_times AS (
WITH
kernel_avg AS (
SELECT
AVG(duration) AS avg_duration
FROM
`kernels`
)
SELECT
'KERNEL_DISPATCH' AS domain,
COUNT(*) AS calls,
SUM(duration) AS total_duration,
CAST(SUM(duration * duration) AS REAL) AS sqr_duration,
(
SELECT
avg_duration
FROM
kernel_avg
) AS avg_duration,
MIN(duration) AS min_duration,
MAX(duration) AS max_duration,
SUM(
(
duration - (
SELECT
avg_duration
FROM
kernel_avg
)
) * (
duration - (
SELECT
avg_duration
FROM
kernel_avg
)
)
) / (COUNT(*) - 1) AS variance_duration,
SQRT(
SUM(
(
duration - (
SELECT
avg_duration
FROM
kernel_avg
)
) * (
duration - (
SELECT
avg_duration
FROM
kernel_avg
)
)
) / (COUNT(*) - 1)
) AS std_dev_duration
FROM
`kernels`
),
mcopy_times AS (
WITH
mcopy_avg AS (
SELECT
AVG(duration) AS avg_duration
FROM
`memory_copies`
)
SELECT
'MEMORY_COPY' AS domain,
COUNT(*) AS calls,
SUM(duration) AS total_duration,
CAST(SUM(duration * duration) AS REAL) AS sqr_duration,
(
SELECT
avg_duration
FROM
mcopy_avg
) AS avg_duration,
MIN(duration) AS min_duration,
MAX(duration) AS max_duration,
SUM(
(
duration - (
SELECT
avg_duration
FROM
mcopy_avg
)
) * (
duration - (
SELECT
avg_duration
FROM
mcopy_avg
)
)
) / (COUNT(*) - 1) AS variance_duration,
SQRT(
SUM(
(
duration - (
SELECT
avg_duration
FROM
mcopy_avg
)
) * (
duration - (
SELECT
avg_duration
FROM
mcopy_avg
)
)
) / (COUNT(*) - 1)
) AS std_dev_duration
FROM
`memory_copies`
),
malloc_times AS (
WITH
malloc_avg AS (
SELECT
AVG(duration) AS avg_duration
FROM
`memory_allocations`
)
SELECT
'MEMORY_ALLOCATION' AS domain,
COUNT(*) AS calls,
SUM(duration) AS total_duration,
CAST(SUM(duration * duration) AS REAL) AS sqr_duration,
(
SELECT
avg_duration
FROM
malloc_avg
) AS avg_duration,
MIN(duration) AS min_duration,
MAX(duration) AS max_duration,
SUM(
(
duration - (
SELECT
avg_duration
FROM
malloc_avg
)
) * (
duration - (
SELECT
avg_duration
FROM
malloc_avg
)
)
) / (COUNT(*) - 1) AS variance_duration,
SQRT(
SUM(
(
duration - (
SELECT
avg_duration
FROM
malloc_avg
)
) * (
duration - (
SELECT
avg_duration
FROM
malloc_avg
)
)
) / (COUNT(*) - 1)
) AS std_dev_duration
FROM
`memory_allocations`
),
scratch_times AS (
WITH
scratch_avg AS (
SELECT
AVG(END - start) AS avg_duration
FROM
`scratch_memory`
)
SELECT
'SCRATCH_MEMORY' AS domain,
COUNT(*) AS calls,
SUM(END - start) AS total_duration,
CAST(SUM((END - start) * (END - start)) AS REAL) AS sqr_duration,
(
SELECT
avg_duration
FROM
scratch_avg
) AS avg_duration,
MIN(END - start) AS min_duration,
MAX(END - start) AS max_duration,
SUM(
(
END - start - (
SELECT
avg_duration
FROM
scratch_avg
)
) * (
END - start - (
SELECT
avg_duration
FROM
scratch_avg
)
)
) / (COUNT(*) - 1) AS variance_duration,
SQRT(
SUM(
(
END - start - (
SELECT
avg_duration
FROM
scratch_avg
)
) * (
END - start - (
SELECT
avg_duration
FROM
scratch_avg
)
)
) / (COUNT(*) - 1)
) AS std_dev_duration
FROM
`scratch_memory`
),
hip_api_times AS (
WITH
hip_avg AS (
SELECT
AVG(duration) AS avg_duration
FROM
`regions`
WHERE
category LIKE 'HIP_%'
)
SELECT
'HIP_API' AS domain,
COUNT(*) AS calls,
SUM(duration) AS total_duration,
CAST(SUM(duration * duration) AS REAL) AS sqr_duration,
(
SELECT
avg_duration
FROM
hip_avg
) AS avg_duration,
MIN(duration) AS min_duration,
MAX(duration) AS max_duration,
SUM(
(
duration - (
SELECT
avg_duration
FROM
hip_avg
)
) * (
duration - (
SELECT
avg_duration
FROM
hip_avg
)
)
) / (COUNT(*) - 1) AS variance_duration,
SQRT(
SUM(
(
duration - (
SELECT
avg_duration
FROM
hip_avg
)
) * (
duration - (
SELECT
avg_duration
FROM
hip_avg
)
)
) / (COUNT(*) - 1)
) AS std_dev_duration
FROM
`regions`
WHERE
category LIKE 'HIP_%'
),
hsa_api_times AS (
WITH
hsa_avg AS (
SELECT
AVG(duration) AS avg_duration
FROM
`regions`
WHERE
category LIKE 'HSA_%'
)
SELECT
'HSA_API' AS domain,
COUNT(*) AS calls,
SUM(duration) AS total_duration,
CAST(SUM(duration * duration) AS REAL) AS sqr_duration,
(
SELECT
avg_duration
FROM
hsa_avg
) AS avg_duration,
MIN(duration) AS min_duration,
MAX(duration) AS max_duration,
SUM(
(
duration - (
SELECT
avg_duration
FROM
hsa_avg
)
) * (
duration - (
SELECT
avg_duration
FROM
hsa_avg
)
)
) / (COUNT(*) - 1) AS variance_duration,
SQRT(
SUM(
(
duration - (
SELECT
avg_duration
FROM
hsa_avg
)
) * (
duration - (
SELECT
avg_duration
FROM
hsa_avg
)
)
) / (COUNT(*) - 1)
) AS std_dev_duration
FROM
`regions`
WHERE
category LIKE 'HSA_%'
),
marker_times AS (
WITH
marker_avg AS (
SELECT
AVG(duration) AS avg_duration
FROM
`markers`
)
SELECT
'MARKER_API' AS domain,
COUNT(*) AS calls,
SUM(duration) AS total_duration,
CAST(SUM(duration * duration) AS REAL) AS sqr_duration,
(
SELECT
avg_duration
FROM
marker_avg
) AS avg_duration,
MIN(duration) AS min_duration,
MAX(duration) AS max_duration,
SUM(
(
duration - (
SELECT
avg_duration
FROM
marker_avg
)
) * (
duration - (
SELECT
avg_duration
FROM
marker_avg
)
)
) / (COUNT(*) - 1) AS variance_duration,
SQRT(
SUM(
(
duration - (
SELECT
avg_duration
FROM
marker_avg
)
) * (
duration - (
SELECT
avg_duration
FROM
marker_avg
)
)
) / (COUNT(*) - 1)
) AS std_dev_duration
FROM
`markers`
),
rccl_times AS (
WITH
rccl_avg AS (
SELECT
AVG(duration) AS avg_duration
FROM
`rccl`
)
SELECT
'RCCL_API' AS domain,
COUNT(*) AS calls,
SUM(duration) AS total_duration,
CAST(SUM(duration * duration) AS REAL) AS sqr_duration,
(
SELECT
avg_duration
FROM
rccl_avg
) AS avg_duration,
MIN(duration) AS min_duration,
MAX(duration) AS max_duration,
SUM(
(
duration - (
SELECT
avg_duration
FROM
rccl_avg
)
) * (
duration - (
SELECT
avg_duration
FROM
rccl_avg
)
)
) / (COUNT(*) - 1) AS variance_duration,
SQRT(
SUM(
(
duration - (
SELECT
avg_duration
FROM
rccl_avg
)
) * (
duration - (
SELECT
avg_duration
FROM
rccl_avg
)
)
) / (COUNT(*) - 1)
) AS std_dev_duration
FROM
`rccl`
),
rocdecode_times AS (
WITH
rocdecode_avg AS (
SELECT
AVG(duration) AS avg_duration
FROM
`rocdecode`
)
SELECT
'ROCDECODE_API' AS domain,
COUNT(*) AS calls,
SUM(duration) AS total_duration,
CAST(SUM(duration * duration) AS REAL) AS sqr_duration,
(
SELECT
avg_duration
FROM
rocdecode_avg
) AS avg_duration,
MIN(duration) AS min_duration,
MAX(duration) AS max_duration,
SUM(
(
duration - (
SELECT
avg_duration
FROM
rocdecode_avg
)
) * (
duration - (
SELECT
avg_duration
FROM
rocdecode_avg
)
)
) / (COUNT(*) - 1) AS variance_duration,
SQRT(
SUM(
(
duration - (
SELECT
avg_duration
FROM
rocdecode_avg
)
) * (
duration - (
SELECT
avg_duration
FROM
rocdecode_avg
)
)
) / (COUNT(*) - 1)
) AS std_dev_duration
FROM
`rocdecode`
),
rocjpeg_times AS (
WITH
rocjpeg_avg AS (
SELECT
AVG(duration) AS avg_duration
FROM
`rocjpeg`
)
SELECT
'ROCJPEG_API' AS domain,
COUNT(*) AS calls,
SUM(duration) AS total_duration,
CAST(SUM(duration * duration) AS REAL) AS sqr_duration,
(
SELECT
avg_duration
FROM
rocjpeg_avg
) AS avg_duration,
MIN(duration) AS min_duration,
MAX(duration) AS max_duration,
SUM(
(
duration - (
SELECT
avg_duration
FROM
rocjpeg_avg
)
) * (
duration - (
SELECT
avg_duration
FROM
rocjpeg_avg
)
)
) / (COUNT(*) - 1) AS variance_duration,
SQRT(
SUM(
(
duration - (
SELECT
avg_duration
FROM
rocjpeg_avg
)
) * (
duration - (
SELECT
avg_duration
FROM
rocjpeg_avg
)
)
) / (COUNT(*) - 1)
) AS std_dev_duration
FROM
`rocjpeg`
),
all_domains AS (
SELECT
*
FROM
kernel_times
UNION ALL
SELECT
*
FROM
mcopy_times
UNION ALL
SELECT
*
FROM
malloc_times
UNION ALL
SELECT
*
FROM
scratch_times
UNION ALL
SELECT
*
FROM
hip_api_times
UNION ALL
SELECT
*
FROM
hsa_api_times
UNION ALL
SELECT
*
FROM
marker_times
UNION ALL
SELECT
*
FROM
rccl_times
UNION ALL
SELECT
*
FROM
rocdecode_times
UNION ALL
SELECT
*
FROM
rocjpeg_times
),
total_duration AS (
SELECT
SUM(total_duration) AS grand_total_duration
FROM
all_domains
)
SELECT
AD.domain AS name,
AD.calls,
AD.total_duration AS "DURATION (nsec)",
AD.sqr_duration AS "SQR (nsec)",
AD.avg_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
all_domains AD
CROSS JOIN total_duration TD
ORDER BY
AD.total_duration DESC;