One approach to finding a possible candidate function for optimization was suggested by our professor. This approach was to look for all functions optimized in x86_64 but not on aarch64, since these are the two architectures we have worked with throughout the course.
I wrote a one-liner bash script to achieve this (note: all commands below are run inside the
for f in `find ./sysdeps/x86_64/* -name "*.c" | > sed -rn 's/\.\/sysdeps\/x86_64\/(.*\/)*(.*\.c)/\1\2/p'`; > do ls ./sysdeps/aarch64/$f 2>>ls_error.txt; > done
This command will look for all c files in the sysdeps/x86_64 directory (recursively) and search for each corresponding filename in sysdeps/aarch64 (with the same directory structure as x86_64). Files that are found in x86_64 but not in aarch64 will cause an error in the
ls ./sysdeps/aarch64/$f command and we can redirect those errors to ls_error.txt (files that exist in both will simply redirect to standard output).
$ less ls_error.txt ls: cannot access './sysdeps/aarch64/dl-procinfo.c': No such file or directory ls: cannot access './sysdeps/aarch64/dl-runtime.c': No such file or directory ... ...
To get the filenames only from
ls_error.txt, I run:
$ cat ls_error.txt | sed -rn "s/^ls.*'\.\/(.*\/)*(.*\.c)'.*$/\2/p" > functions-x86_64_not_aarch64.txt $ less functions-x86_64_not_aarch64.txt dl-procinfo.c dl-runtime.c ...
Now I can go through this list and look for a function that can potentially be optimized for aarch64.
I had previously run pieces of the one-liner script above to write the functions found in x86_64 (to functions_x86_64.txt) and aarch64 (to functions-aarch64.txt) so I could count the number of functions in each architecture and get an idea of what I was dealing with. The functions-x86_64_aarch64.txt file includes functions that exist in both x86_64 and aarch64.
$ ls -l functions* functions-aarch64.txt functions-x86_64_aarch64.txt functions-x86_64_not_aarch64.txt functions-x86_64.txt $ wc -l functions* 54 functions-aarch64.txt 24 functions-x86_64_aarch64.txt 178 functions-x86_64_not_aarch64.txt 199 functions-x86_64.txt
There are 178 files in x86_64 that are not in aarch64. Many of these however are test files, so I excluded the
$ cat functions-x86_64_not_aarch64.txt | > grep -vP 'test|tst' > functions-x86_64_not_aarch64_notests.txt $ wc -l functions* 93 functions-x86_64_not_aarch64_notests.txt
Now there are 93 possible functions I can choose from. I will follow up this post with some of my findings.