글

[재테크] 미국 중간선거 이후, 미국 주식과 한국 주식은 어떻게 움직였을까?

이미지
미국 중간선거가 다가오면 투자자들이 자주 꺼내는 이야기가 있다. “중간선거가 끝나면 주식시장이 오른다”는 것이다. 실제로 미국 증시에는 이런 역사적 패턴이 관찰된다. 하지만 한국 증시에도 같은 논리를 적용할 수 있을까? 평균 수익률뿐 아니라 상승 빈도와 중앙값까지 살펴보면 두 시장의 차이가 드러난다.   과거 중간선거 다음 해에 미국 주식은 비교적 꾸준히 강했고, 한국 주식은 상승 사례가 더 많았지만 결과의 편차가 컸다. 먼저 ‘선거 이후’의 기준부터 정하자. 중간선거일 종가부터 12개월을 측정하는 방법과, 중간선거 다음 해 1년의 수익률을 측정하는 방법은 다르다. 예를 들어 2022년 중간선거 이후 12개월과 2023년 연간 수익률은 출발점과 종료점이 다르다. 이 글은 미국의 장기 통계를 먼저 소개한 뒤, 두 나라를 같은 조건에서 비교하기 위해 1990~2022년 중간선거 9회의 다음 해 연간 수익률 을 살펴본다. 비교 지수는 미국 S&P 500과 한국 KOSPI다. 배당을 제외한 가격 수익률이며, 미국은 달러 기준, 한국은 원화 기준이다. 세금·거래비용·환율 변동은 반영하지 않았다. 미국에서는 ‘중간선거 이후 강세’가 관찰됐다 J.P.모건자산운용에 따르면 1950년 이후 S&P 500은 모든 중간선거의 이후 12개월 동안 상승했고, 평균 상승률은 약 15%였다. 다만 이는 해당 기관이 집계한 선거 이후 12개월 통계로, 아래에서 계산하는 다음 해 연간 수익률과는 구분해야 한다. 출처: J.P.모건자산운용 이처럼 일관된 기록은 관심을 가질 만하다. 그렇다고 선거가 상승을 일으켰다는 뜻은 아니다. 같은 기간의 금리, 경기, 기업이익 변화가 함께 작용했을 수 있기 때문이다.   미국과 한국을 같은 기간으로 비교하면 아래 표는 각 중간선거가 열린 해의 마지막 거래일 종가에서, 다음 해 마지막 거래일 종가까지의 등락률이다. 중간선거 연도 수익률 측정 연도 미국 S&P 500 한국 KOSPI 1990 1991 +26.31% −12...

[생활정보] 네이버플러스 넷플릭스 결제 화면이 뜰 때 해결 방법

  네이버플러스 멤버십에서 넷플릭스를 선택했는데도 “결제 정보를 입력하세요”라는 화면이 나온다면, 먼저 연결한 넷플릭스 계정과 연결 완료 여부 를 확인해 보세요. 1. 멤버십에 연결한 계정 확인하기 평소 사용하는 계정과 네이버 멤버십에 연결한 계정이 다를 수 있습니다. 네이버플러스 멤버십에 가입한 네이버 아이디로 로그인합니다. 마이 멤버십 → 콘텐츠 혜택 → 계정 확인하기 로 이동합니다. 연결된 넷플릭스 계정을 확인합니다. 넷플릭스 앱이나 TV에서도 같은 계정으로 로그인합니다. 계정 확인 과정에서 오류가 나면 넷플릭스에서 로그아웃한 뒤, 위 경로로 다시 접속해 보세요. 네이버 공식 안내 2. ‘계정 연결하기’까지 완료했는지 확인하기 넷플릭스 혜택을 선택한 뒤에는 계정 연결 절차도 마쳐야 합니다. 마이 멤버십 → 콘텐츠 혜택 → 넷플릭스 → 이용권 확인 → 계정 연결하기 이어서 사용할 넷플릭스 계정으로 로그인하고, 안내에 따라 광고형 스탠다드를 선택해 연결을 완료합니다. 네이버 공식 안내에 따르면 정상적인 멤버십 연결 과정에서는 별도의 카드·계좌 등록 단계가 나오지 않습니다. 결제 정보 입력 화면이 나타나면 새 결제를 진행하기 전에 위 경로에서 연결 상태를 다시 확인하세요. 넷플릭스 혜택 신청 방법 3. 기존 구독 요금이 청구됐다면? 이미 결제된 내역이 있다면 기존 구독 방식도 확인해야 합니다. 넷플릭스에서 직접 구독하던 경우: 네이버 멤버십으로 전환하면 기존 이용권의 남은 기간은 넷플릭스 크레딧으로 전환됩니다. 통신사 등 다른 제휴 서비스로 구독하던 경우: 이용권이 중복 연결될 수 있습니다. 불필요한 구독의 해지는 해당 제공업체에서 진행해야 합니다. 기존 자체 구독을 해지하지 않고 전환했다면, 나중에 네이버 멤버십 연결이 해제될 때 기존 결제수단으로 구독이 다시 활성화될 수도 있습니다. 청구 이유가 불분명하다면 결제일과 구독 내역을 확인해 고객센터에 문의하세요. 네이버의 기존 구독자 안내 해결되지 않을 때 멤버십 혜택 선택이나 이용권 지급 문제는 네...

