由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Computation版 - [合集] 请教一个C++程序结构的问题
相关主题
如何实现N层循环结构面试前,需要准备数据结构和算法吗
业余人士来问个程序结构问题[合集] 使馆大妈把那个版买下来了?
被导师给玩了[合集] 老美是不是傻, 白蚁区用铝合金结构不就行了吗
请教一下大家[合集] 请教 Air Duct Cleaning 的问题
请教C++里关于创建结构体对象的问题[合集] 思科的确该裁
请问 在学过C的基础上 是应该先学数据结构和算法,还是先学c++或JAVA呢?尼玛,笑岔气了
弱弱的问问跟hash有关的问题 (转载)[合集] 你们买了枪以后会上课学习怎么用吗?
做蛋白结构的学点编程怎么样?[合集] 求推荐一块新手用的横握球拍
相关话题的讨论汇总
话题: c++话题: 程序结构
进入Computation版参与讨论
1 (共1页)
j**u
发帖数: 6059
1
☆─────────────────────────────────────☆
eagletiger (eagletiger) 于 (Wed Nov 23 23:01:21 2011, 美东) 提到:
程序里现在需要一个很大的Matrix, 以前写的时候是放在一个文件里,每次程序执行的
时候现读入,这样很浪费时间,现在把整个Matrix写成一个array存在程序里作global
variable,但是编译的时候很慢,要十几分钟的样子,而且编译出来的程序很大,请问
各位一般处理大的矩阵时候是如何处理的,谢谢哈.
☆─────────────────────────────────────☆
Augu (奥古) 于 (Thu Nov 24 16:35:31 2011, 美东) 提到:
要不空间换时间
要不时间换空间

