สร้างเคอร์เนล AMD OpenCL โดยใช้รหัส Assembly

ฉันต้องการสร้างเคอร์เนล OpenCL ที่ทำงานบน AMD GPU (Fury Nano) โดยพื้นฐานแล้วฉันต้องการเขียนเคอร์เนลแบบร่างโดยใช้ OpenCL และใช้ OpenCL API เพื่อส่งออกโค้ดแอสเซมบลีโดยใช้ clGetProgramInfo จากนั้นผมจะแก้ไขโค้ดแอสเซมบลีและโหลดกลับเข้าสู่โปรแกรมโดยใช้ clcreateprogramwithbinary

มีวิธีใดบ้างที่จะทำเช่นนี้?


person Zk1001    schedule 08.10.2016    source แหล่งที่มา


คำตอบ (2)


หากคุณเพิ่ม "–save-temps" ในการเรียกใช้โปรแกรมสร้าง (หรืออะไรก็ตามที่เรียกว่า) คุณจะเห็นไฟล์แอสเซมบลีที่สร้างขึ้น คุณสามารถแก้ไขสิ่งเหล่านี้ จากนั้นจึงสร้างโปรแกรม opencl จากแอสเซมบลีนี้

อีกวิธีหนึ่งในการรับเอาต์พุตแอสเซมบลีเพื่อสร้าง llvm พร้อมการรองรับ amd gpu จากนั้นคอมไพล์สิ่งนี้เพื่อแอสเซมบลีโดยใช้แฟล็ก -S

บรรทัดคำสั่งที่ฉันใช้สำหรับ polaris10 โดยมี opencl มาตรฐาน 2.0 คือ:

clang -std=CL2.0 -target amdgcn-amd-amdpal-opencl -mcpu=polaris10 -S -c foo.cl -O3

คุณต้องแก้ไข foo.cl เพื่อรวม opencl-ch.h ด้วยการเพิ่ม

#include <opencl-c.h>

ไปที่บรรทัดแรกของไฟล์ต้นฉบับ opencl

จากนั้นจะสร้างไฟล์แอสเซมบลีเป็น foo.s ในไดเร็กทอรีปัจจุบัน หากต้องการสร้างโค้ดสำหรับ R9 fury ให้เปลี่ยน mcpu เป็น fiji เช่น.

... -mcpu=fiji ...
person Community    schedule 19.03.2018
comment
แล้วการสร้างโปรแกรม opencl จากโค้ดแอสเซมบลีล่ะ? - person ; 20.03.2018
comment
เพียงรวมแหล่งแอสเซมบลีในโปรแกรม opencl เป็นแอสเซมบลีแบบอินไลน์ในไฟล์ c - person ; 20.03.2018

ฉันแนะนำให้ใช้ CLRadeonExtender ซึ่งเป็นแอสเซมเบลอร์ที่แท้จริงสำหรับ AMD GCN GPU ที่รองรับทั้งหมด รันไทม์ OpenCL หลักทั้งบน Windows และ Linux ฉันมีประสบการณ์เชิงบวกกับมันมาก

person Ivan Siutsou    schedule 25.05.2020