由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 请教一个排序的问题。
相关主题
PC 9-bit Serial Communication如何实现回goodbug,关于DC的failover策略,兼普及基础知识
32/64编程怎么做才好呢菜鸟问个node.js问题
一道面试题node里,async.waterfall async.auto 大家用的多么?总感觉怪怪的
Restaurant Reservation System...12306仍然一塌糊涂
[合集] 请问用Python做GUI如何关于抢票鸡的 scale out
Pthread一个牵涉两个线程同步,每轮先串行后并行的问题普通TCP还是HTTP?
openmp并行计算疑问C里的int和long有区别吗
求建议:商业数据使用混合体系怎么编程?
相关话题的讨论汇总
话题: 64话题: 1024话题: 排序话题: 程序话题: mpi
进入Programming版参与讨论
1 (共1页)
x*******r
发帖数: 6
1
我的程序是fortran(77/90),程序中需要对一个很大的数组(size=1024*1024*1024)进
行排序(实际我只是要找到the Mth largest的那个数相应的数值).
我手边有Numerical Recipe的一些排序的子程序可用,我尝试用了其中的select.f(
select the Mth largest).当我的array size不是很大时(512*512*512),结果很正确
,但是数组大到size=1024*1024*1024结果就不对了。
请问:有什么排序的子程序可以给这个大尺寸的数组排序?
或者,如果有fortran mpi并行的排序程序也可以。
非常非常感谢您的指点!
t****t
发帖数: 6806
2
什么类型的数据?什么系统?什么编译器?
有一个问题是要注意的,就是1024*1024*1024正好是1G,如果算上数据类型,可能会超过
4G.所以首先你必须用64位的系统,其次64位系统的整数仍然是32位,所以有可能这个会
是问题.我对fortran不太了解,所以不能帮忙.

【在 x*******r 的大作中提到】
: 我的程序是fortran(77/90),程序中需要对一个很大的数组(size=1024*1024*1024)进
: 行排序(实际我只是要找到the Mth largest的那个数相应的数值).
: 我手边有Numerical Recipe的一些排序的子程序可用,我尝试用了其中的select.f(
: select the Mth largest).当我的array size不是很大时(512*512*512),结果很正确
: ,但是数组大到size=1024*1024*1024结果就不对了。
: 请问:有什么排序的子程序可以给这个大尺寸的数组排序?
: 或者,如果有fortran mpi并行的排序程序也可以。
: 非常非常感谢您的指点!

k****f
发帖数: 3794
3
第n个大小的算法不需要排序的。看看stl的nth_element怎么实现吧
一般是线性复杂度的算法。

【在 x*******r 的大作中提到】
: 我的程序是fortran(77/90),程序中需要对一个很大的数组(size=1024*1024*1024)进
: 行排序(实际我只是要找到the Mth largest的那个数相应的数值).
: 我手边有Numerical Recipe的一些排序的子程序可用,我尝试用了其中的select.f(
: select the Mth largest).当我的array size不是很大时(512*512*512),结果很正确
: ,但是数组大到size=1024*1024*1024结果就不对了。
: 请问:有什么排序的子程序可以给这个大尺寸的数组排序?
: 或者,如果有fortran mpi并行的排序程序也可以。
: 非常非常感谢您的指点!

x*******r
发帖数: 6
4
数据类型:REAL (single precision)
我的程序是MPI fortran90,用的机器是IBM p690
编译:mpxlf90 (Fortran MPI Compiler),我在编译选项里加了-q64(Enables 64 bit
compilation)
程序里sorting这部分实际上还是串行程序,我把整个数据都集中到一个processor(每
个processor是8G内存)上来算。
再请教一个问题:我是个编程新手,一直不太明白64位/32位的系统的含义,像您说的
“64位系统的整数仍然是32位”,我就不太明白是什么意思?
以前搜索过,看到有人提到32位系统无法对2G以上寻址,所以像我处理的这种4G的就需
要64位。我就生愣愣的在我原先的编译命令上加了一个-q64。但是,我很想知道如果用
64位编译,我的程序需要做什么相应的变化吗?还有,这个32位/64位和精度有什么关
系吗?
再次感谢!

