무사히 완주했습니다. 과정은 1. 챌린지코스 2. 마스터코스 순서로 진행되었습니다. 1. 챌린지 코스 챌린지 코스는, 예열 작업이었던것 같습니다. 이때는 Backend.ai의 개발환경을 구축(시스템 빌드)하고, 실제로 실행해 보는 과정을 진행했습니다. 이 과정에서 저는 WSL2의 Ubuntu 상에서 빌드를 시도해보았고.... 덕분에 온갖 고생을 다 하게 됩니다 ㅎㅎ 이때 정말 나도 맥북하나 사고싶다... 하는 생각 많이 들었죠 WSL상에서 돌리면서 아래와 같은 문제가 발생했습니다. 1_1. Root Directory의 구성이 Ubuntu의 그것과는 다르게 설정됨(sudo 명령어를 사용했을 경우) https://github.com/lablup/contribution-academy-2021/discussio..
이번 포스팅에서는 CPython의 소스코드를 통해서 Python List가 어떻게 동작하는지 알아봅니다. Python List를 C언어의 Array와 사뭇 다릅니다 Python List C Array Type 무관 Type 고정 Element크기 고정 Type에 따라 변함 malloc 불필요 malloc 필요 이때, Python List의 특징을 보면 C의 Pointer Array와 상당히 비슷한 것을 볼 수 있습니다. (Pointer 특성상 고정된 크기(주소값)를 차지하고, Type은 void Pointer를 이용할경우) 그러면, 이제 Cpython 내의 PyListObject의 정의를 살펴보겠습니다. typedef struct { PyObject_VAR_HEAD /* Vector of pointers..
1. Void포인터에 대해서 Void포인터는 한줄로 정리하면 "대상체가 정해져 있지 않은 포인터" 이다. 대상체가 정해져 있지않기 때문에 어떠한 Type의 변수도 포인팅 할 수 있다. 하지만 역참조로 포인팅 하는 값을 읽을려면, 대상체의 크기를 알지 못하기 때문에 문제가 된다. #include #include int main(){ int a = 5; void *temp; //정상적으로 void pointer에 다른 type의 변수를 할당할 수 있다. temp = &a; //하지만 역참조연산자로 void pointer가 가리키고 있는 //데이터를 읽을 경우 에러가 발생한다. //대상체의 정보가 없기 때문 printf("%d", *temp); /* error: 'void*' is not a pointer-t..
오늘 포스팅은 Python의 대표 Math Package중 하나인 Numpy에 대해서 다룹니다. Python을 써보시면 아시겠지만, Python List 대비 Numpy Array의 연산이 훨신 빠르다는것을 알 수 있습니다. Numpy가 왜 Native List보다 빠를 수 있는지, 하드웨어 관점을 더해서 설명합니다. 먼저 Numpy가 빠른 이유를 두줄 정리하고 갑니다. - SIMD - 데이터 정렬 1. SIMD SIMD(Single Instruction Multi Data) 하나의 CPU 명령어로 두개 이상의 Data를 처리하는 방법을 의미합니다. 하지만 빠른 계산은 조상님이 해주는게 아닙니다. CPU의 동작을 한번 생각해보겠습니다. 레지스터에는 하나에 하나의 32비트 2진수를 담을 수가 있습니다(Ge..
C Programming Language에서 메모리 할당 함수인 malloc을 설명하기 이전에, alloc이라는 함수를 확인할 수 있습니다. #define ALLOCSIZE 10000 static char allocbuf[ALLOCSIZE]; static char *allocp = allocbuf; char *alloc(int n) { if (allocbuf + ALLOCSIZE - allocp >= n) { allocp += n; return allocp - n; } else { return 0; } } 위 함수를 보면, allocbuf라는 array를 buffer로 설정하고, 이 buffer을 기준으로 할당을 조절하는것을 알 수가 있습니다. 문제는 if (allocbuf + ALLOCSIZE - al..
C언어의 바이블로 불리는 C Programming Language에서 보면, 초반에 아래와 같은 코드가 등장합니다. #include int main() { int c; while ((c=getchar()) != EOF){ putchar(c); } } 책을 읽기전까지, getchar는 단순하게 사용자의 Input을 받고, 이때 단어 하나만 받아올 수 있다 라고 알고있었습니다. 하지만, 위의 코드를 보면, 1. c를 int형으로 선언한다 2. getchar로 c에다가 input을 받는다 3. (나의 예상)c의 첫 글자가 EOF인지 확인한다. 4. 아니면 첫글자를 화면에 출력하고, 다시 Input을 받는다 였습니다. 하지만 위 코드를 실행해보면, 한 단어가 아니라 입력받은 모든 단어를 출력하는 것을 알 수 있..
- Total
- Today
- Yesterday
- 동적계획법
- AVX
- 알고리즘
- git
- hash
- 코딩테스트
- heap
- 병렬처리
- Sort알고리즘
- 분할정복
- GDC
- 사칙연산
- 프로그래머스
- Search알고리즘
- stack
- 이분탐색
- 완전탐색 알고리즘
- 자료구조
- prime number
- 컴퓨터그래픽스
- C++
- Greedy알고리즘
- Python
- SIMD
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |