草庐IT

haskell-mpi

全部标签

Haskell http-conduit web-scraping daemon 崩溃并出现内存不足错误

我在Haskell中编写了一个守护程序,它每5分钟从网页中抓取一次信息。该守护程序最初运行了大约50分钟,但随后因内存不足(请求1048576字节)而意外死亡。每次我运行它时,它都会在相同的时间后死亡。将其设置为仅休眠30秒,它反而在8分钟后死亡。我意识到抓取网站的代码非常低效(从sleep时的大约30M到解析9M的html时的250M),所以我重写了它,现在它在解析时只使用了大约15M的额外内存。以为问题已解决,我连夜运行守护程序,当我醒来时,它实际上使用的内存比那天晚上少。我以为我已经完成了,但在它启动大约20小时后,它又因同样的错误而崩溃。我开始研究ghc分析,但我无法让它发挥作

memory - MPI Fortran 代码 : how to share data on node via openMP?

我正在编写一个已经使用MPI的Fortan代码。现在,我面临一种情况,一组数据增长得非常大,但每个进程都相同,所以我希望每个节点只将它存储在内存中一次,并且一个节点上的所有进程都访问相同的数据。为每个进程存储一次会超出可用RAM。是否有可能使用openMP实现类似的目标?每个节点的数据共享是我唯一想要的,不需要其他每个节点的并行化,因为这已经通过MPI完成。 最佳答案 如果仅用于共享数据block,则无需实现混合MPI+OpenMP代码。你实际上要做的是:1)将世界通信器分成跨越同一主机/节点的组。如果你的MPI库实现了MPI-3.

performance - Haskell 的局部属性是什么?

现代CPU已经过优化,因此访问和修改内存中的同一位置(时间局部性)以及内存中的连续位置(空间局部性)是非常快速的操作。现在,由于Haskell是一种纯粹不可变的语言,你自然不能覆盖现有的内存块,这可能会使像foldl这样的东西比带有a的for循环慢得多连续访问的结果变量将在C中。Haskell是否在内部采取任何措施来减轻这种性能损失?总的来说,它关于局部性的属性是什么? 最佳答案 一般规则是,对于“普通”Haskell编程,您几乎无法(如果有的话)控制内存布局和内存位置。但是,确实存在许多允许此类控制的更高级功能,以及在这些功能之上

haskell - 检查haskell中的内存使用情况

我正在创建一个实现某种缓存的程序。我需要使用尽可能多的内存,为此我需要做两件事:检查系统中仍有多少可用内存(仅限RAM,而非SWAP)检查我的应用已经使用了多少内存。我需要一个独立于平台的解决方案(Linux、Windows等)。使用这两条信息,我将减小或放大缓存的大小。如何在Haskell中获取这些信息?有没有可以提供这些信息的软件包? 最佳答案 我无法立即看到如何以便携方式执行此操作。但是,GHC确实有“弱指针”。(请参阅System.Mem.Weak。)如果您创建项目并通过弱指针(仅)卡在它们上,那么垃圾收集器将自动开始删除项

c++ - C++/Haskell 中的精确算术和惰性列表性能

在阅读thispaper后,我最近遇到了精确实数运算这一主题。和thispaper.我找到了许多讨论使用有符号数字流实现精确算术的论文。对任意精度使用无限流可以在函数式语言(如Haskell)中使用惰性列表实现很好的实际实现。但是,讨论函数式语言中此类实现的论文似乎得出的结论是性能非常差。现在,我意识到与标准浮点表示相比,精确的非硬件实现通常具有相对较差的性能,但我有兴趣以命令式语言(特别是C++)和运算/函数的集合(算术运算、三角函数、exp、log等)。我的问题:有符号数字/惰性流表示是否存在固有的缓慢导致性能不佳的问题,还是Haskell?是什么让它变慢?是否有可能在C++中使用

c++ - 将 C 库与 Haskell 库静态链接

我有一个旨在创建一些C++绑定(bind)的Haskell项目。我已经编写了C包装器并将它们编译成一个独立的静态链接库。我想编写Haskell绑定(bind)以静态链接到C包装器,这样我就不必单独分发C包装器,但我似乎无法让它工作并希望得到一些帮助。我将C库指定为额外库,但我的cabalbuildstep似乎没有将其添加到编译命令中。我创建了一个小项目来说明这一点(http://github.com/deech/CPlusPlusBindings)。它包含一个小的C++类(https://github.com/deech/CPlusPlusBindings/tree/master/cp

c++ - 如何使用 MPI_Type_create_subarray?

很明显,它的论点是:intMPI_Type_create_subarray(intndims,intarray_of_sizes[],intarray_of_subsizes[],intarray_of_starts[],intorder,MPI_Datatypeoldtype,MPI_Datatype*newtype);但是,我无法理解此方法如何接收我们要拆分的原始数组以及它返回新子数组的位置(因为此方法应返回一个整数)。换句话说,我只是想看看这个方法在C++中的简单实现,我在网上找不到。 最佳答案 MPI_Type_create

c++ - Haskell 可以像 Clang/GCC 一样优化函数调用吗?

我想问一下Haskell和C++编译器是否可以以相同的方式优化函数调用。请看下面的代码。在以下示例中,Haskell比C++快得多。我听说Haskell可以编译到LLVM并且可以通过LLVMchannel进行优化。此外,我听说Haskell在后台进行了一些重大优化。但是以下示例应该能够以相同的性能工作。我想问:为什么我在C++中的示例基准比在Haskell中慢?是否可以进一步优化代码?(我使用的是LLVM-3.2和GHC-7.6)。C++代码:#include#includeintb(constintx){returnx+5;}intc(constintx){returnb(x)+1;

c++ - 使用 haskell 构建动态库并在 C++ 中使用它

我想构建一个包含haskell函数的动态库。我在linux上工作,想从C++代码中调用这个动态库。我使用了http://wiki.python.org/moin/PythonVsHaskell的示例并有以下文件:Test.hs:{-#LANGUAGEForeignFunctionInterface#-}moduleTestwhereimportForeign.C.Typeshsfun::CInt->IOCInthsfunx=doputStrLn"HelloWorld"return(42+x)foreignexportccallhsfun::CInt->IOCIntmodule_init

c++ - 使用 MPI 通过命令行传递参数

我正在使用MPI调用来使用c++在多个进程上运行一个过程。我的Main函数中的前几行如下所示:intmain(intargc,char*argv[]){intcomm_sz;intmy_rank;MPI_Init(&argc,&argv);MPI_Comm_size(MPI_COMM_WORLD,&comm_sz);MPI_Comm_rank(MPI_COMM_WORLD,&my_rank);x=atoi(argv[4]);y=atoi(argv[5]);现在当我使用执行和运行我的程序时mpiexec-n1program1010我希望为x和y分配值10和10,因为它们是传递的第4和第5