请教:假设有两个比较费时的循环,是否可以用多线程缩短程序计算时间?

zxzx3323 2017-12-11 04:00:59
假设有两个比较费时的循环(A与B),是否可以用多线程缩短程序计算时间?
两种验证:(同一台机器,I5四核CPU)
1、单线程,先循环A,用时X,再循环B,用时Y。由于循环A与B,所以X与Y近似相同,CPU占用25~26%。
2、双线程,线程1:循环A,线程2:循环B,用时折算为1.32(X+Y),CPU占用50~51%。
本想双线程应该省近一半时间,但事实反多花了时间。
请教:有什么办法能用多线程缩短计算时间?谢谢
...全文
502 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
boylafong 2017-12-12
  • 打赏
  • 举报
回复
多线程一般来说不是用来提高效率的,是用来防止卡死或者同步异步的 单核不能提高;比如单线程效率是100,2个线程则分别为50跟50
zxzx3323 2017-12-12
  • 打赏
  • 举报
回复
两个循环的数据独立,如何用双线程充分得用4核CPU,缩短计算时间?
worldy 2017-12-12
  • 打赏
  • 举报
回复
一般在单核情况下,多线程是不能提高效率的,线程越多,用于操作系统用于线程调度的浪费也越多;另一方面,在多核情况下,多线程一般都涉及数据同步,数据同步会影响效率;
ESMGAL 2017-12-12
  • 打赏
  • 举报
回复
OMP可以试试
赵4老师 2017-12-12
  • 打赏
  • 举报
回复
CUDA? OpenMP?
赵4老师 2017-12-12
  • 打赏
  • 举报
回复
在文件大小相同的前提下: 读刚读过的文件比头次读没读过的文件快 读转速快的硬盘上的文件比读转速慢的硬盘上的文件快 读没有磁盘碎片的文件比读有磁盘碎片的文件快 读文件不处理比边读边处理快 单线程从头到尾一次读文件比多线程分别读文件各部分快(非固态硬盘上) 读固态硬盘上的文件比读普通硬盘上的文件快
zxzx3323 2017-12-12
  • 打赏
  • 举报
回复
有什么具体的措施,来充分得用多核CPU,全力计算呢?
zxzx3323 2017-12-11
  • 打赏
  • 举报
回复
我写的双线程代码,简化如下,如何能把计算时间缩短到比单线程快?如何纵向切分?谢谢!(循环A与B相同) DWORD WINAPI ThreadProc1(LPVOID pParam) { for(int i=0;i<100000;i++) { 循环体A } } DWORD WINAPI ThreadProc2(LPVOID pParam) { for(int j=0;j<100000;j++) { 循环体B } } void CMyDlg::OnBUTTONl() { mythread1 = AfxBeginThread((AFX_THREADPROC)ThreadProc1,NULL,THREAD_PRIORITY_HIGHEST); hWnd1=HWND(mythread1->m_hThread); mythread2 = AfxBeginThread((AFX_THREADPROC)ThreadProc2,NULL,THREAD_PRIORITY_HIGHEST); hWnd2=HWND(mythread2->m_hThread); }
阿源是少年 2017-12-11
  • 打赏
  • 举报
回复
充分利用多CPU核心简言之就是多线程,通常线程数大于等于核心数x2或者等于核心数效率是最高的,操作系统倾向于将每个线程分配到独立的核心上,然后对于并行处理问题就是业务的横向和纵向切割问题,横向切割好理解,所有核心做的事情都是一样的,纵向切割就是把一个业务分成若干块,每块分配到独立线程上执行,纵向切分的难度要大很多,具体应用才好具体分析
阿源是少年 2017-12-11
  • 打赏
  • 举报
回复
引用 4 楼 zxzx3323 的回复:
[quote=引用 2 楼 pcradio 的回复:] 你这个问题属于并发当中的业务纵向切割问题,如果是物理多核心,肯定会有速度提升的,这点毋庸置疑
请问:哪有相关的材料,百度上找不到合适的,谢谢!另外,如何发挥多CPU的效率?[/quote] 经验之谈,不是所有东西都能直接百度到的啊
zxzx3323 2017-12-11
  • 打赏
  • 举报
回复
引用 2 楼 pcradio 的回复:
你这个问题属于并发当中的业务纵向切割问题,如果是物理多核心,肯定会有速度提升的,这点毋庸置疑
请问:哪有相关的材料,百度上找不到合适的,谢谢!另外,如何发挥多CPU的效率?
zxzx3323 2017-12-11
  • 打赏
  • 举报
回复
引用 1 楼 smwhotjay 的回复:
业务切割。
请问:哪有相关的材料,百度上找不到合适的,谢谢!
阿源是少年 2017-12-11
  • 打赏
  • 举报
回复
你这个问题属于并发当中的业务纵向切割问题,如果是物理多核心,肯定会有速度提升的,这点毋庸置疑
smwhotjay 2017-12-11
  • 打赏
  • 举报
回复
业务切割。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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