【在 t****t 的大作中提到】
: 什么类型的数据?什么系统?什么编译器?
: 有一个问题是要注意的,就是1024*1024*1024正好是1G,如果算上数据类型,可能会超过
: 4G.所以首先你必须用64位的系统,其次64位系统的整数仍然是32位,所以有可能这个会
: 是问题.我对fortran不太了解,所以不能帮忙.

P*****f
发帖数: 2272
5
目前64位系统中的标准是LP64,即:
int:32bit
long:64bit
pointer:64bit

数据类型:REAL (single precision)
我的程序是MPI fortran90,用的机器是IBM p690
编译:mpxlf90 (Fortran MPI Compiler),我在编译选项里加了-q64(Enables 64 bit
compilation)
程序里sorting这部分实际上还是串行程序,我把整个数据都集中到一个processor(每
个processor是8G内存)上来算。
再请教一个问题:我是个编程新手,一直不太明白64位/32位的系统的含义,像您说的
“64位系统的整数仍然是32位”,我就不太明白是什么意思?
以前搜索过,看到有人提到32位系统无法对2G以上寻址,所以像我处理的这种4G的就需
要64位。我就生愣愣的在我原先的编译命令上加了一个-q64。但是,我很想知道如果用
64位编译,我的程序需要做什么相应的变化吗?还有,这个32位/64位和精度有什么关
系吗?
再次感谢!

【在 x*******r 的大作中提到】
: 数据类型:REAL (single precision)
: 我的程序是MPI fortran90,用的机器是IBM p690
: 编译:mpxlf90 (Fortran MPI Compiler),我在编译选项里加了-q64(Enables 64 bit
: compilation)
: 程序里sorting这部分实际上还是串行程序,我把整个数据都集中到一个processor(每
: 个processor是8G内存)上来算。
: 再请教一个问题:我是个编程新手,一直不太明白64位/32位的系统的含义,像您说的
: “64位系统的整数仍然是32位”,我就不太明白是什么意思?
: 以前搜索过,看到有人提到32位系统无法对2G以上寻址,所以像我处理的这种4G的就需
: 要64位。我就生愣愣的在我原先的编译命令上加了一个-q64。但是,我很想知道如果用

x*******r
发帖数: 6
6
谢谢!那么我程序里的变量都是单精度的,在64位系统里运行会有什么问题吗?

