Obecnie mam program sterownika, który uruchamia kilka tysięcy wystąpień programu „ładunek” i wykonuje pewne przetwarzanie końcowe danych wyjściowych. Sterownik obecnie wywołuje program ładunku bezpośrednio, używając funkcji shell()
, z wielu wątków. Funkcja shell()
wykonuje polecenie w bieżącym katalogu roboczym, blokuje do czasu zakończenia działania polecenia i zwraca dane wysłane na standardowe wyjście przez polecenie. Działa to dobrze na pojedynczej maszynie wielordzeniowej. Chcę zmodyfikować sterownik, aby zamiast tego przesyłać qsub
zadania do dużego klastra obliczeniowego, aby uzyskać większą równoległość.
Czy istnieje sposób, aby polecenie qsub
wypisywało wyniki na standardowe wyjście zamiast do pliku i blokowało je do czasu zakończenia zadania? Zasadniczo chcę, aby działało jak najbardziej jak „normalne” wykonywanie polecenia, aby móc działać równolegle z klastrem przy jak najmniejszej modyfikacji mojego programu sterownika.
Edycja: Myślałem, że wszystkie silniki sieciowe są prawie ustandaryzowane. Jeśli tak nie jest, a ma to znaczenie, używam Torque.