一段代码用OpenMP实现

信谦 2008-05-23 05:27:14
我正在用OpenMP实现Huffman压缩算法,现在碰到的问题是文件读写不易并行的问题。
即使是用OpenMP实现for循环,也会由于读写而存在并行问题,也试过SECTIONS等,还是有数据冲突;
下面是我的一部分的代码,哪位能给点意见吗,万分感激!!!
unsigned char rbuff[1024]; //每次1024个字节 pan
UINT gcnt=1024;
ULONGLONG gtotal=0,flen;
CString bitbuff="";
flen=m_readf.GetLength(); //文件长度flen
#ifdef _OPENMP
omp_set_num_threads(NUM_THREADS);
#endif

while(gcnt == 1024)
{
gcnt=m_readf.Read(rbuff,1024); //每次读取1024个字符(字节) 存入rbuff
for(int i=0;i<gcnt;i++)
{
bitbuff+=HuffCode[rbuff[i]];
while(bitbuff.GetLength()>=8)
m_file<<BitStrToChar(bitbuff); //重新编码后转换为字符型 pan
}

if(ShowPro)
{//设置当前光标位置
SetConsoleCursorPosition(hStdout,ConsoleScreenBufferInfo.dwCursorPosition);
gtotal+=gcnt;
cout<<int(float(gtotal)/flen*100)<<"%\n";
}
}
...全文
160 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
intel_www 2008-05-28
  • 打赏
  • 举报
回复
m_readf.Read中肯定会有隐式的同步对象,在这里使用并行不会有高的效率。
Intel_CG 2008-05-26
  • 打赏
  • 举报
回复
1. 读入大量数据。
2. 启动多个线程查(固定)表,转换数据,存结果至线程的heap。
3. 各线程串行写出数据。



信谦 2008-05-23
  • 打赏
  • 举报
回复
哪位兄弟给点建议啊,小弟不才,这个问题困扰我好久

567

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