เหตุใดชิป ARM จึงมีคำสั่งกับ Javascript ในชื่อ (FJCVTZS)


148

FJCVTZSคือ "Floating-point Javascript Convert to Signed fixed-point, rounding towards Zero" รองรับชิป Arm v8.3-A และใหม่กว่า ซึ่งเป็นเรื่องแปลกเพราะคุณไม่คาดคิดว่าจะได้เห็น JavaScript ใกล้เคียงกับ bare metal

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


4
สนับสนุนคำพูดนั้น: ToInt32เอ็นจิ้นJavaScript ต้องดำเนินการนี้ (ซึ่งเรียกว่าในข้อมูลจำเพาะ) เมื่อใดก็ตามที่คุณใช้ตัวดำเนินการแบบบิตกับตัวเลขและในช่วงเวลาอื่น ๆ (เว้นแต่ว่าเอ็นจิ้นจะสามารถรักษาจำนวนให้เป็นจำนวนเต็มเป็นจำนวนเต็ม การเพิ่มประสิทธิภาพ แต่ในหลายกรณีไม่สามารถทำได้)
TJ Crowder

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

1
@ ฉันเห็นด้วยกับ TJ รายงานการประชุมไม่อยู่ในหัวข้อ (และฉันคิดว่าพวกเขาถูก จำกัด ด้วยดังนั้นคุณแทบจะไม่สามารถมีได้) แต่การเรียกใช้ JavaScript บนอุปกรณ์ที่ใช้ ARM เป็นสิ่งที่ควรดูที่การสร้างอุปกรณ์ IoT ด้วย JavaScript
Adriano Repetti

@TimSmith ขอบคุณสำหรับความร่วมมือ ลองดูว่าเราจะเปิดคำถามนี้ใหม่ได้ไหม
fuz

คำตอบ:


132

เป็นเพราะ JS ใช้ความแม่นยำสองเท่าสำหรับตัวเลข แต่ถ้าคุณต้องการดำเนินการกับบิตงานจะไม่สำคัญดังนั้นคำสั่งเฉพาะในการแปลง JS double เป็นจำนวนเต็มทำให้ง่ายขึ้น

ลิงค์ ARM นี้อธิบายได้เป็นอย่างดี: https://community.arm.com/processors/b/blog/posts/armv8-a-architecture-2016-additions

เพื่อเพิ่มข้อมูลเพิ่มเติมเกี่ยวกับความคิดเห็นของ fuz ความแตกต่างระหว่างFCVTZSและFJCVTZS(ทั้งสองอย่างแปลงทศนิยมเป็น int) คือในกรณีที่ล้นFJCVTZSค่าจะเป็น 0x80000000 แทนที่จะล้น นอกจากนี้ยังFJCVTZSสามารถสร้างข้อยกเว้นเพื่อระบุว่าการแปลงเป็นอย่างไร (กล่าวคือไม่แน่นอน)

FJCVTZS: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0801g/hko1477562192868.html

FCVTZS: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0802a/FCVTZS_float_int.html


8
คุณควรอธิบายว่าเหตุใดFCVTZSคำสั่งที่มีอยู่จึงไม่เพียงพอสำหรับงาน
fuz

13
มันไม่เพียงพอมันช้ามาก (สมมติว่าอย่างน้อย 2/3 ครั้ง) เพราะมันต้องมีคำสั่งที่แตกต่างกัน 10 คำสั่งในการทำงานเดียวกัน แน่นอนว่าผลกระทบต่ออัลกอริทึมที่ใหญ่กว่านั้นต่ำกว่านั้นมาก แต่เมื่อทำงานกับ A53 ที่เล็กกว่าทั้งความเร็วและหน่วยความจำจะได้รับประโยชน์จากสิ่งนี้) ตอนนี้เรามาย้ายสิ่งนี้ไปเช่น V8 ที่คอมไพล์สำหรับ ARM และแน่นอนว่ามันจะคุ้มค่าสำหรับบางคน พื้นที่ CPU
Adriano Repetti

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