คำถามติดแท็ก gpgpu

1
ทำไมการห้ามเรียกซ้ำใน OpenCL
ฉันต้องการใช้ OpenCL เพื่อเร่งการเรนเดอร์ภาพเรย์ท แต่ฉันสังเกตเห็นว่าหน้าวิกิพีเดียอ้างว่าการห้ามเรียกซ้ำนั้นเป็นสิ่งต้องห้ามใน Open CL มันเป็นเรื่องจริงเหรอ? ในขณะที่ฉันใช้การเรียกซ้ำอย่างครอบคลุมเมื่อต้องทำการเรย์ทติ้งนี่จะต้องใช้การออกแบบจำนวนมากเพื่อให้ได้ประโยชน์จากความเร็วที่เพิ่มขึ้น ข้อ จำกัด พื้นฐานที่ป้องกันการเรียกซ้ำคืออะไร มีวิธีใดบ้างไหม?

1
การซิงโครไนซ์การเรียกใช้ OpenGL Compute Shader อย่างต่อเนื่อง
ฉันมีตัวประมวลผลสองตัวที่ต้องดำเนินการในลำดับที่แน่นอนและเอาต์พุตที่ขึ้นอยู่กับอินพุตก่อนหน้า เป็นการดีที่ฉันจะไม่ต้องคัดลอกบัฟเฟอร์ฝั่งไคลเอ็นต์และทำงานทั้งหมดของฉันบน GPU พิจารณาฉันมีสองเฉดสีประมวลรวบรวมและเชื่อมโยงเป็นและprogram_one program_twoสมมติว่าฉันยังมีGL_SHADER_STORAGE_BUFFERที่มีข้อมูลที่ถูกเขียนไปโดยและอ่านโดยprogram_one program_twoฉันสามารถทำสิ่งต่อไปนี้ได้ไหม: glUseProgram(program_one); glBindBuffer(GL_SHADER_STORAGE_BUFFER, buffer); glBindBufferBase(GL_SHADER_STORAGE_BUFFER, index, buffer); glDispatchCompute(16, 16, 1); glUseProgram(program_two); glBindBuffer(GL_SHADER_STORAGE_BUFFER, buffer); glBindBufferBase(GL_SHADER_STORAGE_BUFFER, index, buffer); glDispatchCompute(16, 16, 1); มันรับประกันได้หรือไม่ว่าการร้องขอทั้งหมดของ shader การคำนวณแรกจะเสร็จสิ้นก่อนที่จะมีการร้องขอที่สอง (เพื่อหลีกเลี่ยงการแย่งข้อมูลระหว่างการอ่านและการเขียนbuffer)? ถ้าไม่ฉันจะซิงโครไนซ์มันได้อย่างไร?

1
GPU ของฉันกำลังรออะไรอยู่
ฉันกำลังเขียนโปรแกรม OpenCL เพื่อใช้กับ GPU AMD Radeon HD 7800 series ของฉัน ตามคู่มือการเขียนโปรแกรม OpenCLของ AMD รุ่น GPU นี้มีคิวฮาร์ดแวร์สองคิวที่สามารถทำงานแบบอะซิงโครนัสได้ 5.5.6 คิวคำสั่ง สำหรับหมู่เกาะเซาท์เทิร์นและหลังจากนั้นอุปกรณ์ต่าง ๆ สนับสนุนฮาร์ดแวร์คำนวณคิวอย่างน้อยสองรายการ ที่ช่วยให้แอปพลิเคชันเพิ่มปริมาณงานของการแจกจ่ายเล็กน้อยด้วยคิวคำสั่งสองรายการสำหรับการส่งแบบอะซิงโครนัสและการดำเนินการที่เป็นไปได้ คิวการคำนวณฮาร์ดแวร์ถูกเลือกตามลำดับต่อไปนี้: first queue = แม้กระทั่งคำสั่ง OCL, คิวที่สอง = คิว OCL แปลก ๆ ในการทำเช่นนี้ฉันได้สร้างคิวคำสั่ง OpenCL สองชุดแยกกันเพื่อป้อนข้อมูลไปยัง GPU โดยประมาณโปรแกรมที่ทำงานบนโฮสต์เธรดจะมีลักษณะดังนี้: static const int kNumQueues = 2; cl_command_queue default_queue; cl_command_queue work_queue[kNumQueues]; static …
11 gpgpu  opencl 

