วิธีการแสดงข้อมูลเหตุการณ์ในการค้นหาปัญหาด้านประสิทธิภาพ


10

ฉันพยายามเพิ่มประสิทธิภาพแอปพลิเคชั่น MPI ด้วยรูปแบบการสื่อสารแบบอะซิงโครนัสสูง แต่ละอันดับมีรายการสิ่งที่ต้องคำนวณและส่งข้อความตามที่จำเป็นหากอินพุตหรือเอาต์พุตอยู่ในอันดับที่แตกต่างกัน นอกจากนี้แต่ละระดับจะถูกเธรด (ปัจจุบันมีหนึ่งเธรดการสื่อสารและ 5 คนงาน)

ฉันใช้รหัสกับตัวจับเวลาเกี่ยวกับประสิทธิภาพของส่วนต่าง ๆ ของรหัสซึ่งให้รายการของฉัน (เริ่มต้นสิ้นสุดประเภท) อเนกประสงค์สำหรับแต่ละเธรด พล็อตด้วยวิธีที่ชัดเจนโดยมีเวลาเป็นแกนนอนอันดับและเธรดเป็นแนวตั้งและสีที่ระบุว่าแต่ละเธรดกำลังทำอะไรฉันได้รับภาพเช่นนี้สำหรับ 16 อันดับด้วย 6 เธรด / อันดับ:

เพนทาโก้อันดับและประวัติของเธรด

คำถามของฉันคือ: วิธีอื่นในการแสดงข้อมูลนี้ที่อาจช่วยแก้ไขปัญหาด้านประสิทธิภาพคืออะไร ใครบ้างที่มีพล็อตประเภทโปรดที่พวกเขาใช้เมื่อทำโปรไฟล์แอปพลิเคชันแบบอะซิงโครนัส?

ชุดข้อมูลนี้มีข้อ จำกัด ในการที่ไม่ทราบว่าโครงสร้างดาต้าโฟลว์ แต่ฉันต้องการทำความเข้าใจให้มากที่สุดก่อนที่จะพยายามรวบรวมสิ่งที่ซับซ้อนมากขึ้น

รูปภาพที่ไม่มีการบีบอัดอยู่ที่นี่ในกรณีที่ทุกคนต้องการมองไปรอบ ๆ (ไม่สามารถอัพโหลดผ่านเส้นทางปกติ) น่าเสียดาย Firefox ไม่ยอมรับแม้ว่าฉันจะเชื่อว่ามันถูกต้องอาจเป็นเพราะมันใหญ่เกินไป


ฉันมีปัญหาเล็กน้อยในการรับเบราว์เซอร์หรือโปรแกรมอื่น ๆ เพื่อโหลดภาพขนาดใหญ่ ในท้ายที่สุดgimpก็ทำเช่นนั้น แต่คุณอาจต้องการพิจารณาตัวเลือกขนาดหรือรูปแบบไฟล์อีกครั้ง
เปโดร

ขอโทษด้วยกับเรื่องนั้น. ฉันคิดว่าภาพนั้นใช้ได้เนื่องจาก Firefox ให้ข้อผิดพลาดแบบเดียวกันกับฉันผ่านการแปลง (ImageMagick) อาจเป็นไปได้ว่าเกินขีด จำกัด ขนาดที่กำหนดเอง
Geoffrey Irving

คำตอบ:


4

ฉันใช้เวลาเขียนและแก้จุดบกพร่องรหัสคู่ขนานกันมากทั้งที่ใช้ร่วมกันและ / หรือกระจายหน่วยความจำ แต่โดยไม่ทราบว่าปัญหาของคุณเฉพาะฉันสามารถบอกได้ว่าอะไรที่ดีที่สุดสำหรับฉัน

การรู้ว่ากิจวัตรใดใช้เวลานานเท่าไรเป็นสิ่งสำคัญหากคุณกำลังมองหาประสิทธิภาพการคำนวณ แต่ถ้าคุณกังวลเกี่ยวกับประสิทธิภาพแบบขนานคุณควรกังวลเกี่ยวกับสิ่งที่โค้ดของคุณทำเมื่อไม่ได้ทำการคำนวณใด ๆ อยากรู้ว่าเด็กกำลังทำอะไรเมื่อมันเงียบเกินไป ...

