gpt4 book ai didi

c - 优化了 CC_SHA256_Update 的批量读取

转载 作者:太空宇宙 更新时间:2023-11-04 01:55:42 24 4
gpt4 key购买 nike

我有以下代码来计算输入的 sha_256,我想知道如何知道每次 CC_SHA256_Update 迭代的最佳数据 block 大小是多少。它是常量值还是取决于系统环境的变量?

 CC_SHA256_CTX sha256;
CC_SHA256_Init(&sha256);

const long bufSize = 32768; //how can i find the optimized size ?
char* buffer = (char *) malloc(bufSize);

int bytesRead = 0;
if(!buffer) {
return -1;
}

while((bytesRead = (int) fread(buffer, 1, bufSize, file))) {
CC_SHA256_Update(&sha256, buffer, bytesRead);
}

编辑:我尝试了下面所选答案中描述的不同方法,并使用 mmap(而不是 malloc+fread)获取数据。不幸的是,id 并没有提高运行时效率(它略有增加)

int fsize(const char *filename) {
struct stat st;
if (stat(filename, &st) == 0)
return st.st_size;
return -1;
}

int fd = open(path, O_RDONLY);

int sz = fsize(path);
char * buffer = mmap((caddr_t)0, sz, PROT_READ , MAP_SHARED, fd, 0);

CC_SHA256_CTX sha256;
CC_SHA256_Init(&sha256);

CC_SHA256_Update(&sha256, buffer, sz);

CC_SHA256_Final(output, &sha256);

close(fd);
return 0;

最佳答案

我认为只有使用不同的大小进行测试才能明确这一点,但 64kB(分配粒度)的倍数可能是首选。

但为了获得最佳性能,您可以考虑使用 memory mapping直接在 file 上。这将消除将所有数据从内核模式(OS 磁盘缓存)复制到用户模式的需要。您将直接访问操作系统缓存,并且您可能只需要调用一次 CC_SHA256_Update()

关于c - 优化了 CC_SHA256_Update 的批量读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34592829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com