1
การคำนวณยอดต่อยอดใน OpenGL Tesselation
ฉันพยายามใช้การจำลองผ้าตามตำแหน่งโดยใช้การจัดการฮาร์ดแวร์ ซึ่งหมายความว่าฉันต้องการอัปโหลดรูปสี่เหลี่ยมควบคุมไปยังการ์ดกราฟิกจากนั้นใช้ tesselation และ geometry shading เพื่อสร้างโหนดในผ้า ความคิดนี้ตามหลังกระดาษ: Huynh, David "การจำลองผ้าโดยใช้ tessellation ฮาร์ดแวร์" (2011) วิทยานิพนธ์. สถาบันเทคโนโลยีโรเชสเตอร์ http://scholarworks.rit.edu/theses/265/ ฉันรู้วิธีการใช้ tesselation เพื่อสร้างจุดจำลอง สิ่งที่ฉันไม่รู้ก็คือวิธีเก็บข้อมูลที่คำนวณไว้ใน framebuffer รูปทรงเรขาคณิตและการประเมินค่า tesselation มีข้อมูลที่จำเป็นสำหรับการคำนวณต่อยอด แต่พวกเขาสามารถเขียนลงใน framebuffer โดยตรงได้หรือไม่ ส่วนที่ฉันรู้สามารถเขียนไปที่ framebuffer แต่ข้อมูลของฉันจะถูกแก้ไขและฉันจะไม่รู้ว่าจะเขียนตำแหน่งใดอีก

1
การเข้าถึงหน่วยความจำที่เหมาะสมที่สุดเมื่อใช้ตารางการค้นหาบน GPU?
ฉันกำลังสำรวจอัลกอริทึม isosurface บน GPU สำหรับโครงการปริญญาตรี ดังนั้นฉันจึงมีการใช้ซีพียูของ marching cubes ที่ดีและทำงานใน OpenFrameworks และตอนนี้อยู่ในขั้นตอนของการพยายามพอร์ตเข้ากับ GLSL compute shaders และพิจารณาข้อผิดพลาดก่อนที่ฉันจะดำดิ่งฉันเขียน Vert และ frag shaders ก่อนหน้านี้มันเป็นเรื่องใหม่สำหรับฉัน ปัญหาแรกของฉันคือวิธีใช้ตารางการค้นหาอย่างมีประสิทธิภาพในหลายสิบหรือหลายร้อยกระทู้ในเวิร์กกรุ๊ป ฉันเข้าใจว่า GPU มีหน่วยความจำประเภทต่าง ๆ สำหรับงานที่แตกต่างกัน แต่ไม่แน่ใจในการทำงานของแต่ละประเภทหรือชนิดที่จะใช้ ตาราง copypasta คลาสสิกของ Paul Bourke เป็นอาร์เรย์ 256 * 16 ดังนั้นหากใช้ชนิดไบต์สเกลาร์สิ่งนี้น่าจะถูกบรรจุลงในพื้นผิว 4kb หรือ SSBO คำถามคือจะหยุดกระทู้ที่แตกต่างกันไม่ให้สะดุดกันได้อย่างไร คิวบ์จำนวนมากในแต่ละกลุ่มงานอาจมีการกำหนดค่าเดียวกันดังนั้นจึงพยายามเข้าถึงตำแหน่งเดียวกันในบัฟเฟอร์ในเวลาเดียวกัน มีวิธีแก้ปัญหาหรือการเพิ่มประสิทธิภาพเพื่อจัดการกับสิ่งนี้หรือไม่?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.