본문 바로가기

전체 글

(23)
15_LLVM 플러그인 적용 오류 makefile LIBRARY=NamePrinter.so SOURCES=NamePrinter.cpp NamePrinter.cpp ifneq ($(LIBRARY),) EXTRA_FLAGS=-fpic -fno-rtti endif OBJECTS=$(SOURCES:.cpp=.o) .PHONY: all all: $(LIBRARY) $(EXECUTABLE) $(LIBRARY): $(OBJECTS) clang++ -shared -o $@ $^ $(EXECUTABLE): $(OBJECTS) clang++ $^ -o $@ `llvm-config --ldflags --libs --system-libs` %.o: %.cpp clang++ -c $(EXTRA_FLAGS) `llvm-config --cppflags` $^ -o..
14_LLVM PROJECT 다운로드 및 빌드하기 1. LLVM & Clang 다운로드 https://github.com/llvm/llvm-project/releases/tag/llvmorg-12.0.0 Release LLVM 12.0.0 · llvm/llvm-project LLVM 12.0.0 Release github.com 이번 프로젝트에선 12.0.0 버전을 사용하기 때문에 해당 링크에서 소스를 다운 받는다. 다른 버전을 다운 받고 싶다면 (https://releases.llvm.org/download.html) 에 접속하여 다운로드 받으면 된다. 2. 빌드 1번에서 다운로드 받은 소스 코드를 압축 해제한 다음, 같은 디렉토리에 build 폴더를 생성한다. 터미널을 열고 빌드를 시작한다. cmake "llvm directory" sudo cmak..
13_LLVM IR 최적화하기 1. 최적화 명령어 opt -passes='instcombine,dce,gvn,dse' -S pythonArray.ll -o testOptimized.ll opt 명령어를 사용하면 llvm 내장에 있는 패스를 추가하여 ir을 최적화할 수 있다. -passes='pass이름'으로 사용할 수 있다. -S 옵션은 .ll 파일에 텍스트 형태로 저장해주는 역할을 한다. 2. 사용한 최적화 내장 pass 최적화 내장 pass는 LLVM 공식문서(https://llvm.org/docs/Passes.html) 에서 확인할 수 있다. LLVM’s Analysis and Transform Passes — LLVM 18.0.0git documentation This section describes the LLVM Analy..
12_LLVM IR : python_array 저번주에 C코드를 python으로 변환한 후 LLVM IR을 얻어내었다. 이번주엔 그 두 개의 코드 중 for문이 array를 돌며 각 요소를 더하는 코드에 대한 llvm ir을 해석해볼 것이다. C코드와 Python코드 #include int main() { int numbers[5] = { 31, 63, 62, 87, 14 }; int i; int sum = 0; for (i = 0; i < 5; i++) { sum += numbers[i]; } printf("sum: %d\n", sum); return 0; } #!/usr/bin/env python import numba as nb @nb.jit(nopython=True) def main(): sum = 0 for number in [31, 63,..
11_LLVM IR 팀원의 C코드를 챗지피티를 통해 python코드로 변경 후 LLVM IR로 변환하기 1. for문 #include int main(void) { int sum = 0; int i; for (i = 0; i pythonFor.ll pythonToLLVM.py :..
10_Python to C 이번주에는 파이썬에서 리스트, for문이 들어간 코드를 chatGPT에게 C코드로 변환해달라고 요청해보았다. 간단한 코드를 위주로 진행했다. 1. 일반적인 for문 일반적인 for문은 올바르게 변환해준다. 2. list append, del 사용 배열의 크기를 확장해야 할 경우, 동적 메모리 할당을 사용하여 필요한 크기만큼 메모리를 동적으로 할당해야 하는데 무작정 값을 넣고 있는 코드를 제공해줬다. 계속해서 변환을 요청해도 오류가 나는 코드만 제공해준다. 3. list에 다양한 타입이 들어있을 때 파이썬에서 리스트에 정수와 실수가 같이 들어있을 때 ChatGPT는 이를 그냥 double형 배열로 생성하여 코드를 제공한다.
9_ChatGPT API 사용해보기 (Python) 이번주에는 ChatGPT에게 파이썬 코드를 제공한 후 C언어로 변환을 요구하고 얻은 C코드가 처음 제공했던 파이썬 코드와 동일한지 검사하기 위해 일단 ChatGPT API를 사용하여 파이썬에서 질문을 하고 답변을 얻어내는 코드를 작성해보았다. 1. Openai에서 API 키 발급받기 https://openai.com/ 해당 사이트에 들어가서 로그인을 하고, API key를 발급 받는다. (오른쪽 상단 프로필 > View API keys) 현재는 무료 체험을 사용 중이라 사용 기한이 정해져있다. 2. Python code import openai openai.api_key = "본인의 API key" #변환할 코드가 작성된 파일명 입력 받고 해당 파일 코드 가져오기 fName = input("file na..
8_창의 축전 대회 후기 6월 말에는 지금 하고 있는 졸업 프로젝트를 주제로 창의 축전 대회에 참여했다. 아래는 발표 후 받은 질문들이다. 1. 함수나 클래스로 복잡한 코드가 구현이 될 때 이 도구를 만들 수 있는 게 가능한지, 이 도구가 일반화 될 수 있는지 의문이 든다. 2. 왜 C코드로 변환하는지 와닿지 않고 성능면에서 우월한 걸 보고 싶으면 바이너리 코드가 가장 빠르다. (왜 하필 C로 변환하는지) 이 도구를 제작하는 목적을 분명히 하면 좋을 것 같다. 3. 지금까지 한 것을 보면 파이썬 코드와 C코드를 둘 다 똑같이 작성한 걸 같은지 확인하고 있는데, 이게 무슨 의미가 있는지 모르겠다. 4. symbolic execution은 어떠한 기법인데 이 기법을 사용하는 이유를 모르겠다. 해당 질문들에 대해 더 생각해보는 것이 ..