收集有关并行计算,并发设计和地理计算的相关资料进行汇总,方便自己学习查看。资料分为六个部分:
- 第一部分:地理信息科学总论,讨论地理信息科学的内容;
- 第二部分:地理计算,有关GDAL/OGR等的资料;
- 第三部分:并行计算,为高性能计算部分,有关并行、并发、MPI等资料;
- 第四部分:高性能地理计算,收集整理高性能地理计算部分;
- 第五部分:业界最新发展方向,为业界最新发展方向;
- 第六部分:云计算和大数据,为业界的动态;
- 第七部分:当前实验进展,为当前实验进展;
源文件visio格式
- 第一界:GIS的理论研究
- 第二界:GIS的技术开发
- 第三界:GIS的应用实践
- 定性
- 定量
- 定位(空间分析)
- 定期(时序分析)
- 定时(典型调查与总体特征分析)
人类依靠地理能怎样认识地球?
- mapserver
- geocloud2,A complete platform for managing geospatial data, making map visualisations and creating applications. Built on the best open source and standard based software.
- opengoe-suite, Build great maps and apps with the geospatial power of our standards-based platform.
- geoserver,is an open source software server written in Java that allows users to share and edit geospatial data.
- geomoose,is a Web Client JavaScript Framework for displaying distributed cartographic data that built upon other open source projects MapServer,OpenLayers and Dojo Toolkit.
- geonode. Open Source Geospatial Content Management System.
- mapzen,一系列开源库,帮助你构建自己的地图系统。
- mapbox,新一代的地图工具。
- cartodb
- openlayers
- leaflet
包括一些有关并行的程序库和文档资料。
- 第一条:并行算法只能在并行计算机上运行
- 第二条:并行算法处理的数据,串行算法没有办法处理
- 第三条:并行算法不一定比串行算法快
这是我的判断图。
源文件visio格式
当前最新的计算机语言,几乎都把并发当成语言内置的支持,这对并行计算影响很大。
- Cobra 语言设计很有意思将测试和契约设计思想融入语言的设计中,值得学习。
如何设计一门自已的程序语言,有以下库可以帮助你:
我自己的语言正在设计中,参见YAPL。
- ltsmin.中有一个有关mpi的事件机制的循环.可以学习。
- casablance.该库中有一个线程实现库叫
pplx,跨平台实现,可以参考API的设计 - Ray.mpi为基础的并行计算库
- theron.该库有设计并行的实现
- mpi-rpc
- zht-mpi
- SObjectizer.The SObjectizer is a framework for agent-oriented programming in C++.
- caf,该库有设计actor的实现
- TBB,Intel Threading Building Blocks
- libprocess.process之间的actor风格的库
- actor-cpp.An implementation of the actor model for C++.
- libactor.Actor Model Library for C.
- Channel.Name Space Based C++ Framework For Asynchronous, Distributed Message Passing and Event Dispatching.
- C++CSP2.Easy Concurrency for C++.
- concurrencykit,高并发库。
- libconcurrency
- libtask
- state-threads.线程级的库实现,这里有一些文档。
- chan,纯c实现在channel库
- libcoro.一个并发库
- libev.一个事件库
- mapreduce c++
- skynet.风云的博客中有一个关于工业级的使用,多进程和多线程,还有嵌入式脚本,博客的内容在这里。
- fibjs.其中有多个类库,可以学习
- hpx.一个分布式计算框架,可以看看构架
- neu.另一分布式计算框架,可以看看构架
- meguro[Javascript].A Javascript Map/Reduce framework
- Disco[python].a lightweight, open-source framework for distributed computing based on the MapReduce paradigm.
- mrjob,Run MapReduce jobs on Hadoop or Amazon Web Services.
- jug, A Task-Based Parallelization Framework.
- GraphLab
- MapReduce for C(MR4C),目的是为了优化其地理空间数据及计算机视觉代码库。
- GeoKettle is a powerful, metadata-driven Spatial ETL tool dedicated to the integration of different spatial data sources for building and updating geospatial data warehouses. download
- HPX ,A general purpose C++ runtime system for parallel and distributed applications of any scale.
- dask,Dask provides multi-core execution on larger-than-memory datasets using blocked algorithms and task scheduling.
- 序列化
- 杂项
- 还有很多关于facebook和google开源的项目都可以学习
- mpi doc,这里面有对每一个mpi函数示例,非常详细。
- mpi相关练习
- The Auto Macro: A Clean Approach to C++ Error Handling
- C++ resources
- awesome-cpp
- 并发与并行
- 熟悉GO了解它的并发
- 编译器
- c hard way
- ruby hard way
- glog使用
- Akka学习 java akka的actor学习
- Go-style Channel in C++
- actorlite 老赵的博客中有讲actor的设计,可以借签。
- centos下安装gcc-4.8.1
- 如何在CentOS上使用高版本的GCC编译
- centos 6 升级gcc
- linux下升级gcc的方法 – 亲测可用
- How to Install gcc 4.7.x/4.8.x on CentOS
- CENTOS快速方便支持C++
- Devtools for CentOS
- Leveldb实现原理
- gmock学习01---Linux配置gmock
- 玩转Google开源C++单元测试框架Google Test系列(gtest)(总)
- CMake 入门实战
- Principles of Distributed Computing
- 知识点
- boost-thread(1,2,3,4)
- C++并发实战(C++11), Linux多线程编程C++,网络编程
- 信号量 互斥锁 条件变量的区别(讲的很好,值得收藏)
- Sleep for milliseconds
- C++11之多线程(三、条件变量),有很多关于c++的文章
- C++11 并发指南系列
- C++小品:她来听我的演唱会——C++11中的随机数、线程(THREAD)、互斥(MUTEX)和条件变量
- Boost Thread学习
- 再谈互斥锁与条件变量!
- boost库(条件变量)
- 线程学习小结
- 第34课 - 信号量
- How to Write a Spelling Corrector
- ruby-mpi
- pybhon-mpi
- lua-mpi
- js-mpi , Null
- go-mpi
并行计算的代表性技术是MPI,云计算的代表性技术是Hadoop。云计算的基础是并行计算,是并行计算和网络结合而发展起来的。MPI和Hadoop代表了不同背影开发者和学术的不同观点。所以MPI和Hadoop有很大的关系,既有共同点也有很多不同之处。
两者的相同点如下: 两者都是使用多个节点进行并行计算,协作完成一个任务;都可以在专用的并行机和廉价的PC机组成的机群上运行;Hadoop整体上是主从式架构的,HDFS是主从结构的,MapReduce任务调度模型也是主从结构的;MPI主要的程序设计模式也是主从式的。Hadoop分布式计算的主要思想是MPi和Reduce,而MPI也提供归约函数MPI_Reduce实现各个节点之间的归约操作。
两都的不同点如下:
(1)MPI标准的制定就是为了科学学者实现尖端科学技术的高速计算,目的是实现高效的并行计算。一般是在专用并行机或者PC机通过局域网搭建的机群上进行并行计算,耦合度很高,节点失效率低,所今MPI没有提供处理节点失效的备份处理。如果有节点失效,必须重新开始计算。而Hadoop是IT工程师开发实现的用于商业用途进行分布式计算的平台,目的是向用户提供服务。一般是由分布在各地的廉价PC通过互联网联接起来为用户提供服务,耦合度比较低,节点失效的可能性很大,所以Hadoop把节点失效看作是系统状态,提供了允许节点失效的备份处理容错机制。
(2)MPI向设计者提供的是一种节点间信息沟通的工具,开发者可以按照自己的意原采用任何架构来实现功能,没有主控节点,计算节点由程序员指定,在主从设计模式的程序中由指定的主节点控制信息的传递,在设计上有较大的自由度。Hadoop是一个分布式计算框架项目,是以架构的形式提出来的,HDFS的NameNode和MapReduce调度中的JobTracker控制其他执行节点,系统自动选择计算节点,所以如何进行分布处理对用户是透明的。
(2)MPI不提供分布式文件系统的支持,数据集中存储,由高级语言通过调用标准函数库传递消息实现并行计算。Hadoop有分布式文件系统HDFS支持,数据存储在HDFS上,由用户定制配置文件,然后编定Map和Reduce函数实现分布式的并行计算,计算时计算向存储迁移。
科学家和IT工程师对云计算技术做出了不同的选择反映了不同领域设计者从不同的角度和层次对同一事物做出不同描述和认识。MPI和Hadoop各有所长,MPI在程序设计上给程序员提供较大的自由度和Hadoop在程序设计上的简单给未来的云计算发展指出了方向。
注:以上的内容摘自基于MPI和MapReduce的分布并行计算研究,第24页
具体的说,MPI允许进程之间在任何时刻互相通信。如果一个进程挂了,我们确实可以请分布式操作系统重启之。但是如果要让这个“新生”获取它“前世”的状态,我们就需要让它从初始状态开始执行,接收到其前世曾经收到的所有消息。这就要求所有给“前世”发过消息的进程都被重启。而这些进程都需要接收到他们的“前世”接收到过的所有消息。这种数据依赖的结果就是:所有进程都得重启,那么这个job就得重头做。
一个job哪怕只需要10分钟时间,但是这期间一个进程都不挂的概率很小。只要一个进程挂了,就得重启所有进程,那么这个job就永远也结束不了了。
虽然我们很难让MPI框架做到fault recovery,我们可否让基于MPI的pLSA系统支持fault recovery呢?原则上是可以的——最简易的做法是checkpointing——时不常的把有所进程接收到过的所有消息写入一个分布式文件系统(比如GFS)。或者更直接一点:进程状态和job状态写入GFS。Checkpointing是下文要说到的Pregel框架实现fault recovery的基础。
注:这段内容摘自大数据的首要目标是“大”而不是“快”
- What are some scenarios for which MPI is a better fit than MapReduce?
- 分布式计算概述
- Hadoop 与 MPI 的特性
- 分布式机器学习的故事,第一章大数据的首要目标是“大”而不是“快”
- 知乎:写分布式机器学习算法,哪种编程接口比较好?
- Is There Any Benchmarks Comparing C++ MPI with Spark
- 在雲端運算環境使用R和MPI
目前高性能地理计算资料较少,在这里有一些mpi与gdal结合的程序。
看看国外做了哪些东西:
- HPGeoC,is conducting research and development in high performance computing, data intensive computing, and grid computing to support geoscience applications, with particular emphasis on computational seismology.
- locationtech,观注地理信息的存储、计算和表达的项目。
- Func,python
- Fabric,python
- salt,python
- ansible,python
- Chef,ruby
- rundeck,Job scheduler and runbook automation. Enable self-service access to existing scripts and tools.
- ruby-machine-learning,ruby
- ruby布署,ruby
- Rex,perl
- gearman
- rabbitmq
- AHK
- sikuli,Sikuli automates anything you see on the screen. It uses image recognition to identify and control GUI components. It is useful when there is no easy access to a GUI internal or source code.
- rake任务从命令行传递参数的两种方式
- Rake Quick Reference
- Rake: Automate All the Things
- Using the Rake Build Language
- Using Rake to Automate Tasks
MPI是高效的,基础的。
- 构建一个可靠的消息队列库
- 利用消息队列库,实现多进程的合作
- 基于scala的actor
- 基结go的channel
- 基于react的,也就是基于事件
- geaman队列系统
- 嵌入脚本,融合python,ruby,lua或者newlisp。
