Saya mencoba membuat unik satu set garis yang ditarik dari file dengan egrep dengan sort -u, lalu hitung. Sekitar 10% dari baris (semua 100 karakter dari alfabet [ATCG]) digandakan. Ada dua file, masing-masing sekitar 3 gigs, 50% tidak relevan, jadi mungkin 300 juta baris.
LC_ALL=C grep -E <files> | sort --parallel=24 -u | wc -m
Antara LC_ALL = C dan menggunakan -x untuk mempercepat grep, bagian paling lambat sejauh ini adalah jenisnya. Membaca halaman manual membawa saya ke --parallel = n, tetapi eksperimen sama sekali tidak menunjukkan peningkatan. Penggalian sedikit dengan top menunjukkan bahwa bahkan dengan --parallel = 24, proses sortir hanya pernah berjalan pada satu prosesor pada satu waktu.
Saya memiliki 4 chip dengan 6 core dan 2 thread / core, memberikan total 48 prosesor logis. Lihat lscpu karena / proc / cpuinfo akan terlalu panjang.
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 48
On-line CPU(s) list: 0-47
Thread(s) per core: 2
Core(s) per socket: 6
Socket(s): 4
NUMA node(s): 8
Vendor ID: AuthenticAMD
CPU family: 21
Model: 1
Stepping: 2
CPU MHz: 1400.000
BogoMIPS: 5199.96
Apa yang saya lewatkan? Bahkan jika prosesnya terikat IO, bukankah seharusnya saya melihat pemrosesan paralel? Proses sortir menggunakan 99% dari prosesor yang sebenarnya aktif pada waktu tertentu, jadi saya harus dapat melihat paralelisasi jika itu terjadi. Memori bukan masalah, saya memiliki 256 Gb untuk bermain dan tidak ada yang digunakan oleh yang lain.
Sesuatu yang saya temukan pemipaan grep ke file kemudian membaca file dengan mengurutkan:
LC_ALL=C grep -E <files> > reads.txt ; sort reads.txt -u | wc -m
default, file 1m 50s
--parallel=24, file 1m15s
--parallel=48, file 1m6s
--parallel=1, no file 10m53s
--parallel=2, no file 10m42s
--parallel=4 no file 10m56s
others still running
Dalam melakukan tolok ukur ini, cukup jelas bahwa ketika input yang disalurkan tidak sejajar sama sekali. Ketika diizinkan membaca file, pilah-pilah file sesuai dengan yang diinstruksikan.
uname -a
memberikan "3.13.0-46-generik # 79-Ubuntu SMP" dan lsb_release -a
mengklaim 14.04.2 nama kode tepercaya, dan versi pengurutan yang merupakan bagian dari gnu coreutils, menurut man sort
.
sort
itu distribusi yang mana? Standarsort
tidak tahu opsi itu.