[생활정보] 네이버플러스 멤버십 넷플릭스 로그인 방법 (계정 연결부터 시청까지)

이미지
 네이버플러스 멤버십을 이용하면 디지털 콘텐츠 혜택으로 넷플릭스를 이용할 수 있다. 그런데 처음 이용할 때 조금 헷갈리는 부분이 있다. **네이버 계정으로 넷플릭스에 바로 로그인하는 건지, 넷플릭스 계정을 따로 만들어야 하는 건지** 헷갈릴 수 있다. 생각보다 간단하니 방법을 정리해 본다. ## 1. 네이버플러스 멤버십에서 넷플릭스 연결하기 먼저 네이버플러스 멤버십에서 넷플릭스 혜택을 선택하고 계정을 연결해야 한다. 1. [네이버플러스 멤버십](https://nid.naver.com/membership/my)에 접속한다. 2. **마이 멤버십 → 콘텐츠 혜택**으로 이동한다. 3. 넷플릭스를 선택하고 이용권 정보를 확인한다. 4. **계정 연결하기** 버튼을 누른다. 5. 기존 넷플릭스 계정으로 로그인하거나 새 계정을 생성한다. 6. 광고형 스탠다드 이용권을 선택하고 연결을 완료한다. 기존에 넷플릭스를 사용하고 있었다면 해당 계정을 연결할 수 있다. 주의할 점은 한 번 연결한 넷플릭스 계정을 다른 계정으로 변경할 수 없다는 것이다. ## 2. 넷플릭스 로그인하기 계정 연결이 완료되었다면 이제 넷플릭스에서 로그인하면 된다. 1. [넷플릭스 로그인 페이지](https://www.netflix.com/login)에 접속한다. 2. 네이버플러스 멤버십과 **연결한 넷플릭스 계정의 이메일 주소**를 입력한다. 3. 비밀번호 또는 이메일로 받은 로그인 코드를 입력한다. 4. 로그인 후 원하는 콘텐츠를 시청한다. 스마트폰이나 TV에서도 동일한 넷플릭스 계정으로 로그인하면 된다.   여기서 중요한 점! **네이버 아이디와 넷플릭스 아이디는 반드시 같은 것이 아니다.** 네이버 멤버십에 연결했던 넷플릭스 이메일 주소로 로그인해야 한다. ## 3. 로그인했는데 결제하라고 나온다면? 네이버플러스 멤버십으로 넷플릭스를 이용 중인데 결제 화면이 나타나는 경우가 있다. 이럴 때는 다른 넷플릭스 계정으로 로그인한 것은 아닌지 확인해 보자. **확인 방법** 1. 네이버플...

[AI + MFC] ChatGPT로 오래된 MFC 코드 분석해보기

  오래된 MFC 프로젝트를 유지보수하다 보면 예전에 작성한 코드에서 문제점을 발견하는 경우가 있다. 이번에는 ChatGPT를 이용해 메모리 관리와 예외처리가 부족한 MFC 코드 를 분석하고 개선해 보자. 1. 기존 MFC 코드의 문제점 파일을 읽어 메모리에 저장하는 간단한 예제다. CFile file(strPath, CFile::modeRead); UINT nSize = (UINT)file.GetLength(); BYTE* pBuffer = new BYTE[nSize]; UINT nRead = file.Read(pBuffer, nSize); if (nRead == 0) return; delete[] pBuffer; 코드가 간단하지만 문제가 있다. return 발생 시 메모리 누수 가능 파일 처리 중 예외 발생 가능 큰 파일의 크기 변환 문제 실제 읽은 크기에 대한 검증 부족 2. ChatGPT로 코드 분석하기 ChatGPT에 다음과 같이 요청했다는 가정으로 진행한다. MFC/C++ 코드를 분석해 줘. 조건: 1. 기존 구조 유지 2. 최소한의 코드 수정 3. 메모리 누수 방지 4. 예외처리 추가 5. 문제점과 수정 이유 설명 중요한 것은 기존 구조 유지와 최소 변경 조건을 명확하게 전달하는 것이다. 3. AI 분석을 반영한 개선 코드 메모리를 직접 관리하는 대신 std::vector 를 사용하고 예외처리를 추가했다. #include <vector> #include <new> void ReadFile(CString strPath) { try { CFile file( strPath, CFile::modeRead | CFile::shareDenyNone ); ULONGLONG nSize = file.GetLength(); if (nSize == 0 || nSize > 8ULL * 1024 * ...

