由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Computation版 - 请教一个C++程序结构的问题
相关主题
新手求教C++对于矩阵的操作必须是一堆for循环吗?Re: How to save variables in file in MAT
matlab高手进来看看,谢谢[转载] matlab里面移动指针pointer问题
a question about Matlab fread如何用fprintf 连续写数据
Matlab 读取文件的问题matlab输出问题
大家是怎么在MATLAB里读入矩阵的?[合集] 请教一段matlab程序 (转载)
问个循环的问题[合集] 在matlab 如何 将生成的文件写到指定的目录。
问个C++读入文件的问题[合集] 举个例子:每天一题
[5个包子] 请教C/C++读取文件的遇到的问题请问C语言fscanf的用法
相关话题的讨论汇总
话题: 文件话题: 程序话题: c++话题: matrix话题: global
进入Computation版参与讨论
1 (共1页)
e********r
发帖数: 2352
1
程序里现在需要一个很大的Matrix, 以前写的时候是放在一个文件里,每次程序执行的
时候现读入,这样很浪费时间,现在把整个Matrix写成一个array存在程序里作global
variable,但是编译的时候很慢,要十几分钟的样子,而且编译出来的程序很大,请问
各位一般处理大的矩阵时候是如何处理的,谢谢哈.
A**u
发帖数: 2458
2
要不空间换时间
要不时间换空间

global

【在 e********r 的大作中提到】
: 程序里现在需要一个很大的Matrix, 以前写的时候是放在一个文件里,每次程序执行的
: 时候现读入,这样很浪费时间,现在把整个Matrix写成一个array存在程序里作global
: variable,但是编译的时候很慢,要十几分钟的样子,而且编译出来的程序很大,请问
: 各位一般处理大的矩阵时候是如何处理的,谢谢哈.

e********r
发帖数: 2352
3
俺现在就是空间换时间,矩阵大概有三十多M, compile之后的程序有六十多M,但是
compile的过程很慢,要好久,而且在好几个机器上都报错说内存不够,好容易找了个
能compile的机子,只是这方面没有什么经验,不知道一般专业人士都是怎么设计的结
构.

【在 A**u 的大作中提到】
: 要不空间换时间
: 要不时间换空间
:
: global

A**u
发帖数: 2458
4
你为啥要放在 global呢
global的变量放在静态存储区,我不太了解,不过一般不会放矩阵这样大的数据

【在 e********r 的大作中提到】
: 俺现在就是空间换时间,矩阵大概有三十多M, compile之后的程序有六十多M,但是
: compile的过程很慢,要好久,而且在好几个机器上都报错说内存不够,好容易找了个
: 能compile的机子,只是这方面没有什么经验,不知道一般专业人士都是怎么设计的结
: 构.

e********r
发帖数: 2352
5
不设为gobal,那就是当作局域变量放在主函数里,然后传地址给其他函数,那效果是
一样的,其实主要问题就是矩阵太大,compile的时候很慢,在执行的时候主要时间就
是把程序读入内存,但是放在文件里每次现读执行的时候很慢,在多循环调动的时候有
点不现实, 请问各位有没有处理大的矩阵的经验,指导一下哈.

【在 A**u 的大作中提到】
: 你为啥要放在 global呢
: global的变量放在静态存储区,我不太了解,不过一般不会放矩阵这样大的数据

B**W
发帖数: 2273
6
不太明白你这程序逻辑。
过去俺们是把大数据存在文件里,读的时候用Memory File, 就是一下子把整个文件从
硬盘扔进一个内存文件,然后再读内存,速度极快,因为理论上就一次磁盘IO调用。数
据读完了再做成静态变量或者全局变量就行了。

global

【在 e********r 的大作中提到】
: 程序里现在需要一个很大的Matrix, 以前写的时候是放在一个文件里,每次程序执行的
: 时候现读入,这样很浪费时间,现在把整个Matrix写成一个array存在程序里作global
: variable,但是编译的时候很慢,要十几分钟的样子,而且编译出来的程序很大,请问
: 各位一般处理大的矩阵时候是如何处理的,谢谢哈.

e********r
发帖数: 2352
7
请问能详细解释一下Memory file的概念吗,没有用过,是需要安装其他系统支持吗.

【在 B**W 的大作中提到】
: 不太明白你这程序逻辑。
: 过去俺们是把大数据存在文件里,读的时候用Memory File, 就是一下子把整个文件从
: 硬盘扔进一个内存文件,然后再读内存,速度极快,因为理论上就一次磁盘IO调用。数
: 据读完了再做成静态变量或者全局变量就行了。
:
: global

H***a
发帖数: 735
8
可以考虑用并行.
b*****e
发帖数: 1193
9
做个ram disk,自己google吧
e********r
发帖数: 2352
10
这个本来就是给并行的一个节点写的,再并行一下结构太复杂了哈,谢谢建议哈.

