การเปรียบเทียบประสิทธิภาพของตารางค้นหา Trig เพิ่มขึ้นเทียบกับการใช้ CPP

เรากำลังพัฒนาระบบแบบเรียลไทม์ที่จะดำเนินการคำนวณ sin/cos ในช่วงเวลาวิกฤตของการดำเนินการ เรากำลังพิจารณาใช้ตารางค้นหาเพื่อช่วยในเรื่องประสิทธิภาพ และฉันกำลังพยายามเปรียบเทียบประโยชน์/ต้นทุนของการนำตารางไปใช้ ขออภัย เรายังไม่ทราบว่าเราต้องการความแม่นยำระดับใด แต่น่าจะประมาณทศนิยมประมาณ 5-6 จุด

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

ขอบคุณ!


person errah    schedule 15.09.2010    source แหล่งที่มา


คำตอบ (3)


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

person Mark B    schedule 15.09.2010

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

ฉันเคยเห็นสิ่งนี้นำไปใช้เป็นอาร์เรย์ที่จัดทำดัชนีหนึ่งในร้อยขององศา (การรักษามุมเป็นจำนวนเต็มโดยมีจุดทศนิยมโดยนัยสองจุดยังช่วยในการคำนวณ - ไม่จำเป็นต้องใช้มุมทศนิยมที่มีความแม่นยำสูง / มุมเรเดียนสองเท่า)

เก็บค่า SIN 0.00 ถึง 90.00 องศา จะเป็นค่าผลลัพธ์ทศนิยม 32 บิต 9001

บาป[0] = 0.0 ... บาป[4500] = 0.7071068 ... บาป[9000] = 1.0

หากคุณมี SIN คุณสมบัติตรีโกณมิติของ COS(a) = SIN(90-a) หมายความว่าคุณทำ SIN[9000-a] เพื่อรับ COS(a)

หากคุณต้องการความแม่นยำมากขึ้น แต่ไม่มีหน่วยความจำสำหรับพื้นที่ตารางเพิ่มขึ้น คุณสามารถทำการประมาณค่าเชิงเส้นระหว่างสองรายการในอาร์เรย์ เช่น SIN ของ 45.00123 จะเป็น

บาป[4500] + 0.123 * (บาป[4501] - บาป[4500])

person franji1    schedule 16.09.2010

วิธีเดียวที่จะทราบลักษณะการทำงานของทั้งสองวิธีคือ ลองใช้

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

อย่างไรก็ตาม สิ่งหนึ่งที่คุณสามารถทำได้คือค้นหาเวลาแฝงของคำสั่งในคู่มือสำหรับ CPU ของคุณ (Intel และ AMD มีข้อมูลนี้ในรูปแบบ PDF บนเว็บไซต์ และผู้ผลิต CPU รายอื่นๆ ส่วนใหญ่ก็มีเอกสารที่คล้ายกัน)

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

แต่นั่นช่วยให้คุณประมาณค่าด้านหนึ่งของสมการคร่าวๆ ได้เท่านั้น คุณอาจประมาณต้นทุนคร่าวๆ ของตารางค้นหาได้เช่นเดียวกัน หากคุณทราบเวลาแฝงของแคชของ CPU และคุณมีแนวคิดคร่าวๆ เกี่ยวกับเวลาแฝงในการเข้าถึงหน่วยความจำ

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

person jalf    schedule 16.09.2010