原帖由 "superdoctor" 发表:
即使不能直接操纵cache但是我们都知道cache里面会装些什么啦,所以程序设计还是可以间接的控制一下的
下半部是什么?"万不可用下半部"听着有点象下半身![]()
真心请教
原帖由 "黄山松" 发表:
不太懂如何设计程序才能利用cache?能否请版主将明白些吗?
cache的使用是程序来控制的吗?
原帖由 "gvim" 发表:
cache是os和cpu硬件配合管理的。
原帖由 "gvim" 发表:
在多cpu内cache不一致的时候,cpu系统总线检测cache的改变信号,然后产生无命中的信号,以中断方式传递给os,清洗脏数据,包括L1, L2两级缓存,都会有系统总线的cache监听信号。
如果读/写的数据长度和cache长度不符合,os还必须注意读/写数据的完整性,这个os也不能参与,只能适当的调整读出的位数为正确的数据长度。
cache查找速度和实现有关,如果是全路组方式,查找效率最高,但是冲突也会增加。
还有很多。。。。
原帖由 "黄山松" 发表:
听说过MEI,请教MESI是什么东西?
原帖由 "JohnBull" 发表:
不能使用多线程,而应该使用多进程。
因为线程之间需要内存的共享,所以任何一个精神正常的人在设计操作系统的时候,都不会把同一个进程的多个线程分布到多个CPU中实现,否则线程间的数据共享会让总线效率剧烈下降?.........
原帖由 "magicercn" 发表:
最好是能够充分利用系统的资源
希望有经验的各位高手指点。
原帖由 "JohnBull" 发表:
不是不可以,而是不应该让从属于同一个进程的多个线程跑在不同的CPU上。
当初我们为什么设计线程?是为了让不同的执行上下文共享数据段.也就是说,当执行上下文之间需要大量数据段内容需要共享时,应当选择线程.
然..........
原帖由 "JohnBull" 发表:
CPU怎么得知他们之间的CACHE不一致呢?
如果允许不同CPU的内存子系统不一致的话,就是NUMA设计了,是大型机的设计思路(在这种平台上,线程才能爽起来). PC平台上似乎没有的.
低端UMA体系的设计思路是采用各种cache同?.........
原帖由 "syxie" 发表:
不知道solaris操作系统,在使用多线程或者多进程的时候,无论cache或者什么的,有没有相关的操作系统配置参数,确保我的多CPU,多内存能够最大的使用,或者cache,或者编译选项。
原帖由 "cnufo" 发表:
插个嘴请教一下
插个嘴请教一下
我要对900多个文件排序,每个文件200万行左右,总行数在1。8亿
开了十个进程排序竟然要9个小时
我直接用sort命令排序的
单个执行sort 一个文件才11分钟
为什么并行后平均下来一个进程一个小时只排序一个文件呢?
原帖由 "syxie" 发表:
JohnBull 写到:
不是不可以,而是不应该让从属于同一个进程的多个线程跑在不同的CPU上。
当初我们为什么设计线程?是为了让不同的执行上下文共享数据段.也就是说,当执行上下文之间需要大量数据段内容需要共享时,应当选择线程.
然..........
说的有道理。
刚好遇到一个问题。在V880的机器上8CPU,Solaris8系统。
系统在运行的时候会有产生很多线程。当它运行的时候,8个CPU占用率接近80%,执行时间为38分钟;后来根据业务将线程分成3个进程(生成的总的线程数应该是一样的),CPU占用率降低为60%,执行时间在20分钟以内。
还在查为什么会这样呢。在看看还有没有优化的空间和方法。
不过,还写了一个代码,在2CPU上的执行效率,看使用不使用多线程的效率是一样的,就比较奇怪了。用的函数就是unix的基本函数pthread。
....
原帖由 "JohnBull" 发表:
不能使用多线程,而应该使用多进程。
因为线程之间需要内存的共享,所以任何一个精神正常的人在设计操作系统的时候,都不会把同一个进程的多个线程分布到多个CPU中实现,否则线程间的数据共享会让总线效率剧烈下降?.........
原帖由 "JohnBull" 发表:
不是不可以,而是不应该让从属于同一个进程的多个线程跑在不同的CPU上。
当初我们为什么设计线程?是为了让不同的执行上下文共享数据段.也就是说,当执行上下文之间需要大量数据段内容需要共享时,应当选择线程.
然..........
原帖由 mingyanguo 于 2005-5-14 23:52 发表
i can't agree more.
"不应该让从属于同一个进程的多个线程跑在不同的CPU上"
see FreeBSD's KSE or SA
or Solaris thread
原帖由 cnufo 于 2005-1-10 01:56 发表
以下是我实现的代码,请帮忙看看问题在哪里?
如何优化,9个小时实在是太久了!
while(gi_process!=0)
{
if(fork() == 0)
{
char cdrsourceid;
int i_cdrsourceid;
/*LoginToDB();*/
...
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |