chore(tests): Add a make target for testing gpu

This commit is contained in:
Quentin Bourgerie
2022-12-05 16:22:09 +01:00
parent 735e78c141
commit 351bab0bc9
2 changed files with 58 additions and 37 deletions

View File

@@ -231,26 +231,6 @@ run-rust-tests: rust-bindings
## end-to-end-tests
FIXTURE_CPU_DIR=tests/end_to_end_fixture/tests_cpu
$(FIXTURE_CPU_DIR)/%.yaml: tests/end_to_end_fixture/%_gen.py
mkdir -p $(FIXTURE_CPU_DIR)
$(Python3_EXECUTABLE) $< > $@
$(FIXTURE_CPU_DIR)/bug_report.yaml:
unzip -o $(FIXTURE_CPU_DIR)/bug_report.zip -d $(FIXTURE_CPU_DIR)
generate-cpu-tests: $(FIXTURE_CPU_DIR)/end_to_end_leveled.yaml $(FIXTURE_CPU_DIR)/end_to_end_apply_lookup_table.yaml $(FIXTURE_CPU_DIR)/end_to_end_linalg_apply_lookup_table.yaml $(FIXTURE_CPU_DIR)/bug_report.yaml
build-end-to-end-tests: build-end-to-end-jit-test build-end-to-end-test build-end-to-end-jit-encrypted-tensor build-end-to-end-jit-fhelinalg build-end-to-end-jit-lambda
run-end-to-end-tests: build-end-to-end-tests generate-cpu-tests
$(BUILD_DIR)/tools/concretelang/tests/end_to_end_tests/end_to_end_jit_test
$(BUILD_DIR)/tools/concretelang/tests/end_to_end_tests/end_to_end_jit_encrypted_tensor
$(BUILD_DIR)/tools/concretelang/tests/end_to_end_tests/end_to_end_jit_fhelinalg
$(BUILD_DIR)/tools/concretelang/tests/end_to_end_tests/end_to_end_jit_lambda
$(BUILD_DIR)/tools/concretelang/tests/end_to_end_tests/end_to_end_test --loop-parallelize --jit $(FIXTURE_CPU_DIR)/*.yaml
build-end-to-end-jit-test: build-initialized
cmake --build $(BUILD_DIR) --target end_to_end_jit_test
@@ -266,6 +246,40 @@ build-end-to-end-jit-fhelinalg: build-initialized
build-end-to-end-jit-lambda: build-initialized
cmake --build $(BUILD_DIR) --target end_to_end_jit_lambda
build-end-to-end-tests: build-end-to-end-jit-test build-end-to-end-test build-end-to-end-jit-encrypted-tensor build-end-to-end-jit-fhelinalg build-end-to-end-jit-lambda
### end-to-end-tests CPU
FIXTURE_CPU_DIR=tests/end_to_end_fixture/tests_cpu
$(FIXTURE_CPU_DIR)/%.yaml: tests/end_to_end_fixture/%_gen.py
mkdir -p $(FIXTURE_CPU_DIR)
$(Python3_EXECUTABLE) $< > $@
$(FIXTURE_CPU_DIR)/bug_report.yaml:
unzip -o $(FIXTURE_CPU_DIR)/bug_report.zip -d $(FIXTURE_CPU_DIR)
generate-cpu-tests: $(FIXTURE_CPU_DIR)/end_to_end_leveled.yaml $(FIXTURE_CPU_DIR)/end_to_end_apply_lookup_table.yaml $(FIXTURE_CPU_DIR)/end_to_end_linalg_apply_lookup_table.yaml $(FIXTURE_CPU_DIR)/bug_report.yaml
### end-to-end-tests GPU
FIXTURE_GPU_DIR=tests/end_to_end_fixture/tests_gpu
$(FIXTURE_GPU_DIR):
mkdir -p $(FIXTURE_GPU_DIR)
$(FIXTURE_GPU_DIR)/end_to_end_apply_lookup_table.yaml: tests/end_to_end_fixture/end_to_end_apply_lookup_table_gen.py
$(Python3_EXECUTABLE) $< --bitwidth 1 2 3 4 5 6 7 > $@
$(FIXTURE_GPU_DIR)/end_to_end_linalg_apply_lookup_table.yaml: tests/end_to_end_fixture/end_to_end_linalg_apply_lookup_table_gen.py
$(Python3_EXECUTABLE) $< --bitwidth 1 2 3 4 5 6 7 > $@
generate-gpu-tests: $(FIXTURE_GPU_DIR) $(FIXTURE_GPU_DIR)/end_to_end_apply_lookup_table.yaml $(FIXTURE_GPU_DIR)/end_to_end_linalg_apply_lookup_table.yaml
run-end-to-end-tests-gpu: build-end-to-end-test generate-gpu-tests
$(BUILD_DIR)/tools/concretelang/tests/end_to_end_tests/end_to_end_test --emit-gpu-ops --library /tmp/concrete_compiler/gpu_tests/ $(FIXTURE_CPU_DIR)/*.yaml
## end-to-end-dataflow-tests
build-end-to-end-dataflow-tests: build-initialized

View File

@@ -1,43 +1,50 @@
from platform import mac_ver
import numpy as np
import argparse
MIN_PRECISON = 1
MAX_PRECISION = 16
def main():
def generate(args):
print("# /!\ DO NOT EDIT MANUALLY THIS FILE MANUALLY")
print("# /!\ THIS FILE HAS BEEN GENERATED")
np.random.seed(0)
for p in range(MIN_PRECISON, MAX_PRECISION+1):
if p != 1:
print("---")
for p in args.bitwidth:
max_value = (2 ** p) - 1
random_lut = np.random.randint(max_value+1, size=2**p)
print("description: apply_lookup_table_{0}bits".format(p))
print(f"description: apply_lookup_table_{p}bits")
print("program: |")
print(
" func.func @main(%arg0: !FHE.eint<{0}>) -> !FHE.eint<{0}> {{".format(p))
print(" %tlu = arith.constant dense<[{0}]> : tensor<{1}xi64>".format(
','.join(map(str, random_lut)), 2**p))
f" func.func @main(%arg0: !FHE.eint<{p}>) -> !FHE.eint<{p}> {{")
print(f" %tlu = arith.constant dense<[{','.join(map(str, random_lut))}]> : tensor<{2**p}xi64>")
print(
" %1 = \"FHE.apply_lookup_table\"(%arg0, %tlu): (!FHE.eint<{0}>, tensor<{1}xi64>) -> (!FHE.eint<{0}>)".format(p, 2**p))
print(" return %1: !FHE.eint<{0}>".format(p))
f" %1 = \"FHE.apply_lookup_table\"(%arg0, %tlu): (!FHE.eint<{p}>, tensor<{2**p}xi64>) -> (!FHE.eint<{p}>)")
print(f" return %1: !FHE.eint<{p}>")
print(" }")
print("tests:")
print(" - inputs:")
print(" - scalar: 0")
print(" outputs:")
print(" - scalar: {0}".format(random_lut[0]))
print(f" - scalar: {random_lut[0]}")
print(" - inputs:")
random_i = np.random.randint(max_value)
print(" - scalar: {0}".format(random_i))
print(f" - scalar: {random_i}")
print(" outputs:")
print(" - scalar: {0}".format(random_lut[random_i]))
print(f" - scalar: {random_lut[random_i]}")
print(" - inputs:")
print(" - scalar: {0}".format(max_value))
print(f" - scalar: {max_value}")
print(" outputs:")
print(" - scalar: {0}".format(random_lut[max_value]))
print(f" - scalar: {random_lut[max_value]}")
print("---")
main()
CLI = argparse.ArgumentParser()
CLI.add_argument(
"--bitwidth",
help="Specify the list of bitwidth to generate",
nargs="+",
type=int,
default=list(range(1,16)),
)
generate(CLI.parse_args())