使用高通量计算第一步就是要针对密集运算任务作任务划分。将一个海量的、耗时的、耗资源的任务划分红合适粒度的小任务,须要综合考虑资源、数据等多方面因素。HTCondor并不参与这方面的工做,任务划分须要用户本身实现。ios
默认状况下,HTCondor会把一个CPU核心当成一个计算资源。最理想的状况,就是计算集群网络内全部的集群主机都是一样的配置,数据也是易于划分的,那么能够按照计算机集群内CPU的总核心数,对数据量等分划分。这样,由于一样的数据量一样的计算机资源,进行分布式计算时理论上会同时完成,也就达到了负载均衡。git
这里就准备了这样的一个任务例子,假设任务已经划分好,已经放到同一个目录中:github
0,1,2,..., 15就是划分好的16份数据,每一个目录中都存放了数据。所谓计算任务,就是输入一个数据,处理后造成新的数据。因此,每一个文件夹都放入了一个input.txt文件,做为计算任务的输入:网络
实例目的很简单,就是将这些划分好的任务提交到HTCondor,让HTCondor的计算资源分别处理这些数据,并将新的数据返回来。负载均衡
既然要进行计算任务,那么不可或缺的就是运行的任务程序了。说到底分布式计算的基础仍是单机运算,必需要保证发送的每一个任务在单机下就能正确运行,才能谈任务调度的问题。框架
在这里我用的是一个C/C++的任务程序:分布式
#include <iostream> #include <fstream> #include <string> #include <time.h> using namespace std; int main() { fprintf(stdout, "开始运行\n"); //延时10S fprintf(stdout, "延时10S\n"); time_t first = time(NULL); double diff = 0; while (diff<10) { time_t second = time(NULL); diff = difftime(second, first); //计时 } ifstream infile("input.txt"); if (!infile) { fprintf(stderr, "没法读取文件\n"); return 1; } string line; getline(infile, line); ofstream outfile("output.dat"); if (!outfile) { fprintf(stderr, "没法写出文件\n"); return 1; } outfile << "输出内容:\n"; outfile << line; fprintf(stdout, "运行完成\n"); return 0; }
能够看到这个程序特别简单,就是延时10秒后,读取input.txt的内容,写出到output.dat中。延时10秒是为了方便显示运行状态。其实没必要非要C/C++的程序,只要是可以运行的可执行程序便可,条件是每台机器要有对应的运行环境,不然发送过去的任务会由于没法运行而挂起。spa
将这个程序编译的可执行程序放到bin目录中,保证在单机的状况下,可以正常运行。code
在下一章中,将会介绍如何经过HTCondor框架运行这个实例。