Wpis z mikrobloga

Aloha #programowanie Mam 2 programiki:
1) Pierwszy sortuje tablice wyszukując najmniejsze wartości i wstawia je po kolei do drugiej tablicy (sortowanie przez wybór coś tam).
2) Drugi działa na dwóch wątkach, gdzie pierwszy wątek wyszukuje połowę najmniejszych wartości, a drugi wątek połowę największych wartości.
Oba programy mają tablice pomocniczą - "flagi", w której oznaczam sobie, które indeksy już użyłem, bo nie umiem ustawić NULL-a ( ͡° ͜ʖ ͡°)

I teraz coś czego nie rozumiem: dlaczego ten pierwszy działa szybciej od tego wielowątkowego?

time ./minmax 100000
real 1m8.653s
user 1m8.584s
sys 0m0.012s

time ./minmax_thread 100000
real 3m2.515s
user 6m3.984s
sys 0m0.004s
  • 9
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Butt: no jeśli procesor ma tylko jeden rdzen lub program działa tlyko na jednym rdzeniu to może dlatego że obie akcje są wykonywane jednocześnie?
  • Odpowiedz
@Jurigag: mam stary procesor, ale nie aż tak :< Możliwe, że samo zarządzanie wątkami zabiera więcej zasobów niż sortowanie?

sortByMin(0, size);
vs.

void
  • Odpowiedz
@Butt: możesz spróbować poczytać, bo po założeniu w poście widzę, że możesz mylić pojęcia multithreading i parallelism, a tak w skrócie (nie wiem w czym piszesz, ale zasada chyba podobna)- sama wielowątkowość w małych programach nakłada względnie spory narzut (przygotowanie i obsługa wątków), stąd wcale nie musi być szybsza od jednowątkowego przetwarzania i generalnie powinna służyć do omijania przestojów w obliczeniach przy blokadach na zasobach (których pewnie tu jawnie
  • Odpowiedz
@dan3k: o, dzięki, przyda się, bo nie mam pojęcia co to ten parallelism <3 No trudno, zadanie zrobiłem, jeśli to nie pokazuje czasów tak jak sobie prowadzący wymarzył to już nie moja wina ( ͡° ͜ʖ ͡°) (chyba)
  • Odpowiedz
@Butt: To nie mój język ale zastanawiam się co Ty tak naprawdę robisz? Popraw mnie jeśli źle czytam twój kod. Masz jedną tablicę. Sortujesz ją w dwóch zakresach do połowy i od połowy.
I jak to ma działać?
Znajdujesz najmniejszą wartość w pierwszej połowie i próbujesz wpisać na pierwszą pozycję do drugiej tablicy? I tak po kolei?
W tym czasie drugi wątek próbuje znaleźć największą wartość w drugiej połowie tablicy
  • Odpowiedz
@ZapomnialWieprzJakProsiakiemByl: z początku miałem 2 kopie tablicy do posortowania i każdy wątek miał swoją, którą sobie przeszukiwał, ale to nie poprawiło czasów :( A zapis to chyba nie powinien być problem, skoro odbywa się na innych, skrajnych indeksach? No bo są inne adresy, do których wątek się dobiera. Prawda? ;-;

Sortowanie działa, bo wyszukuje wartości w całej tablicy, nie w połowach. W sumie to łap kod do wglądu. Może
  • Odpowiedz
@Butt: Dałeś "private paste" ale to i tak bez znaczenia bo pewnie nie wiele bym skumał z tego bo mam jedynie słabą wiedzę o C#/ .NET
I jedynie co to sobie tu spekuluję bo nie wiem jak działa wielowątkowość w C/C++

Nawet nie wiem czy funkcje których używasz wymuszają działanie na osobnych rdzeniach czy działają na jednym.
Jak wygląda zarządzanie wątkami?Jak w C wątek informuje że skończył pracę.
  • Odpowiedz