-
1. Data: 2010-09-18 07:34:39
Temat: bash: konkurencyjne przekierowanie jednego pliku do wielu programów
Od: Mariusz Marszałkowski <m...@g...com>
Hey
Mamy program pod konsole tekstową i wieloprocesorowy
komputer. Program pobiera na standardowe wejście
dwa wiersze z pliku tekstowego, jakiś czas wykonuje
obliczenia, po czym wypluwa na standardowe wyjście
jeden wiersz tekstu wynikowego. Wiersze wejściowe,
a właściwie pary wierszy wejściowych, są w jednym
pliku tekstowym. I teraz moje pytanie: jak karmić
danymi z pliku wiele instancji tego samego programu,
tak aby w pełni wykorzystać wieloprocesorową
maszynę? Chodzi o to, żeby kolejne dwa wiersze
wejściowe podawać temu programowi, który
zakończył obliczenia i wypluł wyjście.
Z góry dziękuję
-
2. Data: 2010-09-18 10:00:42
Temat: Re: bash: konkurencyjne przekierowanie jednego pliku do wielu programów
Od: Bronek Kozicki <b...@s...net>
On 18/09/2010 08:34, Mariusz Marszałkowski wrote:
> pliku tekstowym. I teraz moje pytanie: jak karmić
> danymi z pliku wiele instancji tego samego programu,
> tak aby w pełni wykorzystać wieloprocesorową
> maszynę? Chodzi o to, żeby kolejne dwa wiersze
> wejściowe podawać temu programowi, który
> zakończył obliczenia i wypluł wyjście.
http://en.wikipedia.org/wiki/Producer-consumer_probl
em
a jeżeli za trudne, to po prostu rozdziel dane wejściowe na różne pliki
B.
-
3. Data: 2010-09-18 16:11:53
Temat: Re: bash: konkurencyjne przekierowanie jednego pliku do wielu programów
Od: Mariusz Marszałkowski <m...@g...com>
On 18 Wrz, 12:00, Bronek Kozicki <b...@s...net> wrote:
> On 18/09/2010 08:34, Mariusz Marszałkowski wrote:
>
> > pliku tekstowym. I teraz moje pytanie: jak karmić
> > danymi z pliku wiele instancji tego samego programu,
> > tak aby w pełni wykorzystać wieloprocesorową
> > maszynę? Chodzi o to, żeby kolejne dwa wiersze
> > wejściowe podawać temu programowi, który
> > zakończył obliczenia i wypluł wyjście.
>
> http://en.wikipedia.org/wiki/Producer-consumer_probl
em
>
> a jeżeli za trudne, to po prostu rozdziel dane wejściowe na różne pliki
>
Chciałem gotowca :)
Np. jeden wiersz w bashu, albo w cmd pod windows.
Pozdrawiam
-
4. Data: 2010-09-18 17:52:35
Temat: Re: bash: konkurencyjne przekierowanie jednego pliku do wielu programów
Od: Wojciech Muła <w...@p...null.onet.pl.invalid>
On Sat, 18 Sep 2010 09:11:53 -0700 (PDT) Mariusz Marszałkowski
<m...@g...com> wrote:
> Chciałem gotowca :)
> Np. jeden wiersz w bashu, albo w cmd pod windows.
Może xargs z opcją -P.
w.
-
5. Data: 2010-09-18 20:13:29
Temat: Re: bash: konkurencyjne przekierowanie jednego pliku do wielu programów
Od: Boguś <n...@i...net>
Dnia 18-09-2010 o 18:11:53 Mariusz Marszałkowski <m...@g...com>
napisa?(a):
> On 18 Wrz, 12:00, Bronek Kozicki <b...@s...net> wrote:
>> On 18/09/2010 08:34, Mariusz Marszałkowski wrote:
>>
>> > pliku tekstowym. I teraz moje pytanie: jak karmić
>> > danymi z pliku wiele instancji tego samego programu,
>> > tak aby w pełni wykorzystać wieloprocesorową
>> > maszynę? Chodzi o to, żeby kolejne dwa wiersze
>> > wejściowe podawać temu programowi, który
>> > zakończył obliczenia i wypluł wyjście.
>>
>> http://en.wikipedia.org/wiki/Producer-consumer_probl
em
>>
>> a jeżeli za trudne, to po prostu rozdziel dane wejściowe na różne pliki
>>
>
> Chciałem gotowca :)
> Np. jeden wiersz w bashu, albo w cmd pod windows.
Może coś w ten deseń
@echo off
setlocal ENABLEDELAYEDEXPANSION
:: Twój plik źródłowy
set input=test.txt
del plik1.txt 2> nul
del plik2.txt 2> nul
set i=0
for /f "delims=" %%l in (%input%) do (
set /a r1=!i! %% 4
if !r1! == 0 ( echo %%l >> plik1.txt )
if !r1! == 1 ( echo %%l >> plik1.txt )
if !r1! == 2 ( echo %%l >> plik2.txt )
if !r1! == 3 ( echo %%l >> plik2.txt )
set /a i=!i! + 1
)
:: start cmd /c twoje_polecenie.exe plik1.txt
:: start cmd /c twoje_polecenie.exe plik2.txt
start cmd /c "cat plik1.txt && sleep 3000"
start cmd /c "cat plik2.txt && sleep 3000"
--
Boguś
http://bogus.ovh.org/
-
6. Data: 2010-09-19 11:27:42
Temat: Re: bash: konkurencyjne przekierowanie jednego pliku do wielu programów
Od: klops <k...@k...pl>
Chyba najprościej to:
* w pętli (do końca pliku wejściowego):
* w pętli (np. 8 dla 8 rdzeni):
* odczytać parę wierszy
* uruchomić nowy proces do przetwarzania
* w pętli (np. 8 dla 8 uruchomionych procesów roboczych)
* czekać na koniec procesu
Wada - dla każdej pary wierszy trzeba tworzyć nowy proces.
Albo na upartego 2 skrypty:
Skrypt 1: z parametrem ilość procesów roboczych (np. 8). W skrypcie:
* dzielisz liczbę wierszy do przetworzenia przez liczbę procesów
* ustalasz zakresy wierszy do przetwożnia dla wszystkich procesów
* uruchamiasz Skrypt 2 z odpowiednimi parametrami
Skrypt 2: z parametrem zakres wierszy do przetworzenia. W skrypcie:
* Odczytujesz zakres wierszy.
* Pchasz to rurą do programu roboczego.
Wada: idealistyczne założenie, że wszystkie pary wierszy z pliku
wejściowego wymagają takiej samej ilości obliczeń.
-
7. Data: 2010-09-19 19:38:44
Temat: Re: bash: konkurencyjne przekierowanie jednego pliku do wielu programów
Od: Mariusz Marszałkowski <m...@g...com>
On 19 Wrz, 13:27, klops <k...@k...pl> wrote:
> Albo na upartego 2 skrypty:
> Skrypt 1: z parametrem ilość procesów roboczych (np. 8). W skrypcie:
> * dzielisz liczbę wierszy do przetworzenia przez liczbę procesów
Tak zrobiłem bo nie miałem czasu na zabawę w pisanie skryptów :)
Problem jest taki że każda para wierszy wymaga bardzo różnego
czasu obliczeń, od 0.1s do 2minut :)
Pozdrawiam
-
8. Data: 2010-09-19 20:01:43
Temat: Re: bash: konkurencyjne przekierowanie jednego pliku do wielu programów
Od: Michoo <m...@v...pl>
W dniu 19.09.2010 21:38, Mariusz Marszałkowski pisze:
> On 19 Wrz, 13:27, klops<k...@k...pl> wrote:
>> Albo na upartego 2 skrypty:
>> Skrypt 1: z parametrem ilość procesów roboczych (np. 8). W skrypcie:
>> * dzielisz liczbę wierszy do przetworzenia przez liczbę procesów
>
> Tak zrobiłem bo nie miałem czasu na zabawę w pisanie skryptów :)
> Problem jest taki że każda para wierszy wymaga bardzo różnego
> czasu obliczeń, od 0.1s do 2minut :)
No to piszesz "w języku, który znasz najlepiej" prosty loader - robi
rurki, forkuje i odpala procesy a potem robi select na rurkach
wyjściowych i gdy któryś pisze to wysyła mu kolejną porcję danych. Max
30 minut roboty.
--
Pozdrawiam
Michoo
-
9. Data: 2010-09-19 23:47:00
Temat: Re: bash: konkurencyjne przekierowanie jednego pliku do wielu programów
Od: Mariusz Marszałkowski <m...@g...com>
On 19 Wrz, 22:01, Michoo <m...@v...pl> wrote:
> W dniu 19.09.2010 21:38, Mariusz Marszałkowski pisze:
>
> > On 19 Wrz, 13:27, klops<k...@k...pl> wrote:
> >> Albo na upartego 2 skrypty:
> >> Skrypt 1: z parametrem ilość procesów roboczych (np. 8). W skrypcie:
> >> * dzielisz liczbę wierszy do przetworzenia przez liczbę procesów
>
> > Tak zrobiłem bo nie miałem czasu na zabawę w pisanie skryptów :)
> > Problem jest taki że każda para wierszy wymaga bardzo różnego
> > czasu obliczeń, od 0.1s do 2minut :)
>
> No to piszesz "w języku, który znasz najlepiej" prosty loader - robi
> rurki, forkuje i odpala procesy a potem robi select na rurkach
> wyjściowych i gdy któryś pisze to wysyła mu kolejną porcję danych. Max
> 30 minut roboty.
Było banalne rozwiązanie :)
Nie wiem czemu od razu o tym nie pomyślałem.
Wystarczyło przetasować kolejność danych i szansa że jeden
proces dostanie dużo więcej czasochłonnych niż reszta spada
do zera :)
Pozdrawiam
-
10. Data: 2010-09-20 06:43:24
Temat: Re: bash: konkurencyjne przekierowanie jednego pliku do wielu programów
Od: Maciej Pilichowski <P...@g...com>
On Sat, 18 Sep 2010 00:34:39 -0700 (PDT), Mariusz Marszałkowski
<m...@g...com> wrote:
Przepraszam, czy Tobie chodzilo o rownolegle? Litosci...
--
Moja wyprzedaz wszystkiego: ksiazki, plyty, filmy.
http://www.garaz.pol.pl/