不知道这个又什么好讨论的,来这里讨论的都是没做过深入的多线程开发的吧?

elssann 2006-06-26 12:20:03
多核也好,多CPU也好,只要你的程序不是多线程的,都不用去考虑其他东西,就和以前单核或者单CPU情况下的开发是一样的。

如果你的程序以前是在单CPU上多线程的,同样不需要多考虑,直接放到多核或者多CPU上去运行,不过需要重新编译。不然程序运行可能会莫名其妙地崩溃。


如果你的程序是密集运算或者密集IO的,那么在多核环境或者多CPU环境下,考虑使用多线程、CPU亲缘性、缓存刷新以及线程CONTEXT切换等一些高级特性,可以有效地提高你的程序性能,充分利用CPU资源,一般来说,对于普通的桌面应用,多核带来的影响不大,照常写程序吧。

如果你是做服务器端的程序开发,那么就可以好好学习一下多线程编程,充分利用CPU资源。

...全文
842 27 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
zcd_jimy 2006-08-31
  • 打赏
  • 举报
回复
完全没什么好争的, 看你的程序是不是对效率要求高, 是不是需要用多线程编程, 就这么简单.
Frank6600 2006-07-04
  • 打赏
  • 举报
回复
> 利用多核有三个层次。
> 一是系统层次......
> 二是线程层次......
> 三是算法层次......

这段分析很精彩,多谢!
MyClus 2006-07-04
  • 打赏
  • 举报
回复
我的意思是,如果只是为了迎合多核,把类似记事本这样的程序都用多线程来改写,看不出又什么意义。反而增加开发成本。

tjuzhangrui() :
INTEL的性能库和编译器又不是没用过。我的意思是,不是所有的程序都是为了要迎合多核来改写。

别上了厂商的套。
myan 2006-07-04
  • 打赏
  • 举报
回复
to MyClus:

>> 莫非你认为过几年后,多核普及了,连记事本和WINDOWS计算器都需要用多线程来重写?莫非为了不让CPU浪费,我们程序员要想尽办法CPU负荷满满的跑?

这个不好说。

利用多核有三个层次。一是系统层次。一个核跑一个OS,每一个程序永远只能用一个核。这样大家都轻松。但是双核的时候我可以跑两个OS,难道4核的时候我需要跑4个OS?8核的时候...,我跑些什么OS呢?所以这个方向不可能很长久。

二是线程层次。就是说每一个新的线程自动利用空闲的core,这样的话应用程序的程序员也不用管,下层的操作系统就包办此事。只要照常写multi-threaded应用就好。我觉得这种模式可以坚持很长时间。因为现在大家一开机器就大概有几十个线程在跑,所以直到比如16核,甚至32核之前,使用这种方法就可以提高性能。问题仅仅在于,多线程程序并不好写,特别是不好调试。所以大家努力学习多线程开发吧。很多客户端程序,可能要求以这种思维重写。Notepad和Calc的功能越来越强,还真没准要这么重写呢,你还别不信。

三是算法层次。就是说执行每一个具体的算法任务,都尽可能利用多核并行。比如说100个整数相加,在4核CPU上,可以分别让四个核处理25个数的加法,最后将4个结果加起来。这种方法几乎要求我们重写现有的大部分程序,无论是客户端还是服务端的应用。好在似乎只有少数应用需要这么干。而且有OpenMP等帮助我们。

总的来说,无论是第二层次还是第三层次,multicore带来的冲击势必是不可忽略的。
tjuzhangrui 2006-07-04
  • 打赏
  • 举报
回复
楼主还应该学一学Intel的编译器,使用它可以把单线程的运算(数据不是共享的,比如a[i]+b[i]),分解成几个线程来并发执行,这样多核肯定是有优势的。
Frank6600 2006-06-30
  • 打赏
  • 举报
回复
> 一般来说,对于普通的桌面应用,多核带来的影响不大,照常写程序吧。
> 如果你是「做服务器端的程序开发」,那么就可以好好学习一下「多线程编程」,充分利用CPU资源。
> 我想对于多核,我们首先第一点应该是:当我们应用中,我们的程序已经让某一个CPU不堪重负了,这时候我们才需要去考虑多线程来改写以充分利用CPU。

了解,多谢!
MyClus 2006-06-30
  • 打赏
  • 举报
回复
个人认为,多核将在多媒体应用中大显身手。特别是在HDTV等高清电影的解码上。
MyClus 2006-06-30
  • 打赏
  • 举报
回复
更正:

莫非你认为过几年后,多核普及了,连记事本和WINDOWS计算机都需要用多线程来重写?莫非为了不让CPU浪费,我们程序员要想尽办法CPU负荷满满的跑?

这里应该是 莫非你认为过几年后,多核普及了,连记事本和WINDOWS计算器都需要用多线程来重写?莫非为了不让CPU浪费,我们程序员要想尽办法CPU负荷满满的跑?
MyClus 2006-06-30
  • 打赏
  • 举报
回复
我是楼主,换了个马甲。



netfairy(泡泡猪) ( ):
我看不出你说的这个问题和我说的问题之间有什么关系。



