Buat kernel AMD OpenCL menggunakan kode Majelis

Saya ingin membuat kernel OpenCL yang berfungsi pada GPU AMD (Fury Nano). Pada dasarnya saya ingin menulis draft kernel menggunakan OpenCL, dan menggunakan OpenCL API untuk menampilkan kode Majelis menggunakan clGetProgramInfo. Dan kemudian saya akan memodifikasi kode Majelis dan memuatnya kembali ke program menggunakan clcreateprogramwithbinary.

Apakah ada cara yang mungkin untuk melakukan ini?


person Zk1001    schedule 08.10.2016    source sumber


Jawaban (2)


Jika Anda menambahkan "–save-temps" ke pemanggilan program pembuatan (atau apa pun namanya), Anda akan melihat file perakitan yang dihasilkan. Anda dapat memodifikasinya dan kemudian membuat program opencl dari perakitan ini.

Cara lain untuk mendapatkan keluaran perakitan adalah dengan membangun llvm dengan dukungan untuk amd gpu dan kemudian mengkompilasinya ke perakitan menggunakan flag -S.

Baris perintah yang saya gunakan untuk polaris10, dengan opencl standard 2.0 adalah:

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

Anda perlu memodifikasi foo.cl untuk memasukkan opencl-ch, dengan menambahkan

#include <opencl-c.h>

ke baris pertama file sumber opencl.

Ini kemudian akan menghasilkan file Majelis sebagai foo.s di direktori saat ini. Untuk menghasilkan kode kemarahan R9, ubah mcpu menjadi fiji. yaitu.

... -mcpu=fiji ...
person Community    schedule 19.03.2018
comment
Bagaimana dengan menghasilkan program opencl dari kode perakitan? - person ; 20.03.2018
comment
Cukup sertakan sumber perakitan dalam program opencl sebagai perakitan inline dalam file c. - person ; 20.03.2018

Saya menyarankan untuk menggunakan CLRadeonExtender, yang merupakan assembler nyata untuk GPU AMD GCN dengan dukungan semua runtime OpenCL utama baik di Windows dan Linux. Saya memiliki pengalaman yang sangat positif dengannya.

person Ivan Siutsou    schedule 25.05.2020