【在 H***a 的大作中提到】
: 可以考虑用并行.
相关主题
问个循环的问题Re: How to save variables in file in MAT
问个C++读入文件的问题[转载] matlab里面移动指针pointer问题
[5个包子] 请教C/C++读取文件的遇到的问题如何用fprintf 连续写数据
进入Computation版参与讨论
e********r
发帖数: 2352
11
其实是这个程序已经写完,准备贴在网上让别人下来用的,如果不能用纯C++的方法解
决的话可能意义对俺不大,谢谢指点.

【在 b*****e 的大作中提到】
: 做个ram disk,自己google吧
r********3
发帖数: 2998
12
你以前的方法是对的。你现在的方法简直就是胡扯。
你才20,30M的文件,根本不算大。多半是你写的disk I/O写的不够好。

global

【在 e********r 的大作中提到】
: 程序里现在需要一个很大的Matrix, 以前写的时候是放在一个文件里,每次程序执行的
: 时候现读入,这样很浪费时间,现在把整个Matrix写成一个array存在程序里作global
: variable,但是编译的时候很慢,要十几分钟的样子,而且编译出来的程序很大,请问
: 各位一般处理大的矩阵时候是如何处理的,谢谢哈.

r********3
发帖数: 2998
13
你可以去查一下。现在大部分笔记本硬盘的速度,多是在30-40mbytes/s以上。也就是
说,几乎不到1秒的时间就可以读入你的Matrix。跟真正处理数据的程序比起来,你这
个30M的文件根本只能算个toy。
为什么慢,估计原因很简单,就是你程序没写好了而已。楼上扯什么ram disk,并行这
些,根本就是杀鸡用牛刀。。。
真正用mapreduce等并行处理的,都至少是上G的数据,数量级都差了2个。

global

【在 e********r 的大作中提到】
: 程序里现在需要一个很大的Matrix, 以前写的时候是放在一个文件里,每次程序执行的
: 时候现读入,这样很浪费时间,现在把整个Matrix写成一个array存在程序里作global
: variable,但是编译的时候很慢,要十几分钟的样子,而且编译出来的程序很大,请问
: 各位一般处理大的矩阵时候是如何处理的,谢谢哈.

e********r
发帖数: 2352
14
可能你说的是对的,以前的数据存在几千个文件里,每个都不大,但是I/O操作很慢,
现在做到一个文件里,可能直接读入和直接写成global的Array速度差不多,俺可以试
试,现在的结构也是用的俺以前实验室一个postdoc的程序方法,他一直把数据做成一
个很大的Array然后直接compile, 谢谢哈.

【在 r********3 的大作中提到】
: 你以前的方法是对的。你现在的方法简直就是胡扯。
: 你才20,30M的文件,根本不算大。多半是你写的disk I/O写的不够好。
:
: global

r********3
发帖数: 2998
15
如果再不行,你可以考虑使用数据库。把数据存在数据库里面。数据库系统对于disk I
/O以及内存的读写切换,基本上都是最优化的。

【在 e********r 的大作中提到】
: 可能你说的是对的,以前的数据存在几千个文件里,每个都不大,但是I/O操作很慢,
: 现在做到一个文件里,可能直接读入和直接写成global的Array速度差不多,俺可以试
: 试,现在的结构也是用的俺以前实验室一个postdoc的程序方法,他一直把数据做成一
: 个很大的Array然后直接compile, 谢谢哈.

n****n
发帖数: 59
16
maybe try serialization
y*****4
发帖数: 33
17
最土的方法:先用二进制全部直接读到内存,然后再分析。
别用cin或fscanf这种方式就可以了
j******s
发帖数: 387
18
计算的程序不要矩阵,另外写个包含矩阵并且做成service负责响应提取矩阵内容的要
求,
计算的程序需要数据的时候通过服务去取,
数据变的时候重新编译service,计算程序debug的时候重新编译计算程序

global

【在 e********r 的大作中提到】
: 程序里现在需要一个很大的Matrix, 以前写的时候是放在一个文件里,每次程序执行的
: 时候现读入,这样很浪费时间,现在把整个Matrix写成一个array存在程序里作global
: variable,但是编译的时候很慢,要十几分钟的样子,而且编译出来的程序很大,请问
: 各位一般处理大的矩阵时候是如何处理的,谢谢哈.

e********r
发帖数: 2352
19
谢谢哈.

I

【在 r********3 的大作中提到】
: 如果再不行,你可以考虑使用数据库。把数据存在数据库里面。数据库系统对于disk I
: /O以及内存的读写切换,基本上都是最优化的。

e********r
发帖数: 2352
20
请问用二进制如何操作,俺以前写的二进制文档还是用stream读入的,这和cin和
fscanf差别不大吧,谢谢指教.

