선생님 강의를 파트1,2 모두 수강하며 부족하지만 틈틈히 공부하고 있습니다. 바쁜일정을 핑계로 집중적으로 학습하지 못하는 점은 부끄럽습니다. 하지만 학습을 하면서 궁금한 점이 있습니다. ibkr이라는 우량한 브로커를 이용하시는데 들리는 말로는 실계좌 오픈이 까다롭다는 말을 들었습니다. 그리고 페어전략을 구성하려면 매수와 매도가 이루어져야 하는데 실계좌 오픈 후 한국 사용자가 매수매도 모두 이용할수 있나요? 그리고 주식뿐 아니라 외환이나 파생상품도 가능한지 궁금합니다. 그리고 실전적용시 시스템적으로 어떠한 부분을 주의해야하는지도 궁금합니다. 부족한 질문이지만 답변부탁드립니다.
선생님 안녕하세요. 강의 잘 듣고 있습니다. 다름 아니라 미니콘다 프롬프트를 통해 가상환경설정 시 기존 yaml 파일을 통해 환경설정을 덮어쓰기 하는 경우 에러가 발생합니다. (myenv-finance-analysis) C:\Users\baesilisk\env_yaml>conda env create --force -f myenv-finance-analysis.yaml usage: conda-script.py [-h] [-v] [--no-plugins] [-V] COMMAND ... conda-script.py : error: unrecognized arguments: --force 해결방법을 알려주시면 감사하겠습니다!
CUDA 프로그래밍 (5) - C/C++/GPU 병렬 컴퓨팅 - 아토믹 연산 atomic op
"hist - shared.cu"의 다음 부분에서 질문있습니다. if(threadIdx.x < HIST_SIZE) { atomicAdd(&(hist[threadIdx.x]), s_hist[threadIdx.x]); } threadIdx.x는 0~31로 모두 다르기 때문에 병렬 연산이긴 해도, global memory에 있는 hist 배열의 서로 다른부분으로 write가 이루어진다고 생각했습니다. 따라서 서로 겹치는 위치가 없어서 atomic한 연산이 필요없을거라 생각했는데, atomic 연산이 없으면 결과가 이상하게 나오더라구요.. 혹시 왜 그런지 알 수 있을까요? 양질의 강의 제공해주셔서 감사합니다!
강의에서 10,000 x 10,000 행렬의 덧셈을 해결하고자 했고, 이를 2D thread block(32 x 32)으로 풀어내셨습니다. 1D thread block을 사용하지 않는 것에 대한 의문 이 들었습니다. [질문] 1D thread block은 실무에서 잘 쓰이지 않나요? 의문을 가진 이유는 다음과 같습니다. 우선 2D로 설계할 경우, thread block의 dimension을 어떻게 설정하는지에 따라 낭비되는 thread가 달라집니다. [1 x 1,024] : GridDim(10,000 x 10 x 1), 2,400,000개 낭비 [2 x 512] : GridDim(5,000 x 20 x 1), 2,400,000개 낭비 [4 x 256] : GridDim(2,500 x 40 x 1), 2,400,000개 낭비 [8 x 128] : GridDim(1,250 x 79 x 1), 1,120,000개 낭비 [16 x 64] : GridDim(625 x 157 x 1), 480,000개 낭비 [32 x 32] : GridDim(313 x 313 x 1), 320,256개 낭비 Thread 낭비가 가장 적은 block dimension은 강의에서 소개해주신 [32 x 32] 입니다. 저는 여기서 1D로 설계했을 때, 낭비되는 therad의 개수가 궁금해졌습니다. [1,024] : GridDim(97,657 x 1 x 1), 768개 낭비 1D로 thread block을 설계했을때, therad 낭비는 768개로 2D로 설계하는 경우와 비교했을때 적지않은 차이라고 생각합니다. 물론 실제로 측정해본 결과(RTX 3090) 약 40 usec 차이로 1D thread block인 경우가 더 빠르긴 했지만 생각보다 큰 차이는 아니었습니다. 양질의 강의를 제공해주셔서 감사합니다!!
승인된 LowPriorityCores 할당량을 초과하므로 작업을 완료할 수 없습니다. 추가 세부 정보 - 배포 모델: Resource Manager, 위치: KoreaCentral, 현재 제한: 3, 현재 사용량: 0, 추가 필요: 16, (최소) 새 제한 필요: 16. 할당량이 임계값에 도달할 때 경고를 설정합니다. https://aka.ms/quotamonitoringalerting에서 자세히 알아보세요. 배포가 성공할 수 있도록 '세부 정보' 섹션에 나열된 매개 변수를 지정하여 https://aka.ms/ProdportalCRP/#blade/Microsoft_Azure_Capacity 이게.. 저도 클라우딩 컴퓨터가 처음이라 익숙하지가 않는데 ㅠ 이렇게 오류가 뜹니다.. 계정이 유료?로 전환되었는지도 모르겠고요 ㅠㅠ 일단 앞의 강의 에서 spot이게 검색해도 아무것도 뜨지 않아서 지금 강의 부터 진행 하는데 역시 안되네요 ㅠㅠ 뭐가 문제일까요
안녕하세요 수업 너무 잘 듣고 있습니다. 수업중에 "변동성이 너무 크면, 통계적으로 접근하기 어려운 데이터가 된다"는 말씀을 주셨는데 왜 그런지 직관적으로 이해가 되지 않아서 질문드립니다. 변동성이 너무 큰 상황에서도 많은 반복을 하면 예상하는 margin을 기대할 수 있는 것이 아닌가 싶은 생각이 들기도 합니다. 설명 기다리겠습니다. 감사합니다.
안녕하세요 강사님! 좋은 강의 정말 잘 듣고 있습니다. 지난 질문에도 친절하게 답변 달아주셔서 감사의 말씀 드립니다. 이번 메타프로그밍 3.1절을 들으면서 잘 이해가 안되는 부분이 있어서 이렇게 질문글을 작성합니다. 질문은 다음과 같습니다. Q1. attach_wrapper가 return 하는 func는 누구인가? 최종적으로 그 func는 누가 받는가? def attach_wrapper(obj, func=None): if func is None: return partial(attach_wrapper, obj) setattr(obj, func.__name__, func) return func 위의 def attach_wrapper 가 @attach_wrapper(wrapper) 형태로 데코레이트하면, func=None 일 때 partial() 을 통해서 def attach_wrapper 함수 객체 본인을 return 해서 첫번째 인자인 obj 를 wrapper 로 고정시키는 것까지 이해를 했습니다. func=None 이 아니면 setattr() 을 통해, obj 가 갖고 있는 어트리뷰트 func 의 이름을 인자로 받은 func 로 값을 셋팅하는 것까지도 이해를 했습니다. 그런데 최종적으로 return 되는 게 func 라는 것이 잘 이해가 되지 않습니다. return 되는 func 를 누가 받는걸까요? func 를 유추하기까지 저의 사고 흐름은 아래와 같았습니다. @attach_wrapper(wrapper) def set_level(newlevel): nonlocal level level = newlevel def set_level 이 데코레이트 되는 내부 사정은 set_level = attach_wrapper(wrapper)(set_level) 이 될텐데요. set_level = attach_wrapper(wrapper)(set_level) 에서 attach_wrapper(wrapper) 는 partial() 을 통해 def attach_wrapper 본체가 return 되었기 때문에, 데코레이트 되는 내부 사정을 달리 표현하면 set_level = attach_wrapper(obj=wrapper, func=set_level) 라고 이해를 했습니다. 그러면.. attach_wrapper(obj=wrapper, func=set_level) 가 return 하는 게 func 인데, set_level = func 이니까.. set_level = set_level 이 되는건가요? 추가 질문 def attach_wrapper 함수에서 return func 를 주석처리 하고 실행을 해도 결과가 똑같이 나오는데 이유를 잘 모르겠습니다.. 어째서 return func 가 아무런 효용이 없었던 걸까요..? 혹시 제가 잘 못 이해한 부분이 있다면 어김없이 피드백 부탁드리겠습니다! (아래에는 출력 결과물을 첨부하였습니다.) """ # return func 주석 처리 후 결과 DEBUG:__main__:add DEBUG:__main__:Add called WARNING:__main__:Add called DEBUG:__main__:countdown CRITICAL:__main__:countdown DEBUG:__main__:countdown2 CRITICAL:__main__:countdown2 5 5 5 countdown 0.009128093719482422 countdown 0.007673978805541992 countdown2 0.0056438446044921875 countdown2 0.005079030990600586 --- # 원본 코드 실행 결과 DEBUG:__main__:add DEBUG:__main__:Add called WARNING:__main__:Add called DEBUG:__main__:countdown CRITICAL:__main__:countdown DEBUG:__main__:countdown2 CRITICAL:__main__:countdown2 5 5 5 countdown 0.007693052291870117 countdown 0.006663084030151367 countdown2 0.005110979080200195 countdown2 0.0052149295806884766 """
안녕하세요 강사님, 수업 잘 듣고 있습니다. 좋은 강의 만들어 주셔서 감사드립니다. 수업을 듣다가 9분 12초 쯤에서 질문이 있어서 게시글 남깁니다. eval(repr(p)) 에서, repr(p) 가 Pair 라는 클래스를 호출해서 인스턴스로 만드는 string을 나타내기 때문에, eval()을 했을 때 Pair라는 객체가 생성되는 게 맞을까요? 바꿔서 말하면 repr(p)가 평가되었을 때 Pair(3,4)와 같은 객체 생성 expression과 같기 때문에 그 expression이 eval()을 타서 Pair 객체가 만들어지는거죠?! 답변 주시면 감사하겠습니다!
안녕하세요. 강의 영상을 보면서 Korea Central 지역에 Quotas 요청을 보냈는데 아래와 같이 나오면서 승인이 안되네요 QMS Update - Status: ResourceType: crpCores { Quota Bucket: TotalLowPriorityCores Status Description: Due to very high rates of Spot consumption, Microsoft is unable to approve additional quota at this time State: SpotVMNotAllowedForPayGCustomer Current Quota: 3 New Quota: 16 } Properties: [location, koreacentral] } Korea South 지역에 요청해도 동일하게 되지 않습니다. 어떻게 해야할까요? QMS Update - Status: ResourceType: crpCores { Quota Bucket: TotalLowPriorityCores Status Description: Due to very high rates of Spot consumption, Microsoft is unable to approve additional quota at this time State: SpotVMNotAllowedForPayGCustomer Current Quota: 3 New Quota: 16 } Properties: [location, koreasouth] }
안녕하세요 저번 Vector Addition 수업에서는 256M(256 x 1024 x 1024)개의 연산을 수행하기 위해서 <<<256*1024, 1024>>>로 커널을 런치하여 Block의 개수에는 제한이 없는 것 처럼 보였는데, 15-5강의에서는 SM의 Thread Block은 32개 까지 가능이라고 하셔서 헷갈리는데 두 개의 Thread Block 개념이 다른 것인지 궁금합니다.
안녕하세요. 먼저 좋은 CUDA 강의를 제공해주셔서 감사합니다. 다름이 아니라 15-4 강의에서 Warp를 동시에 돌린다는 말에 질문이 있습니다. Warp 스케줄링을 저는 아래와 같이 비교하여 이해하였습니다. CPU: Core -> 여러개의 쓰레드 GPU: SM -> 여러개의 Warp 강의 내용처럼, CUDA에서 Warp별로 스케줄링을 관리를 한다면 모든 SP의 Clock들이 같은 Instruction을 수행(SM내 SP들의 Clock들은 Sync가 맞음)하여야 Warp단위로 스케줄링이 가능할 것 같은데, 제 생각이 맞는지 궁금합니다. 감사합니다.
알찬 강의 계속 잘 듣고 있습니다! CPU와 GPU version의 계산시간 비교에 대해 질문 드립니다. 커널에서 계산시간만 비교하면 CUDA이 훨씬 빠릅니다. CPU version (filter-host.cu): 44,784 us CUDA version (filter-dev.cu): 830 us 하지만 CUDA version에서 메모리 복사를 포함하면 337,737 us 으로 CPU version보다 훨씬 느린 것 같습니다. 혹시 메모리 복사 시간을 줄이는 방법이 있는지요?
안녕하세요! 좋은 강의 잘 듣고 있습니다. common.cpp 코드 중에서 ELAPSED_TIME_BEGIN(N)과 ELAPSED_TIME_BEGIN(N)을 매크로 함수로 정의한 이유가 무었인지요? CUDA_CHECK_ERROR() 함수는 __FILE__과 __LINE__ 때문에 매크로 함수로 정의하신 걸로 이해합니다만, 시간 측정 함수들을 매크로함수로 정의하신 이유는 잘 이해되지 않습니다. 답변 부탁드립니다. 감사합니다.