Żyjemy w czasach, w których komputery obsługują dużą ilość danych, dlatego ważny jest sposób zarządzania pamięcią w programach. Na razie jest on oparty na regule, że jeżeli program potrzebuje porcji danych przechowywanych w miejscu pamięci, to prawdopodobnie potrzebuje miejsca również w sąsiedniej części. Takie rozumowanie tworzy jednak wąskie gardło wydajności, które znacznie spowalnia realizację programu.

W tym tygodniu na międzynarodowej konferencji na temat architektur równoległych naukowcy z MIT Computer Science and Artificial Intelligence Laboratory (CSAIL) przedstawili nowy język programowania o nazwie „milk”, który pozwala twórcom aplikacji na bardziej efektywne zarządzanie pamięcią w programach, które zajmują rozproszone punkty danych w dużych zbiorach. W testach z wykorzystaniem niektórych typowych algorytmów, programy napisane w nowym języku były cztery razy szybsze niż te napisane w istniejących językach. Naukowcy są przekonani, że dalsze prace przyniosą jeszcze lepsze wyniki.

Współczesne chipy komputerowe nie są zoptymalizowane pod kątem rozproszonych danych — jest wręcz przeciwnie. Zamiast pobierania pojedynczego elementu danych na raz z pamięci głównej, rdzeń pobiera cały blok danych, a blok jest wybrany zgodnie z zasadą lokalności. Łatwo zobaczyć, jak zasada lokalności współpracuje, z powiedzmy, przetwarzania obrazu. Jeśli celem programu jest zastosowanie filtru wizualnego obrazu i działa on na jednym bloku obrazu w czasie, może go szlifować dalej na blok po bloku, nie pobierając już więcej danych.

Jednak takie podejście nie działa, jeśli program ma pobierać tylko niewielką część elementów z całej bazy np. użytkownik chcę otrzymać listę, 10 najpopularniejszych książek z kilku milionów rekordów, znajdujących się w bazie księgarni internetowej. Jeśli żąda danych związanych z jedną książką, to jest prawdopodobne, że dane związane z przyległą setką książek będą nieistotne. Kierowanie się do pamięci głównej dla pojedynczego elementu danych jest niezmiernie nieefektywne w czasie.

Milk dodaje kilka poleceń do OpenMP — przedłużenia suchych języków jak C i Fortran, które ułatwia pisanie kodu dla wielordzeniowych procesorów. Korzystając z „milk’ programista wstawia kilka dodatkowych linii kodu w dowolnym miejscu instrukcji, która wykonuje iteracje poprzez duży zbiór danych poszukujących stosunkowo niewielkiej liczby elementów. Dodaje adres pozycji danych do przechowywanego lokalnie wykazów adresów. Gdy lista jest wystarczająco długa, adresy, które są blisko siebie, są grupowane i rozprowadzane na rdzenie chipu.

Tak wygląda ogólny opis działania, ale w rzeczywistości jest ono trochę bardziej skomplikowane, bo większość nowoczesnych chipów komputerowych ma kilka różnych poziomów pamięci podręcznej. Kompilator języka milk musi śledzić nie tylko listę adresów pamięci, ale także dane przechowywane na tych adresów i regularnie tasować je pomiędzy poziomami skrytek. Musi również zdecydować, które adresy powinny zostać zachowane, ponieważ mogą one być dostępne ponownie, a które należy odrzucić.

Nowe podejście do sposobu obsługiwania danych, które są rozproszone, umożliwi pełniejsze wykorzystanie wydajności współczesnego sprzętu komputerowego.

Źródło:http://news.mit.edu/

Spodobał Ci się ten artykuł? Podaj dalej!