From 351bab0bc9d6d9c1f0315e3563f830173336bdfd Mon Sep 17 00:00:00 2001 From: Quentin Bourgerie Date: Mon, 5 Dec 2022 16:22:09 +0100 Subject: [PATCH] chore(tests): Add a make target for testing gpu --- compiler/Makefile | 54 ++++++++++++------- .../end_to_end_apply_lookup_table_gen.py | 41 ++++++++------ 2 files changed, 58 insertions(+), 37 deletions(-) diff --git a/compiler/Makefile b/compiler/Makefile index 9b80181a4..6336c0483 100644 --- a/compiler/Makefile +++ b/compiler/Makefile @@ -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 diff --git a/compiler/tests/end_to_end_fixture/end_to_end_apply_lookup_table_gen.py b/compiler/tests/end_to_end_fixture/end_to_end_apply_lookup_table_gen.py index 01d65a6fe..9093682a4 100644 --- a/compiler/tests/end_to_end_fixture/end_to_end_apply_lookup_table_gen.py +++ b/compiler/tests/end_to_end_fixture/end_to_end_apply_lookup_table_gen.py @@ -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())