[MFC] 파일 쓰기 다이얼로그

    static char szFilter[] = "csv Files (*.csv)||";     CFileDialog dlg(FALSE, NULL, NULL, OFN_OVERWRITEPROMPT, CString(szFilter));     if (dlg.DoModal() == IDOK) { }

[MFC] Static Text 글자 색상, 배경 색상 바꾸기

 HBRUSH CDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) {     HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);     // TODO:  Change any attributes of the DC here     if (pWnd->GetDlgCtrlID() == IDC_STATIC_RESULT)     {         if (m_bResult == TRUE)         {             pDC->SetTextColor(RGB(0, 0, 0));             pDC->SetBkColor(RGB(0, 255, 0));             hbr = ::CreateSolidBrush(RGB(0, 255, 0));         }         else         {             pDC->SetTextColor(RGB(255, 255, 0));     ...

[CUDA] CUDA 공부 2 - CUDA 기본 구조 및 함수 키워드

이미지
자 이제 GPU 메모리에 데이터를 올렸으니 연산이 들어가야 할 차례이다. 우선 CUDA를 이용하여 GPU를 연산에 사용할려면 파일 확장자를 CUDA 용으로 cu로 작성하여야 CUDA 관련 컴파일러(NVCC)가 이를 컴파일 해줄 것이다. CUDA에서 사용되는 함수는 크게 3가지로 구분된다. CPU에서 사용되는 함수, GPU에서 사용되는 함수, CPU와 GPU에서 사용되는 함수 이다. CPU와 GPU에서 사용되는 함수는 CPU에서 사용되는 함수와 GPU에서 사용되는 함수를 이어주는 다리 같은 역할이라고 이해하면 되겠다. 이 각각의 함수는 __host__, __device__, __global__ 의 키워드로 대표된다.   1. __host__ 호스트 즉, CPU와 시스템 메모리에서 실행되는 함수. 일반적으로 사용하는 함수처럼 키워드를 생략가능하다. 디바이스 함수에서 호출 불가하다.  __host__ int main() {      ... } 2. __device__ 디바이스(GPU)에서 실행되는 함수. 호스트에서 호출 불가능하다. 클래스내의 private 멤버 함수와 비슷하다고 생각하면 될 듯 하다. __device__ void function() {     ... } 3. __global__ 디바이스에서 실행되는 함수. 호스트에서 호출 가능하나 디바이스 함수에선 호출 불가하다. 호스트 함수에서 호출하여 실행하는 커널 함수를 지정하거나 디바이스 함수를 호출하는데 사용된다. 주의 점은 리턴 값은 무조건 void 이다. __global__ void function() {     ... } 위 소스는 __global__ 함수로 작성된 두 개 벡터의 값을 더해 다른 벡터에 대입하는 예제이다.(예제소스 : vectorAdd) 여기서 blockDim 과 blockIdx, threadIdx 가 보인다. 이것들이 뭔지 정확히 하고 가야 CUDA 함수를 작성할 때 혼란이 없다. 자세한...

[C/C++, MFC] 이미지 상 두 점의 각도 구하기

