Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add config file support for constants and test control #4337

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions backends/vulkan/tools/gpuinfo/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
{
"reg_count": {
"enabled": true,
"threshold": 3,
"compensate": 0.1
},
"buf_cacheline_size": {
"enabled": true,
"threshold": 10,
"compensate": 0.1
},
"buffer_bandwidth": {
"enabled": true,
"range": 134217728,
"nflush": 4,
"nunroll": 16,
"niter": 10
},
"ubo_bandwidth": {
"enabled": true,
"range": 134217728,
"nflush": 4,
"nunroll": 16,
"niter": 10
},
"shared_mem_bandwidth": {
"enabled": true,
"nflush": 4,
"nunroll": 16,
"niter": 10
},
"warp_size": {
"enabled": true,
"threshold": 3,
"compensate": 0.1
},
"tex_bandwidth": {
"enabled": true,
"nflush": 4,
"nunroll": 16,
"niter": 10
}
}
59 changes: 59 additions & 0 deletions backends/vulkan/tools/gpuinfo/glsl/tex_bandwidth.glsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree.
*/

#version 450 core

#define PRECISION ${PRECISION}
#define VEC4_T ${texel_type(DTYPE)}

layout(std430) buffer;

${layout_declare_sampler(0, "r", "A", DTYPE)}
${layout_declare_buffer(1, "w", "B", DTYPE, "PRECISION", False)}

layout(local_size_x_id = 0, local_size_y_id = 1, local_size_z_id = 2) in;

layout(constant_id = 3) const int niter = 1;
layout(constant_id = 4) const int nvec = 1;
layout(constant_id = 5) const int local_group_size = 1;

void main() {
// The address mask works as a modulo because x % 2^n == x & (2^n - 1).
// This will help us limit address accessing to a specific set of unique
// addresses depending on the access size we want to measure.
const int addr_mask = nvec - 1;
vec4 sum = vec4(0);

// This is to distribute the accesses to unique addresses across the workgroups, once the
// size of the access excedes the workgroup width.
const uint workgroup_width = local_group_size * niter * ${NUNROLL};
uint offset = (gl_WorkGroupID[0] * workgroup_width + gl_LocalInvocationID[0]) & addr_mask;

int i = 0;
for (; i < niter; ++i){
VEC4_T in_texel;
$for j in range(int(NUNROLL)):
$if DIM == 0:
in_texel = texelFetch(A, ivec3(offset, 0, 0), 0);
$elif DIM == 1:
in_texel = texelFetch(A, ivec3(0, offset, 0), 0);
$elif DIM == 2:
in_texel = texelFetch(A, ivec3(0, 0, offset), 0);

sum *= in_texel;

// On each unroll, a new unique address will be accessed through the offset,
// limited by the address mask to a specific set of unique addresses
offset = (offset + local_group_size) & addr_mask;
}

// This is to ensure no compiler optimizations occur
vec4 zero = vec4(i>>31);

B[gl_LocalInvocationID[0]] = sum + zero;
}
15 changes: 15 additions & 0 deletions backends/vulkan/tools/gpuinfo/glsl/tex_bandwidth.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.

tex_bandwidth:
parameter_names_with_default_values:
DTYPE: float
NUNROLL: "16"
generate_variant_forall:
DIM:
- RANGE: [0, 2]
shader_variants:
- NAME: tex_bandwidth
Loading
Loading