【在 y*****4 的大作中提到】
: 最土的方法:先用二进制全部直接读到内存,然后再分析。
: 别用cin或fscanf这种方式就可以了

相关主题
matlab输出问题[合集] 举个例子:每天一题
[合集] 请教一段matlab程序 (转载)请问C语言fscanf的用法
[合集] 在matlab 如何 将生成的文件写到指定的目录。[合集] Matlab输出的文件怎么读进fortran?
进入Computation版参与讨论
e********r
发帖数: 2352
21
这位的方法听上去很复杂,请问能详细说一下吗,你说的数据变的时候重新编译是什么
意思,是runtime编译吗,谢谢哈

【在 j******s 的大作中提到】
: 计算的程序不要矩阵,另外写个包含矩阵并且做成service负责响应提取矩阵内容的要
: 求,
: 计算的程序需要数据的时候通过服务去取,
: 数据变的时候重新编译service,计算程序debug的时候重新编译计算程序
:
: global

r********3
发帖数: 2998
22
恩,直接memcpy的方法是快一些。不过他这个才30M的小文件,即便用fscanf也不会慢
到哪里去。

【在 y*****4 的大作中提到】
: 最土的方法:先用二进制全部直接读到内存,然后再分析。
: 别用cin或fscanf这种方式就可以了

e********r
发帖数: 2352
23
请问你的意思是俺把矩阵转成Binary file, 然后用memcpy读入? 请问能给个例子吗
? 俺读一下你的code,这样可能清楚些,谢谢哈.

【在 r********3 的大作中提到】
: 恩,直接memcpy的方法是快一些。不过他这个才30M的小文件,即便用fscanf也不会慢
: 到哪里去。

r********3
发帖数: 2998
24
FILE *fp;
int* matrix = new int[30*1024*1024];
fp=fopen("test", "rb")
fread(matrix, 30*1024*1024*sizeof(int), 1, fp)
fclose(fp);

【在 e********r 的大作中提到】
: 请问你的意思是俺把矩阵转成Binary file, 然后用memcpy读入? 请问能给个例子吗
: ? 俺读一下你的code,这样可能清楚些,谢谢哈.

n*******0
发帖数: 2002
25
呃,放在文件里很方便啊。如果你觉得慢可以试试用软件把一块内存虚拟成磁盘,然后
把文件放在ramdisk里。

global

【在 e********r 的大作中提到】
: 程序里现在需要一个很大的Matrix, 以前写的时候是放在一个文件里,每次程序执行的
: 时候现读入,这样很浪费时间,现在把整个Matrix写成一个array存在程序里作global
: variable,但是编译的时候很慢,要十几分钟的样子,而且编译出来的程序很大,请问
: 各位一般处理大的矩阵时候是如何处理的,谢谢哈.

e********r
发帖数: 2352
26
谢谢哈.

【在 r********3 的大作中提到】
: FILE *fp;
: int* matrix = new int[30*1024*1024];
: fp=fopen("test", "rb")
: fread(matrix, 30*1024*1024*sizeof(int), 1, fp)
: fclose(fp);

e********r
发帖数: 2352
27
俺也觉得是这样子,之前慢可能是数据分散在很多文件里哈.

【在 n*******0 的大作中提到】
: 呃,放在文件里很方便啊。如果你觉得慢可以试试用软件把一块内存虚拟成磁盘,然后
: 把文件放在ramdisk里。
:
: global

kx
发帖数: 16384
28
我猜他指的是不是 File Mapping ?
把文件映射到内存里去
msdn 里能查到
算基本api
不过我不懂

件从
。数

【在 e********r 的大作中提到】
: 请问能详细解释一下Memory file的概念吗,没有用过,是需要安装其他系统支持吗.
e********r
发帖数: 2352
29
谢谢提示哈.

【在 kx 的大作中提到】
: 我猜他指的是不是 File Mapping ?
: 把文件映射到内存里去
: msdn 里能查到
: 算基本api
: 不过我不懂
:
: 件从
: 。数

1 (共1页)
进入Computation版参与讨论
相关主题
请问C语言fscanf的用法大家是怎么在MATLAB里读入矩阵的?
[合集] Matlab输出的文件怎么读进fortran?问个循环的问题
matlab环境下如何建一个空文件问个C++读入文件的问题
matlab 做不规则 数据输入,求教[5个包子] 请教C/C++读取文件的遇到的问题
新手求教C++对于矩阵的操作必须是一堆for循环吗?Re: How to save variables in file in MAT
matlab高手进来看看,谢谢[转载] matlab里面移动指针pointer问题
a question about Matlab fread如何用fprintf 连续写数据
Matlab 读取文件的问题matlab输出问题
相关话题的讨论汇总
话题: 文件话题: 程序话题: c++话题: matrix话题: global