diff options
Diffstat (limited to 'ethosu')
-rw-r--r-- | ethosu/vela/register_command_stream_generator.py | 6 | ||||
-rw-r--r-- | ethosu/vela/register_command_stream_util.py | 20 | ||||
-rw-r--r-- | ethosu/vela/test/extapi/test_extapi_generate_commands.py | 4 |
3 files changed, 19 insertions, 11 deletions
diff --git a/ethosu/vela/register_command_stream_generator.py b/ethosu/vela/register_command_stream_generator.py index 56aae73d..42ae99d5 100644 --- a/ethosu/vela/register_command_stream_generator.py +++ b/ethosu/vela/register_command_stream_generator.py @@ -81,7 +81,7 @@ from .register_command_stream_util import calc_blockdep from .register_command_stream_util import check_addresses from .register_command_stream_util import check_alignment from .register_command_stream_util import check_dma_op -from .register_command_stream_util import check_size +from .register_command_stream_util import check_length from .register_command_stream_util import check_strides from .register_command_stream_util import get_dma_memory_accesses from .register_command_stream_util import get_op_memory_accesses @@ -526,7 +526,7 @@ def generate_weights(emit: CommandStreamEmitter, weights: List[NpuAddressRange], ): if core < len(weights): check_alignment(weights[core].address, 16) - check_size(weights[core].length, 16) + check_length(weights[core].length, 16) emit.cmd1_with_address(addr, weights[core].address) emit.cmd1_with_offset(length, weights[core].length) elif core < arch.ncores: @@ -546,7 +546,7 @@ def generate_biases(emit: CommandStreamEmitter, biases: List[NpuAddressRange], a ): if core < len(biases): emit.cmd1_with_address(addr, biases[core].address) - check_size(biases[core].length, 16) + check_length(biases[core].length, 16) emit.cmd1_with_offset(length, biases[core].length) elif core < arch.ncores: emit.cmd1_with_address(addr, biases[0].address) diff --git a/ethosu/vela/register_command_stream_util.py b/ethosu/vela/register_command_stream_util.py index c7050a38..74c4f90e 100644 --- a/ethosu/vela/register_command_stream_util.py +++ b/ethosu/vela/register_command_stream_util.py @@ -60,10 +60,18 @@ def check_alignment(payload, required_alignment): raise ByteAlignmentError(f"Cmd1 payload of size: {payload} Bytes is not {required_alignment}-byte aligned") -def check_size(payload, required_multiple): +def check_size(payload, required_multiple, value_type): # assuming payload is defined in bytes if payload % required_multiple != 0: - raise ByteSizeError(f"Cmd1 payload of size: {payload} Bytes is not a multiple of {required_multiple}") + raise ByteSizeError(f"Cmd1 {value_type} of size: {payload} Bytes is not a multiple of {required_multiple}") + + +def check_stride(stride, required_multiple): + check_size(stride, required_multiple, "stride") + + +def check_length(length, required_multiple): + check_size(length, required_multiple, "length") def to_npu_kernel(kernel: Kernel) -> NpuKernel: @@ -263,12 +271,12 @@ def check_strides(fm: NpuFeatureMap, strides: NpuShape3D): if fm.layout == NpuLayout.NHCWB16: strides_to_check = [strides.depth, strides.height] - required_multiple = 16 * element_size_in_bytes + required_multiple = 16 else: strides_to_check = [strides.height, strides.width] required_multiple = element_size_in_bytes for stride in strides_to_check: - check_size(stride, required_multiple) + check_stride(stride, required_multiple) def check_addresses(addresses: List[int], layout: NpuLayout, element_size, arch: ArchitectureFeatures): @@ -384,11 +392,11 @@ def check_dma_op(dma_op: NpuDmaOperation, arch: ArchitectureFeatures): check_alignment(dma_op.src.address, 16) if dma_op.dest.region == BASE_PTR_INDEX_MEM2MEM: check_alignment(dma_op.dest.address, 16) - check_size(dma_op.src.length, 16) + check_length(dma_op.src.length, 16) else: check_alignment(dma_op.src.address, 16) check_alignment(dma_op.dest.address, 16) - check_size(dma_op.src.length, 16) + check_length(dma_op.src.length, 16) # ------------------------------------------------------------------- diff --git a/ethosu/vela/test/extapi/test_extapi_generate_commands.py b/ethosu/vela/test/extapi/test_extapi_generate_commands.py index b21aae39..92f6c79b 100644 --- a/ethosu/vela/test/extapi/test_extapi_generate_commands.py +++ b/ethosu/vela/test/extapi/test_extapi_generate_commands.py @@ -861,11 +861,11 @@ def test_cmd1_payload_legality(): op.block_traversal = NpuBlockTraversal.PART_KERNEL_FIRST op.block_config = NpuShape3D(height=16, width=4, depth=16) - # NHWC depth stride not a multiple of 32 passes + # NHWC height stride not a multiple of 16 passes op.ifm.strides = NpuShape3D(depth=16, height=2, width=16) npu_generate_register_command_stream([op], NpuAccelerator.Ethos_U65_256) - # Same depth stride fails for NHCWB16 + # Same height stride fails for NHCWB16 op.ifm = create_feature_map( ifm_shape, 1, |