이미지
 두 점간의 각도를 구하는 방법을 검색하면 거의 대부분의 글에서 atan2 함수를 사용하여 그 각도를 구하라고 한다. #include <cmath> BOOL CalculateAngle(CPoint pt1, CPoint pt2, double& dAngle) {     BOOL bResult = FALSE;     if (pt1 != pt2)     {         dAngle = atan2(pt2.y - pt1.y, pt2.x - pt1.x);         dAngle *= (180.0 / M_PI);         bResult = TRUE;     }     return bResult; } 이런 글을 보고 만든 함수가 위의 함수이다. 같은 포인트가 아닐 시 atan2 함수를 사용하여 각도를 구하고 그 결과값이 라디안 값이니 degree 값으로 바꾸는 함수이다. 이 함수를 사용해서 이미지 상 두 점의 각도를 구하니 계속 부호가 반대로 나오는 것이었다. 다음과 같이 이미지 상에 두 점 A, B가 있다고 하자 그럼 보통 우리가 생각하는 x,y 2차원 좌표상엔 B 점의 y 값이 높다. 원점(영점)이 좌하단에 위치하기 때문이다. 하지만 이미지를 다룰땐 이와 반대로 좌상단에 원점(영점)이 존재한다. 따라서 위와 같은 함수 식으론 계속 부호가 반대로 나오게 되는 것이다. A 좌표를 (100, 70) 이라 한다면 B 좌표는 (200, 40) 정도가 되어  atan2(-30, 100) 이라는 값이 들어가 마이너스 부호가 나오는 것이었다. 이미지의 특징을 생각 못한 것이었다. 따라서 함수를 다시 만들자면 ...

[CUDA] CUDA 공부 1 - 이미지 읽어와 GPU에 복사/가져오기

