2013-06-28 9 views
6

के लिए ओपनसीएल संकलित करने के लिए एलएलवीएम 3.3 बैकएंड का उपयोग करना एएमडी कार्ड पर OpenCL clCreateProgramWithBinary API को पास करने के लिए उपयुक्त बाइनरी उत्पन्न करने के लिए एलएलवीएम 3.3 के अंदर नए R600 बैकएंड का उपयोग कैसे करता है? क्या यह करने के लिए कोई कोड नमूने हैं?एएमडी

मैंने एएमडी के लिए संकलन के लिए एक क्लैंग कमांड लाइन देखी है, लेकिन मैंने ड्राइवर के साथ आउटपुट का उपयोग करने के लिए कहीं भी देखा है।

बहुत बहुत धन्यवाद।

+0

आपका ओएस क्या है? –

उत्तर

1

आप llvm/test/CodeGen/R600 में परीक्षण के मामलों को पढ़ सकते हैं।

उदाहरण के लिए: add.ll

;RUN: llc < %s -march=r600 -mcpu=redwood | FileCheck %s 

;CHECK: ADD_INT T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 

;CHECK: ADD_INT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 

;CHECK: ADD_INT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 

;CHECK: ADD_INT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 

define void @test(<4 x i32> addrspace(1)* %out, <4 x i32> addrspace(1)* %in) { 

    %b_ptr = getelementptr <4 x i32> addrspace(1)* %in, i32 1 

    %a = load <4 x i32> addrspace(1) * %in 

    %b = load <4 x i32> addrspace(1) * %b_ptr 

    %result = add <4 x i32> %a, %b 

    store <4 x i32> %result, <4 x i32> addrspace(1)* %out 

    ret void 
} 

तो फिर तुम बस सीधे उत्पादन clCreateProgramWithBinary के माध्यम से उपयोग कर सकते हैं।

0

शायद आप libclc OpenCL के अंतर्निहित कार्यों का उपयोग करने के लिए (https://libclc.llvm.org/)
दुर्भाग्य से उपयोग करना चाहिए। यह LLVM की आवश्यकता है 3.7 या अधिक होने की।
ऐसा इसलिए है क्योंकि एलएलवीएम 3.7 और बाद में केवल एएमडी जीपीयू बैकएंड का समर्थन करता है। एलएलवीएम 3.3 में, क्लैंग में कोई ओपनक्ल फ्रंट-एंड नहीं है, न ही एमएमडी-जीपीयू एलएलवीएम में बैकएंड।
(बजना 3.3: http://releases.llvm.org/3.3/tools/clang/docs/UsersManual.html)
(LLVM 3.3: http://releases.llvm.org/3.3/docs/index.html)
(LLVM 3.7: http://releases.llvm.org/3.7.0/docs/AMDGPUUsage.html)
(। क्यों एएमडी GPU बैक-एंड समर्थन रिलीज नोट में नहीं है मैं नहीं जानता)

इसलिए यदि आप एएमडी जीपीयू के लिए ओपनसीएल कर्नेल को संकलित करना चाहते हैं, तो आपको एलएलवीएम संस्करण 3.7 या बाद में उपयोग करने की आवश्यकता होगी।

यदि आप एलएलवीएम 3.3 का उपयोग नहीं कर सकते हैं, तो R600 बैकएंड देखें। मैं बिल्कुल नहीं जानता, लेकिन एएमडीजीपीयू बैकएंड का पूर्व नाम आर 600 बैकएंड है। (https://www.phoronix.com/scan.php?page=news_item&px=amd-r600-amdgpu-llvm)

संबंधित मुद्दे