ค่าใช้จ่ายของการค้นหาและการคำนวณ


12

ฉันสนใจในการตั้งค่าการคำนวณเพื่อตรวจสอบว่าเป็นเกณฑ์ระยะเป็นที่พอใจนั่นคือระยะห่างระหว่างเวกเตอร์และดอกไม้เวกเตอร์xเจควรจะน้อยกว่าบางค่าR x ข้อมูลของฉันถูกแบ่งพาร์ติชันตามตารางพิกัดฉาก เนื่องจากทางลัดของฉันมีขนาดเล็กกว่าระยะทางระหว่างจุดปลายของพิกัดที่ใกล้เคียงที่สุดเพื่อนบ้านฉันต้องการเพิ่มตัวแปร "octant" เพื่อตรวจสอบว่ามีการตั้งค่าอย่างถูกต้องหรือไม่:xixjrmax

if octant[j] in allowed_list continue

ในฐานะ "ลัดวงจร" ถึง

if dist(x[i], x[j]) < r_max

คำถามของฉันคือการค้นหาแบบบูลีนและการเปรียบเทียบที่มีประสิทธิภาพอย่างไรเมื่อเปรียบเทียบกับการดำเนินการทศนิยม? สิ่งนี้คุ้มค่าที่จะทำกับสถาปัตยกรรมสมัยใหม่หรือไม่?


3
คุณยินดีที่จะแยกรหัสของคุณและทดสอบหรือไม่ ฉันรู้สึกว่าคำตอบมาตรฐานของเหล่านี้ส่วนใหญ่ "ดีกว่าที่จะเขียนโค้ด (ทางเดียว) หรือ (อย่างอื่น)?" ประเภทของคำถามคือ "ลองทำและเปรียบเทียบ"
Geoff Oxberry

1
แค่ 2 เซ็นต์ของฉัน ตามที่เจฟฟ์เขียนคำแนะนำประเภทนี้คือสิ่งที่ฉันมักจะได้รับเมื่อฉันถามคำถามที่คล้ายกันใน stackoverflow เกี่ยวกับรหัส C ++: รหัสทุกอย่างก่อนจัดระเบียบรหัสเพื่อให้ฉันยังคงเป็นแบบแยกส่วนและใช้งานได้อีกครั้ง มีกฎ 80-20 ข้อ: ซอฟต์แวร์ใช้เวลา 80% ของรหัส 20% รอจนกว่าโครงสร้างจะอัพจากนั้นเปลี่ยน, ทดสอบ, เปลี่ยน, ทดสอบ ..
tmaric

@GeoffOxberry: คำถามของฉันไม่เฉพาะเจาะจง: ฉันแค่อยากรู้ว่ามีข้อได้เปรียบด้านฮาร์ดแวร์หรือคอมไพเลอร์ที่ได้รับจากการตรวจสอบบูลีนเทียบกับการดำเนินการจุดลอยตัวหรือไม่
aeismail

3
แต่คำถามของคุณกว้างเกินไป ไม่มีใครสามารถบอกได้โดยไม่เห็นรหัสที่เป็นรูปธรรม มีกฎง่ายๆที่บอกว่าแม้แต่โปรแกรมเมอร์ที่ดีที่สุดก็ไม่สามารถบอกได้ว่าคอขวดของรหัสของพวกเขาอยู่ที่ไหนโดยไม่ทำโปรไฟล์ ฉันใช้เวลา 25 ปีในการเขียนโปรแกรมและฉันรู้ว่ามันเป็นเรื่องจริงสำหรับฉัน
Wolfgang Bangerth

คำตอบ:


15

กฎง่าย ๆ ของฉันคือถ้าคุณสามารถคำนวณปริมาณได้อย่างมีประสิทธิภาพ (การใช้ประโยชน์จาก FPU ที่ดี) ในเวลาน้อยกว่า 50 flops ต่อค่าความแม่นยำสองเท่าจะดีกว่าการคำนวณใหม่เพื่อจัดเก็บ แนวโน้มซึ่งคงตัวมานานหลายทศวรรษแล้วนั้นคือความสามารถของจุดลอยตัวที่จะปรับปรุงได้เร็วกว่าประสิทธิภาพของหน่วยความจำและไม่น่าจะลดน้อยลงเนื่องจากข้อ จำกัด ทางกายภาพและความต้องการพลังงานของหน่วยความจำที่รวดเร็ว ค่า 50 นั้นมีขนาดที่เหมาะสมสำหรับแพลตฟอร์มคอมพิวเตอร์ยอดนิยมทั้งหมด (Intel / AMD, Blue Gene และ GPU)

ประมาณการค่าใช้จ่ายโดยประมาณต่อแกน

[แนวทางสำหรับ 2011/2012 เครื่องที่ใช้ Intel และ AMD]

  • 0.05
  • 0.2
  • 0.4
  • 0.40.8
  • 2
  • 35
  • 35
  • 5
  • 48
  • 12
  • 12
  • 3050
  • 100
  • 1031 μ
  • 10410 μ
  • 106
  • 2106MPI_Allreduce
  • 107
  • 5108
  • 1.81012

อ่านเพิ่มเติม


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