使用高通量計算第一步就是要針對密集運算任務作任務劃分。將一個海量的、耗時的、耗資源的任務劃分紅合適粒度的小任務,須要綜合考慮資源、數據等多方面因素。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框架運行這個實例。