[问题]如何设计多线程程序,能达到节省运行时间的目的?

软件和网站开发以及相关技术探讨
头像
tnger
帖子: 69
注册时间: 2007-10-06 0:07

#16

帖子 tnger » 2008-06-25 11:00

greco 写了:用Elang写
不好意思,看不懂,能解释一下吗?
头像
tnger
帖子: 69
注册时间: 2007-10-06 0:07

#17

帖子 tnger » 2008-06-25 11:03

eexpress 写了:
20ms以内
要求似乎不高啊。如果就一个循环算法而言。
对于加快速度,查表是特例(高效,减少精度的做法),常规应该是少用库函数,包括浮点的函数/print等带格式化的输入输出函数(弱化浮点操作),自己根据需要的精度,编写必要的运算控制。多使用静态变量,少用标准的c的堆栈操作,尤其数组和参数传递(机器码对堆栈的操作消耗,是几倍到几十倍于静态变量的操作)。
我打算有一个大型的数组(不但是三角函数,还包括其他运行),进行查表,不过似乎这个表也太大了些:90X60X180X480X480
头像
猛将兄
帖子: 2052
注册时间: 2005-10-19 17:33

#18

帖子 猛将兄 » 2008-06-25 13:27

因地制宜地做事情。实时系统一般只有一个CPU吧,你看看有没有别的DSP帮你做相关运算,如果你是做嵌入式系统的话,加Chip比你改代码有用的多
头像
explilo
帖子: 40
注册时间: 2008-06-23 7:48

#19

帖子 explilo » 2008-06-25 13:40

erlang好像和mpi类似。是个并行编程的环境什么的GOOGLE一下就知道了

如个处理的大量数据的,现在的显卡在这 个方面很在行。
linser
帖子: 243
注册时间: 2005-09-28 9:03

#20

帖子 linser » 2008-06-26 0:40

如果运算时没有涉及IO响应的话,那么一般多线程是无法提高运算速度的,必须设置线程的affinity,将2个线程指派到2个CPU核心上,让2个CPU核心同时工作才能加快速度。

参见:http://www.sudu.cn/info/html/edu/linux/ ... 91111.html

另外,也可以考虑使用SSE来优化算法。
头像
tnger
帖子: 69
注册时间: 2007-10-06 0:07

#21

帖子 tnger » 2008-06-28 10:59

感谢各位的热心关注,对于楼上几位仁兄提出的:erlang(爱尔兰),mpi,sse,我都一一作了一些了解。erlang是用于分布式的,高并发进程环境中;mpi则是并行编程的一个标准,有很多相关的版本;sse是Intel为视频和浮点运算等复杂运算而开发的优化扩展指令集。
(以上说法如有谬误,请各位谅解,我对此也只是粗浅的了解)

总的说来,这几种方法与我的要求都不太适应。我的目的只有一个:减少程序的运行时间。如果使用前两种方法,必须要硬件的支持,并且线程创建与同步所花的时间会很多,得不尝失;最后一种方法则显得太过专业了,我不知道要花多长时间搞懂,还不能保证最后的效果一定好。

所以,我现在的重点放在如何减少循环次数,循环层数及其他方法。

谢谢!
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#22

帖子 BigSnake.NET » 2008-06-28 11:01

干脆讲你想解决什么问题吧..
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
tnger
帖子: 69
注册时间: 2007-10-06 0:07

#23

帖子 tnger » 2008-06-29 10:03

BigSnake.NET 写了:干脆讲你想解决什么问题吧..
说起来也不是太复杂,问题描述请见图片(因为有公式,所以只能用图片贴出来),我现在用数值方法遍历,很花时间,刚刚查到好像神经网络的方法可以解决此类问题。
附件
问题描述
问题描述
pipisi
帖子: 8
注册时间: 2007-07-02 21:28

Re: [问题]如何设计多线程程序,能达到节省运行时间的目的?

#24

帖子 pipisi » 2008-06-29 21:29

tnger 写了:我有一个比较耗时间的数值运算程序,单线程需要40s左右的时间(在我的机器上),如果采用多线程设计,会不会节省时间?

我尝试了一下,在网上拷贝了一个简单的双线程程序,发现程序运行的时间不是少了,而是多了,大概要85s。所以我想知道采用多线程是否会节省时间,应该如何设计?请各位大虾不吝赐教,谢谢!
程序如果是异步的,多线程应该可以

ps:个人认为,40s的程序是否能更节省时间,不应考虑是否多线程,考虑一下优化算法吧
头像
tnger
帖子: 69
注册时间: 2007-10-06 0:07

#25

帖子 tnger » 2008-06-30 9:15

兄弟,完全的数值运算,现在只能用穷举的方法,耗时是肯定的
头像
jiushibuhuan
帖子: 343
注册时间: 2007-10-23 20:04

#26

帖子 jiushibuhuan » 2008-06-30 9:24

要想并行,优先考虑将算法可分割
flyinflash
帖子: 2376
注册时间: 2006-09-21 14:28

#27

帖子 flyinflash » 2008-07-02 1:59

看了上面帖子后,非常惭愧,放假得下功夫看看《Unix 编辑》了。

对清国学生印象改观了。不过,清国学生在数理方面是清醒的,文字语言则不然。


1 楼
题外话
4、算法的时空分析和改进思想
分析: 略
改进思想:原则“时间与空间如熊掌与鱼,省时间不省空间,省空间不省时间,力求平衡”另,同一功能可以设计两种实现方式:一种时间优先,一种空间优先
我认为改进效率方法是多种的,在利用好语言特性前提下,应该花多点时间精力优化算法和数据结构
flyinflash
帖子: 2376
注册时间: 2006-09-21 14:28

#28

帖子 flyinflash » 2008-07-02 2:00

同一功能可以设计两种实现方式:一种时间优先,一种空间优先
不是针对您的情况
头像
tnger
帖子: 69
注册时间: 2007-10-06 0:07

#29

帖子 tnger » 2008-07-02 9:28

谢谢flyinflash!

您说的很有道理,一般来说,时间优先和空间优先是算法搜索中的两个方面,不可能兼得,最好的状态就是找到一个平衡点。然而对于本人的问题来说,好像不是太合适,因为不管是时间优先还是空间优先都有一个判断的标准,使得搜索的时候有一个停止的条件,而该问题却是在所有的值中找一个最小,也就是说没有一个独立的停止判断条件,所以只有遍历所有的值,也就有什么优先的问题了。
flyinflash
帖子: 2376
注册时间: 2006-09-21 14:28

#30

帖子 flyinflash » 2008-07-02 10:51

对清国学生印象改观了。不过,清国学生在数理方面是清醒的,文字语言则不然。
注意,这句话也不是针对您 tnger 的:D
回复