ฉันจะรู้ได้อย่างไรว่าโค้ดของฉันถูกแปลงเป็น vectorized โดยคอมไพเลอร์?


9

ดังที่อธิบายโดย Jed Brown คำตอบของต้นทุนการค้นหาและการคำนวณโดยใช้ vectorized vs non-vectorized floating point จะส่งผลให้เกิดโค้ดที่เร็วขึ้น คอมไพเลอร์สมัยใหม่หลายคนอ้างว่าพวกเขาสามารถทำการ vectorization อัตโนมัติได้ ฉันจะกำหนดส่วนของรหัสของฉันให้สำเร็จได้อย่างไร

คำตอบ:


10

ด้วยคอมไพเลอร์ของ Intel -O3 -vec-report3วินเทจที่ทันสมัยใด การปรับให้เหมาะสมในระดับที่สามรับประกันว่าจะพยายามทำให้เป็นเวกเตอร์และรายงานเวกเตอร์จะบอกคุณว่ากำลังทำอะไรอยู่

หน้า GNU เกี่ยวกับ vectorization บอกว่ามันเป็นค่าเริ่มต้นที่การเพิ่มประสิทธิภาพระดับ 3 แต่ฉันไม่สามารถหารายงาน vec ที่เทียบเท่าได้


ขอบคุณสำหรับการตอบสนองอย่างรวดเร็ว. ฉันไม่รู้เกี่ยวกับ -vec-report3 คุณมีการตั้งค่าคอมไพเลอร์เมื่อมันมาถึงสิ่งประเภทนี้ (vectorization อัตโนมัติ) หรือไม่?
Matthew Emmett

คอมไพเลอร์ของ Intel นั้นดีมาก แต่สำหรับชิป Intel เท่านั้น คุณเพียงแค่ต้องเพิ่ม pragmas ที่ถูกต้องทั้งหมด (#pragma ivdep ง่ายที่สุด) GCC 4.7 ได้ดีขึ้นมาก แต่การดูรหัสบางส่วนกับเพื่อนร่วมงานก็ยังมีข้อบกพร่องอยู่ (เช่นไม่มี vectorization ใน openmp pragmas)
aterrel

1
ฉันขอแนะนำให้ตรวจสอบอีกครั้งว่า Intel คอมไพเลอร์ทำกับ vectorization บนชิป AMD ได้อย่างไร ฉันไม่แน่ใจ 100% ว่าปัญหาเก่ายังคงอยู่
Bill Barth

2
@BillBarth ใช่ยังมีปัญหาอยู่ ดูประกาศการเพิ่มประสิทธิภาพ (ในหลายสถานที่เช่นsoftware.intel.com/sites/products/collateral/hpc/compilers/ ...... ) เอเอ็มดีชนะสงครามในสนามเพื่อให้ Intel เปิดเผยว่าพวกเขาต่อต้านการแข่งขันไม่ใช่เพื่อหยุดยั้ง en.wikipedia.org/wiki/Intel_C%2B%2B_Compiler#Criticism Agner Fog ในการแก้ไขปัญหา: agner.org/optimize/blog/read.php?i=49
Jed Brown

@JedBrown แน่ใจว่า SSE ยังแปลกอยู่ แต่เรื่องราวของ AVX คืออะไร? ลิงก์เหล่านั้นบ่งบอกว่าสิ่งต่าง ๆ น่าจะดี (เนื่องจากทั้งสอง บริษัท ติดตั้ง AVX) แต่ฉันไม่ได้ทำการทดสอบบนเครื่อง Bulldozer
Bill Barth


5

ด้วยคอมไพเลอร์ GNU การเพิ่ม-Wa,-ahl=asm.sจะทำการถ่ายโอนรหัสแอสเซมบลีที่สร้างขึ้นไปasm.sจะถ่ายโอนรหัสการประกอบสร้างขึ้นเพื่อ

ด้วยคอมไพเลอร์ของ Intel การเพิ่ม-fcode-asm -Faasm.sจะทำการถ่ายโอนรหัสที่สร้างขึ้นไปasm.sจะถ่ายโอนโค้ดที่สร้างขึ้นเพื่อ

จากนั้นคุณสามารถตรวจสอบรหัสแอสเซมบลีและค้นหาการดำเนินงานของเวคเตอร์จุดลอย


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