Tôi đang cố gắng tạo một tập hợp các dòng duy nhất được lấy từ một tệp có egrep với sort -u, sau đó đếm chúng. Khoảng 10% số dòng (tất cả 100 ký tự từ bảng chữ cái [ATCG]) được sao chép. Có hai tệp, mỗi tệp khoảng 3 hợp đồng, 50% không liên quan, có lẽ 300 triệu dòng.
LC_ALL=C grep -E <files> | sort --parallel=24 -u | wc -m
Giữa LC_ALL = C và sử dụng -x để tăng tốc grep, phần chậm nhất cho đến nay là sắp xếp. Đọc các trang của người đàn ông đã đưa tôi đến - vô song = n, nhưng thử nghiệm cho thấy hoàn toàn không có cải thiện. Một chút đào với đỉnh cho thấy rằng ngay cả với - vô song = 24, quá trình sắp xếp chỉ chạy trên một bộ xử lý tại một thời điểm.
Tôi có 4 chip với 6 lõi và 2 luồng / lõi, cho tổng cộng 48 bộ xử lý logic. Xem lscpu vì / Proc / cpuinfo sẽ quá dài.
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
Tôi đang thiếu gì? Ngay cả khi quy trình bị ràng buộc IO, dù sao tôi cũng không nên xem xử lý song song? Quá trình sắp xếp sử dụng 99% bộ xử lý thực sự được bật tại bất kỳ thời điểm nào, vì vậy tôi sẽ có thể thấy sự song song nếu nó xảy ra. Bộ nhớ không phải là vấn đề đáng lo ngại, tôi có 256 Gb để chơi và không có cái nào được sử dụng bởi bất cứ thứ gì khác.
Một cái gì đó tôi phát hiện ra grep đường ống đến một tệp sau đó đọc tệp với sort:
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
Khi thực hiện các điểm chuẩn này, rõ ràng là khi sắp xếp đầu vào theo đường ống hoàn toàn không song song. Khi được phép đọc một sắp xếp tập tin sẽ chia tải theo hướng dẫn.
uname -a
theo "3.13.0-46-chung # 79-Ubuntu SMP" và lsb_release -a
tuyên bố 14.04.2 tên mã đáng tin cậy, và phiên bản sắp xếp đó là một phần của lõi gnu, theo man sort
.
sort
Đó là gì trên phân phối? Các tiêu chuẩnsort
không biết tùy chọn đó.