เนื่องจากคุณใช้วิธีแชร์หน่วยความจำแบบกระจาย / แบบไฮบริดฉันเดาว่ารหัสของคุณคือในช่องว่างไม่ว่าจะเป็นการรอสาย MPI หรือตัวแปร mutex / condition คุณสามารถรวมการโทรเหล่านี้ในตัวจับเวลาได้เช่นกันและนั่นจะช่วยให้คุณเห็นภาพที่ดีขึ้นของสิ่งที่ทำให้คุณช้าลงเช่นถ้ามันเป็นเงื่อนไขเดิมหรือเหมือนMPI_REDUCEที่เธรดของคุณติดอยู่เสมอ

หนึ่งชิ้นในการใช้ซอฟแวร์ที่ผมค่อนข้างมักจะเป็นIntel VTune Amplifier XE มันมีคุณสมบัติการวางแผนที่ดี / ตัวเลือกที่เห็นได้ชัดการทำงานพร้อมกันของด้าย โปรแกรมจะวาดพล็อตที่คล้ายกับของคุณมาก แต่เมื่อเธรดรอตัวแปร mutex หรือเงื่อนไขมันจะวาดเส้นทแยงมุมจากเธรดที่รอในเวลาที่มันเริ่มรอไปยังเธรดที่ปล่อย mutex หรือสัญญาณจริง เงื่อนไขที่มันรออยู่ในขณะที่ปล่อย / ส่งสัญญาณ สิ่งนี้อาจยุ่งมาก แต่ก็ทำให้คอขวดปรากฏขึ้นทันที

สุดท้ายฉันยังรวบรวมสถิติจำนวนมากเช่นสำหรับ mutex / signal / MPI-call แต่ละครั้งเวลาเฉลี่ยและเวลารอสูงสุดคือเท่าใด ฮิสโตแกรมของเวลารอคอยที่รวบรวมไว้คืออะไร ในขณะที่พล็อตให้ภาพรวมที่ดีคุณสามารถรับค่อนข้างยุ่งเมื่อลงมาถึงรายละเอียดดี

ในที่สุดคำถามหนึ่งข้อที่ไม่ควรประเมิน: คุณรวบรวมเวลาของคุณอย่างไร ตัวจับเวลาของคุณไม่ล่วงล้ำมากพอที่จะไม่ส่งผลต่อรหัสของคุณหรือไม่ ฉันใช้คำสั่ง CPU นับเมื่อเป็นไปได้เช่นRDTSCบนสถาปัตยกรรม x86 โดยปกติจะเพิ่มคำสั่งเดียวในรหัสของคุณ


ข้อมูลมีการบล็อกรอบการรออยู่แล้ว ในแผนภาพจะแสดงเป็นสีขาวสำหรับเธรดผู้ปฏิบัติงานที่ไม่ได้ทำงานและสีเหลืองสำหรับเธรดการสื่อสารที่รออยู่ น่าเสียดายที่การรอในเธรดการสื่อสารทั้งหมดเกิดขึ้นใน MPI_Waitsome แบบครอบคลุมเดียวเนื่องจากการซิงโครไนซ์ Vtune ไม่ได้ใช้ในกรณีนี้เนื่องจากประสิทธิภาพของเธรดล้วนสมบูรณ์แบบ แต่ก็ต้องขอบคุณตัวชี้ คำแนะนำฮิสโตแกรมก็เป็นสิ่งที่ดีเช่นกัน
Geoffrey Irving

สำหรับค่าใช้จ่ายในการกำหนดเวลา: ฉันใช้ gettimeofday ซึ่งมีความจำเป็นอย่างน้อยในส่วนที่ไม่มีการใช้งานเนื่องจากฉันใช้ตัวแปรเงื่อนไข pthread สามารถนับคำสั่ง CPU เพื่อทำงานในสถานการณ์ดังกล่าวได้หรือไม่? ค่าโสหุ้ยอยู่ในระดับต่ำพอ แต่ต่ำกว่าจะดีกว่าแน่นอน
Geoffrey Irving

1
@GeoffreyIrving: ใช่คุณสามารถใช้พวกเขา แต่พวกเขาเหมาะสมกับซีพียูที่มีการconstant_tscตั้งค่าสถานะ (ตรวจสอบ/proc/cpuinfo) และถ้าคุณใช้ล็อคแต่ละกระทู้ไปยังแกนหลักที่เฉพาะเจาะจงเช่นแต่ละกระทู้อ่านทะเบียนเดียวกันจากแกนเดียวกันเสมอ pthread_setaffinity_npเช่นใช้ โปรดทราบว่าหลังเป็นเฉพาะ Linux และไม่พกพาได้
Pedro

