高通量計算框架HTCondor(四)——案例準備

1. 正文

1.1. 任務劃分

使用高通量計算第一步就是要針對密集運算任務作任務劃分。將一個海量的、耗時的、耗資源的任務劃分紅合適粒度的小任務,須要綜合考慮資源、數據等多方面因素。HTCondor並不參與這方面的工做,任務劃分須要用戶本身實現。ios

默認狀況下,HTCondor會把一個CPU核心當成一個計算資源。最理想的狀況,就是計算集羣網絡內全部的集羣主機都是一樣的配置,數據也是易於劃分的,那麼能夠按照計算機集羣內CPU的總核心數,對數據量等分劃分。這樣,由於一樣的數據量一樣的計算機資源,進行分佈式計算時理論上會同時完成,也就達到了負載均衡。git

這裏就準備了這樣的一個任務例子,假設任務已經劃分好,已經放到同一個目錄中:github

任務劃分例子

0,1,2,..., 15就是劃分好的16份數據,每一個目錄中都存放了數據。所謂計算任務,就是輸入一個數據,處理後造成新的數據。因此,每一個文件夾都放入了一個input.txt文件,做爲計算任務的輸入:網絡

計算任務輸入

實例目的很簡單,就是將這些劃分好的任務提交到HTCondor,讓HTCondor的計算資源分別處理這些數據,並將新的數據返回來。負載均衡

1.2. 任務程序

既然要進行計算任務,那麼不可或缺的就是運行的任務程序了。說到底分佈式計算的基礎仍是單機運算,必需要保證發送的每一個任務在單機下就能正確運行,才能談任務調度的問題。框架

在這裏我用的是一個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框架運行這個實例。

2. 相關

代碼和數據地址

上一篇
目錄 下一篇

相關文章
相關標籤/搜索