Funkcja związana z pamięcią - Memory-bound function
Pamięć ograniczona odnosi się do sytuacji, w której o czasie rozwiązania danego problemu obliczeniowego decyduje przede wszystkim ilość pamięci wymaganej do przechowywania danych roboczych . Kontrastuje to z algorytmami związanymi z obliczeniami , w których liczba elementarnych kroków obliczeniowych jest decydującym czynnikiem.
Granice pamięci i obliczeń można czasami wymieniać między sobą, np. Zapisując i ponownie wykorzystując wstępne wyniki lub korzystając z tabel przeglądowych .
Funkcje związane z pamięcią i funkcje pamięci
Funkcje związane z pamięcią i funkcje pamięci są powiązane w tym sensie, że oba obejmują szeroki dostęp do pamięci, ale istnieje różnica między nimi.
Funkcje pamięci wykorzystują technikę programowania dynamicznego zwaną zapamiętywaniem , aby zmniejszyć nieefektywność rekursji, która może wystąpić. Opiera się na prostym pomyśle obliczania i przechowywania rozwiązań dla podproblemów, tak aby można je było później ponownie wykorzystać bez ponownego obliczania podproblemów . Najbardziej znanym przykładem wykorzystującym zapamiętywanie jest algorytm obliczający liczby Fibonacciego . Poniższy pseudokod używa rekurencji i zapamiętywania oraz działa w liniowym czasie procesora :
Fibonacci (n)
{
for i = 0 to n-1
results[i] = -1 // -1 means undefined
return Fibonacci_Results (results, n);
}
Fibonacci_Results (results, n)
{
if (results[n] != -1) // If it has been solved before,
return results[n] // look it up.
if (n == 0)
val = 0
else if (n == 1)
val = 1
else
val = Fibonacci_Results(results, n-2 ) + Fibonacci_Results(results, n-1)
results[n] = val // Save this result for re-use.
return val
}
Porównaj powyższe z algorytmem, który używa tylko rekurencji i działa w wykładniczym czasie procesora:
Recursive_Fibonacci (n)
{
if (n == 0)
return 0
if (n == 1)
return 1
return Recursive_Fibonacci (n-1) + Recursive_Fibonacci (n-2)
}
Chociaż algorytm rekurencyjny jest prostszy i bardziej elegancki niż algorytm wykorzystujący rekursję i zapamiętywanie, ten drugi ma znacznie mniejszą złożoność czasową niż poprzedni.
Termin „funkcja związana z pamięcią” pojawił się dopiero niedawno i jest używany głównie do opisu funkcji, która używa XOR i składa się z serii obliczeń, w których każde obliczenie zależy od poprzedniego obliczenia. Podczas gdy funkcje pamięci od dawna odgrywają ważną rolę w poprawianiu złożoności czasowej, funkcje związane z pamięcią miały znacznie mniej zastosowań. Jednak ostatnio naukowcy zaproponowali metodę wykorzystującą funkcje związane z pamięcią, aby zniechęcić spamerów do nadużywania zasobów, co może być głównym przełomem w tej dziedzinie.
Używanie funkcji związanych z pamięcią w celu zapobiegania spamowi
Funkcje związane z pamięcią mogą być przydatne w systemie proof-of-work, który może powstrzymać spam , który stał się problemem rozmiarów epidemii w Internecie .
W 1992 roku naukowcy IBM Cynthia Dwork i Moni Naor opublikowali na CRYPTO 1992 artykuł zatytułowany Pricing via Processing or Combatting Junk Mail , sugerujący możliwość wykorzystania funkcji związanych z procesorem w celu powstrzymania nadużyć przed wysyłaniem spamu. Schemat opierał się na założeniu, że użytkownicy komputerów są znacznie bardziej skłonni do nadużywania zasobu, jeśli koszt nadużycia zasobu jest znikomy: przyczyną, dla której spam stał się tak rozpowszechniony, jest to, że wysyłanie wiadomości e-mail kosztuje spamerzy znikome .
Dwork i Naor zaproponował, że spam może być zmniejszona przez wtrysk dodatkowy koszt w postaci drogiego procesora obliczeń: funkcje CPU-bound by konsumować zasobów procesora w urządzeniu nadawcy dla każdej wiadomości, zapobiegając w ten sposób ogromne ilości spamu wysyłanego w A krótki okres.
Podstawowy schemat zabezpieczający przed nadużyciami jest następujący:
Niech S będzie nadawcą, R będzie odbiorcą, a M będzie e-mailem. Jeśli R zgodził się wcześniej na otrzymywanie wiadomości e-mail od S , wówczas M jest przesyłany w zwykły sposób. W przeciwnym razie, S oblicza niektórych funkcji G (M), i wysyła (M G (M)) w celu badania . R sprawdza, czy to, co otrzymuje od S, ma postać (M, G (M)) . Jeśli tak, R przyjmuje M . W przeciwnym razie, R odrzuca M . Rysunek po prawej stronie przedstawia przypadki, w których nie było wcześniejszych uzgodnień .
Funkcja G () jest wybrana w taki sposób, że weryfikacja przez R jest stosunkowo szybka (zajmuje milisekundę) i taka, że obliczenie przez S jest nieco powolne (zajmuje co najmniej kilka sekund). W związku z tym S będzie zniechęcany do wysyłania M do wielu odbiorców bez wcześniejszych uzgodnień: koszt zarówno czasu, jak i zasobów obliczeniowych G () wielokrotnie stanie się bardzo przeszkodą dla spamera, który zamierza wysłać wiele milionów wiadomości e-mail .
Głównym problemem związanym z używaniem powyższego schematu jest to, że szybkie procesory obliczają znacznie szybciej niż wolne procesory. Ponadto systemy komputerowe wyższej klasy mają również wyrafinowane potoki i inne korzystne cechy, które ułatwiają obliczenia. W rezultacie spamer posiadający najnowocześniejszy system nie zostanie dotknięty takim odstraszaniem, podczas gdy typowy użytkownik posiadający przeciętny system będzie miał negatywny wpływ. Jeśli obliczenia trwają kilka sekund na nowym komputerze , może to zająć minutę na starym komputerze i kilka minut na PDA , co może być uciążliwe dla użytkowników starych komputerów, ale prawdopodobnie nie do zaakceptowania dla użytkowników urządzeń PDA. Rozbieżność w szybkości procesora klienta stanowi jedną z głównych przeszkód dla powszechnego przyjęcia dowolnego schematu opartego na funkcji związanej z procesorem. Dlatego naukowcy są zainteresowani znalezieniem funkcji, które większość systemów komputerowych będzie oceniać z mniej więcej taką samą szybkością, tak aby systemy high-end mogły oceniać te funkcje nieco szybciej niż systemy low-end (2–10 razy szybciej, ale nie 10–100 razy szybciej), jak mogą sugerować różnice w procesorze. Te współczynniki są wystarczająco „ egalitarne ” dla zamierzonych zastosowań: funkcje skutecznie zniechęcają do nadużyć i nie powodują zaporowego opóźnienia legalnych interakcji w wielu różnych systemach.
Nowe podejście egalitarne polega na wykorzystaniu funkcji związanych z pamięcią. Jak wspomniano wcześniej, funkcja związana z pamięcią to funkcja, której czas obliczania jest zdominowany przez czas spędzony na dostępie do pamięci. Funkcja związana z pamięcią uzyskuje dostęp do lokalizacji w dużym obszarze pamięci w nieprzewidywalny sposób, w taki sposób, że używanie pamięci podręcznych nie jest efektywne. W ostatnich latach szybkość procesora wzrosła drastycznie, ale nastąpił stosunkowo niewielki postęp w tworzeniu szybszej pamięci głównej. Ponieważ stosunki z opóźnieniami pamięci maszyn zbudowanych w ciągu ostatnich pięciu lat, jest zazwyczaj nie większa niż dwa, a prawie zawsze mniej niż czterech, funkcja pamięci związana będzie egalitarny do większości systemów dającej się przewidzieć przyszłości.
Zobacz też
- Architektura komputerowa
- Związany z procesorem
- Programowanie dynamiczne
- Powiązane I / O
- Zapamiętywanie
- Funkcja trudna w pamięci
- Optymalna podkonstrukcja
- Dowód pracy
- Rekursja
Bibliografia
- Abadi, M., Burrows, M., Manasse, M. i Wobber, T. (2005, maj). Umiarkowanie trudne funkcje związane z pamięcią , transakcje ACM w technologii internetowej .
- Dwork, C., Goldberg, A. i Naor, M. (2003). O funkcjach związanych z pamięcią do zwalczania spamu , postępach w kryptologii .
- Hellman, ME (1980). Kryptanalityczna kompromis między czasem i pamięcią , teoria transakcji IEEE .