코스피가 치솟아서 곧 떨어질 것을 기대하고 풋옵션을 사기 위해 선물옵션 계좌를 텄다. 3시간 교육을 받고 모의투자를 해야 거래를 시작할 수 있다길래 몇천 원 결제하고 교육을 받았다. 암호화폐 거래소나 강원랜드가 더 건전해 보였다. 매달 100만 원 이내의 금액을 보험금처럼 날리다가 한 번 무너질 때 회수하는 전략을 쓰고 싶었는데 생각보다 머리를 많이 써야 해서 공부를 좀 하다가 API를 열어봤다. Rust에서 ActiveX 로드하는 삽질하다 지쳐서 홀드.
조금은 개발자 친화적인 금융을 건드려보기로 하고 이더리움을 시작했다. 수익성은 없다지만 시스템을 이해하는 진입점으로는 괜찮을 것 같아서 채굴기를 까보기 시작했다. geth를 준비하고 채굴을 시작하려니 500G가 넘는 전체 블록 싱크를 안 하면 안 된대서 마이닝 풀로 선회했다. Etherscan에서 새 블록 나오는 거 하나씩 보면서 어느 마이닝 풀이 핫한지 구경 좀 하다가 적당한 걸 하나 찾아서 ethminer로 시작하려는데.. 맥에서 빌드가 잘 안 된다. Boost 버전 문제 같아서 Hunter 빼고 Brew로 설치한 Boost로 돌게 바꾸느라 코드 서너 줄 고쳤다. 이제 좀 해보려는데.. OpenCL과 CUDA만 되고 CPU 지원은 안 한다길래 OpenCL을 하려는데.. 애플이 Metal로 바꿔서 OpenCL을 못 쓰네? Metal로 행렬곱셈하는 샘플 프로젝트 돌려보다가 C++에서 Metal shader가 담긴 Objective-C framework을 접근하는 오버헤드 생각에 접었다.
CPU 마이닝을 어떻게든 해보기로 한다. CUDA 마이닝은 ethminer에 코드가 다 있는데 CPU 마이닝은 ethash에 코드가 다 있어서 걔를 집중적으로 팠다. CPU 버전도 GPU 버전처럼 프로그램 시작할 때 4기가가 넘는 DAG을 메모리에 다 올리도록 고치고 매번 계산해서 올리는 것도 꼴보기 싫어서 epoch-382.dag 파일에 메모리 덤프해놨다가 쓰게 하니 2초 내에 로드할 수 있었다. 이것저것 튜닝을 했지만 해시레이트가 670k를 넘지 못했다. 해시 한 번에 11,000ns를 쓰는데 keccak512가 350ns keccak256이 230ns 드는 거야 그렇다 치고 그 간단한 FNV 해시 2000여 번 도는데 루프당 5ns 쓰는 게 이해가 안 됐다.
이더리움 설계자가 ASIC 마이너 만들기 어렵게 했다는 부분이 여기에 있었다. 해시 한 번 할 때마다 2천여 번 접근이 필요한 4기가짜리 DAG이 CPU L123 캐시에 올릴 수 없도록 크게 만든 거다. 덕분에 캐시되지 않은 힙 메모리에 한 번 접근하는데 4-5ns가 걸린다는 걸 알게 됐다. 힙 접근을 막고 가짜 정보가 있는 스택에 접근하도록 코드를 고쳐보니 11,000ns가 730ns가 됐다. 올바른 해시를 계산하지 못하지만 해시레이트가 10M이 넘었다. keccak이니 FNV니 중요하지 않았다. 4기가 메모리에 졸라 빨리 접근할 수 있도록 GPU에 모조리 올리는 게 중요한 거였다. 마침 내 5년 전 아이맥의 그래픽카드 메모리는 2기가여서 Metal로 새로 쓸 의욕은 나지 않았다.
Tesla V100 4개 꽂힌 AWS p3 장비에서 CUDA로 돌려보니 CPU 1%도 안 쓰면서 안정적으로 370M 나왔다. V100 4개 박힌 장비 한 달 렌트비는 천만 원이다. PoW는 망해야 한다. 얼마 전에 런칭한 이더리움 2.0이 얼른 완성되기를 원한다.
이렇게 실험을 하다 보니 CUDA 코드에 친숙해졌고, GPU에 대한 로망이 생겼다. 내가 게임 개발을 할 가능성은 없는데 이 GPU 지식을 어떻게 활용할까 생각하다 보니 자연스럽게 딥러닝이 떠올랐다. 문득 회사 일에 딥러닝을 적용할 일이 떠올라서 70만 원짜리 딥러닝 유료 강좌를 질렀다. 내가 저 Tesla V100 꼭 혹사시키고 말겠다.
Continue Reading
Discover more thoughts and insights
WebP polyfill 험난했다
Flutter 하면서 WebP 이미지 도배했었다. WebP가 좋아 보였기 때문이다. 요새 웹 버전 만들다 보니까 WebP 미지원 브라우저 때문에 CDN 마이그레이션 해야 해서 좀 귀찮았다. 그래서 WebP
The Java SE 6 (Mustang) Holiday Quiz
The Java SE 6 (Mustang) Holiday Quiz 열심히 풀었다. 그 결과 반 타작했다. 아이고~ 아이고~ 이제 어느덧 Java 6을 공부할 시점.. ㅎㅎ
문득 타자방 수련 중 꽂힌 문구
이 문구를 보고 떠오른 철학서에 있던 관련 문장도 함께 적는다. \*\*입증하면서 사는 것은 더이상 삶을 사는 것이 아니다. 삶은 순수하고 강인한 아니무스처럼 사는 것이다. \*\* 2006년 8월 13일 14시