diff --git a/6_multisource/Makefile b/6_multisource_lto/Makefile similarity index 100% rename from 6_multisource/Makefile rename to 6_multisource_lto/Makefile diff --git a/6_multisource/multisource.c b/6_multisource_lto/multisource.c similarity index 100% rename from 6_multisource/multisource.c rename to 6_multisource_lto/multisource.c diff --git a/6_multisource/myblas.c b/6_multisource_lto/myblas.c similarity index 100% rename from 6_multisource/myblas.c rename to 6_multisource_lto/myblas.c diff --git a/6_multisource/myblas.h b/6_multisource_lto/myblas.h similarity index 100% rename from 6_multisource/myblas.h rename to 6_multisource_lto/myblas.h diff --git a/7_multisource_custom/Makefile b/7_multisource_custom/Makefile new file mode 100644 index 0000000..bd29b39 --- /dev/null +++ b/7_multisource_custom/Makefile @@ -0,0 +1,13 @@ +all: lib.exe + +clean: + rm -f *.o *.ll *.exe + +%.o: %.c + ../dockerscript.sh clang-12 -c /host/$^ -O2 -Xclang -load -Xclang /Enzyme/enzyme/build/Enzyme/ClangEnzyme-12.so -ffast-math -o /host/$@ + +lib.exe: myblas.o multisource.o + ../dockerscript.sh clang-12 /host/myblas.o /host/multisource.o -O2 -Xclang -load -Xclang /Enzyme/enzyme/build/Enzyme/ClangEnzyme-12.so -ffast-math -o /host/$@ + +run-%: %.exe + ../dockerscript.sh /host/$^ 3 diff --git a/7_multisource_custom/lib.exe b/7_multisource_custom/lib.exe new file mode 100755 index 0000000..0ab4b2b Binary files /dev/null and b/7_multisource_custom/lib.exe differ diff --git a/7_multisource_custom/multisource.c b/7_multisource_custom/multisource.c new file mode 100644 index 0000000..c835908 --- /dev/null +++ b/7_multisource_custom/multisource.c @@ -0,0 +1,50 @@ +#include +#include +#include +#include +#include "myblas.h" + +void __enzyme_double(void*, size_t); + +double dotabs(struct complex* alpha, struct complex* beta, int n) { + struct complex prod = myblas_cdot(alpha, beta, n); + __enzyme_double(&prod, sizeof(struct complex)); + return myblas_cabs(prod); +} + +void __enzyme_autodiff(void*, ...); + +int main(int argc, char *argv[]) { + int n = 3; + if (argc > 1) { + n = atoi(argv[1]); + } + + + struct complex *A = (struct complex*)malloc(sizeof(struct complex) * n); + assert(A != 0); + for(int i=0; i