register вообще ни на что не влияет в современных компиляторах при уровне оптимизации -O1 и выше. (современные — это где-то с конца 1980х). Но на -O0 может влиять. Вот например обсуждение в рассылке GCC: https://gcc.gnu.org/ml/gcc/2010-05/msg00098.html
И ещё проблема, которая не даёт сделать кэш больше — ограничения управляющей схемы. Ведь кэш должен в каждом вэе взять линии по индексу, сравнить у них тэги, дать считать результат процессору, и всё это за 3 такта.
Например по дефолту фортран считает, что массивы не могут пересекаться и лучше оптимизирует. Для получения такого же эффекта в C надо вручную расставлять restrict перед поинтерами, или #pragma omp simd перед циклами.
Кроме CUDA для вычислений на GPU ещё можно использовать:
https://gcc.gnu.org/onlinedocs/gfortran/OpenMP.html
https://gcc.gnu.org/onlinedocs/gfortran/OpenACC.html
Межпроцедурную оптимизацию делает не линкер, а компилятор, который вызывается из линкера.
С помощью g++ можно, например, компилировать программу как единое целое, минуя создание объектников.
Если вызвать «g++ -flto file1.cpp file2.cpp», то объектники всё-равно создадутся (в /tmp), потом подадутся линкеру, и он опять позовёт gcc для перекомпилиции с межпроцедурными оптимизациями. Можно подать опцию -v и увидеть все подробности.
Выяснилось, что это, конечно, возможно, но потребуется загрузить старую и неподдерживаемую версию Xcode, которая работает только в Mavericks!
То есть, вы должны хранить либо старые Маки, либо старые iOS-устройства, молясь, чтобы Apple не сломала что-либо дальше.
Направление вряд ли поменяет, но может переставить циклы или сделать блокинг: https://software.intel.com/en-us/articles/performance-tools-for-software-developers-loop-blocking
https://gcc.gnu.org/onlinedocs/gfortran/OpenMP.html
https://gcc.gnu.org/onlinedocs/gfortran/OpenACC.html
Все действия происходят в запертом 200-этажном небоскрёбе.
Если вызвать «g++ -flto file1.cpp file2.cpp», то объектники всё-равно создадутся (в /tmp), потом подадутся линкеру, и он опять позовёт gcc для перекомпилиции с межпроцедурными оптимизациями. Можно подать опцию -v и увидеть все подробности.
LLVM уже давно так не расшифровывается: http://lists.llvm.org/pipermail/llvm-dev/2011-December/046445.html
Можно запускать прошлые OS X в Parallels.