전체 글
divergence는 발산, 분기라는 뜻을 가진 영어 단어이다. 둘 이상의 당사자 간의 의견, 관심 또는 희망 사항의 차이 또는 공통점에서 벗어나는 과정을 의미한다고 한다. 스레드 발산(thread divergence)은 GPU 내에서 중요한 개념으로, GPU는 많은 수의 쉐이더 코어를 가지고 있고 이 코어들은 병렬로 동시에 많은 데이터를 처리하는 구조로 되어있다. 스레드 발산이 발생하면 이 병렬 처리의 효율성이 크게 떨어지게 되는데.... (;^◇^;)ゝ 스레드 발산(thread divergence) 이란? 스레드 발산은 GPU내에서 실행되는 여러 쉐이더 코어(스레드)가 동일한 시점에 서로 다른 실행 경로를 따라가게 될 때 발생한다. 이는 주로 조건문('if', 'switch' 등) 사용에 의해 발생하..
유닉스 계통(리눅스, 맥 등)에서 거의 준표준으로 사용하고 있는 xz라는 압축 유틸리티에, 원격 접속을 가능하게 하는 백도어 코드가 숨겨져 배포되어 문제가 되고 있다. 이 이슈는 XZ Utils의 5.6.0과 5.6.1 버전에서 발견되었다고 한다. 현재 Homebrew를 통해 설치할 수 있는 xz의 안정적인 버전은 5.4.6이며 macOS 사용자는 brew upgrade xz를 하면 된다. 리눅스 sudo apt-get update sudo apt-get install --only-upgrade xz-utils 만약 5.6.1 이라면? xz 구버전으로 설치하고 캐시를 지운다. brew cleanup xz --prune=0 brew install xz 참고 출처; https://news.hada.io/to..
SIMD SIMD는 Single Instruction, Multiple Data의 약자로, 하나의 명령어로 여러 데이터에 대한 연산을 동시에 수행할 수 있는 병렬 처리 기술이다. 이 기술은 데이터를 병렬로 처리함으로써 성능을 크게 향상시킬 수 있다. 예를 들어, 벡터나 행렬 같은 대량의 데이터에 같은 연산(더하기, 곱하기 등)을 반복적으로 적용해야할 때, SIMD를 사용하면 이러한 연산을 한 번에 여러 데이터 단위로 처리할 수 있어서 처리 속도가 매우 빨라진다. 컴퓨터의 CPU나 GPU에서 널리 사용되고 있고, 특히 그래픽 처리, 과학 기술 계산, 데이터베이스 검색, 대규모 숫자 연산 처리 등 다양한 분야에서 효율성을 발휘한다. C나 C++에서는 SIMD를 구현하기 위해 특정한 컴파일러 확장(ex. SS..
열심히 다운받고 연결하고 했는데 자꾸 아래 사진과 같은 경고가 발생했다. 아무래도 이쪽은 접할 기회가 별로 없었다 보니 하나를 하면 안되는 게 다섯개가 생긴다 대학교 1학년 때로 다시 돌아간 기분 🤤 dotnet --list-sdks 다운받고 된 줄 알았는데 터미널 창에서 dotnet 설치를 확인하려고 해도 설치가 안되었다. 찾을 수 없다는 로그만 나왔다. 그냥 다시 껐다키면 된다는 사람도 있었는데 껐다켜고 재설치해봐도 그대로였다. 이것저것 해보고 당황하다가 여러 깨달음을 얻었고, 스택 오버플로우의 한 외국인의 도움으로 성공했다. VSCode 를 종료 한 후 터미널 창을 연다. vi ~/.zshrc 를 입력해 i (수정 모드)를 누르고 아래와 같이 path를 적어준다. (경로를 확인하는 방법) shift..
맥북 구매 기념으로 컴퓨터를 세팅하던 중 ide를 뭘 사용할까 하다가 VSCode를 쓰기로 했다. VS CODE 연결하기 1. mono stable 버전을 다운로드 해준다. https://www.mono-project.com/download/stable/ 2. 닷넷 다운로드 https://dotnet.microsoft.com/en-us/download 3. Visual Studio Code 설치 https://code.visualstudio.com/ 4. Unity / [Preference] > [External Tools] 유니티에서 프로젝트 아무거나 오픈해서 [Preference] > [External Tools] 에 들어간다 . [External Script Editor] 을 눌러 Visual St..
컴퓨터 메인보드의 고해상도 타이머를 이용해 시간 간격을 측정한다. 현재 실행 속도를 측정하고 싶으면 QueryPerformanceCounter(=QPC)를 이용하면 된다. 하지만 QPC는 외부 시간 참조와 독립적이며 동기화되지 않으므로 현재 시간값을 구하고 싶으면 GetSystemTimePreciseAsFildTime을 이용하라고 MSDN에 나와있다. QueryPerformanceFrequency와 QueryPerformanceCounter를 이용하면 타이머, FPS 측정 등 여러 방면으로 활용할 수 있다. QueryPerformanceFrequency 성능 카운터의 빈도를 검색한다. BOOL QueryPerformanceFrequency ( LARGE_INTEGER *lpFrequency ); lpFr..
슬라이딩 벡터는 충돌 시에 입사벡터가 입사면을 따라서 미끄러지게 하기 위해서 수평 성분만을 남긴 벡터이다. 구하는 방법에는 반사벡터를 이용해 구하는 방법과 일반적인 방법이 있다. 반사벡터 이용해서 구하기 반사 벡터에서 입사벡터 P에 n(-P·n)을 한번 더해주면 입사면에 투영된 접선벡터를 구할 수 있다. 입사벡터의 역벡터 -P가 n에 투영된 n(-P·n)을 이용해 슬라이딩 벡터를 구하고 있는 중이다. 따라서 반사 벡터를 이용할 때 슬라이딩 벡터 S를 구하는 공식은 다음과 같다. S = P + n(-P·n) 일반적인 방법 일반적인 방법으로는 입사벡터 P를 n에 바로 투영시킨다. 입사벡터 P와 법선벡터 n의 끼인 각이 0≤ θ ≤ π/2 일 때, P·n의 값은 음수가 되므로, n벡터의 역벡터 방향으로 투영 ..
반사 벡터는 정반사이다. 정반사는 입사각과 반사각이 동일한 반사를 의미한다. 투영 벡터 반사 벡터를 구하려면 투영 벡터를 먼저 구해야 한다. 투영이란 어떤 벡터 v를 단위 벡터 n에 내적하여 구할 수 있는 v의 n방향으로의 길이를 뜻한다. 내적값이 스칼라이므로 투영된 방향으로의 벡터를 구하려면 이 내적값에 방향벡터 n을 곱해주면 된다. (v·n)n을 이용해 벡터를 구할 수 있게 된다. * 왜 이렇게 되는지 추가 설명! 더보기 v와 n을 내적하면 cosθ를 결과값으로 얻게 된다. v·n = ||v||||n||cosθ 여기서 이 삼각형은 직각삼각형이므로 코사인값은 밑변/빗변 즉, ||n|| / ||v|| 이다. ||n|| = ||v||cosθ 이고 투영한 길이를 w라고 했을 때 w = ||v||cosθ가 된..