본문 바로가기

Working on15

/usr/bin/ld: cannot find -lm or cannot find -lc Recently, I'm working on package builds to operate our own software. However, an error message made me stuck in but I recently resolved it so, leave this working log for me and others. Issues For some reasons, we needed to build with -O2 -static options for g++. As the changes, I got the error messages like: /user/bin/ld: cannot find -lm /usr/bin/ld: cannot find -lc collect2: error: ld returned .. 2021. 11. 29.
[python] tabulate 에서 float , int , bool type 출력 문제 해결방법 프로젝트에서 table 을 구성하여 출력하기 위해 python 의 tabulate module을 계속해서 사용하고 있었다. 그런데 문제가 발생했는데, 그건 바로 type이 섞여있는 경우에 원하는 값을 정상적으로 출력 해 주지 못하는 점이다. 아래는 내가 겪었던 문제에 대해서 간단히 테스트코드를 통해 보여준다. 일단 일반적인 값을 출력하는데는 전혀 문제가 없다. data = [(1,2),(3,4)] print(data) columns = ['col1', 'col2' ] print("\n") print(tabulate(data, headers=columns)) # 출력 [(1, 2), (3, 4)] col1 col2 ------ ------ 1 2 3 4 여기에서 데이터를 조금 섞어보자. 그리고 floatf.. 2021. 11. 27.
[Linux] 파일삭제 시 옵션을 신중히 사용하자, rm 명령어 주의사항 오늘 정말 큰 곤혹을 치렀다. 사실 잘 해결되어서 다행이다 싶기는 한데.. 우리가 운영을 위해 사용하고 있는 경로의 파일을 지워버린 것이다. 사실 나는 어디까지 지워진 지도 모르지만 몇 가지 중요한 파일들이 지워진 것을 확인하고 일부 복원했다. 어떻게 지웠을까? 예시이기는 하지만 이렇게 경로 전체를 지워버렸다. rm -rf /user/abcd 바로 인지하고 취소하기는 했는데... 테이프 디스크를 쓰지 않는이상 삭제는 눈보다 빠르다. 이게 습관같이 되어서 보통 이렇게 지우곤 했는데, 잘 고쳐지지가 않는다. 바로 취소했고 시스템에 영향이 없어 보였음에도 불구하고, 나는 엄청나게 불안할 수 밖에 없었다. 그래서 그냥 로그 몇개 정도만 지워졌기를 바랄 뿐, 할 수 있는게 없어서 너무 난감했다. 하.. 이거 뭐가.. 2021. 11. 19.
[shell/csh] csh 에서 환경변수 설정하고 출력하는 방법 업무를 하다보면 환경변수 설정은 필수적이며, 이는 쉘 스크립트 종류마다 설정하는 방법이 조금 씩 다릅니다. 근래 일반적으로 사용하는 shell script의 경우 아래와 같은 방식을 사용하지만, csh 은 조금 다르게 설정합니다. 우선 bash 의 사례를 먼저 보고 넘어가겠습니다. bash export TEST=1234 echo $TEST 1234 처음에는 bash style로 만 환경변수를 설정하는 줄 알았었습니다. 사실 뭐 아무것도 모르던 시절이라.. (지금도 크게 다르진 않지만) 그냥 어느정도 약속 된 명령이구나 라고 생각을 했는데, 실제 업무를 수행하다 보니 꽤나 csh 을 기본 쉘로 사용하는 장비들이 많았고, 이런 쉘에서는 아래와 같이 환경변수 설정이 필요했습니다. csh setenv TEST .. 2021. 11. 17.
Hold someone accountable : '~에 책임을 지다' 를 영어로 누군가에게 '책임을 지게하다' 라는 표현을 하고싶을 때 어떤 표현을 사용하면 적절할까요? Give responsibility? Give a role of something? 이런 표현을 위한 적절한 idiom으로 'hold someone accountable' 이라는 표현이 있어서 이 표현으로 간단히 예문도 만들어 보았습니다. 'Hold somebody accountable/responsible' 표현의 사전적 의미는 다음과 같습니다. - to say or decide that someone should accept the responsibility for something bad that happens. 뭔가 나쁜일, 안좋은 영향이 있을 때 책임을 지운다는 의미를 전달하고 싶을 때 사용하는 표현이며, .. 2021. 6. 20.
NVIDIA NVTAGS ( Topology-Aware GPU Selection ) 메뉴얼 읽기 - 2 2. Getting started 이 섹션은 NVTAG 설치를 위한 요구사항과 설치방법 그리고 어떻게 사용하는지에 대한 내용을 제공한다. 2.1 사전 준비사항 NVTAGS를 설치하기 위한 사전 준비사항, 이해를 위한 내용은 아니니 가이드에서 보는게 빠르다. https://docs.nvidia.com/datacenter/nvtags/latest/nvtags-user-guide/index.html#nvtags-req 2.2 설치 설치에 대한 부분도 가이드 이해가 필요한 부분이 아니라서 넘어간다. https://docs.nvidia.com/datacenter/nvtags/latest/nvtags-user-guide/index.html#install-nvtags 3. NVTAGS 사용하기 이 섹션에서는 NVTA.. 2021. 6. 7.
[Effective C++] 자원 관리에는 객체를 활용한다 C++ 에서 생성 된 자원 / 인스턴스를 해당 로직 내에서 해제하게 되는경우, delete 가 정상적으로 호출되지 않는 경우가 발생할 수 있다. void f() { Apple *a = createApple(); .... delete a; } 위 코드는 createApple에 의해 생성 된 Apple 인스턴스를 delete 하기를 기대하고 만들어 졌으나, '...' 내에서 예외가 발생하는 경우, a 의 메모리 해제가 정상적으로 이뤄지지 않을 수 있음을 말한다. 이렇게 생성 된 자원이 항상 해제될 수 있도록 만드는 방법은, 이 자원을 객체에 넣고 그 자원해제를 객체의 소멸자가 담당하도록 만든뒤, 그 소멸자는 실행제어가 f를 떠날 때 호출되게 하는 것이다. 자원을 객체에 넣으면, C++가 자동으로 호출하는 객.. 2021. 5. 23.
[Effective C++] 객체의 모든 부분을 빠짐없이 복사하자 객체지향 시스템에서 잘 설계된 것들을 보면 객체를 복사하는 함수가 딱 둘만 있는 것을 알 수 있다. 복사 생성자와 복사대입 연산자가 그 두가지 함수인데, 이 둘을 통틀어서 객체 복사 함수 (copying function) 이라고 불러진다. 객체 복사함수 선언의 의미는 컴파일러 동작을 100% 신뢰할 수 없다는 것을 의미하는데, 아래 코드를 보자. void logCall( const std::strign& funcName); // 로그 기록내용 생성 class Apple { public : .... Apple ( const Apple& a ); Apple& operator=(const Apple& a ); ... private: string brix; }; Apple::Apple( const Apple& .. 2021. 5. 20.
[Effective C++] operator= 에서는 자기대입에 대한 처리가 빠지지 않게하자 / 복사 후 맞 바꾸기 (Copy and Swap) 복사 후 맞바꾸기 방법은 아래 두 가지 특성을 활용하여 조금 다르게 구현 가능하다. class Apple { void swap( Apple& a ); // *this의 데이터 및 a의 데이터를 바꾼다. }; Apple& Apple::operator=(const Apple& a) { Apple temp(a); // a 의 데이터에 대해 사본을 만든다. swap(temp); // *this의 데이터를 사본과 맞바꾼다. return *this; } 위에 코드는 temp 라는 사본을 생성하여 swap한 뒤 *this 를 리턴한다. 이 방법은 아래의 C++ 특징을 이용해 조금 다르게 구현 가능하다. 1. 클래스의 복사 대입 연산자는 인자를 값으로 취하도록 선언 가능한 특징 2. 값에 의한 전달을 수행하면 전달된 .. 2021. 5. 19.
[Effective C++] operator= 에서는 자기대입에 대한 처리가 빠지지 않게하자 Self assignment는 어느 객체가 자신에 대입 연산자를 적용하는 것을 말한다. class Item {}; Item i; ... i = i; // Self assignment 문장 자체는 적법한 문장이다. 모두가 의미 없는 코드임을 알 것이다. 아래와 같은 코드도 자기 대입이 가능한 코드들이다. a[i] = a[j]; *px = *py; 이런 자기대입이 생기는 이유는 여러 곳에서 하나의 객체를 참조하는 중복 참조(Aliasing) 때문이다. 같은 타입을 다루는 객체들을 참조자나 포인터로 동작하도록 코드로 작성하는 경우 이런 현상이 나올 수 있음을 고려하는 것이 필요하다. 같은 클래스 계통에서 만들어진 객체가 반드시 똑같은 타입으로 선언 될 필요는 없으며, 파생 클래스 타입의 객체를 참조하거나 가리.. 2021. 5. 19.
[Effective c++] 항목 10: 대입 연산자는 *this 참조 반환하게 하자. 대입 연산자의 경우 *this 참조반환하는 것이 C++ 에서의 관례이다. 그러므로, 가능하면 클래스 대입 연산자를 구현 시 이 관례를 지키는 것이 좋다. 이는 단순 대입연산자 뿐만 아니라 모든 대입 연산자에서 지켜져야 한다. ( +=, -=, *= 등 ) 각종 표준 라이브러리에서도 따르고 있는 관례이니 만큼 참고하여 대입 연산자를 구현하도록 하자. Class Unit { public: ... Unit& operator = (const Unit& u ) { ... return *this; } Unit& operator += (const Unit& u ) { ... return *this; } }; 2021. 5. 12.
NVIDIA NVTAGS ( Topology-Aware GPU Selection ) 메뉴얼 읽기 - 1 GTC 2021을 둘러보다가 추후 유용한 기술이 될 것으로 보여서 NVIDIA 문서를 읽으면서 정리해본다. 모든 내용의 출처는 developer.nvidia.com 이다. NVTAGS NVIDIA Topology-Aware GPU Selection (NVTAGS) is a toolset for high-performance computing (HPC) applications that enables faster solve times with high GPU communication-to-application run-time ratios. NVTAGS intelligently and automatically assigns GPUs to message passing interface (MPI) processe.. 2021. 4. 21.
[Effective C++] 항목 9: 객체 생성 및 소멸 과정 중에는 절대로 가상함수를 호출하지 말자 코드 작성하다가 아무 생각없이 실수할 것 같은 부분이라서 짧게나마 정리해 둔다. [ Never call virtual functions during construction or destruction. ] 객체 생성 및 소멸 과정중에는 virtual 함수를 호출하면 절대 안된다는 내용이다. 예제 코드를 먼저 보자 class Circle { public: Circle(); virtual void drawCircle() const = 0; ... }; Circle::Circle() { ... drawCircle(); // 생성 시 원을 그려준다 } class Oval : Circle { public: virtual void drawCircle() const; // 현재 타입의 원을 그린다. ... }; Ova.. 2021. 4. 9.
Getting started with MIG NVIDIA Document에 나와있는 Multi-Instance GPU 기능에 대한 개념은 어느정도 봤으니, 실제로 가이드에서 사용법을 어떻게 정리해 두었는지 보려고 한다. 가이드에도 언급이 된 부분이긴 한데, 아래 nvidia-smi 결과내용과 관련하여 실제와는 조금 다른 부분이 있다고 한다. 예시에서 GPU Instance를 2개 만들어 놓은 상태에서 Compute Intance 를 활용하는 예시를 보여주는데, 실제로 확인 해야할 부분에 집중하기 위해 일부러 나타내지 않은 정보가 있으니 이 점은 염두하고 예시를 참고해야 한다. 필요조건 MIG User guide에 나와있는 예시는 아래 조건 기반으로 작성 되었다. MIG is supported only on NVIDIA A100 products an.. 2021. 3. 21.
Understanding the concepts of Multi-instance GPU (MIG) A100에 새로이 적용된 MIG 기능에 대해 NVIDIA에서 제공하는 매뉴얼은 한번 다 읽어볼 필요가 있을 것 같아 필요한 부분만 일부 정리해봤다. NVIDIA MIG User Guide 정리 MIG는 최대 7 개의 CUDA Application을 위한 GPU 인스턴스를 다중 사용자에게 제공하여 GPU 사용률을 올리기 위한 기능이다. 다중 사용자의 Use case를 가지는 Cloud Service Provider를 위해, MIG는 사용자 간 작업 영향을 분리하는 것을 보장한다. NVIDIA A100 GPU를 이용했을때, 사용자는 가상 GPU Instance를 실제 물리 GPU처럼 사용하여 작업을 수행할 수 있다. MIG는 Linux operating system에서 동작하며, Docker Engine 은.. 2021. 3. 20.