chiapos是一个github上的项目,想了解它具体的内容可以自行了解,地址: https://github.com/Chia-Network/chiapos。
当前版本号为:e5830b182d155f8599426a7374306445cd7c0418,是截至到2021年6月7日的最新版本。
我们先打开其中一个文件,可以看到,这是一个排序的模块,主要功能是从磁盘读取一定长度的数据,然后通过插入法进行排序。
我们需要优化的重点在于以下标注的几个点:
1和2将uint8_t改成uint64_8,这样就能折叠循环次数。
优化后的代码如下:
inline static bool IsPositionEmpty(const uint8_t *memory, uint32_t const entry_len)
{
for (uint32_t i = 0; i < entry_len; i++){
if(entry_len - i >= 8){
uint64_t *a1 = (uint64_t*)memory;
if(*a1 == 0){
i += 7;
continue;
}
return false;
}
if(entry_len - i >= 4){
uint32_t *a2 = (uint32_t*)memory;
if(*a2 == 0){
i += 3;
continue;
}
return false;
}
if(entry_len - i >= 2){
uint16_t *a3 = (uint16_t*)memory;
if(*a3 == 0){
i += 1;
continue;
}
return false;
}
if (memory[i] != 0){
return false;
}
}
return true;
}
inline int MemCmpBits(
uint8_t *left_arr,
uint8_t *right_arr,
uint32_t len,
uint32_t bits_begin)
{
uint32_t start_byte = bits_begin / 8;
uint8_t mask = ((1 << (8 - (bits_begin % 8))) - 1);