ต้นทุนการคำนวณในไลบรารีมาตรฐานคืออะไร


26

หนึ่งในประเด็นสำคัญที่เราต้องจัดการในการจำลองโมเลกุลคือการคำนวณแรงขึ้นกับระยะทาง ถ้าเราสามารถ จำกัด แรงและระยะทางฟังก์ชั่นที่จะมีอำนาจแม้กระทั่งของระยะห่างแล้วเราก็สามารถคำนวณตารางของระยะทางและไม่ต้องกังวลเกี่ยวกับการวิจัยหากมีอำนาจแปลก แต่แล้วเราต้องจัดการกับ2}rr2=rrrr=r2

คำถามของฉันคือ: การคำนวณมีราคาแพงเพียงใดในห้องสมุดที่ใช้ภาษาทั่วไป (C / C ++, Fortran, Python) และอื่น ๆ ? มีการปรับปรุงประสิทธิภาพจำนวนมากโดยการปรับโค้ดสำหรับสถาปัตยกรรมเฉพาะหรือไม่?x

คำตอบ:


39

ในฐานะที่เป็นส่วนขยายไปยังคำตอบ moyner ของที่บนชิปsqrtมักจะเป็นrsqrtเช่นรากซึ่งกันและกันที่คำนวณ{a} ดังนั้นถ้าในรหัสของคุณคุณจะใช้เพียง (ถ้าคุณกำลังทำการเปลี่ยนแปลงโมเลกุลคุณอยู่) คุณสามารถคำนวณได้โดยตรงและช่วยตัวคุณเองในการหาร เหตุผลที่คำนวณได้แทนที่จะเป็นเพราะการวนซ้ำของนิวตันไม่มีการแบ่งส่วนเพิ่มและการคูณเท่านั้นa1/a1/Rr = rsqrt(r2)rsqrtsqrt

ในฐานะที่เป็นบันทึกย่อด้านหน่วยงานยังคำนวณซ้ำ ๆ และเกือบจะช้าเท่ากับrsqrtในฮาร์ดแวร์ หากคุณกำลังมองหาประสิทธิภาพคุณควรพยายามลบแผนกที่ไม่จำเป็นออกไป

บางสถาปัตยกรรมที่ทันสมัยมากขึ้นเช่นของ IBM Power สถาปัตยกรรมไม่ให้rsqrtต่อ se แต่การประมาณการที่ถูกต้องไปไม่กี่บิตเช่นFRSQRTE เมื่อผู้ใช้เรียกrsqrtสิ่งนี้จะสร้างค่าประมาณและจากนั้นหนึ่งหรือสองครั้ง (เท่าที่ต้องการ) การทำซ้ำของอัลกอริทึมของนิวตันหรือโกลด์ชมิดท์โดยใช้การคูณและการเพิ่มปกติ ข้อดีของวิธีนี้คือขั้นตอนการวนซ้ำอาจถูกไพพ์ไลน์และ interleaved กับคำแนะนำอื่น ๆ โดยไม่ปิดกั้น FPU (สำหรับภาพรวมที่ดีมากของแนวคิดนี้แม้ว่าจะเป็นสถาปัตยกรรมที่เก่ากว่าดูวิทยานิพนธ์ปริญญาเอกของ Rolf Strebel )

สำหรับการโต้ตอบที่อาจเกิดขึ้นการsqrtดำเนินการสามารถหลีกเลี่ยงได้ทั้งหมดโดยใช้พหุนามพหุนามของฟังก์ชันที่มีศักยภาพ แต่งานของฉัน (ดำเนินการในmdcore) ในพื้นที่นี้แสดงให้เห็นว่าอย่างน้อยในสถาปัตยกรรมประเภท x86 sqrtคำสั่งนั้นเร็วพอ

ปรับปรุง

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

ในบริบทของการจำลองโมเลกุลพลวัตหรือการจำลองด้วยอนุภาคที่มีการ จำกัด การตัดออกมีจำนวนมากที่จะได้รับจากอัลกอริทึมที่ดีกว่าสำหรับการค้นหาเพื่อนบ้าน หากคุณกำลังใช้รายการเซลล์หรือสิ่งที่คล้ายกันเพื่อค้นหาเพื่อนบ้านหรือสร้างรายการ Verletคุณจะคำนวณระยะทางตามเข็มนาฬิกาเป็นจำนวนมาก ในกรณีที่ไร้เดียงสามีเพียง 16% ของคู่อนุภาคที่ตรวจสอบจริง ๆ เท่านั้นจะอยู่ในระยะทางตัดของกันและกัน แม้ว่าจะไม่มีการคำนวณการโต้ตอบสำหรับคู่เหล่านี้ แต่การเข้าถึงข้อมูลอนุภาคและการคำนวณระยะทางตามเข็มนาฬิกาคู่เก๊นั้นมีค่าใช้จ่ายสูง

