diff options
author | Georgios Pinitas <georgios.pinitas@arm.com> | 2021-01-22 05:47:37 +0000 |
---|---|---|
committer | Georgios Pinitas <georgios.pinitas@arm.com> | 2021-02-01 16:51:44 +0000 |
commit | ea857273d8b4a94fb7f1e63ce9068a60259fb9d3 (patch) | |
tree | e4d7a90f28d4ba4d218e77343c107afa137d7cec /SConscript | |
parent | 655e8c6334580a570008243af1896d269fdd60ad (diff) | |
download | ComputeLibrary-ea857273d8b4a94fb7f1e63ce9068a60259fb9d3.tar.gz |
Compress OpenCL kernel files using zlib for Android
Kernel files are embedded into the binary as the default option when
building which leads to binary size bloating.
Add `compress_kernels` option and utilize zlib for further compressing
the text kernel files and reduce the overall binary size. We use a
base64 encoding/decoding to ensure that the strings can be easily
embedded. This adds to the binary size but still the overall reduction
is significant.
Maximum compression level 9 is used.
Option is currently restricted to Android builds as android toolchain
provides a zlib library.
Initial experimentations indicate a binary size reduction of 50%
Resolves: COMPMID-4017
Signed-off-by: Georgios Pinitas <georgios.pinitas@arm.com>
Change-Id: Iee81b8c00391b26a5f41642699692928a4d6bd6e
Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/4958
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: Gian Marco Iodice <gianmarco.iodice@arm.com>
Diffstat (limited to 'SConscript')
-rw-r--r-- | SConscript | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/SConscript b/SConscript index 6b727f5a82..7e09240768 100644 --- a/SConscript +++ b/SConscript @@ -23,6 +23,9 @@ import collections import os.path import re import subprocess +import zlib +import base64 +import string VERSION = "v0.0-unreleased" LIBRARY_VERSION_MAJOR = 21 @@ -112,15 +115,17 @@ def resolve_includes(target, source, env): tmp_file = updated_file # Append and prepend string literal identifiers and add expanded file to final list - tmp_file.insert(0, "R\"(\n") - tmp_file.append("\n)\"") entry = FileEntry(target_name=file[1].target_name, file_contents=tmp_file) final_files.append((file[0], entry)) # Write output files for file in final_files: with open(file[1].target_name.get_path(), 'w+') as out_file: - out_file.write( "\n".join( file[1].file_contents )) + file_to_write = "\n".join( file[1].file_contents ) + if env['compress_kernels']: + file_to_write = zlib.compress(file_to_write, 9).encode("base64").replace("\n", "") + file_to_write = "R\"(" + file_to_write + ")\"" + out_file.write(file_to_write) def create_version_file(target, source, env): # Generate string with build options library version to embed in the library: |