OpenCL: zadanie zaliczeniowe


ostatnie modyfikacje:


Zadaniem jest napisanie programu, który dopasowuje krótkie sekwencje do wzorca.

Terminem oddania jest 5 czerwca, 18:00. Podczas weekendu maszyny nvidia1 i nvidia2 będą bez nadzoru operatorów!

Informacja genetyczna każdego osobnika jest zapisana w genomie - ciągu zasad (BP, ang. base pair). Każde BP to jeden z symboli {A,C,G,T}, zatem genom możemy traktować jako skończony ciąg nad alfabetem {A,C,G,T}. ( http://en.wikipedia.org/wiki/Human_genome ).

By odczytać informację genetyczną osobnika, stosuje się obecnie urządzenia - sekwenatory DNA - które odczytują interesujące badaczy fragmenty genomu produkując ok. 60 milionów krótkich sekwencje (o długości, zależnie od sekwenatora, od 30 do 1000 BP). Każda taka sekwencja to spójny podciąg genomu. Sekwenator DNA produkuje sekwencje tak , że każdy element genomu pojawia się w kilku-kilkudziesięciu sekwencjach. Takie sekwencje dopasowuje się następnie do pewnego wzorca (ang. reference genome); różnice między sekwencjami osobnika a tym wzorcem mogą mieć istotne, medyczne konsekwencje.

Wzorzec ma długość od kilkuset BP do 3 mld BP (na potrzeby tego zadania można przyjąć że wzorzec mieści się w pamięci karty); dopasowujemy do niego sekwencje lub sekwencje antyrównolegle komplementarne. Sekwencja antyrównolegle komplementarna to sekwencja odczytywana od tyłu z symbolami zmienionymi na komplementarne (A<->T, C<->G), np. dla sekwencji ACGTATTA sekwencją antyrównoległą komplementarną jest TAATACGT

Sekwencja może nie pasować idealnie do wzorca. Dopuszczamy:

Jeśli sekwencja pasuje do kilku miejsc we wzorcu, wybieramy to do którego pasuje najlepiej, przy czym:

Spis treści

1 Wywołanie programu

./seqmat <max_snip_count> <max_ins_deletion_count> <reference_genome> <seq>

gdzie:

  • <max_snip_count> to maksymalna liczba błędów/snipów przy dopasowaniu sekwencji (wartość maksymalna to 10, typowa wartość parametru: 1-5);
  • <max_ins_deletion_count> to maksymalna liczba insercji i delecji w sumie, maksymalna wartość parametru 1, czyli dopuszczamy maksymalnie jedną insercję albo jedną delecję
  • maksymalna długość delecji (liczba BP ze wzorca nieobecnych w sekwencji) jest ograniczona parametrem MAX_DEL_LEN=50;
  • maksymalna długość insercji jest taka, że co najmniej MIN_INS_COMMON=50 BP musi się dopasować do wzorca, np: wzorzec TTTACGTATTATTTT, sekwencja z insercja ACCCCGTATTA, do wzorca dopasuje się 'AC' i 'GTATTA', czyli w sumie 8 BP;
  • algorytm powinien działać poprawnie również dla innych, także różniących się od siebie, wartości stałych MAX_DEL_LEN i MIN_INS_COMMON;
  • <reference_genome> to nazwa pliku zawierającego referencyjne wzorce; kolejne wzorce zapisane są w kolejnych parach wierszy z których
    • pierwszy wiersz to nazwa wzorca;
    • drugi wiersz to kod DNA wzorca (od kilkuset BP do kilkudziesięciu milionów BP);
  • <seq> to plik z sekwencjami; Każdy wiersz zawiera jedną sekwencję o długości do 101 BP. Jeśli sekwencja jest krótsza niż 10 BP, nie należy jej dopasowywać do wzorca.

Zakładamy, że łączna długość wszystkich wzorców to mniej niż 100 milionów BP.

Zakładamy że wszystkie wzorce i rozsądna (co najmniej tysiące) ilość sekwencji (na raz) mieszczą się w pamięci karty (przy kodowaniu 1 bajt na 1 BP). Do wyliczenia dokładniejszej liczby sekwencji mieszczącej się w pamięci karty proszę użyć parametry kart z maszyn nvidia1-2.

2 Wyjście

Rezultatem programu jest przypisanie pasujących sekwencji do wzorców. Program na standardowe wyjście wypisuje dane w formacie CSV składające się z oddzielonych przecinkami kolumn:

  • indeks sekwencji (czyli numer wiersza sekwencji z pliku <seq>; wiersze są numerowane od 1)
  • indeks wzorca (numer kolejny wzorca z pliku <reference_genome>; wzorce są numerowane od 1);
  • offset pierwszej BP ze wzorca pasującej do sekwencji, licząc od początku wzorca (BP są numerowane od 1);
  • informacja o tym czy dopasowanie sekwencji jest normalne (0), czy komplementarne (1)
  • długość insercji / delecji (jeśli nie występuje, 0)
  • indeks (w sekwencji) początku insercji / delecji (jeśli nie występuje, 0)

Wiersze są uporządkowane po indeksach sekwencji.

Jeśli sekwencja pasuje do wzorca w kilku miejscach, program powinien wypisać jedno dopasowanie o minimalnym indeksie spośród najlepszych dopasowań. Jeśli sekwencja pasuje do kilku wzorców, program powinien wypisać jednen wiersz dla każdego pasującego wzorca.

Program na standardowe wyjście błędów wypisuje dwa wiersze, każdy zawierający pojedynczą liczbę:

  • czas działania kernela (w milisekundach)
  • czas działania kernela i transferów pomiędzy pamięcią hosta i karty (w milisekundach); do tej wartości nie należy wliczać czasu potrzebnego na odczyt danych wejściowych z dysku i zapis rezultatów na konsolę.

3 Dane

Znajdziecie w katalogu /usr/local/sekwencje na komputerach nvidia1 i nvidia2.

  • pliki .fastaplus to przykładowe wzorce;
  • pliki MZ1_10M.fastq i MZ2_10M.fastq to fragment odczytu z sekwenatora zawierający 2.5M sekwencji; _40M.fastq zawierają po 10M sekwencji. Znaki spoza {A,T,C,G} proszę traktować jako błędy odczytu - czyli tak samo jak snip.

4 Kryteria oceny

Prosimy o zaimplementowanie algorytmu (bądź kilku algorytmów) i zastosowanie poznanych technik optymalizacji na GPU. Wraz z programem prosimy również o oddanie krótkiego raportu opisującego czas działania różnych wersji programu dla danych testowych.

Oceniamy szybkość działania najszybszej z przedstawionych wersji (50%); zastowanie technik optymalizacji (25%); raport (25%).

W raporcie prosimy o podanie czasu wykonania (kernela, kernela i transferów) dla sekwencji z plików MZ-10M.plain i MZ-30M.plain; parametrów

  • <max_snip_count>=5
  • <max_ins_deletion_count>=1 to maksymalna liczba insercji i delecji w sumie, maksymalna wartość parametru 1, czyli dopuszczamy maksymalnie jedną insercję albo jedną delecję
  • MAX_DEL_LEN=50
  • MIN_INS_COMMON=50

oraz wzorców (prosimy o osobne uruchomienie programu dla każdej z poniższych linii):

  • col9a3.fasta
  • fas.fasta
  • nf1.fasta
  • tp53.fasta
  • wszystkich (col9a3.fasta, fas.fasta, nf1.fasta, tp53.fasta) wzorców na raz

Jeśli program testować będziesz na innej karcie niż GF470 z maszyn nvidia1/nvidia2, prosimy o podanie parametrów karty:

5 Wykorzystanie algorytmów i kodu

W części OpenCL nie dopuszczamy wykorzystania cudzego kodu.

W innych częściach można wykorzystywać ogólnodostępny kod pod warunkiem jednoznacznego oznaczenia całego takiego kodu oraz informacji w raporcie.

Dopuszczamy korzystanie z algorytmów i publikacji naukowych. W raporcie prosimy o informacje o wykorzystywanych źródłach.

Data: 2011-05-07

Autor: Krzysztof Rządca

Org version 7.8.02 with Emacs version 23

Validate XHTML 1.0