การทำงานของตัวเองในพื้นที่นี้ ( ที่นี่ , ที่นี่และที่นี่ ) เช่นเดียวกับของคนอื่น (เช่นที่นี่ ) แสดงให้เห็นว่าการคำนวณปลอมเหล่านี้สามารถหลีกเลี่ยงได้ อัลกอริธึมการค้นหาเพื่อนบ้านเหล่านี้แม้กระทั่งทำรายการ Verlet ที่ไม่ได้ผล

จุดที่ฉันต้องการเน้นคือแม้ว่าอาจจะมีการปรับปรุงบางอย่างเพื่อให้ได้มาซึ่งการรู้ / การใช้ประโยชน์จากสถาปัตยกรรมฮาร์ดแวร์พื้นฐานที่ดีกว่า


6
SSE rsqrtpsและ AVX vrsqrtpsเป็นค่าประมาณพวกเขาได้รับ 11 ถึง 12 บิตแรกที่ถูกต้องและคุณควรปรับแต่งด้วยการวนซ้ำแบบนิวตันหรือสองครั้งหากคุณต้องการความแม่นยำมากขึ้น คำแนะนำเหล่านี้คือ 5/1 และ 7/1 (latency / inverse throughput) คำแนะนำบน Sandy Bridge (ดู Intel docs หรือตารางคำสั่งของ Agner Fogซึ่งเปรียบได้กับการคูณในทางตรงกันข้ามความแม่นยำเต็ม(v)sqrtps(หรือความแม่นยำสองเท่า(v)sqrtpd) ใช้เวลา 10-43 / 10-43 (ดูตารางการเรียนการสอนเพื่อดูรายละเอียด)
Jed Brown

@JedBrown: ขอบคุณที่ชี้ให้เห็น! ฉันลืมไปว่า SSE และส่วนขยายนั้นมีให้เช่นกัน
Pedro

16

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

วิธีการใช้งานในฮาร์ดแวร์อาจแตกต่างกันไป แต่มันอาจจะเป็นการวนซ้ำของจุดคงที่ตัวอย่างเช่นวิธีของ Newton-Raphson ซึ่งทำจำนวน iterates ที่เฉพาะเจาะจงจนกว่าจะคำนวณจำนวนตัวเลขที่ต้องการ วิธีการทำซ้ำในฮาร์ดแวร์โดยทั่วไปจะช้ากว่าการดำเนินการอื่น ๆ เนื่องจากหลายรอบจะต้องเสร็จสิ้นก่อนที่ผลลัพธ์จะพร้อม

นอกจากนี้ยังมีคำแนะนำ Streaming SIMDซึ่งสามารถนำมาใช้ในการลงทะเบียนสำหรับการคำนวณ XMM เวกเตอร์ได้อย่างรวดเร็วพบได้ที่นี่ การลงทะเบียนเหล่านี้มีขนาดค่อนข้างเล็ก แต่ถ้าคุณมีจำนวนพิกัดที่รู้จัก (กล่าวว่าระบบพิกัดคาร์ทีเซียนสามมิติ) พวกเขาสามารถเร็วขึ้นเล็กน้อย

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

มันควรจะง่ายพอที่จะเปรียบเทียบภาษาที่แตกต่างกัน: เพียงแค่เขียนหมายเลขสุ่มชุดยาวไปยังไฟล์โหลดมันโดยใช้ภาษาที่แตกต่างกันแล้วเวลารากที่สอง


0

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

โครงการ MD ของ GROMACS เกิดขึ้นจากความคิดที่จะใช้ประโยชน์จากรายละเอียดของรูปแบบจุดลอยตัว IEEE เพื่อจัดทำรูปแบบการคำนวณซ้ำของ Newton-Raphson สำหรับการคำนวณการประมาณที่ยอมรับได้ซึ่งกันและกันของสแควร์รูท (ดูภาคผนวก B.3 ของhttp: / /www.gromacs.org/Documentation/Manual ) แต่ไม่มีซีพียู HPC ที่ใช้งานอยู่ที่ GROMACS ยังคงใช้แนวคิดนี้อยู่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.