Giriş: Neden Genomlu Analizde Maddeleri
Tek bir insan genomu sequencing deneyi, 100.000 Genom Projesi veya Tüm varyantlar Araştırma Programı gibi büyük ölçekli projelerden oluşan bir patlamaya yol açtı. Bu deluge of information, sorting sadece bir organizasyonel rahatlık değil - neredeyse herstream analizinde, 100.000 genetik olarak kullanılan ve geniş ölçekli projelerden yararlanarak, kopyalanan verilere işaretlenen, çoğaltmaya yol açan bir analizdir.
Etkili bir şekilde, biyoinformatik boru hatları hızla şişenlir hale gelir.Bir referans genoma milyonlarca kısa okuma görevi göz önüne alındığında: uyum algoritmaları genellikle genom konumuna göre sıralanır.Eğer hız ve doğruluk için gerekli olan, ayarlanma işlemi bir O(n2) tarama, analiz pratikleme algoritmalarının benzersiz bir şekilde değiştirilmesi gerekir: Tümleşik olmayan dört yaklaşım (PCR tekrarları)
Bu makalede, genomik verilere uygulanan tür algoritmaların manzaralarını araştırıyoruz, güçlü ve zayıf yönleriyle karşılaştıracağız ve analiz ölçeklerinizi DNA dizileri için verimli bir Radix Sorti uygulamanız için ayrıntılı bir kılavuz sunuyoruz. Ayrıca hafıza optimizasyonunu, paralelleştirme stratejilerini ve gerçek dünya performans değerlendirmelerini tartışacağız.Sonunda, genomik boru hattınız için nasıl seçileceğini ve en iyi sıralama yöntemini nasıl uygulayacağınızı anlayacaksınız.
Genomlarda En İyi Şekilde Çekilmesinin Temel Rolü
Sorting, tipik bir biyoinformatik iş akışının neredeyse her aşamasında görünür. Aşağıda en yaygın kullanım koşulları vardır:
- [FONT:0)Okuma:[[Dönetici: · 3 ) Çoğu eş (BWA, Bowtie2, STAR) girişin, kromozom ve pozisyon tarafından verimli tohum ve genişleyen algoritmaları desteklemesini gerektirir.
- [FONT:0)Duplicatemark:[Dönetici:[Döneticileri) Picard MarkDuplicates gibi araçlar aynı harita koordinatlara dayanan tekrarlama çiftlerine güvenmektedir.
- [FONT:0]Variant çağrı:[Dönetici:[Döncü: 0) GATK'nın HaplotypeCaller, BAM dosyalarına el koydu; sınırsız giriş güçleri pahalı pre-işlemleme.
- [FONT:0)Compression:[Dönemli SAM/BAM dosyaları daha iyi sıkıştırılır çünkü aynı referans koordinatlarının kullanımı etkin bir şekilde kodlanabilir.
- [FONT:0)Index binası:[Dönetici:[Dönetici:0) Indexing (e.g., BAI, CSI) sadece sıralanmış dosyalar üzerinde çalışır, hızlı rastgele erişim sağlar.
Her durumda, sıralama maliyeti düşük işlemlerde amortize edilir. Hatta orta derecede verimsiz bir tür (O(n log n) milyarlarca okurken performans duvarı haline gelebilir. Bu nedenle, doğru algoritmayı seçmek - ve iyi uygulamak - toplam rutin genom analizleri üzerinde doğrudan bir etkiye sahiptir.
Genomlar Genomik Veriye Benzersiz
Genik dizileri, genel verileri sıralamak için farklı zorluklar sunar:
- [FONT=0) Düz ekranlı dizeler:[Dönder:[Dönder: 1 ) Çoğu sıralı okumalar tek bir standarttır (örneğin 150 bp Illumina okuması). Bu yapı kova bazlı sıralama sağlar.
- [FONT:0]Büyük kardinallik:[Dönetici: 4 ^ 150 olası diziler ile, karşılaştırma tabanlı tür kısmi siparişi kullanamaz.
- [FONT:0)Memory basıncı:[[Dönetici: 1) Datasets genellikle RAM'ı aşıyor; dış sıralama (disk- bazlı) gerekli olabilir.
- [FONT=0)Stability Gereksinimler:[[Dönetici:0) Bazı işlemler (örneğin, geri yüklemeden sonra okuma siparişini korumak) istikrarlı bir şekilde ihtiyaç duyar.
- [FONT:0]Mixed-type alanları: [Dönetici: [Dönetici:0] BAM dosyalarında, anahtar kromozomu (string), pozisyon (enteger) içerir ve genellikle isim (string) olarak okunur. Sorting is lexicographic and numeric.
Bu zorluklarına hitap etmek, bir sonraki tartıştığımız gibi, bir demberlik seçimi gerektirir.
Genomal Sorting Algorithmic Approaches for Genomic Sorting
1. Karşılaştırmalı Sortler
Triedand-gerçek algoritmaları şöyledir:0)Merge Sort[Dönetici:2)Quick Sort) standart kütüphanelerde yaygın olarak kullanılabilir (örneğin, C++ std:sort). Daha az bir algoritmayı destekleyen herhangi bir veri türü ile çalışır, ancak, genomik diziler için karşılaştırma fonksiyonun kendisi pahalıdır: 150 karakter karşılaştırmalarını karşılaştırır.
[FONT=0)Merge Sort[DÜDÜT:1], dış para ile istikrarlı bir şekilde veri sunabilen ve tutarlı O(n log n) en kötü zaman, güvenli bir seçim yapmak.Birçok biyoinformatik araçları (SAMtools sort, Picard), dış para ile başa çıkabilen Merge Sorti uygulamaları optimize etti.
[FONT=0)Quick Sort[DÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜSÜŞÜNÜDÜŞÜNÜDÜŞÜNÜDÜŞÜNÜDÜŞÜNÜŞÜNÜDÜŞÜNÜDÜDÜŞÜNÜDÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜN
2. Noncomparison-based Sorts
DNA dizileri tam olarak dört karakterden oluşur (veya N dahil olmak üzere beş), doğal olarak kendilerini d'ye ödünç verirler:0)Radix Sort). Radix Sort süreçleri (veya harfler) bir kez alt ve küçük (örneğin, 150) için, Radix, sabit ve küçük (belirli uzunlukta) o zaman karmaşıklığı On uzunluğu (örneğin, 150) ve n) çok daha hızlı çalışır.
[[DÜDÜ:0)Bucket Sort[DÜDÜT:1), ek veya yaklaşık koordinatlara dayanan kovalar ile dağıtan ilgili bir yaklaşımdır.Gen Sort Sort Sort Sort Sort Sort Sort Sort Sort Sort Sort Sort Sort serisi, dağıtım kabaca üniforma olduğunda iyi çalışır, ancak genomik veriler genellikle yerel önyargılara sahiptir (örneğin, gen zengin bölgelerden daha fazla okur).
Pratik biyoinformatik için, [[Döneticiler:0)Radix Sort[Döneticileri ile birlikte dış birleşme aşamaları ile birlikte, dizi içeriği (örneğin, tekrar algılama) ve genom koordinatları tarafından altın standart haline gelmiştir.
DNA Sequences için verimli bir Radix Sorti Uygulamayı Uygulayın
Radix Sort'in DNA dizeleri üzerindeki temel fikri, ilk (LSD radix tür) veya en önemli karakter ilk (MSD radix tür) tarafından sıralanır ve stabildir: Her karakterin sağdan en çok soluna doğru pozisyonuna geçeriz.
DNA Bases'ı Integers'a
Türümü verimli bir şekilde kullanmak için, her üssü küçük bir tamsayı dönüştürürüz:
- [FONT:0]A
- [FONT:0) C[DÜT:1]
- [FONT:0)G[DÜT:1]
- [FONT:0][Dönem: 3)
- [FONT:0)N → 4 (En büyük stabil sipariş için de yer alabilir)
Bu haritalama, 5 uygulama say dizisine indekslememize ve ek miktarlar yoluyla sıralamaya olanak sağlar.
Algorithm Adımları (LSD Radix Sort)
- [FONT:0) Input:[DÜDÜDÜŞÜNÜŞÜNÜ: 2)[Üye: 3)[Üye Olmayanlar (DÜye)))[Üye Olmayanlar (S.S.S.S.S.S.))
- [0] pozisyonun geri dönüşü = l-1'e 0: [[Dönetici:2)) 5 (veya 4 n'ü görmezden gelirse) 5 (veya 4) boyut aralığının 5 (veya 0'a kadar başlangıç yapın.
- Tüm diziler üzerinde; her bir dizi için, arter sayısı[ta to int(seq[pos)
- Tamamlanan ek toplamlar için: i = 1 to 4: sayı[i] + =[i-1]
- Aynı büyüklükte geçici bir tampon ( ⁇ serisi) oluşturun.
- Her biri için istikrar sağlamak için tersine sıralar üzerinde dur; her biri için, çıktıda yer edin[-saygı[uygunda].
- Orijinal diziye geri kopyalayın.
- TümFL:0)l pozisyonların işlenmesinden sonra, diziler tamamen lexicografik olarak sıralanmıştır.
[FONT:0]Complexity: [Dönetici: O(l · n) O (n) yardımcı alan.For l = 150, bu 150 veri üzerinden geçer. Her bir geçiş lineer bir taramadır, bu yüzden toplam işlemler - 1 milyar okuma, yani 1 milyar $ işlem - 1 milyar $ 'dan daha ucuza - 30 (30 milyar karşılaştırma için, her karşılaştırmalar için, her karşılaştırma 150 karakter kontrole kadar geçer. = 4.5 trilyon işlem).
Değişkenliliğe Bağlılık
Tüm genomik diziler sabit uzunlukta değildir. Örneğin, A'dan uzun süreli bir karakter veya kullanım süresinden daha küçük bir karaktere sahip olan LD Radix Sort, ilk olarak, her türlü özel bir şekilde kısa sıra gerektirir.A) veya A'dan daha küçük bir karakter, yüksek çözünürlükte bulunan bir satır çizilir.
Memory Thinkations and Dış Sorting
Lineer Radix Sort bile, veri RAM'a sığmıyorsa başarısız olabilir. büyük veri setleri için (örneğin, tüm-genome BAM dosyaları), bir afrika birleşmesi (Dönetici) uygulamamız gerekir[Dönetici).
- Veri kümesini Radix Sort kullanarak hafızada sıralamak için yeterince küçük.
- Her türlü bir chunk'ı diske yazın.
- Merge, en küçük elementi üreten bir min-heap (priority kuyruk) kullanarak sıralanan chunks.
Bu yaklaşım, chunk'ta O(l·n) zamanı korur, ancak birleşme aşaması O(n log m) dış para ile takip eden (tipsiz olarak küçük) birçok üretim aracı (tipsizce küçük)) DÖRT:0)SAMtools) tam olarak bu modeli kullanır: dış para ile takip eder.
[FONT=0)Memory Budget:[[Dönetici:[Dönetici: 0) 64-bit sistem için, ~24'ü okuma başına indirmeye izin verin (sequence + kaliteli + isim) bir tamponda 32 GB RAM ile, hafızada yaklaşık 1.3 milyar okur olabilirsiniz. Daha büyük veri setleri için, dış bir birleşme hafızayı kullanarak kaçınılmaz.
Performans Benchmarks ve Real-World Gains
Birkaç çalışma ve biyoinformatik aracı karşılaştırmaları, Radix Sort for Genomic dizileri için üstünlüğü göstermiştir. Örneğin, 2016 yılında [[Üye Olmayanlar için 0,6 $ [DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD D D D D D D D D D x|S D D D D D = ==================================D===================D=D=D=D=D=D=D=D=D=D=D=D=D====D=D=D=D=P =
Kontrollü bir karşılaştırmada 10 milyon 150-nt okur:
- [FONT:0} 1.Bölüm: Thesort (Quick Sort): ).
- [FONT=0)Merge Sort (SAMtools varsayılan): ) 38 saniye
- [0]LSD Radix Sort (integer haritalama):[Dönem: 1]
1 milyara kadar ölçeklendikten sonra, boşluk genişliyor çünkü Radix Sort'in lineer zamanı O(n log n) darbesinden kaçınır. Uygulamada, hız daha iyi önbellek davranışı nedeniyle daha da büyük: Radix Sort erişimleri hafızaya göre, tahmin edilemez şekillerdeki türlere kıyasla.
Paralelleştirme Stratejileri
Birden çok çekirdekli modern CPUlar, türlemeyi hızlandırabilir. Radix Sort doğal olarak paralelleştirebilir:
- [FONT:0)Ködüş Geçişi:[Döneticileri bölmek; her bir pozisyon için yerel frekanslar sayıyor; atom artışları veya azaltım adımlarıyla bir araya getiriyor.
- [FONT=0)Permutation Pass:[Dönem:[Dönem: 0,0)Permutation Pass:[[Dönem:[Dönem: 0,4] Her bir konu, küresel ön ekleri kullanarak çıktı serisine bağımsız olarak okur.
- [FONT:0]Dön Merge:[Dönetici:[Dönetici:0) Kombinasyon aşaması çok yönlü bir ağaç kullanarak paralelleşebilir: chunks grupları paralel olarak birleştirilmiştir, sonra tekrar bir araya gelir.
GPUaccelerated Radix Sort aynı zamanda aktif bir araştırma alanıdır (bakınız:0) “GPU-Accelerated Sorting for Genomic Data”). Experimental applicationss iddia 5-10× hızlar çok fazla veri setleri için çok fazla toplanır CPU Radix Sort.
Ticaret-Sırıklıklar ve Tahminler
Tek bir algoritma mükemmel değildir. Radix Sort zaman verimliliğini hafıza ve esneklik için:
- [FONT:0)Pros:[Dönetici: 0:1) O(n) zamanı, istikrarlı, mükemmel önbellek yerelliği, paralelleştirmek için kolay, sabit uzunluk alfabe için çalışır.
- [FONT:0)Cons:[[Dönetici: 1 ) Sabit uzunlukta dizileri (veya ⁇ ); ekstra O (n) hafızayı bir değişken uzunluk anahtarı tarafından sıralamak için uygun değil (örneğin, okuma adı + optik anahtar); birden fazla geçiş için ayarlanan Merge Sorti'nin (0.10100,000) sabitlediğinden daha yavaş olabilir.
Çoğu büyük ölçekli genomik boru hatları için, Radix Sort'in yararları, maliyetleri koordine ederek uzaktır. Tools likeETHFLT:0)picard Sort), sonra her kova kullanarak bir Radix Sort uygulaması sunar (SAMT).Bu, koordinatörlüğün (krobi + pozisyonu) ile işlemden kaçınırsa, karma bir yaklaşım yaygın: ilk kovalama (e.g., kullanım hash), sonra her bir kova kullanarak Radix Sorti'ye uygulanır.
Üretim Sistemleri için Uygulama İpuçları
- [FONT:0) Önde bir dizi ön koşullu dizi kullanın: Her bir geçiş sırasında uçta her karakter dönüştürmek yerine, tam diziye kadar diziyi önbellekle kapat.Bu ticaretler hız için hafıza: Her bir dizi oyuncakla birlikte 150 tane geri dönüşler.
- [FONT:0)Köpekt ve yer dışı yer arasındaki fark:[Dönetici:0) Standart Radix Sort, boyutsal n. Eğer bellek sıkıysa, MSD Radix Sort'de kullanılan gibi (örneğin, [[Dönetici:2).
- [FONT:0)Tengin the radix genişlik:[Dönder:[Dönder:0)T:0)Tune the radix genişlik:[Dörtüncü anahtarlar için, Radix Sort bir kez birden fazla kez işlem yapabilir. DNA için, tek bir karakter (2 bit) geçiş için verimlidir; iki karakter (4 bit) işlem süresi 150 ila 75 arasında geçer, ancak bir dizi boyut 16 - küçük.
- [FONT=0]Leverage SIMD:[Dönetici:[Dönetici:0)[Dönetici:0)[Dönemli Radix Sort.
- [FONT:0) Gerçek veri dağıtımlarıyla Test:[Dönetici:[Dönder:0) Radix Sort için en kötü liste aynı olduğunda gerçekleşir - her geçiş tam bir tarama yapar, ancak sipariş değişmeden kalır, O(l·n).Bu aslında Radix Sort için iyi olur, ancak, birçok sıra uzun ön ekleri paylaşırsa, LSDix tipi tekrar tekrar tekrar tekrarlanır; MSDix tipi aynı pozisyonları değiştirir; MSD tipi kısa sürede yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş
Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç
Verimli sıralama, genomik veri analizinde lüks değildir - bir zorunluluktur.Sorunma maliyetleri düşer ve veri kümeleri büyür, hesaplama şişenin hıza kadar geçişleri önemlidir: sabit uzunlukta DNA alfabesi için kullanılan boru hatları ve doğal uyum, zorlayıcı bir çözüm sunar.
Biyoinformatik mühendisler için bina veya rutinleri korumak için, LSD Radix Sort'i güncel okur ve MSD Radix Sort'i değişken uzunlukta diziler için bir araya getiriyor.Bunu kendi gelişimi için dış para ile birleştirin ve sayma ve permutasyon modern multi-core donanımı kullanmaya devam ediyoruz.
İleriye baktığımızda Radix Sort'in donanım ivmesi ile kombinasyonu (GPUs, FPGAs) daha da büyük strides vaat ediyor. Bakım noktasında gerçek zamanlı genomik analize doğru çalışırken, her mikrosaniye bizi hemen sonuçlara güvenen tıbbi uygulamalara daha da yaklaştırıyor.