ฉันกำลังพยายามสร้างชุดของบรรทัดที่ดึงจากไฟล์ที่มี egrep ด้วย sort -u แล้วนับมัน ประมาณ 10% ของบรรทัด (ทั้งหมด 100 ตัวอักษรจากตัวอักษร [ATCG]) ซ้ำกัน มีไฟล์สองไฟล์แต่ละไฟล์มีความเกี่ยวข้องประมาณ 3 กิ๊ก 50% ไม่เกี่ยวข้องดังนั้นอาจเป็น 300 ล้านบรรทัด
LC_ALL=C grep -E <files> | sort --parallel=24 -u | wc -m
ระหว่าง LC_ALL = C และการใช้ -x เพื่อเร่ง grep ส่วนที่ช้าที่สุดคือการเรียงลำดับ การอ่าน man pages ทำให้ฉัน --parallel = n แต่การทดลองแสดงให้เห็นว่าไม่มีการปรับปรุงอย่างแน่นอน การขุดเล็ก ๆ น้อย ๆ กับด้านบนแสดงให้เห็นว่าแม้จะมี --parallel = 24 กระบวนการเรียงลำดับจะทำงานบนโปรเซสเซอร์เพียงครั้งเดียว
ฉันมีชิป 4 ตัวที่มี 6 คอร์และ 2 เธรด / คอร์รวมโปรเซสเซอร์ 48 ตัว ดู lscpu เนื่องจาก / proc / cpuinfo จะยาวเกินไป
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
ฉันกำลังคิดถึงอะไร แม้ว่ากระบวนการนั้นมีการผูกไว้กับ IO ฉันไม่ควรเห็นการประมวลผลแบบขนานหรือไม่ กระบวนการเรียงลำดับใช้ 99% ของตัวประมวลผลที่เปิดใช้งานจริงในเวลาใดก็ตามดังนั้นฉันควรจะสามารถเห็นการทำงานแบบขนานหากเกิดขึ้น หน่วยความจำไม่ได้เป็นกังวลฉันมี 256 Gb ที่จะเล่นกับและไม่มีสิ่งอื่นใดถูกใช้
มีบางอย่างที่ฉันค้นพบ pip grep ไปยังไฟล์จากนั้นอ่านไฟล์ด้วย 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
ในการทำเกณฑ์มาตรฐานเหล่านี้ค่อนข้างชัดเจนว่าเมื่อการเรียงลำดับอินพุตแบบไพพ์ไม่ได้ขนานกันเลย เมื่อได้รับอนุญาตให้อ่านการเรียงลำดับไฟล์จะแบ่งการโหลดตามคำแนะนำ
uname -a
จะช่วยให้ "3.13.0-46 ทั่วไป # 79 อูบุนตู SMP" และlsb_release -a
เรียกร้อง 14.04.2 สมญานามเชื่อถือและรุ่นของการจัดเรียงที่เป็นส่วนหนึ่งของ coreutils GNU man sort
ตามไป
sort
คือการกระจายตัวแบบไหน? มาตรฐานsort
ไม่ทราบตัวเลือกนั้น