我正在尝试尽可能多地对我的密码恢复代码进行优化,并且我一直在进行大量的简化,for循环展开和查找表。
我已经提取了很多性能,并且我认为我最终必须开始线程以获得额外的性能。但我想知道是否存在基于x86的矢量/ SIMD(SSE / AVX)等效的此按位XOR。
const uint8_t initialkey[8] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef };
uint8_t archivekey[8];
archivekey[0] = initialkey[0] ^ passblock[0]; // Example: 01 XOR 32 (ASCII for 2) is 0x33
archivekey[1] = initialkey[1] ^ passblock[1]; // Example: 23 XOR 39 (ASCII for 9) is 0x1a
archivekey[2] = initialkey[2] ^ passblock[2]; // Example: 45 XOR 72 (ASCII for r) is 0x37
archivekey[3] = initialkey[3] ^ passblock[3]; // Example: 67 XOR 36 (ASCII for 6) is 0x51
archivekey[4] = initialkey[4] ^ passblock[4]; // Example: 89 XOR 35 (ASCII for 5) is 0xbc
archivekey[5] = initialkey[5] ^ passblock[5]; // Example: ab XOR 78 (ASCII for x) is 0xd3
archivekey[6] = initialkey[6] ^ passblock[6]; // Example: cd XOR 77 (ASCII for w) is 0xba
archivekey[7] = initialkey[7] ^ passblock[7]; // Example: ef XOR 00 (ASCII for NOTHING) is 0xef
在此代码中,initialkey始终为0123456789abcdef,而passblock则会发生更改(与ascii“29r65xw”的示例一样)。
从技术上讲,我想我可以用实际值替换initialkey [](因为它总是静态的)。
但我是否遗漏了任何技巧来优化这种运行速度 - 或者我最好将其留给编译器进行优化?也许有一些数据对齐?看起来这个代码太简单了,并且有一些方法可以更快地完成所有8个调用(在线程之外)。我尝试手动设置archivekey只是为了加速测试并且没有看到任何显着的改进,所以我没有期待太多,但我很想学习一些我不了解的主题。
我的代码是用Xcode,VS2015编译的,我也尝试过ICC,但VS2015将是我的主要目标。