In this blog post, I will use code samples to illustrate various aspects of how caches work, and what is the impact on the performance of real-world programs.
The examples are in C#, but the language choice has little impact on the performance scores and the conclusions they lead to.
// crypto/bn/bn_lcl.h structbignum_st { BN_ULONG *d; /* Pointer to an array of 'BN_BITS2' bit chunks. */ int top; /* Index of last used d +1. */ /* The next are internal book keeping for bn_expand. */ int dmax; /* Size of the d array. */ int neg; /* one if the number is negative */ int flags; };
最近,我需要移植一些 C 加密代码才能在 ARMv8-A(aarch64) 处理器上运行。问题在于代码使用了一些 x86 AES 内部函数,编译器在面向 ARM 体系结构时无法识别这些内部函数。ARMv8-A确实有一个可选的加密扩展,其中包括几个 AES 指令,但它们的语义与 x86 指令略有不同。我对 AES 没有太多经验,最初发现这非常令人困惑,因为我假设所有 AES 实现都需要以相同的方式工作(毕竟 AES 是一个标准!事实证明,这两种方法都足以实现 AES,但 x86 和 ARM 选择以不同的方式解决问题。