【在 P*****f 的大作中提到】
: 目前64位系统中的标准是LP64,即:
: int:32bit
: long:64bit
: pointer:64bit
:
: 数据类型:REAL (single precision)
: 我的程序是MPI fortran90,用的机器是IBM p690
: 编译:mpxlf90 (Fortran MPI Compiler),我在编译选项里加了-q64(Enables 64 bit
: compilation)
: 程序里sorting这部分实际上还是串行程序,我把整个数据都集中到一个processor(每

t****t
发帖数: 6806
7
把你sort的子程序贴来看看吧.

【在 x*******r 的大作中提到】
: 数据类型:REAL (single precision)
: 我的程序是MPI fortran90,用的机器是IBM p690
: 编译:mpxlf90 (Fortran MPI Compiler),我在编译选项里加了-q64(Enables 64 bit
: compilation)
: 程序里sorting这部分实际上还是串行程序,我把整个数据都集中到一个processor(每
: 个processor是8G内存)上来算。
: 再请教一个问题:我是个编程新手,一直不太明白64位/32位的系统的含义,像您说的
: “64位系统的整数仍然是32位”,我就不太明白是什么意思?
: 以前搜索过,看到有人提到32位系统无法对2G以上寻址,所以像我处理的这种4G的就需
: 要64位。我就生愣愣的在我原先的编译命令上加了一个-q64。但是,我很想知道如果用

x*******r
发帖数: 6
8

================================
总共有nx*ny*nz个数,这些数放在变量arr里,变量arr在module FIELD里。我要挑出第
kk大那个数,并把这个值赋给yy.
我编译用的是:mpxlf90_r -qsuffix=f=f90 -q64 -o 。。。。。。
(虽然主程序是MPI的,但是call这个select函数只是在一个processor里,所以这部分
和串行一样)

【在 t****t 的大作中提到】
: 把你sort的子程序贴来看看吧.
t****t
发帖数: 6806
9
我想不用了,你就把select.f里所有integer改成integer*8就好了.
当然,你自己的主程序里也应该有相同的类型.

【在 t****t 的大作中提到】
: 把你sort的子程序贴来看看吧.
t****t
发帖数: 6806
10
我google了一下,也找到了这个程序.我没有用过power pc的CPU,但是我想可能是由于编
译器的问题,如果你的array index是32位,那产生的access也是+/-2GB的.你用integer
当index是刚好够,但是*4就不够了.如果你用64位的index,那么access应该是全部64位
的,就没问题了.
所以说你主程序里也要把index改成64位的才好.

【在 x*******r 的大作中提到】
:
: ================================
: 总共有nx*ny*nz个数,这些数放在变量arr里,变量arr在module FIELD里。我要挑出第
: kk大那个数,并把这个值赋给yy.
: 我编译用的是:mpxlf90_r -qsuffix=f=f90 -q64 -o 。。。。。。
: (虽然主程序是MPI的,但是call这个select函数只是在一个processor里,所以这部分
: 和串行一样)

x*******r
发帖数: 6
11
非常感谢thrust!
我水平很低,但是大概能明白你的意思。
我是不是只需要将主程序,子程序里相关的整数由integer*4 变为integer*8,而实数
还是Real*4不用变就可以了?

integer

【在 t****t 的大作中提到】
: 我google了一下,也找到了这个程序.我没有用过power pc的CPU,但是我想可能是由于编
: 译器的问题,如果你的array index是32位,那产生的access也是+/-2GB的.你用integer
: 当index是刚好够,但是*4就不够了.如果你用64位的index,那么access应该是全部64位
: 的,就没问题了.
: 所以说你主程序里也要把index改成64位的才好.

t****t
发帖数: 6806
12
是这个意思.

【在 x*******r 的大作中提到】
: 非常感谢thrust!
: 我水平很低,但是大概能明白你的意思。
: 我是不是只需要将主程序,子程序里相关的整数由integer*4 变为integer*8,而实数
: 还是Real*4不用变就可以了?
:
: integer

x*******r
发帖数: 6
13
再次感谢thrust!
等出了结果,我再上来更新。

【在 t****t 的大作中提到】
: 是这个意思.
l****n
发帖数: 727
14
我也很仰慕thrust....
//狂学习C++中

【在 x*******r 的大作中提到】
: 非常感谢thrust!
: 我水平很低,但是大概能明白你的意思。
: 我是不是只需要将主程序,子程序里相关的整数由integer*4 变为integer*8,而实数
: 还是Real*4不用变就可以了?
:
: integer

1 (共1页)
进入Programming版参与讨论
相关主题
混合体系怎么编程?[合集] 请问用Python做GUI如何
c++书籍下载@MEGAUPLOAD(primer相关,interview exposed, effecPthread一个牵涉两个线程同步,每轮先串行后并行的问题
怎样让VC++程序获知外部事件?openmp并行计算疑问
你们谁去劝一下goodbug要点脸?求建议:商业数据使用
PC 9-bit Serial Communication如何实现回goodbug,关于DC的failover策略,兼普及基础知识
32/64编程怎么做才好呢菜鸟问个node.js问题
一道面试题node里,async.waterfall async.auto 大家用的多么?总感觉怪怪的
Restaurant Reservation System...12306仍然一塌糊涂
相关话题的讨论汇总
话题: 64话题: 1024话题: 排序话题: 程序话题: mpi