myan():
莫非你认为过几年后,多核普及了,连记事本和WINDOWS计算机都需要用多线程来重写?莫非为了不让CPU浪费,我们程序员要想尽办法CPU负荷满满的跑?




frank_lee_cn:
我想对于多核,我们首先第一点应该是:当我们应用中,我们的程序已经让某一个CPU不堪重负了,这时候我们才需要去考虑多线程来改写以充分利用CPU。



多线程带来的问题是内存的同步和互斥的开销等问题。
以前多核没出现的时候,在多CPU的环境中,多进程是一个不错的选择。多进程避免掉了内存同步的开销
Frank6600 2006-06-29
  • 打赏
  • 举报
回复
OS不能替我们多做一点吗﹖
我的意思是说,
就算客户端基础应用程序没有考虑那么多,
仍然是单线程,
那么当我们在一台主机上运行很多程序时,
OS不能自动帮我们分配程序使其多利用吗﹖

说到这里,顺便问一个我不懂的概念,
多核和多CPU在概念上有什么不同﹖
简单的说就是,什么是多核﹖
多核不等于多CPU的关键在哪哩﹖
Frank6600 2006-06-29
  • 打赏
  • 举报
回复
> 给个关于Speculative Threading的链接:
> http://www.intel.com/technology/magazine/research/speculative-threading-1205.htm

多谢!
Frank6600 2006-06-29
  • 打赏
  • 举报
回复
> 其实万事有利必有弊。仔细想了一下,在同时运行两个完全不相干的程序,那么多核可能反而不如多CPU. 这个是因为多核是共享L2缓存的,两个不相干的程序如果在多核两个不同核心上同时运行,那么就会将它们的数据装入同一个L2缓存,我觉得有可能会导致L2里面数据相互干扰,有可能对性能有不良的作用。但是另外一方面,如果一个程序使用内存不多,而另外一个使用很多内存,那么就有可能对性能有好处。

这几句话已经够让我对多核与多CPU之间的比较有更多的瞭解了,多谢!
mathe 2006-06-29
  • 打赏
  • 举报
回复
给个关于Speculative Threading的链接:
http://www.intel.com/technology/magazine/research/speculative-threading-1205.htm
mathe 2006-06-29
  • 打赏
  • 举报
回复
其实万事有利必有弊。仔细想了一下,在同时运行两个完全不相干的程序,那么多核可能反而不如多CPU. 这个是因为多核是共享L2缓存的,两个不相干的程序如果在多核两个不同核心上同时运行,那么就会将它们的数据装入同一个L2缓存,我觉得有可能会导致L2里面数据相互干扰,有可能对性能有不良的作用。但是另外一方面,如果一个程序使用内存不多,而另外一个使用很多内存,那么就有可能对性能有好处。
Speculative Threading是一种未来的技术,现在的多核中肯定还不能支持的。这种技术需要CPU硬件有特殊的支持,此外,还需要特殊编译器的支持。但是对于操作系统来说,是完全透明的
Frank6600 2006-06-29
  • 打赏
  • 举报
回复
> 多核当然比多CPU有优势了

原来多核比多CPU好。

没办法,关于多核的了解,
单纯是从广告上看到的名词,
只知道「多核」这个名词罢了。
呵,惭愧。
Frank6600 2006-06-29
  • 打赏
  • 举报
回复
> 还有,其实现在还有一种研究叫Speculative Threading的技术,可以将单线程程序拆分成多线程来投机运行,这样就可以使用多核了。

这种技术应用在哪个层次﹖
CPU 内核﹖ OS ? 还是 .Net Framework 内﹖
mathe 2006-06-29
  • 打赏
  • 举报
回复
还有,其实现在还有一种研究叫Speculative Threading的技术,可以将单线程程序拆分成多线程来投机运行,这样就可以使用多核了。
To frank_lee_cn, 多核当然比多CPU有优势了
Frank6600 2006-06-29
  • 打赏
  • 举报
回复
> 比如现在的计算机里一般都安装了杀毒程序.经常杀毒程序会需要花费很长时间去扫描文件,这时,如果我们需要运行其他程序,会发现计算机特别慢.但是如果是多核或多CPU,那九可以好多了.

这个好像就是我想理解的OS帮我们分配多核运作﹖

> 当然多核同多CPU还有不同,比如多核多个核心之间可以共享L2-cache(缓存),这样的话,两个线程之间如果需要通讯,那么速度会比多CPU快很多,所以对于多线程程序,多核会比多CPU快

这就是多核和多CPU的不同吗﹖
那这么说,多核反倒比多CPU还好吗﹖
李世东 2006-06-29
  • 打赏
  • 举报
回复
很正确啊
mathe 2006-06-29
  • 打赏
  • 举报
回复
其实对于单线程程序还是有好处的.
比如现在的计算机里一般都安装了杀毒程序.经常杀毒程序会需要花费很长时间去扫描文件,这时,如果我们需要运行其他程序,会发现计算机特别慢.但是如果是多核或多CPU,那九可以好多了.

当然多核同多CPU还有不同,比如多核多个核心之间可以共享L2-cache(缓存),这样的话,两个线程之间如果需要通讯,那么速度会比多CPU快很多,所以对于多线程程序,多核会比多CPU快
加载更多回复(7)

567

社区成员

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

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