Clang 3.0은 OpenCL을 ptx로 컴파일하고 Nvidia의 도구를 사용하여 GPU에서 ptx 코드를 실행할 수 있습니다. 어떻게해야합니까? 구체적으로 기재하십시오.clang을 사용하여 OpenCL을 ptx 코드로 컴파일하는 방법?
답변
구체적인 예를 보려면 Justin Holewinski's blog을, 샘플에 대한 자세한 단계 및 링크는 this thread을 참조하십시오.
다음은 Clang 트렁크 (이 시점에서 3.4)와 libclc를 사용하여 수행하는 방법에 대한 간략한 안내서입니다. LLVM과 Clang을 구성하고 컴파일하는 방법에 대한 기본적인 지식이 있다고 가정하고, 필자가 사용했던 configure 플래그를 나열했습니다. nvptx 지원
__kernel void vector_square(__global float4* input, __global float4* output) {
int i = get_global_id(0);
output[i] = input[i]*input[i];
}
컴파일 LLVM과 그 소리 :
square.cl
../llvm-trunk/configure --prefix=$PWD/../install-trunk --enable-debug-runtime --enable-jit --enable-targets=x86,x86_64,nvptx make install
(자식 클론 http://llvm.org/git/libclc.git)를 libclc 가져 오기 및 컴파일. 당신은 문제가이 컴파일이있는 경우
./configure.py --with-llvm-config=$PWD/../install-trunk/bin/llvm-config make
당신은 LLVM IR의 assember에 ./utils/prepare-builtins.cpp
-#include "llvm/Function.h"
-#include "llvm/GlobalVariable.h"
-#include "llvm/LLVMContext.h"
-#include "llvm/Module.h"
+#include "llvm/IR/Function.h"
+#include "llvm/IR/GlobalVariable.h"
+#include "llvm/IR/LLVMContext.h"
+#include "llvm/IR/Module.h"
컴파일 커널 헤더의 몇 가지 문제를 해결해야 할 수도 있습니다 :
clang -Dcl_clang_storage_class_specifiers -isystem libclc/generic/include -include clc/clc.h -target nvptx -xcl square.cl -emit-llvm -S -o square.ll
-
llvm-link libclc/nvptx--nvidiacl/lib/builtins.bc square.ll -o square.linked.bc
컴파일이 완전히 PTX
에 LLVM IR를 연결 libclcclang -target nvptx square.linked.bc -S -o square.nvptx.s
square.nvptx.s에서 내장 구현 : LLVM의 현재 버전
//
// Generated by LLVM NVPTX Back-End
//
.version 3.1
.target sm_20, texmode_independent
.address_size 32
// .globl vector_square
.entry vector_square(
.param .u32 .ptr .global .align 16 vector_square_param_0,
.param .u32 .ptr .global .align 16 vector_square_param_1
)
{
.reg .pred %p<396>;
.reg .s16 %rc<396>;
.reg .s16 %rs<396>;
.reg .s32 %r<396>;
.reg .s64 %rl<396>;
.reg .f32 %f<396>;
.reg .f64 %fl<396>;
ld.param.u32 %r0, [vector_square_param_0];
mov.u32 %r1, %ctaid.x;
ld.param.u32 %r2, [vector_square_param_1];
mov.u32 %r3, %ntid.x;
mov.u32 %r4, %tid.x;
mad.lo.s32 %r1, %r3, %r1, %r4;
shl.b32 %r1, %r1, 4;
add.s32 %r0, %r0, %r1;
ld.global.v4.f32 {%f0, %f1, %f2, %f3}, [%r0];
mul.f32 %f0, %f0, %f0;
mul.f32 %f1, %f1, %f1;
mul.f32 %f2, %f2, %f2;
mul.f32 %f3, %f3, %f3;
add.s32 %r0, %r2, %r1;
st.global.f32 [%r0+12], %f3;
st.global.f32 [%r0+8], %f2;
st.global.f32 [%r0+4], %f1;
st.global.f32 [%r0], %f0;
ret;
}
(3.4), libclc 및 nvptx 백엔드에서 컴파일 프로세스가 약간 변경되었습니다.
nvptx 백엔드에 사용할 드라이버 인터페이스를 명시 적으로 말해야합니다. nvptx-nvidia-cuda 또는 nvptx-nvidia-nvcl (OpenCL 용) 및 해당 64 비트에 해당하는 nvptx64-nvidia-cuda 또는 nvptx64-nvidia-nvcl이 있습니다.
생성 된 .ptx 코드는 선택한 인터페이스에 따라 약간 다릅니다. CUDA 드라이버 API 용으로 생성 된 어셈블리 코드에서 intrinsics .global 및 .ptr은 입력 함수에서 제외되지만 OpenCL에서는 필요합니다.
컴파일 LLVM에 IR :
clang -Dcl_clang_storage_class_specifiers -isystem libclc/generic/include -include clc/clc.h -target nvptx64-nvidia-nvcl -xcl test.cl -emit-llvm -S -o test.ll
링크 커널 :
llvm-link libclc/built_libs/nvptx64--nvidiacl.bc test.ll -o test.linked.bc
나는 OpenCL을 호스트와 함께 실행할 수있는 코드를 생성하기 위해 약간 미카엘의 컴파일 단계를 수정 한 컴파일하여 Ptx :
clang -target nvptx64-nvidia-nvcl test.linked.bc -S -o test.nvptx.s
나를 위해 2 단계에서 2 개의 입력을 적절하게 연결하기 위해 전환해야했습니다. 출처 : https://groups.google.com/forum/#!msg/llvm-dev/Iv_u_3wh4lU/XINHv5HbAAAJ – Andrew
- 1. llvm + clang을 사용하여 stm32 용으로 컴파일하는 방법
- 2. Eclipse를 사용하여 clang을 디버깅하는 방법
- 3. ocaml을 원시 코드로 컴파일하는 방법
- 4. clang을 사용하여 C++ 파일을 컴파일하는 중 오류가 발생했습니다.
- 5. MSIL 코드로 컴파일하는 C#
- 6. Clang을 사용하여 PHP 스택 컴파일
- 7. clang을 사용하여 C++ 코드 분석
- 8. OpenCL을
- 9. Clang을 사용하여 현재 버전에서 AST를 얻는 방법?
- 10. 바이트 코드로 컴파일하는 동기는 무엇입니까?
- 11. Clang을 사용하여 콜 그래프 생성
- 12. OpenCL을 image2d_t는
- 13. 어셈블리 언어를 기계어 코드로 컴파일하는 단계는 무엇입니까?
- 14. Arduino를 사용하여 스케치를 컴파일하는 방법
- 15. Eclipse를 사용하여 PMD를 컴파일하는 방법
- 16. CodeRunner를 사용하여 SecureUDID를 컴파일하는 방법
- 17. clang을 사용하여 블록에 대한 사용자 정의 retain-release 구현 방법
- 18. OpenCL을 사용하여 배열을 검색하고 플래그를 설정하십시오.
- 19. NVIDIA GPU에서 ptx 코드를 컴파일 하시겠습니까?
- 20. 종료 코드 1을 사용하여 clang을 실패했습니다.
- 21. 별칭 CC를 사용하여 쉘에서 Clang을 참조 하시겠습니까?
- 22. clang을 사용하여 프로그램을 컴파일하고 연결할 수 없습니다.
- 23. OS X에서 MonoDevelop와 함께 Clang을 사용하는 방법?
- 24. 여러 GCC-LLVM 및 clang을 사용하는 방법
- 25. OpenCL을 행동 --- 필요 설명
- 26. iOS 용 CUnit을 컴파일하는 방법
- 27. Cygwin을 사용하여 코르크 스크루를 컴파일하는 방법
- 28. maven을 사용하여 atl 파일을 컴파일하는 방법
- 29. qmake를 사용하여 autotools를 QT 모듈로 컴파일하는 방법
- 30. QTCreator에서 mingw를 사용하여 여러 코어에서 컴파일하는 방법
블로그 링크가 더 이상 작동하지 않습니다. 또한 정확하게 기억한다면 그것은 더 이상 사용되지 않는 정보입니다. –
블로그 링크를 쉽게 수정했습니다. – sschuberth