global
☆─────────────────────────────────────☆
eagletiger (eagletiger) 于 (Fri Nov 25 02:14:55 2011, 美东) 提到:
俺现在就是空间换时间,矩阵大概有三十多M, compile之后的程序有六十多M,但是
compile的过程很慢,要好久,而且在好几个机器上都报错说内存不够,好容易找了个
能compile的机子,只是这方面没有什么经验,不知道一般专业人士都是怎么设计的结
构.
☆─────────────────────────────────────☆
Augu (奥古) 于 (Fri Nov 25 13:07:44 2011, 美东) 提到:
你为啥要放在 global呢
global的变量放在静态存储区,我不太了解,不过一般不会放矩阵这样大的数据
☆─────────────────────────────────────☆
eagletiger (eagletiger) 于 (Fri Nov 25 20:51:39 2011, 美东) 提到:
不设为gobal,那就是当作局域变量放在主函数里,然后传地址给其他函数,那效果是
一样的,其实主要问题就是矩阵太大,compile的时候很慢,在执行的时候主要时间就
是把程序读入内存,但是放在文件里每次现读执行的时候很慢,在多循环调动的时候有
点不现实, 请问各位有没有处理大的矩阵的经验,指导一下哈.
☆─────────────────────────────────────☆
BenW (Ben) 于 (Fri Nov 25 21:34:08 2011, 美东) 提到:
不太明白你这程序逻辑。
过去俺们是把大数据存在文件里,读的时候用Memory File, 就是一下子把整个文件从
硬盘扔进一个内存文件,然后再读内存,速度极快,因为理论上就一次磁盘IO调用。数
据读完了再做成静态变量或者全局变量就行了。
global
☆─────────────────────────────────────☆
eagletiger (eagletiger) 于 (Fri Nov 25 22:55:53 2011, 美东) 提到:
请问能详细解释一下Memory file的概念吗,没有用过,是需要安装其他系统支持吗.
☆─────────────────────────────────────☆
Hyena (阿盆) 于 (Fri Nov 25 23:19:09 2011, 美东) 提到:
可以考虑用并行.
☆─────────────────────────────────────☆
bearjoe (bearjoe) 于 (Sat Nov 26 00:01:09 2011, 美东) 提到:
做个ram disk,自己google吧
☆─────────────────────────────────────☆
eagletiger (eagletiger) 于 (Sat Nov 26 00:18:49 2011, 美东) 提到:
这个本来就是给并行的一个节点写的,再并行一下结构太复杂了哈,谢谢建议哈.
☆─────────────────────────────────────☆
eagletiger (eagletiger) 于 (Sat Nov 26 00:21:13 2011, 美东) 提到:
其实是这个程序已经写完,准备贴在网上让别人下来用的,如果不能用纯C++的方法解
决的话可能意义对俺不大,谢谢指点.
☆─────────────────────────────────────☆
running123 (running123) 于 (Sat Nov 26 00:56:38 2011, 美东) 提到:
你以前的方法是对的。你现在的方法简直就是胡扯。
你才20,30M的文件,根本不算大。多半是你写的disk I/O写的不够好。
global
☆─────────────────────────────────────☆
running123 (running123) 于 (Sat Nov 26 01:01:21 2011, 美东) 提到:
你可以去查一下。现在大部分笔记本硬盘的速度,多是在30-40mbytes/s以上。也就是
说,几乎不到1秒的时间就可以读入你的Matrix。跟真正处理数据的程序比起来,你这
个30M的文件根本只能算个toy。
为什么慢,估计原因很简单,就是你程序没写好了而已。楼上扯什么ram disk,并行这
些,根本就是杀鸡用牛刀。。。
真正用mapreduce等并行处理的,都至少是上G的数据,数量级都差了2个。
global
☆─────────────────────────────────────☆
eagletiger (eagletiger) 于 (Sat Nov 26 01:36:24 2011, 美东) 提到:
可能你说的是对的,以前的数据存在几千个文件里,每个都不大,但是I/O操作很慢,
现在做到一个文件里,可能直接读入和直接写成global的Array速度差不多,俺可以试
试,现在的结构也是用的俺以前实验室一个postdoc的程序方法,他一直把数据做成一
个很大的Array然后直接compile, 谢谢哈.
☆─────────────────────────────────────☆
running123 (running123) 于 (Sat Nov 26 02:02:06 2011, 美东) 提到:
如果再不行,你可以考虑使用数据库。把数据存在数据库里面。数据库系统对于disk I
/O以及内存的读写切换,基本上都是最优化的。
☆─────────────────────────────────────☆
ntjohn (Chairman of the bored) 于 (Sat Nov 26 10:18:18 2011, 美东) 提到:
maybe try serialization
☆─────────────────────────────────────☆
yhchen4 (盗泉子) 于 (Sat Nov 26 10:34:32 2011, 美东) 提到:
最土的方法:先用二进制全部直接读到内存,然后再分析。
别用cin或fscanf这种方式就可以了
☆─────────────────────────────────────☆
jetwaves () 于 (Sat Nov 26 11:54:02 2011, 美东) 提到:
计算的程序不要矩阵,另外写个包含矩阵并且做成service负责响应提取矩阵内容的要
求,
计算的程序需要数据的时候通过服务去取,
数据变的时候重新编译service,计算程序debug的时候重新编译计算程序
global
☆─────────────────────────────────────☆
eagletiger (eagletiger) 于 (Sat Nov 26 11:59:43 2011, 美东) 提到:
谢谢哈.
I
☆─────────────────────────────────────☆
eagletiger (eagletiger) 于 (Sat Nov 26 12:02:10 2011, 美东) 提到:
请问用二进制如何操作,俺以前写的二进制文档还是用stream读入的,这和cin和
fscanf差别不大吧,谢谢指教.
☆─────────────────────────────────────☆
eagletiger (eagletiger) 于 (Sat Nov 26 12:04:35 2011, 美东) 提到:
这位的方法听上去很复杂,请问能详细说一下吗,你说的数据变的时候重新编译是什么
意思,是runtime编译吗,谢谢哈
☆─────────────────────────────────────☆
running123 (running123) 于 (Sat Nov 26 12:55:14 2011, 美东) 提到:
恩,直接memcpy的方法是快一些。不过他这个才30M的小文件,即便用fscanf也不会慢
到哪里去。
☆─────────────────────────────────────☆
eagletiger (eagletiger) 于 (Sat Nov 26 14:28:16 2011, 美东) 提到:
请问你的意思是俺把矩阵转成Binary file, 然后用memcpy读入? 请问能给个例子吗
? 俺读一下你的code,这样可能清楚些,谢谢哈.
☆─────────────────────────────────────☆
running123 (running123) 于 (Sat Nov 26 14:37:40 2011, 美东) 提到:
FILE *fp;
int* matrix = new int[30*1024*1024];
fp=fopen("test", "rb")
fread(matrix, 30*1024*1024*sizeof(int), 1, fp)
fclose(fp);
☆─────────────────────────────────────☆
nokia9300 (甘兰凉肃) 于 (Sat Nov 26 16:04:33 2011, 美东) 提到:
呃,放在文件里很方便啊。如果你觉得慢可以试试用软件把一块内存虚拟成磁盘,然后
把文件放在ramdisk里。
global
☆─────────────────────────────────────☆
eagletiger (eagletiger) 于 (Sat Nov 26 18:06:40 2011, 美东) 提到:
谢谢哈.
☆─────────────────────────────────────☆
eagletiger (eagletiger) 于 (Sat Nov 26 18:09:44 2011, 美东) 提到:
俺也觉得是这样子,之前慢可能是数据分散在很多文件里哈.
☆─────────────────────────────────────☆
kx (老k) 于 (Sun Nov 27 09:48:46 2011, 美东) 提到:
我猜他指的是不是 File Mapping ?
把文件映射到内存里去
msdn 里能查到
算基本api
不过我不懂
件从
。数
☆─────────────────────────────────────☆
eagletiger (eagletiger) 于 (Sun Nov 27 12:56:19 2011, 美东) 提到:
谢谢提示哈.
1 (共1页)
进入Computation版参与讨论
相关主题
[合集] 求推荐一块新手用的横握球拍请教C++里关于创建结构体对象的问题
[合集] [技术贴] 跑步对脚踝骨结构的影响(科研与灌水的完美结合!)请问 在学过C的基础上 是应该先学数据结构和算法,还是先学c++或JAVA呢?
[合集] IMAX看avatar最好的座位在哪个区域?弱弱的问问跟hash有关的问题 (转载)
[合集] 真纳闷女人的大脑结构为什么那么复杂?做蛋白结构的学点编程怎么样?
如何实现N层循环结构面试前,需要准备数据结构和算法吗
业余人士来问个程序结构问题[合集] 使馆大妈把那个版买下来了?
被导师给玩了[合集] 老美是不是傻, 白蚁区用铝合金结构不就行了吗
请教一下大家[合集] 请教 Air Duct Cleaning 的问题
相关话题的讨论汇总
话题: c++话题: 程序结构