J********9 发帖数: 36508 | 1 需要处理大量数据
1.把数据写入临时binary文件 需要时读取
不过这样速度大大降低
2.用动态数组 速度大大提高 但是有virtual
memory问题 数组容量超过一定值 无论virtual
memory 设置多大都没法分配数组
请问如何解决?
谢谢 |
a*w 发帖数: 4495 | 2 换Python试试?
【在 J********9 的大作中提到】 : 需要处理大量数据 : 1.把数据写入临时binary文件 需要时读取 : 不过这样速度大大降低 : 2.用动态数组 速度大大提高 但是有virtual : memory问题 数组容量超过一定值 无论virtual : memory 设置多大都没法分配数组 : 请问如何解决? : 谢谢
|
J********9 发帖数: 36508 | 3 不会 并且代码量非常之大 换语言肯定又有其他问题
我想用Fortran的肯定迟早要遇到类似问题 不知道其他人是如何解决的
换Python试试?
【在 a*w 的大作中提到】 : 换Python试试?
|
a*****g 发帖数: 19398 | 4 机器的物理内存
操作系统提供的内存以及虚拟内存
windows 32/64
编译器
编译模式
这些东西可能都有关系
【在 J********9 的大作中提到】 : 不会 并且代码量非常之大 换语言肯定又有其他问题 : 我想用Fortran的肯定迟早要遇到类似问题 不知道其他人是如何解决的 : : 换Python试试?
|
J********9 发帖数: 36508 | 5 谢谢 64-bit的编译器 据说可以用2TB
请问一下VS Intel Fortran 如何选择64bit 编译?
机器的物理内存
操作系统提供的内存以及虚拟内存
windows 32/64
编译器
编译模式
这些东西可能都有关系
【在 a*****g 的大作中提到】 : 机器的物理内存 : 操作系统提供的内存以及虚拟内存 : windows 32/64 : 编译器 : 编译模式 : 这些东西可能都有关系
|
d***a 发帖数: 13752 | 6 到底是多大的数组呢?
【在 J********9 的大作中提到】 : 需要处理大量数据 : 1.把数据写入临时binary文件 需要时读取 : 不过这样速度大大降低 : 2.用动态数组 速度大大提高 但是有virtual : memory问题 数组容量超过一定值 无论virtual : memory 设置多大都没法分配数组 : 请问如何解决? : 谢谢
|
t*****n 发帖数: 4908 | 7 intel fortan有讨论组,你可以问问。另外数据大了,需要搞算法,不能完全依赖硬件
。难道是有限元/有限差分?
【在 J********9 的大作中提到】 : 谢谢 64-bit的编译器 据说可以用2TB : 请问一下VS Intel Fortran 如何选择64bit 编译? : : 机器的物理内存 : 操作系统提供的内存以及虚拟内存 : windows 32/64 : 编译器 : 编译模式 : 这些东西可能都有关系
|
J********9 发帖数: 36508 | 8 要根据输入的raw文件定啊
到底是多大的数组呢?
【在 d***a 的大作中提到】 : 到底是多大的数组呢?
|
J********9 发帖数: 36508 | 9 计算其实很简单的 真不需要啥算法
主要过程是把raw文件(一个或多个)处理成(x,y,c) 这一步要么是把x,y,c写入
direct access binary文件;要么是写入数组。然后根据输入的(x,y)寻找相应的c (
简单的插值)
写入binary文件 永远不会有问题,就是慢
如果直接用循环从raw文件里面找相应的x,y,然后得到c 更加慢
intel fortan有讨论组,你可以问问。另外数据大了,需要搞算法,不能完全依赖硬件
。难道是有限元/有限差分?
【在 t*****n 的大作中提到】 : intel fortan有讨论组,你可以问问。另外数据大了,需要搞算法,不能完全依赖硬件 : 。难道是有限元/有限差分?
|
a*****g 发帖数: 19398 | 10 我也感觉要考虑一些算法
【在 J********9 的大作中提到】 : 计算其实很简单的 真不需要啥算法 : 主要过程是把raw文件(一个或多个)处理成(x,y,c) 这一步要么是把x,y,c写入 : direct access binary文件;要么是写入数组。然后根据输入的(x,y)寻找相应的c ( : 简单的插值) : 写入binary文件 永远不会有问题,就是慢 : 如果直接用循环从raw文件里面找相应的x,y,然后得到c 更加慢 : : intel fortan有讨论组,你可以问问。另外数据大了,需要搞算法,不能完全依赖硬件 : 。难道是有限元/有限差分?
|
|
|
t*****n 发帖数: 4908 | 11 多少数据量?排序了吗?直接上数据库吧
【在 J********9 的大作中提到】 : 计算其实很简单的 真不需要啥算法 : 主要过程是把raw文件(一个或多个)处理成(x,y,c) 这一步要么是把x,y,c写入 : direct access binary文件;要么是写入数组。然后根据输入的(x,y)寻找相应的c ( : 简单的插值) : 写入binary文件 永远不会有问题,就是慢 : 如果直接用循环从raw文件里面找相应的x,y,然后得到c 更加慢 : : intel fortan有讨论组,你可以问问。另外数据大了,需要搞算法,不能完全依赖硬件 : 。难道是有限元/有限差分?
|
x*******a 发帖数: 11067 | |
m*******1 发帖数: 58 | 13 还是应该考虑算法的改进。
另外,数据量太大时, 可以考虑利用多线程处理建立一个缓冲, 分块处理数据。一个
线程处理当前数据时,另外的线程去读取将要处理的数据到内存。 |
m*******l 发帖数: 12782 | 14 静态的不能太大吧
【在 x*******a 的大作中提到】 : io不可能的。直接定义静态数组可不可以?
|
l*********s 发帖数: 5409 | 15 agree.
【在 m*******1 的大作中提到】 : 还是应该考虑算法的改进。 : 另外,数据量太大时, 可以考虑利用多线程处理建立一个缓冲, 分块处理数据。一个 : 线程处理当前数据时,另外的线程去读取将要处理的数据到内存。
|
a*****g 发帖数: 19398 | 16 把事情搞复杂了,多线程编程都进来了
一个
【在 l*********s 的大作中提到】 : agree.
|
J********9 发帖数: 36508 | 17 多的时候有个10G左右 取决于raw文件量
不需要排序 但是必须记住每个(x y c)record的index 然后可以按址寻值
数据库是怎么回事?没用过啊
多少数据量?排序了吗?直接上数据库吧
【在 t*****n 的大作中提到】 : 多少数据量?排序了吗?直接上数据库吧
|
J********9 发帖数: 36508 | 18 静态数据可定不成啊 动态的现在都有问题
io不可能的。直接定义静态数组可不可以?
【在 x*******a 的大作中提到】 : io不可能的。直接定义静态数组可不可以?
|
J********9 发帖数: 36508 | 19 其实我现在用的就是MPICH2
貌似 用MPICH2用的内存更多 比方说我用8线程做会出现VirtrualMemory问题 4线程就
没有
我现在要考虑的问题是:内存问题 (数据上限);速度问题
1.数据写入文件:多线程同时读取同一个文件 很慢很慢
2. 数据写入数组:可以多线程同时处理 但是有内存问题;如果一个线程处理,另外线
程读取,线程间交互也慢
还是应该考虑算法的改进。
另外,数据量太大时, 可以考虑利用多线程处理建立一个缓冲, 分块处理数据。一个
线程处理当前数据时,另外的线程去读取将要处理的数据到内存。
【在 m*******1 的大作中提到】 : 还是应该考虑算法的改进。 : 另外,数据量太大时, 可以考虑利用多线程处理建立一个缓冲, 分块处理数据。一个 : 线程处理当前数据时,另外的线程去读取将要处理的数据到内存。
|
l*********s 发帖数: 5409 | 20 read/write files in chunks to reduce contentions. if you don't want to write
code, you could consider in-task database.
【在 J********9 的大作中提到】 : 其实我现在用的就是MPICH2 : 貌似 用MPICH2用的内存更多 比方说我用8线程做会出现VirtrualMemory问题 4线程就 : 没有 : 我现在要考虑的问题是:内存问题 (数据上限);速度问题 : 1.数据写入文件:多线程同时读取同一个文件 很慢很慢 : 2. 数据写入数组:可以多线程同时处理 但是有内存问题;如果一个线程处理,另外线 : 程读取,线程间交互也慢 : : 还是应该考虑算法的改进。 : 另外,数据量太大时, 可以考虑利用多线程处理建立一个缓冲, 分块处理数据。一个
|
|
|
f****p 发帖数: 18483 | 21 这个问题没有简单的解,除非你用64G或更大的内存。
你自己写个分配内存的daemon。处理数据的部分算是client,用统一接口。那个内存
daemon通过IPC和client通信。由这个daemon决定什么部分对换到临时文件,什么样的
内存块给client。不过内存只能作为shared memory分配。所以,当linux启动时,你可
能得告诉kernel预留多大内存作为可用的shared memory。
【在 J********9 的大作中提到】 : 需要处理大量数据 : 1.把数据写入临时binary文件 需要时读取 : 不过这样速度大大降低 : 2.用动态数组 速度大大提高 但是有virtual : memory问题 数组容量超过一定值 无论virtual : memory 设置多大都没法分配数组 : 请问如何解决? : 谢谢
|
a******1 发帖数: 47 | 22 1 换大内存机器
2 database
【在 J********9 的大作中提到】 : 其实我现在用的就是MPICH2 : 貌似 用MPICH2用的内存更多 比方说我用8线程做会出现VirtrualMemory问题 4线程就 : 没有 : 我现在要考虑的问题是:内存问题 (数据上限);速度问题 : 1.数据写入文件:多线程同时读取同一个文件 很慢很慢 : 2. 数据写入数组:可以多线程同时处理 但是有内存问题;如果一个线程处理,另外线 : 程读取,线程间交互也慢 : : 还是应该考虑算法的改进。 : 另外,数据量太大时, 可以考虑利用多线程处理建立一个缓冲, 分块处理数据。一个
|
t*****n 发帖数: 4908 | 23 10G的文件切成100份就100M一个吧。如果能排序的话就容易多了。你这个问题拼硬件,
搞多线程是无解的。肯定要对raw data预先处理一下。直接处理太暴力了吧。
【在 J********9 的大作中提到】 : 多的时候有个10G左右 取决于raw文件量 : 不需要排序 但是必须记住每个(x y c)record的index 然后可以按址寻值 : 数据库是怎么回事?没用过啊 : : 多少数据量?排序了吗?直接上数据库吧
|
j****x 发帖数: 943 | 24 用数据库吧,比如sqlite3, 还可以多线程同时读写同一个数据库文件。 |
b******1 发帖数: 40 | 25 外行弱弱地问一句,他这个问题主要是大数据量导致的内存和IO问题吧,database怎么
解决这个问题?
【在 a******1 的大作中提到】 : 1 换大内存机器 : 2 database
|
J********9 发帖数: 36508 | 26 不错不错 总结的不错
我也是database的解决方案想不明白啊 没用过
外行弱弱地问一句,他这个问题主要是大数据量导致的内存和IO问题吧,database怎么
解决这个问题?
【在 b******1 的大作中提到】 : 外行弱弱地问一句,他这个问题主要是大数据量导致的内存和IO问题吧,database怎么 : 解决这个问题?
|
a******1 发帖数: 47 | 27 你如果用的是MPICH2 或者openmpi,那么很多数据库的读写是支持parrallel I/O的(
可能需要HDFS的支持)。至于你提到你用4个线程可以,8个线程就不行,是不是因为你
每个node只有4个CPU,而你的code只支持shared memory,不支持distributed memory?
【在 J********9 的大作中提到】 : 不错不错 总结的不错 : 我也是database的解决方案想不明白啊 没用过 : : 外行弱弱地问一句,他这个问题主要是大数据量导致的内存和IO问题吧,database怎么 : 解决这个问题?
|
J********9 发帖数: 36508 | 28 谢谢回复 关于数据库的 很多问题我还弄不清 我需要做些research
我刚开始只在主机上测试 主机有8个CPU 用4个run的时候可以 8个的时候就有memory问
题了
关于MPICH2如何使用内存 我也不是很清楚:
比如说 没有并行运算 需要内存256M 是不是MPICH2的时候每个CPU都需要256M? 这样4
个就1024M 8个就2048M?
你如果用的是MPICH2 或者openmpi,那么很多数据库的读写是支持parrallel I/O的(
可能需要HDFS的支持)。至于你提到你用4个线程可以,8个线程就不行,是不是因为你
每个node只有4个CPU,而你的code只支持shared memory,不支持distributed memory?
【在 a******1 的大作中提到】 : 你如果用的是MPICH2 或者openmpi,那么很多数据库的读写是支持parrallel I/O的( : 可能需要HDFS的支持)。至于你提到你用4个线程可以,8个线程就不行,是不是因为你 : 每个node只有4个CPU,而你的code只支持shared memory,不支持distributed memory?
|
a******1 发帖数: 47 | 29 你的出错信息是啥?难道是因为编译的时候不支持>2G的数组?
样4
memory?
【在 J********9 的大作中提到】 : 谢谢回复 关于数据库的 很多问题我还弄不清 我需要做些research : 我刚开始只在主机上测试 主机有8个CPU 用4个run的时候可以 8个的时候就有memory问 : 题了 : 关于MPICH2如何使用内存 我也不是很清楚: : 比如说 没有并行运算 需要内存256M 是不是MPICH2的时候每个CPU都需要256M? 这样4 : 个就1024M 8个就2048M? : : 你如果用的是MPICH2 或者openmpi,那么很多数据库的读写是支持parrallel I/O的( : 可能需要HDFS的支持)。至于你提到你用4个线程可以,8个线程就不行,是不是因为你 : 每个node只有4个CPU,而你的code只支持shared memory,不支持distributed memory?
|
J********9 发帖数: 36508 | 30 编译没有问题
运行的时候显示 insuffient virtual memory
debug的时候 发现是动态数据allocate时出的错
你的出错信息是啥?难道是因为编译的时候不支持>2G的数组?
样4
memory?
【在 a******1 的大作中提到】 : 你的出错信息是啥?难道是因为编译的时候不支持>2G的数组? : : 样4 : memory?
|
|
|
t*****n 发帖数: 4908 | 31 google T级的数据不会都在内存里面吧?
【在 J********9 的大作中提到】 : 不错不错 总结的不错 : 我也是database的解决方案想不明白啊 没用过 : : 外行弱弱地问一句,他这个问题主要是大数据量导致的内存和IO问题吧,database怎么 : 解决这个问题?
|
a******1 发帖数: 47 | 32 memory leakage, 我不熟悉windows,只能冒失地猜一下了
1。如果是fortran95以前的版本,检查一下是不是每次allocate以后都deallocate了
2。32-bit的编译器有可能会对virtual memory的使用有一个2G的限制。
【在 J********9 的大作中提到】 : 编译没有问题 : 运行的时候显示 insuffient virtual memory : debug的时候 发现是动态数据allocate时出的错 : : 你的出错信息是啥?难道是因为编译的时候不支持>2G的数组? : 样4 : memory?
|
J********9 发帖数: 36508 | 33 谢谢楼上各位
我先尝试一下64-bit编译器 记录并读取动态数组
然后研究一下多线程记录数据到临时binary文件 多线程读取
最后要是再不行 再弄弄数据库 |
t*****n 发帖数: 4908 | 34 能排序先排序吧。老师没讲过?
【在 J********9 的大作中提到】 : 谢谢楼上各位 : 我先尝试一下64-bit编译器 记录并读取动态数组 : 然后研究一下多线程记录数据到临时binary文件 多线程读取 : 最后要是再不行 再弄弄数据库
|
J********9 发帖数: 36508 | 35 不是CS科班出身的 google+自己啃 没办法啊
其实无论是用动态数组还是临时文件 每一个数据我都会记录一个index以方便查找
这个不知道是不是类似你说的排序呢
能排序先排序吧。老师没讲过?
【在 t*****n 的大作中提到】 : 能排序先排序吧。老师没讲过?
|
J********9 发帖数: 36508 | 36 update一下
32-bit的Fortran编译器最多用4G内存 (还是2G?)
今天用了64-bit Fortran编译(可用内存up to 2 T) +增加RAM+增加Virtual Memory
解决了问题
不是CS科班出身的 google+自己啃 没办法啊
其实无论是用动态数组还是临时文件 每一个数据我都会记录一个index以方便查找
这个不知道是不是类似你说的排序呢
能排序先排序吧。老师没讲过?
【在 J********9 的大作中提到】 : 不是CS科班出身的 google+自己啃 没办法啊 : 其实无论是用动态数组还是临时文件 每一个数据我都会记录一个index以方便查找 : 这个不知道是不是类似你说的排序呢 : : 能排序先排序吧。老师没讲过?
|
a*****g 发帖数: 19398 | 37 哈哈——那应该給我发包子
Memory
【在 J********9 的大作中提到】 : update一下 : 32-bit的Fortran编译器最多用4G内存 (还是2G?) : 今天用了64-bit Fortran编译(可用内存up to 2 T) +增加RAM+增加Virtual Memory : 解决了问题 : : 不是CS科班出身的 google+自己啃 没办法啊 : 其实无论是用动态数组还是临时文件 每一个数据我都会记录一个index以方便查找 : 这个不知道是不是类似你说的排序呢 : 能排序先排序吧。老师没讲过?
|
J********9 发帖数: 36508 | 38 恩 好
笨人只能提高硬件了
老板基本同意上 64-bit machine 加内存 弄cluster 开搞了
【在 a*****g 的大作中提到】 : 哈哈——那应该給我发包子 : : Memory
|
a*****g 发帖数: 19398 | 39 包子受到。多谢啦
【在 J********9 的大作中提到】 : 恩 好 : 笨人只能提高硬件了 : 老板基本同意上 64-bit machine 加内存 弄cluster 开搞了
|
J********9 发帖数: 36508 | 40 再问个问题
64-bit编译出来的 貌似比 32-bit编译出来的慢一点点 啥原因啊
包子受到。多谢啦
【在 a*****g 的大作中提到】 : 包子受到。多谢啦
|
|
|
a*****g 发帖数: 19398 | 41 嗳哟大兄弟啊——
别说是 x64 和 x32 编译出来结果不一样
就算你都是 X32,运行的时候如果 CPU 还算了 Pi,那结果也不一样呢
开玩笑拉!
64位的东西,好多东西都大了一倍,速度有变化也是很正常的啊
【在 J********9 的大作中提到】 : 再问个问题 : 64-bit编译出来的 貌似比 32-bit编译出来的慢一点点 啥原因啊 : : 包子受到。多谢啦
|