이미지
 자 이제 본격적으로 해보자 우선 이미지 읽어와서 GPU에 복사, GPU 메모리 안에서 복사, GPU에서 시스템 메모리로 복사 등을 해보자.   참조한 블로그 : Z-wony 님 블로그의 [CUDA] 02. Memory Copy 및 Crop   z-wony 님은 리룩스에서 작성하셨으나 난 윈도우니까 그에 맞게 소스를 수정하고 공부해보자 우선 프로젝트를 생성하고 속성에서 opencv 와 CUDA를 추가하자. (include, lib 추가)   기존 read_JPEG_file 함수를 opencv 함수로 바꾸고     cv::Mat Img;     Img = cv::imread(SAMPLE_IMG, CV_8U);     imgWidth = Img.cols;     imgHeight = Img.rows;      imgBuffer = Img.data; 회색조 이미지 이니까 pitch * 3 된 곳을 3배를 없앤다. imageWriteToGPU 함수 안에도 opencv 함수로 수정      cv::Mat Img = cv::Mat(height, width, CV_8U, hostMem).clone();      cv::imwrite(filepath, Img); 추후 GPU 구해서 GPUDirect Storage 를 구현하면 달라지겠지만 CUDA에서 사용하는 명칭을 사용하여 설명하자 CUDA에서는 기존 메모리 (시스템 메모리) 를 Host Memory GPU 메모리를 Device Memory 라고 한다. 이 두 메모리 간에 복사 및 GPU 메모리 내의 복사를 할 때 cudaMemcpy 나 cudaMemcpy2D 함수를 사용한다. cudaMemcpy2D(devPtr, // dst Buffer (Device) pit...

[MFC] Windows 10 OCR 만들기 : OCR 적용하기(tesseract)

이미지
 일단 화면 구성은 아래와 같이 하였다. 왼쪽 이미지 리스트에서 파일을 선택하면 가운데 이미지가 나오고 오른쪽에 텍스트가 나오도록 그리고 아래쪽은 동작에 따른 로그를 출력할 계획이다. 우선은 프로젝트를 생성해주고 이전에 챙겨놨던 것들을 포함시켜 준다. 사실 안되는 것들때문에 이것 저것 추가하다보니 다 추가해버렸는데 이젠 모르겠다 ㅎㅎ 라이브러리들도 챙겨 넣고! 죄다 넣었다!!     Ctranslator.h #pragma once #include "tesseract/baseapi.h" #include "leptonica/allheaders.h" #include "opencv2/opencv.hpp" class CTranslator { private:     tesseract::TessBaseAPI* _Api;     tesseract::Tesseract* m_API; public:     CTranslator();     ~CTranslator();     void CreateTesseract();     bool Translate(cv::Mat Img, CString& strOut); }; 이왕 만드는거 클래스로 ㅋㅋ 근데 여기 C++ 소스는 배경화면이 안변하네 파이썬 소스는 뒤에 검게 변하더니... CTranslator::CTranslator() {     _Api = nullptr;     CreateTesseract(); } 생성자에서 초기화하는 함수 호출! void CTranslator::CreateTesseract() {     if(_Api == nullptr)         _Api = new tesseract...

[C/C++] extern "C"

우선 참조한 블로그 들 debug me 님의 extern "C" 제대로 생각해보기 Flatinum 님의 [C/C++] extern "C"와 네임 맹글링 japa 님의 [링크에러 LNK2019] C++에서 C 함수 사용하기 [링크에러 LNK2019] C++에서 C 함수 사용하기 출처: https://ospace.tistory.com/187 [JaPa2] [링크에러 LNK2019] C++에서 C 함수 사용하기 출처: https://ospace.tistory.com/187 [JaPa2] [링크에러 LNK2019] C++에서 C 함수 사용하기 출처: https://ospace.tistory.com/187 [JaPa2] [링크에러 LNK2019] C++에서 C 함수 사용하기 출처: https://ospace.tistory.com/187 [JaPa2] 프로그램 소스들을 보면 자주 보게 되는 extern "C" 대충 C에서 C++ 함수를 사용하기 위해서 적어준다고만 알고 있었지만 윈도우에서 Visual studio 로만 코딩을 하다 보니 이게 그렇게 중요한가 라는 생각을 했었다. VS에서 주로 #include <iostream> 으로 C++ 헤더를 추가하고 printf 와 cout을 섞어 사용하다보니 별 필요성을 못 느꼈다. 물론 라이브러리들도 윈도우용이다보니 C++용이었던듯. 그러다가 리눅스로 작성을 해야하는 것이 생겨서 엄청난 귀차니즘을 맞이한적이 있다. extern "C" 는 C와 C++ 의 컴파일 방식 차이에 의해 생겨나는 미스 매치를 발생하지 않도록 하는데 그 목적이 있다. 이는 C++ 의 오버로딩 등의 기능 때문에 발생한다고 보면 될 듯하다. 자세한건 Flatinum 님의 [C/C++] extern "C"와 네임 맹글링 에서 확인해보자.  조사하다 보니 C에서 C++ 함수(라이브러리)를 사용할때도 사용되지만 C++에서 C 함수를 사용할 때도 써야...

[CUDA] Cuda 공부 0

이미지
 CUDA 학습을 진행하며 정리하는 글 일단 CUDA를 설치하면 새 프로젝트 만들기에 CUDA Runtime 이 추가된다. CUDA 다운은 여기 서! 자신의 개발 환경을 선택하여서 다운로드 후 설치하면 된다. 참고로 개발 환경은 VS2019 (Enterprise) 간단하게 프로젝트 이름을 정하고 완료를 누르면 간단한 예제가 나온다.    a 행렬과 b행렬의 값들을 더하는 예제이다. 파일 확장자는 .cu 로 cuda Source Code 파일이다. 아래는 예제 프로그램 실행 시 화면이다.   이 확장자로 GPU가 할일을 작성하고 일반 C 파일 헤더처럼 include 하여 사용하면 된다. 일반 C 문법과 크게 차이는 없다. malloc 대신 cudaMalloc 을 사용하고 free 대신 cudaFree 를 사용한다는 정도 하지만 C++ 문법이 아닌 C 문법을 따르고 있다는게 흠이라면 흠이랄까... cu 파일의 기본헤더는 "Cuda_runtime.h" 이며  "device_launch_parameters.h" 는 자신의 blockIdx, blockDim, threadIdx 를 구할 때 필요하다던데 일단은 뭔진 모르겠지만 그렇단다..출처 : 쿠로이님 블로그 우선은 Q's Tech blog 에 있는 NVIDIA CUDA 기초 튜토리얼을 보며 공부 할 예정임.

[MFC] Windows 10 OCR 만들기 : 1.Tesseract(5.0.0) 컴파일

이미지
우선 참조한 블로그 : 아는대로 지껄이는 블로그 친한 동생이 타 기관에서 자료를 받았는데  파일이 아닌 팩스나 엑셀 파일을 캡쳐하여 이미지로 보내주어 손으로  일일이 다 쳐서 업무를  진행하였단 말을 듣고 불쌍한 마음에 'OCR 간단하자나...' 라는 생각이 들어 시작하게 되었으나...  역시 이론과 실전은 다르다고 Tesseract 컴파일 하는데만 무지 시간을 잡아먹으며 삽질의 연속 이었다.  각설하고 컴파일한거 설명해보도록 하자  우선  vs2015 이상이 필요하며 CMake 도 필요하니 미리 준비하도록 하자 개발 환경 : VS2022(Preview Ver.), Windows 10 Tesseract를 컴파일 하려면 Leptonica 를 컴파일 해야하고  Leptonica 를 컴파일 하려면 여러 lib파일들이 필요한데  이는 https://github.com/peirick/Tesseract-OCR_for_Windows 에서 다운로드 가능하다. 다운로드가 완료 되면 tesseract 프로젝트를 실행하여 컴파일 하도록 하자. 처음 냅다 컴파일 하면 무지막지한 에러들을 볼 수 있다. 하지만 폴더 내에 있는 Release 폴더에 가보면 우리가 필요로 하는 lib파일들이 생성된 것을 볼 수 있다. (Tesseract-OCR_for_Windows-master\x64\Release) 자 이제 Leptonica를 컴파일 해보자 Leptonica 는 공식 사이트나 Git Hub에 있으니 둘 중 편한 Git Hub에서 받자 https://github.com/danbloomberg/leptonica git clone https://github.com/danbloomberg/leptonica.git 다운로드 후 Leptonica 폴더 안에 build 폴더랑 lib 폴더를 생성해준다. 그리고 CMake 를 실행한 후 소스 폴더와 빌드 폴더를 각각 Leptonica 폴더와 build 폴더로 지정한...

[Python] 이미지 크기 가져오는 함수

이미지
 간만에 파이썬으로 뭘 좀 하려다 보니 생각 안나는 것 투성이다. 매트랩이랑 같은 함수인데 기억도 안나고.... 매트랩을 한다고 해도 다시 공부해야 할 것 같다;; 오늘은 기본으로 돌아가서 이미지 크기를 가져오는 방법을 알아보자 단 한줄이면 끝나지만...ㅎㅎㅎ 이미지를 읽어 왔다고 가정하면 .shape 만 해주면 끝이다. img1 = cv2.imread(dirPath+filename1 , cv2.IMREAD_GRAYSCALE) h = img1.shape height = img1.shape[ 0 ] width = img1.shape[ 1 ] 위 소스는 그레이 스케일일 경우 이미지 크기를 읽어 오는 방법이다. 그레이 스케일일 경우 1차원 밖에 없기 때문에 높이와 넓이 두가지로 이루어진 튜플을 볼 수 있다. img1 = cv2.imread(dirPath+filename1 , cv2.IMREAD_COLOR) h = img1.shape height = img1.shape[ 0 ] width = img1.shape[ 1 ] 이번엔 컬러 이미지로 읽어 왔을 경우 h를 보면 높이, 넓이, 채널 수로 구성된 튜플임을 알 수 있다.

[잡담] GPUDirect Storage and for Video

이미지
 회사에서 빠르고 많은 이미지 저장을 위해 검색을 하던 중 GPUDirect Storage 란 녀석을 발견하게 되었다. GPU와 SSD 등의 저장매체에 바로 접근하는 방법으로 기존 파일 읽어오는 방식보다  빠르게 많은 정보를 읽고 쓸 수 있는 방식이다. 하지만 아직까진 특수 환경에서만 사용가능한 녀석이다. 지원되는 그래픽 카드가 한정적이며 OS 지원도 필요한데 주로 사용하는 OS 가 윈도우다 보니 아직 직접 테스트를 해보지는 못하였다. 우선은 2021년 6월 초 기준으로 자료만 정리할까 한다. GPUDirect 기술로는 GPUDirect Storage, GPUDirect RDMA, GPUDirect for Video 3가지가 있다. GPUDirect Storage는 위에서 간단히 설명한 녀석이고 GPUDirect RDMA 는 원격으로 다른 2대의 시스템간 GPU에 있는 데이터를 주고 받는 방식이다. 그리고  GPUDirect for Video는 Grabber 와 GPU 간 데이터는 주고 받는 방식이다.  GPUDirect for Video와 Storage 두가지 방식을 이용해서 많은 데이터를 받아 저장하려 하였으나 지원하는 그래픽 카드가 아직은 너무 적어서 포기하였다.    - From GPUDirect Storage Document  Nvidia V100 과 Ampere Architecture 라는데 평소에는 들어보지도 못한 녀석들이라;; 평소 보기 힘든 Tesla나 Quadro 역시 아직까지 지원을 하지 않는단다;; 지원 OS도 리눅스 밖에 없어 아직까지는 이 기술을 사용이 제한적일 듯 하다.  자료를 찾을 때 보긴했으나 저장을 안해놓아 어디서 봤는지 기억이 안나지만 윈도우에서도 올해말안에 지원하는 기능을 추가한다고 하니 그때까지 기다려 보려 한다. 빨리 윈도우에서의 지원과 일반 게이밍 그래픽카드에서의 지원으로 게임할 때도 빠른 로딩을 사용 할 수 있기를 빌어본다.   ...