@GeoffreyIrving: แม้ว่าคุณจะรอเหตุการณ์ที่ไม่เปิดเผยบางอย่างMPI_Waitsomeคุณก็ยังสามารถบันทึกคำขอที่มาถึงและจากที่ใด ข้อมูลนี้อาจมีหรือไม่มีการใช้ ...
Pedro

5

บางครั้งคุณสามารถรับมุมมองทางเลือกเกี่ยวกับปัญหาด้านประสิทธิภาพผ่านการวิเคราะห์ทรัพยากรระดับสูง: มีคอขวดที่เกี่ยวข้องเช่นแบนด์วิธหน่วยความจำหรือไม่? เธรดของผู้ปฏิบัติงานทุกคนทำงานในปริมาณเท่ากันหรือไม่ ข้อมูลนี้อาจจะเก็บได้อย่างง่ายดายด้วย likwid-perfctr จากเครื่องมือชุด LIKWID โครงการรหัส LIKWID Google หากโปรไฟล์เป็นเช่นนั้นมีฮอตสปอตที่แตกต่างกันมากมายคุณอาจต้องจัดการกับพวกเขาทีละคน อาจมีปัญหาแตกต่างกันขึ้นอยู่กับจำนวนเธรด / กระบวนการที่ใช้


เพื่อผลประโยชน์ของการเปิดเผยอย่างสมบูรณ์แบบ Georg ทำงานในโครงการ LIKWID และฉันขอคำตอบนี้เพราะฉันต้องการเติมเต็มคำตอบที่ยอดเยี่ยมของ Pedro ด้วยมุมมองอื่น (และเป็นเครื่องมือที่ยอดเยี่ยมและมีอิสระ)
Aron Ahmadia

2

เมื่อฉันมีปัญหาในเครือข่ายของกระบวนการแบบอะซิงโครนัสสูงที่ควบคุมโดยข้อความหรือเหตุการณ์ฉันใช้วิธีที่ไม่ง่าย แต่มีประสิทธิภาพ มันเกี่ยวข้องกับการรับบันทึกการประทับเวลาของกระบวนการรวมไว้ในไทม์ไลน์ทั่วไปและติดตามความคืบหน้าของข้อความบางอย่างที่พวกเขาเรียกกิจกรรม, เรียกข้อความเพิ่มเติม สิ่งที่ฉันกำลังมองหาคือความล่าช้าระหว่างเวลาที่ได้รับข้อความและเวลาที่ดำเนินการและทำความเข้าใจสาเหตุของความล่าช้า เมื่อพบปัญหาจะได้รับการแก้ไขและกระบวนการจะทำซ้ำ ด้วยวิธีนี้คุณจะได้รับประสิทธิภาพที่น่าพึงพอใจ

สิ่งสำคัญคือการดูว่าสิ่งนี้แตกต่างจากวิธีที่คุณวัด, วัดและวัด สิ่งเดียวที่วัดได้สามารถบอกคุณได้ก็คือไม่ควรมอง การปรับประสิทธิภาพจริงต้องดูรายละเอียดอย่างละเอียดจากมุมมองเวลา สิ่งที่คุณกำลังมองหาไม่ใช่เวลาที่ใช้ไป แต่ใช้เวลาโดยไม่จำเป็น

โชคดี.


กล่าวอีกอย่างคือไม่มีการแสดงข้อมูลที่เป็นประโยชน์ของข้อมูลที่ฉันมี :) Jed Brown แนะนำ Jumpshot (และยูทิลิตี้ที่เกี่ยวข้อง) เป็นวิธีหนึ่งในการรวบรวมและแสดงภาพข้อมูลที่คุณแนะนำดังนั้นฉันจะตรวจสอบดู
เจฟฟรีย์เออร์วิงก์

@Geof: ขอให้โชคดีกับการสร้างภาพ เครื่องมือเดียวที่ฉันจะพบว่ามีประโยชน์คือสิ่งที่รวบรวมและรวมบันทึกเหตุการณ์เพื่อให้ฉันสามารถติดตามเส้นทางของคำขออย่างน้อยหนึ่งคำร้องขอขณะที่มันทำผ่านหัวข้อต่างๆเพราะเป็นวิธีเดียวที่ฉันรู้ว่าไม่จำเป็น ความล่าช้า นั่นคือสิ่งที่ปัญหาประสิทธิภาพการทำงานใด ๆ ที่จะประกอบด้วย - ความล่าช้าที่ไม่จำเป็น
Mike Dunlavey
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.