a
-
[동적계획알고리즘] 0/1 배낭 문제 (knapsack)a 2022. 4. 13. 20:54
동적 계획 알고리즘에서 5번째로 나온 알고리즘, 배낭이 일정한 크기로 주어지고, 가방에 들어갈 아이템들이 있다. 각 아이템은 크기가 다양하고 각각의 가치를 갖고 있다. 배낭에 아이템을 담을 때, 아이템을 어떤 걸 넣어야 가장 가치와 크기가 최대인 배낭이 될 수 있을까? 배낭에 넣을 때, 아이템은 크기를 쪼갤 수 없다. 그래서 넣거나(1), 넣지 않거나(0) 해서 0 또는 1의 값만 갖게 된다. 넣을지 말지를 결정하는 것이니, 모든 경우의 수를 세서 그 중 가치와 크기가 최적인 결과를 출력하면 어떨까? 만일 아이템이 n 개가 있다면, n개의 아이템이 넣/ 안넣, 이 두가지 경우의 수를 모두 세는 것이니 2의 n제곱의 수행시간이 소요된다. 그러니까 O(2^n)이다. 그런데 이건 시간이 너무 오래 걸린다. 동..
-
-
[GPU] Accel-sim gpu-app-collection 빌드a 2022. 4. 11. 12:11
1. dependencies sudo apt-get install -y wget build-essential xutils-dev bison zlib1g-dev flex \ libglu1-mesa-dev git g++ libssl-dev libxml2-dev libboost-all-dev git g++ \ libxml2-dev vim python-setuptools python-dev build-essential python-pip 여기서 pip가 install 이 안되는 경우가 있는데, 따로 pip3를 설치한 다음 위의 명령어에서 'python-pip'를 빼면 된다. 그리고 python은 3.x 이상으로 설치돼야 함 pip3 install pyyaml plotly psutil 물론 cuda 툴킷 설치돼 ..
-
-
[블록체인] 프라이빗네트워크 생성a 2022. 4. 8. 20:58
노트북에서 하는 것도 좋은데 일단 구글 크롬 깔아서 메타마스크 구글 익스텐션을 설치해야 한다. 귀찮다. [설치] 1. VM 설치 2. 우분투 설치 3. git 설치 4. go 설치 5. 메타마스크 / 크롬 설치 1. go-ethereum 레포지토리 git clone 3. golang 설치 를 해야하는데 맥에서는 apt 가 안되고 brew로 **해야 한다고 해서 brew install build-essential golang 이걸로 설치해 준다. -- brew 설치하는 법은 여기에 https://stackoverflow.com/questions/66267454/jdk-is-installed-on-mac-but-im-getting-the-operation-couldn-t-be-completed-un
-
-
-
AES on GPGPU-Sima 2022. 4. 4. 19:05
캐플러로 실행해봐도 안됨 이건 안되는 거다 c++ 라이브러리인데, 랜덤 넘버 생성하려고 필요한 듯하다. 파일질라로 서버에 옮겨 주었다. 그 다음 docker cp 로 파일을 docker 로 옮겨주기 docker cp boost_1_78_0.tar eun_ispass:/ 굿굿 tar의 압축을 풀어준다. tar -xvf [filename] 그 다음 bootstrap 으로 이동해서 ./bootstrap.sh ./b2 install boost 설치 끝 boost를 해결했고 나온 에러, #가보자고 얘네는 뭘까 std::를 없애고 난 다음의 에러 std::string으로 수정했다. std::rotate라고 해준다. 정말 다 해결이 되는 걸까?! 두근댄다... 왜 헤더 파일이 없다고 뜨지? #include "aesE..
-
[JS] Node.js 란a 2022. 4. 4. 17:10
백엔드, 백엔드 하면 노드라고. 많이 이야기 한다. 하지만 정확히 백엔드와 Node.js가 무엇인지 잘 알지 못한다. 원래 JS 코드들은 웹에서 실행을 할 경우, HTML을 통했다. 순서는 역방향일 수도 있다. 웹에 있는 요소를 처리하기 위해 JS가 필요했고, JS는 요소들을 getElement 하면서 데리고 와서 처리를 하는 역할을 했다. 그런데 백엔드는 사용자와 상호작용하는 요소에 대해 다루지 않는다. 데이터의 처리를 상대한다. node.js는 이제 html을 통해서 실행하던 js를 node로 실행하게 된다. 터미널을 열고 node [파일이름] 하게 되면 Node.js 상에서 js를 실행하는 것이 가능하다.
-
[04/04 ~] C++a 2022. 4. 4. 09:22
03-1. C++에서의 구조체 1. 구조체의 등장배경은 무엇인가> 연관있는 데이터를 하나로 묶으면, 프로그램의 구현 및 관리가 용이하다. 소프트웨어를 단순히 표현하면 다음과 같다. " 소프트웨어 = 데이터의 표현 + 데이터의 처리 " 그런데 '표현해야 하는 데이터'는 항상 부류를 형성하기 마련이다. 그리고 이렇게 부류를 형성하는 데이터들은 함께 생성, 이동 및 소멸된다는 특성이 있다. 그래서 구조체는 연관 있는 데이터를 묶을 수 있는 문법적 장치로 데이터의 표현에 매우 큰 도움을 준다. 예를 들어서 레이싱게임의 캐릭터로 등장하는 '자동차'를 표현한다고 가정해 보자. 다음과 같은 정보가 모여서 게임 상의 자동차가 표현돼야 한다. - 소유주 - 연료량 - 현재 속도 - 취득 점수 - 취득 아이템 게임 사용자..
-
-
[c++]a 2022. 4. 1. 16:54
헤더 파일에서 중복 정의를 피하기 위함 #define (매크로 함수 이름) (매크로 함수 기능) #define ADD(a,b) a+b //ex #define STAGEBLOCK1(index) CUT_BANK_CHECKER( stageBlock1, index ) CUT_BANK_CHECKER( stageBlock1, index ) This is a simple macro that works with some host code when running in emulation mode to help check for bank conflicts in shared memory. The way it works is you use the CUT_BANK_CHECKER macro when accessing shared ..
-
[알고리즘] AES 암호화 알고리즘a 2022. 4. 1. 12:02
1. AES(Advanced Encryption Standard) AES는 대칭 블록 암호화 알고리즘(symmetric blcok cipher algorithms)이다. 대칭은 무엇이고 블록은 무엇인가. 1-1. 대칭키 암호화 대칭키 방식은 암호문을 생성할 때 사용하는 키와 복호화 키가 동일한 암호 시스템이다. 하나의 키로 암호화와 복호화를 수행해서 대칭키라고 한다. 이러한 대칭키 방식은 키가 한 개뿐이므로 상대방과 암호화 통신을 할 경우 상대방도 사전에 같은 키를 갖고 있어야 한다. 대칭키 암호화는 Block Cipher와 Stream Cipher로 나뉜다. 블록 암호화(block cipher)는 입력 데이터를 정해진 블록으로 잘라서 암/복호화를 수행하며 블록의 크기는 알고리즘마다 다르다. AES는 1..
-
[GPU] 후퍼(Hopper) 란a 2022. 3. 30. 10:53
new~ 1. tensor core 특화형 부품.. mma 연산만을 하는 부분인데, AI나 HPC 분야에서 이 연산이 필수이다. 대기업에서야 엄청난 자원으로 시간을 절약하며 학습 시킬 수 있지만, 개인 컴퓨터에서 성능 좋은 GPU가 없으면 캐글 대회도 수상하기 힘든 현실이기 때문에, 이번에 새로 나온 아키텍처에서도 꾸준히 텐서코어를 유지/향상한 듯하다. 실수 연산을 빠르게, 캐시 크기를 넓게 만들었다는 건 당연한 얘기고. 1)Transformer Engine 2) Asynchronous Execution features include a new Tensor Memory Accelerator (TMA) unit : 많은 양의 데이터를 글로벌 메모리에서 shared memory로 전달하는 게 가능하다. 이게..
-
[c++] C언어와 C++의 다른 부분(bool, 참조자, new/delete)a 2022. 3. 30. 09:10
1. 키워드 const의 의미 - const int num=10; 정수형 num이 변하지 않는 값이다. - const int* ptr1=&val1; 정수형 포인터 ptr1이 변하지 않는 값이다. ptr1으로 val1 값을 변경할 수 없다. - int *const prt2 = &val2; 포인터 prt2가 상수가 되었다. - const int * const ptr3 = &val3; 포인터 ptr3가 상수가 됐고 ptr3로 val3를 변경할 수 없다. 2. 실행중인 프로그램의 메모리 공간 실행중인 프로그램은 운영체제로부터 메모리 공간을 할당 받는데, 이는 데이터, 스택, 힙 영역으로 나뉜다. 각각의 영역에는 어떤 형태의 변수가 할당이 되는가? - 데이터 : 전역변수가 저장되는 영역 - 스택 : 지역변수 맻 ..
-
[GPU] GPGPU-sssim ispass benchmark builda 2022. 3. 25. 11:30
1. git clone git clone https://github.com/gpgpu-sim/ispass2009-benchmarks.git 2. make 아마 Makefile을 수정하거나 해야 하는데 어떻게 하는지 아직 모름~ make: Nothing to be done for 'Makefile.ispass-2009'. ERROR *** could not find /cuda-samples/C/lib/libcutil_x86_64.a (or libcutil.a) Build the NVIDIA GPU Computing SDK; please see README.ISPASS-2009 make: *** [Makefile.ispass-2009:32: check_environment] Error 205 Gpu comp..
-
[JS] 날씨 API 호출하기a 2022. 3. 25. 10:52
https://openweathermap.org/ Сurrent weather and forecast - OpenWeatherMap Leaving everything behind, people are fleeing conflict in Ukraine. They need shelter, food, and water. When you subscribe to our service, you can join us to help with donation of just of 20. Openweather will add 40 to each donation and send it to Disastrou openweathermap.org 날씨 정보를 알 수 있는 api를 호출해서 사용자 위치의 현재 날씨를 알려줄 수 있다...
-
[알고리즘] 그리디 알고리즘a 2022. 3. 24. 08:48
그리디 알고리즘이란 그리디 알고리즘은 최적화 문제를 해결하는 알고리즘이다. 최적화 문제는 가능한 해들 가운데 가장 좋은(최대 또는 최소) 해를 찾는 문제이다. 1. 그리디 알고리즘은 수행 과정에서 최솟값 또는 최댓값을 가진 데이터를 선택한다. 부분적인 최적해를 찾은 후, 이 부분해를 모아서 최적해를 얻는다. 2. 이 알고리즘은 선택한 데이터를 버리고 다른 것을 취하지 않는다. 동전 거스름돈 문제 거스름돈을 동전으로 받을 때 적은 수의 동전으로 거스름돈을 주어야 한다. 이 때 그리디 알고리즘을 활용한다면, 알고리즘은 액수를 초과하지 않는 조건 아래에 가장 큰 값의 동전을 취할 수 있다. 알고리즘) CoinChange(W) input : 거스름돈 액수(==W) output : 최소 동전의 개수 1. chan..
-
[알고리즘] 최근접 점의 쌍 찾기a 2022. 3. 21. 16:54
최근접 점의 쌍(Closest pair)은 평면 위에서 n개의 점이 있을 때, 거리가 가장 가까운 한 쌍의 점을 찾는 문제이다. 이 문제를 효율적으로 해결하는 방법은 분할 정복을 이용하는 것이다. n개의 점을 1/2로 분할하여 각 부분문제에서 최근접 점의 쌍을 찾고, 2개의 결과값 중에서 짧은 거리를 갖는 쌍을 찾는다. 알고리즘) function ClosestPair(S) input : x좌표가 오름차 순으로 정렬된 배열 S(원소의 개수는 i) output : S에서 가장 가까운 점들의 거리 1. if(i
-
cuda-samples를 gpgpu-sim으로 빌드하기 - 절망편a 2022. 3. 19. 15:01
cp -a /cuda-samples/Samples/0_Introduction/matrixMul/matrixMul . cp -a /gpgpu-sim_distribution/configs/tested-cfgs/SM2_GTX480/gpgpusim.config . ./matrixMul [Matrix Multiply Using CUDA] - Starting... CUDA error at ../../../Common/helper_cuda.h:796 code=100(cudaErrorNoDevice) "cudaGetDeviceCount(&device_count)" 1) cuda driver 설치 2) gpgpu-sim에서 source setup_environmet make 그렇게 해서 실행 했을 때는 또 다른 에러가 ..
-
-
[JS] js의 기본 구조 - 변수/오브젝트/함수a 2022. 3. 17. 10:17
사담이지만, 작년 전공 필수로 자바를 배울 때 교수님은 '백문이불여일습'이라고 했다. 나는 교수님 말마따나 해 보는 것의 중요성도 인정하지만 큰 그림을 이해하고 나서 사소한 문제들을 풀어가는 게 중요하다고 생각한다. 자바스크립트를 시작하면, 자바스크립트 안에 어떤 요소가 있는지 알아보는 것이 필요하다. 정리하자면 변수, 오브젝트, 그리고 함수. 세 가지가 있다. 이를 잘~ 활용하면 멋진 js 숙련자가 될 수 있다. 각 요소에 대한 자세한 설명은 나중에(03.34) 1.변수 2. 오브젝트 const player={ //define properties name:"eun", point: 200, sayHello: function(otherPersonsName){ console.log("Hello I'm "+o..
-
[JS] VScode 와 터미널 연결하기a 2022. 3. 17. 08:34
이걸 이렇게 불러도 좋을지 모르겠다 새로운 프로젝트를 시작할 때, 보통 새로운 폴더를 만든 후 이를 vscode에서 열곤 한다. 생성한 폴더를 vscode에서 여는 방법은 터미널에 커맨드 입력으로 code '폴더이름'을 하면 되는데, 그러기 위해선 우선 vscode와 연동을 해주어야 한다. vscode를 연다. command + shift + p 그럼 지금 맨 위에 shell command로 시작하는 설치 명령어가 보인다. 이걸 눌러서 설치해주면 끝. 이제 터미널로 돌아가서 폴더를 생성한 후, code '폴더이름'을 해주면 vscode가 열린다.
-
[알고리즘] 12221. 구구단2a 2022. 3. 16. 16:27
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AXpz3dravpQDFATi SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 아기 석환이는 최근 구구단을 배웠다. 그래서 1 이상 9 이하의 자연수 두개를 곱셈할 수 있으나, 10 이상의 자연수를 곱셈하는 방법은 모른다. 두 정수 A, B가 주어진다. 아기 석환이 두 정수를 곱셈할 수 있으면 곱을 출력하고, 아니면 -1을 출력하라. 풀이 방법) 2자리수인지 조건문 #include int main(void) { int test_case; int T; int res = -1; ..