ccminer는 많은 변종이 있습니다. 한때 변종들이 난무하던 무렵이 있었지만 현재는 klausT 및 tpruvot씨의 포크가 가장 유명하고 지금도 자주 관리되고 있으나, 특정 코인에서 더 많은 해시를 내는 변종들이 꽤 다양합니다.
아쉽게도 몇몇 변종들은 지난 몇년간 개발이 진전이 안되고, 가장 개발이 활발한 tpruvot씨의 포크는 유지보수 및 개발에 상당히 보수적인 면이 있어서, 당장에 빠른 코드라도 쉽게 반영을 안시키고 있어서, 다른 변종의 좋은 장점은 수년간 제대로 반영이 안되고 있습니다.
게다가 상당히 열심히 개발에 참여했던 sp씨는 GPL 라이선스를 어겨가면서, 배포행위를 하면서도 변경된 소스 공개를 하지 않고 자신의 노력을 보상받기 위해서 값을 지불받고 개선된 판의 자체 모드판 (일명 SpMod)를 각 코인별로 비공개적 방식으로 판매를 하고 있어서 많은 비난을 받고 있기도 합니다. (ccminer 원래 소스는 GPLv3 라이선스를 가지므로, 이를 혼자서 변경해서 사용하는 것은 아무런 문제가 되지 않지만, 이를 배포하는 행위를 하는 경우 변경된 소스를 함께 배포해야 하는 의무가 있습니다. sp씨는 최근들어 변경된 ccminer 소스를 전혀 공개하고 있지 않습니다.)
변종별 특징 정리
따라서 윈도우용 실행파일은 낡은 버전의 CUDA 툴로 컴파일 된 것.
https://github.com/djm34/ccminer-lyra : djm34의 또 다른 lyra알고리즘 지원 버전 (테스트 안함)
https://github.com/krnlx/ccminer-xevan : krnlx의 xevan 지원 버전 (테스트 안함)
ccminer 포크가 이 이외에도 많으나, 제가 직접 찾아서 리눅스에서 컴파일 하고 알고리즘별로 속도를 측정해본 것은 이정도입니다.
혹시 또 다른 포크가 있다면 제보해주시기 바랍니다~
직접 컴파일해서 사용할때의 장점은 무엇일까?
이렇게 여러 종류의 변종이 있고 각각이 조금씩 다른 특징이 있는데, 몇몇 소스는 아쉽게도 지속적으로 관리되지 않고 있으며, 낡은 CUDA버전으로 컴파일된 것이라 성능이 예상보다 낮은 경우도 있습니다. 이를 최신 CUDA-8.0 혹은 CUDA-9.0의 컴파일러로 컴파일하면 좀더 나은 성능을 기대할 수 있다고 하니, 윈도우에서 Visual Studio를 다뤄본 경험이 있다거나, 개발에 관련되어 조금이라도 관심이나 눈썰미가 있으신 분들이라면 얼마든지 소스 코드를 다운로드 받아서 직접 컴파일하여 좀 더 최적화된 실행파일로 좀 더 나은 성능향상을 기대해 볼 수 있을 것입니다. 덤으로, 인터넷을 통해 가끔씩 출처를 알 수 없는 ccminer를 다운로드 받아서 사용중인 경우가 있는데, 공식 레포지터리에서 지원하는 실행파일이 아니라면 함부로 출처를 알기 힘든 누군가가 새로 컴파일 했다고 하는 ccminer 프로그램을 다운받아서 실행시키는 행위는 위험을 자초하는 행위가 될 수 있습니다. 반면, 자신이 직접 컴파일 해서 사용하는 경우에는 바이러스/랜섬웨어 등등의 감염을 원천적으로 차단하는 방법이 될 수 있습니다.
윈도우에서 ccminer 컴파일하기
1. Visual Studio 2013 설치 - 개발자는 Visual Studio 2013을 권장하고 있습니다.
이 뿐 아니라 VS2013은 CUDA-9.0을 지원하기도 합니다.
2. CUDA-8.0 다운로드 및 설치 : VS 2013을 설치하고 난 후에는 CUDA-8.0 툴을 다운로드 받습니다. 여기에는 nvcc라는 컴파일러가 포함되어 있으며 ccminer 소스를 컴파일하기 위해서 반드시 필요합니다.
3. 필요한 라이브러리 컴파일 혹은 원래 소스 사이트에서 다운로드 받기: 경우에 따라서 다음과 같은 소스파일을 다운로드 받아서 직접 컴파일해야 합니다.
- openSSL : 가장 널리 쓰이는 SSL 라이브러리이나, 간혹 보안버그가 발견되면 최신 소스를 받아서 새로 컴파일해야 하는 경우가 있습니다.
- curl : ccminer를 컴파일하기 위해 필요한 pool 접근을 위해 쓰이는 라이브러리
- pthread : 유닉스 호환 윈도우용 POSIX 쓰레드 라이브러리 (소스와 더불어 바이너리 파일도 함께 배포하고 있음)
- mpir : 고정밀 정수/실수 연산 라이브러리
4. 그밖에 프로그램 다운로드
- win32 git : 윈도우에서 github의 소스를 직접 다운로드 받아서 최신으로 유지관리하게끔 해주는 윈도우용 git 버전관리 툴 + MSYS
- MSYS : 윈도우에서 리눅스 개발 환경과 유사한 환경을 만들어주는 각종 리눅스 유틸리티 모음.
- nasm : openSSL을 컴파일할 때에 어셈블리어를 컴파일하고자 하는 경우에 필요.
- MingW64 : 윈도우에서 gcc를 사용하고자 하는 경우. gcc + MSYS로 구성됨.
Visual Studio 커뮤니터 2013 버전 설치하기
자세한 설명은 생략합니다만, Visual Studio 2013 커뮤니티 버전을 다운로드 받으려면 https://www.visualstudio.com/ko/downloads/ 페이지로 들어가서, 맨 하단의 "이전 버전" 버튼을 누르면 받을 수 있습니다. 단, 오래된 버전을 다운로드 받으려면 가입을 하는 불편함을 감수해야 하지만 무료로 다운받을 수 있습니다.
CUDA-8.0 다운로드 및 설치
위의 스크린샷처럼 선택해서 다운로드 받고, 설치하시면 됩니다. 설치시에 드라이버 설치는 선택 해제하고 (드라이버 설치를 하면 기존 설정이 바뀌거나 꼬일 수 있으므로), 컴파일 도구만 설치하시기 바랍니다. NVIDIA 그래픽 카드가 없더라도 설치할 수 있습니다.
필요한 라이브러리 직접 컴파일하기
tpruvot씨의 ccminer 소스에는 미리 컴파일된 openSSL및 curl 라이브러리 및 pthreads 라이브러리가 포함되어 있습니다. (ccminer/compat 디렉토리 아래에 있음(32비트/64비트 모두 포함)) 이 뿐만 아니라 ccminer/compat 디렉토리 아래에 추가적으로 몇몇 라이브러리까지 함께 포함되어 있습니다. (curl + openssl + pthreads + nvapi(NVIDIA 드라이버 API)
따라서 tpruvot씨의 버전을 컴파일 하는 경우에는 별도의 다른 라이브러리가 필요하거나 하지 않습니다.
다른 ccminer 변종의 경우에도 미리 빌드된 라이브러리가 포함되어 있는 경우가, 조금 낧은 버전으로 보안문제가 발생할 소지가 있으니 유의하시기 바랍니다. 미리 빌드된 라이브러리가 없는 다른 포크의 경우에는 직접 컴파일하거나, 미리 빌드된 라이브러리를 복사해서 사용할 수도 있을 것입니다.
ccminer 빌드하기
(Visual Studio에 사용법에 대한 자세한 설명은 생략하고 간단한 설명만을 하도록 하겠습니다.)
Visual Studio로 소스를 컴파일 하고자 하는 경우에는
1. 소스를 받고 압축을 푼다.
2. 소스 파일 디렉토리로 들어가서 *.sln 파일을 찾는다.
예를 들어 ccminer의 경우 ccminer.sln 파일을 찾을 수 있습니다. Visual Studio가 정상적으로 설치된 경우라면, ccminer.sln 파일을 더블 클릭하면 아래와 같이 Visual Studio 메인 창이 뜨며,
오른쪽 사이드바에 프로젝트 명칭(여기서는 ccminer)이 뜨고, 상단에는 "Release" "x64" 등과 같은 내용이 메뉴바 아래에 나옵니다.
(아래 이미지 참조)
"Release"는 컴파일할 때에 디버그 정보를 넣지 않고 최종본으로 컴파일을 얻겠다는 것을 뜻하며, 이를 "Debug" 혹은 다른 것으로 선택할 수 있습니다. 특별히 디버그 정보를 넣고자 하지 않는다면 "Release"를 선택하고, 64비트로 컴파일 하려면 x86을 선택합니다.
3. 빌드한다.
빌드라고 하는 것은 소스를 컴파일한다는 것을 뜻합니다. 위의 내용을 수행한 후에 오른쪽 사이드바에 보이는 프로젝트명을 마우스 오른쪽 클릭을 하면 메뉴가 보이는데, 이를 선택하여 빌드를 하거나, 상단 메뉴의 빌드(Build)를 누르면 나오는 메뉴를 통해 ccminer를 컴파일합니다.
(아래 이미지 참조)
여기까지가 Visual Studio의 가장 기본적인 빌드하는 방법이고, 모든 세팅이 정상적이라면 빌드가 완료되어야 합니다.
그러나 ccminer 최신 버전을 컴파일하면 아래와 같은 내용을 보이며서 중간에 빌드가 실패할 것입니다. -_-;;
(아래에 기술하는 내용을 제대로 적용하지 않고 컴파일을 하면 위와 같이 4개의 오류가 나면서 컴파일이 완료되지 않습니다.)
이 문제점을 고치려면 다음의 사항을 체크해봅니다.
1. Visual Studio를 외부 툴과 함께 사용할 경우에는 환경변수에서 외부 툴에 대한 패스를 잡아주어야 한다.
ccminer의 경우는 이 과정이 필요 없습니다만, 일반적으로 다음의 문제때문에 컴파일이 종료가 될 수 있습니다.
(ccminer의 경우 아래 내용은 건너뛰시기 바랍니다)
환경변수 버튼을 누르면 환경변수값을 추가/변경하실 수 있습니다. PATH변수를 변경하고자 하면 이를 찾아서 변경해 주면 됩니다.
(ccminer를 컴파일할 경우에는 특별히 외부툴이 별도로 필요하지 않습니다.
openssl을 컴파일 할 경우에 nasm이 필요한데, 이 경우에 nasm 어셈블러 컴파일러를 수동으로 설치하고 패스를 잡아주지 않는 경우 중간에 오류를 내뿜을 수 있습니다.)
2. CUDA 옵션을 조정해준다.
상단에 보이는 메뉴 File Edit View Project 중에 네번째 메뉴 프로젝트를 선택하여, CUDA 옵션을 다음과 같이 조정해줍니다.
여기서 코드 제네레이션 옵션에 compute_61이 빠져있습니다. compute_61은 최근에 가장 많이 쓰이는 GTX 1080/1070/1060/1050 등등의 계열입니다. (참고로 compute_35 등등에 대한 정보는 https://en.wikipedia.org/wiki/CUDA 사이트를 참조하실 수 있습니다.) compute_61이 기본 목록에서 빠져있는데 이를 추가해줍니다.
3. 코드셋 지정.
기본 코드셋이 Multi Byte로 지정이 되어있는데, lyra2/cuda_lyra2.cu 파일을 컴파일하는 중에 오류가 날 것입니다.
cuda_lyra2.cu 파일을 열어서 일본어로 되어있는 코멘트를 모두 지워주면 컴파일이 오류가 나지 않고 넘어갈 것입니다.
Multi Byte로 지정이 되어있는 부분을 "유니코드"로 지정하면 nvml.cpp파일을 컴파일하는 중에 오류가 날 것입니다. 이를 방지하려면 코드셋을 "Not Set"으로 다음과 같이 변경시켜줍니다.
컴파일이 모두 완료되는 데에 꽤 시간이 걸리는데, 이것이 완료되면 다음과 같이 출력이 됩니다.
컴파일이 완료된 파일은 ccminer/x64/Release (혹은 디버그용으로 컴파일 한 경우는 Debug) 디렉토리 아래를 살펴보면 찾을 수 있습니다.
파일 크기가 상당히 큰데(40메가 이상), 이를 UPX등으로 압축하면 10메가 근처까지 압축됩니다.)
컴파일에 성공하시거나, 문제가 있는 경우에도 댓글 달아주시기 바랍니다~~
감사합니다.