• Alchemi试用手记


    Alchemi是一个Grid的.net实现框架。有关Grid,个人理解,就是将很多闲置和一般计算机集合起来,共同通过并行计算,完成一个大的计算任务。每个计算机这时就相当于一个大计算机的CPU,那么很多很普通的计算机集合起来,就可以聚集非常可观的计算能力。其实也就是并行计算概念的深化。如下图:



    安装和运行

    需求:.net 1.1,SQL Server 2000或者MSDE

    安装Alchemi Manager,可以作为普通的应用程序或者Windows Service。安装过程需要安装数据库。安装完成后启动Manager,需要设置数据库,然后启动之。启动Console可以查看Log,设置User等。

    安装Executor,Executor可以安装为普通的应用程序或者Windows Service。启动Executor,在Console就可以查看资源。下图是笔者计算机运行界面。



    具体的软件说明和安装有很详细的文档。下面我们试着写一个应用。

    Alchemi SDK

    解压SDK,其中有2个目录,Bin目录为其需要的库和2个可执行文件。Console (Alchemi.Console.exe)是一个管理工具,和安装了的Manager的是一个工具。Alchemi.Core.dll则是创建Grid程序的核心库。

    Pi求解示例

    我们打开Pi求解程序,编译,然后执行之,首先需要登录Grid,然后就可以执行,执行过程中从Console可以看到可用资源的变化。执行结果:



    前边说过,Grid可以看做是一系列计算机的集合,对于应用程序,此集合表现为一个具有多“处理器”的“虚拟机”。

    Alchemi和其他Grid平台的差别在于,其他平台一般是把“进程”作为基本的运行单位,运行在不同的计算机,而Alchemi可以以类似“多线程”程序的方式编程,其运行单位更小,更具可控制性,称为“Grid Threads”。

    在本地计算机安装了Manager和Executor后,就可以模拟只有一个节点的Grid实现,如同我们可以在单CPU计算机上写多线程程序一样。

    一个Grid程序必须先完成Grid Thread,首先需要添加需要的引用,然后从GThread继承自己的类,Override方法Start:

    [Serializable]
    public class PiCalcGridThread : GThread
    {
          public override void Start()
          {
          }
    }

    写好此Class后,可以写一个Console程序启动程序,这时就需要使用GApplication类了,定义一个GApplication的实例,然后使用GApplication.Threads.Add方法添加GTread,然后需要初始化连接,订阅事件,接着调用GApplication.Start启动计算,最后调用Stop结束。

    App = new GApplication();

    for (int i = 0; i < N; i++)
    {
          ...
          App.Threads.Add(thread);
    }

    // 定义事件
    App.ThreadFinish += new GThreadFinish(ThreadFinished);
    App.ApplicationFinish += new GApplicationFinish(ApplicationFinished);

    App.Start();

    这就是其基本的编程模式,具体代码可以看其例子。因此,Grid程序设计之主要难点和任务类似于多线程程序,或者说,就是一个多线程程序,首要需要解决的是解决一个问题的并行算法。

    总结如下:

    第一,从GThread继承自己的GThread类,实现具体的计算代码;
    第二,使用GApplication实现主程序:
    (1)通过GApplication.Threads.Add添加线程;
    (2)通过GApplication.Connection初始化连接和Grid平台;
    (3)GApplication.Start启动计算;
    (4)必须订阅事件以获知线程结束和计算结束。

    感想

    以前也看过其他一些Grid的资料,不管其他功能(个人认为诸如数据共享,分布式数据集之类有很多解决方案,网格的精髓在于虚拟计算),最基础的计算Alchemi应该算完善了,而其安装、编程和使用的易用性都是其他Grid平台所不具备的。对于.net程序员,如果有这方面的需求(例如GIS、科学计算等),Alchemi无疑是最好的选择。

    另外,例如一些大计算量的程序,如果使用Alchemi这样的技术来实现是否比集群这样的方法更高效和易于部署,也硬件平台无关呢?

    至于Grid宣传的,所谓的与用户无关或透明的按需计算,无限的计算能力和存储空间,至少在暂时还是遥远的共产主义。


  • 相关阅读:
    LeetCode——230. 二叉搜索树中第K小的元素
    LeetCode——456.132模式
    LeetCode——623.在二叉树中增加一行
    LeetCode——735.行星碰撞
    翻译——2_Linear Regression and Support Vector Regression
    LeetCode——919.完全二叉树插入器
    论文翻译——Deep contextualized word representations
    LeetCode——853.车队
    Leetcode——863.二叉树中所有距离为 K 的结点
    Pytorch——BERT 预训练模型及文本分类
  • 原文地址:https://www.cnblogs.com/maweifeng/p/213902.html
Copyright © 2020-2023  润新知