gpt4 book ai didi

c++ - 在 C++ 中使用 openmp 进行多线程

转载 作者:行者123 更新时间:2023-11-28 06:56:30 26 4
gpt4 key购买 nike

如果我只想并行化循环并使用 openmp 顺序保存到文件,最好的解决方案是什么。我有一个包含大量信息的文件,我想将其分成相等的 block (每个 block 16 个字节),使用 openmp(C++ 中的多线程编程)加密。加密过程完成后,这些 block 存储在单个文件中,但与原始文件的顺序相同。

 i_count=meta->subchunk2_size-meta->subchunk2_size%16;// TO GET THE EXACT LENTH MODE 16
// Get the number of processors in this system
int iCPU = omp_get_num_procs();
// Now set the number of threads
omp_set_num_threads(iCPU);
#pragma omp parallel for ordered
for( i=0;i<i_count;i+=16)
{
fread(Store,sizeof(char),16,Rfile);// read
ENCRYPT();
#pragma omp ordered
fwrite(Store,sizeof(char),16,Wfile) // write
}

它应该并行工作的程序,但保存到文件的工作顺序,但程序的实现显示它按顺序工作。

最佳答案

最好在一个线程中将整个文件读入缓冲区,并行处理缓冲区而不使用有序,然后在一个线程中写入缓冲区。像这样的东西

fread(Store,sizeof(char),icount,Rfile);// read
#pragma omp parallel for schedule(static)
for( i=0;i<i_count;i+=16) {
ENCRYPT(&Store[i]); //ENCRYPT acts on 16 bytes at a time
}
fwrite(Store,sizeof(char),icount,Wfile) // write

如果文件太大而无法一次全部读取,则在循环中分块读取。重点是加密功能应该比读取写入文件慢得多。否则,无论如何使用多线程是没有意义的,因为你不能真正加快多线程读写文件的速度。

关于c++ - 在 C++ 中使用 openmp 进行多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23108939/

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