목록프로그램 (94)
Brise
windows에서 tensorflow 설치(GPU) 윈도우 native에서 마지막으로 설치 가능한 tensorflow-gpu==2.10.1 버전을 설치하는 가이드입니다. tensorflow는 2.11버전 이후로 윈도우에서 gpu를 사용하기 위해서는 WSL2를 사용하여야 하며, tensorflow-gpu 패키지와 tensorflow 패키지가 통합됩니다. 필요 설치사항 NVIDIA 그래픽 카드 드라이버 CUDA Toolkit 11.8 cuDNN 8.9.1 Microsoft Visual C++ 재배포 가능 패키지 Anaconda anaconda 새로운 환경 생성 Anaconda Prompt를 실행하고 아래 명령을 넣어 tensorflow를 실행하기 위한 환경을 생성한다. conda create -n tf pi..
ABI (Application Binary Interface)와 cdecl (C declaration)은 모두 프로그래밍에서 함수 호출 규약을 정의하는 방식입니다. ABI는 함수 호출 시에 전달되는 인자, 반환 값, 레지스터 사용 규칙, 스택의 구성 등의 로우 레벨의 세부 사항을 규정하는 인터페이스입니다. ABI는 컴파일러와 운영체제 간에 일관성 있게 함수 호출 규약을 유지하기 위해 사용됩니다. 반면에 cdecl은 함수가 호출될 때 스택에 인자를 어떤 순서로 push하고, 함수가 리턴할 때 스택에서 값을 가져올지 여부를 결정하는 방식입니다. cdecl은 C 언어에서 함수의 프로토타입 선언 시 사용되며, 함수 호출 규약에 대한 정보를 제공합니다. ABI와 cdecl의 차이점은 다음과 같습니다. ABI는 로..
PlantUML으로 ASCII-art UML 생성하기 준비사항 java PlantUML jar (plantuml.1.2023.5.jar 다운로드) ASCII Art 생성 방법 자바 설치 및 PlantUML 다운로드 cmd 실행(jar과 스크립트가 있는 폴더) 후 자바 동작여부 확인. C:\Users\envie\Downloads>java -version openjdk version "1.8.0_362" OpenJDK Runtime Environment (Temurin)(build 1.8.0_362-b09) OpenJDK 64-Bit Server VM (Temurin)(build 25.362-b09, mixed mode) puml 스크립트 작성(이 경우 hello.puml) @startuml particip..
import cupy as cp from cupy.cuda import StreamingPriorityQueue from numba import cuda # 그래프 정점의 개수 n = 6 # 인접 리스트로 그래프 생성 graph = [[] for _ in range(n)] graph[0].append(1) graph[0].append(2) graph[1].append(3) graph[2].append(3) graph[2].append(4) graph[3].append(5) graph[4].append(5) # DFS 함수 @cuda.jit(device=True) def dfs_kernel(graph, visited, v, visited_matrix): visited[v] = True visited_mat..
마크다운 예시 제목 및 글머리 This is Title ============ This is Subtitle ------------ # This is a Header Level1 ## This is a Header Level2 ### This is a Header Level3 #### This is a Header Level4 ##### This is a Header Level5 ###### This is a Header Level6 This is Title This is Subtitle This is a Header Level1 This is a Header Level2 This is a Header Level3 This is a Header Level4 This is a Header Level5 Th..
객체지향에서 인스턴스화 시킬 수 없는 클래스를 추상클래스라 한다. C++언어에서는 추상클래스를 함수의 값을 NULL(아마도 C언어에서 함수포인터를 NULL로 하는 것과 같은 듯 하다.)로 지정하는 것으로 추상 함수를 만들고, 추상함수를 가지고 있는 객체를 추상클래스로 지정한다. C++에서는 보통 인터페이스를 구현하고자 할 때 추상클래스를 이용하여, 인터페이스를 구현한 객체가 해당 인터페이스를 필수로 구현하도록 컴파일러 단계에서 강제하는 방식을 주로 사용한다. // 2_추상클래스 168 page #include // 추상 클래스 : 순수 가상함수가 한개 이상 있는 클래스 // 특징 : 객체를 만들수 없다. // 의도 : 특정 함수의 구현부를 제공하라고 지시 하는 문법. class Shape { public..
대부분의 C++ 프로그램에서는 객체를 핸들링하기 위해서 객체 포인터를 주로 사용하며, 파생클래스와 기반클래스 객체들을 일괄로 다루기 위해 기반클래스 포인터를 사용한다. 만약, 기반클래스 포인터를 이용하여 객체를 핸들링할 때, 객체의 소멸자가 가상함수가 아니라면 파생클래스를 소멸시킬 때 기반클래스의 포인터를 이용하여 소멸시키기 때문에 기반클래스의 소멸자가 불려 비정상적으로 객체를 소멸시키게 된다. 때문에 클래스의 소멸자는 가상함수(virtual function)이어야만 한다. // 1_가상소멸자 149 page #include // 핵심 : 모든 기반 클래스의 소멸자는 반드시 가상함수 이어야 한다. class Base { public: virtual ~Base() {} // 기반 클래스의 소멸자가 가상이면..
C++ 은 C가 아니다. C++와 C는 거의 호환되는 것처럼 보이지만, 실제로는 다르게 동작하고 있다. C++에서는 C에서 지원하지 않는 다형성과 같은 특징을 지원하고 있으며, 이를 위해서 mangling이라는 구조를 도입하여 여러 함수들과의 충돌을 방지하고 있다. mangling 방법은 컴파일러별로 상이하다. // 9_mangling // C 로 컴파일 하면 : 함수이름 Add(gcc), _Add(vc) // C++로 컴파일 하면 : ?Add@XXYYH@Z(VC++), ??(g++) // name mangling : C++ 컴파일러가 함수이름을 변경하는 것 // => 함수 오버로딩 때문에 Add 함수가 여러개 일수 있으므로 int Add(int a, int b) { return a + b; } int ..