크게 변경사항은 없으나 GPU사용에따라 몇가지 변경하거나 개선해야 할것이 있어서 패치합니다.
1. 패치 파일
전체파일 : wget http://factorn.iptime.org:32080/download/fact_dist_20_04_v1.22.RTX30XX.tar.gz
업데이트 1.62 -> 1.22 : wget http://factorn.iptime.org:32080/download/fact_dist_20_04_v1.062-to-v1.22.RTX30XX.tar.gz
업데이트 1.20 -> 1.22 : wget http://factorn.iptime.org:32080/download/fact_dist_20_04_v1.20-to-v1.22.tar.gz
2. 주 패치 내용
- 옵션 추가
export USE_GCD_PROCESS="True"
기본 옵션은 True 입니다.
최대 공약수 계산을 하여 제거할 것인가를 묻는 것으로 1000개의 후보의 경우 100개정도 압축해줍니다.
소요시간이 28비트의 경우 약 5~10초(7950X) 걸립니다.
기존에 사용했지만 경우에 따라 생략할 수 있기에 옵션에 넣었습니다.
export MAX_SIEVE_LEVEL=28
최대 공약수 계산을 하여 후보자 필터링을 하고자 할 경우 최대 공약수를 구할 소수의 크기입니다.
28비트이면 (1~536870911) 내의 소인수로 미리 제거하겠다는 뜻입니다.
기존에 사용했지만 경우에 따라 낮추거나 높일 필요가 있기에 옵션에 넣었습니다.
예시 : 28비트 : 5초 소요, 20비트 : 1초 소요
3. 활용방법 예제
예시)
목표 :
- CUDA-ECM을 사용할 것이다.
- 최대공약수 필터기능을 최소화 하여 소요시간을 단축한다.
- 최초진입은 CUDAECM 1~2레벨으로 빠른 진입을 원한다.
- MSIEVE 선형대수 진입 전에 CUDAECM 사용을 끝내야 한다.
설정 :
--mine.sh--
export CUDAECM_MAX_LEVEL=3
export FIRST_ACCEPT_LEVEL=2 #Default 4
export SECOND_ACCEPT_LEVEL=3 #Default 4
export THIRD_ACCEPT_LEVEL=3 #Default 4
export W_MUL_INTERVAL=12
export MAX_SIEVE_LEVEL=20
--gpu-server/gpu_config_3.ini--
기존 b1 = 1000000 에서 b1 = 1500000 으로 변경
변경사유 : 3090 의 경우 msieve cuda 진입전에 끝낼수 있는 값 설정 (즉, 본인 GPU 에 맞추어 변경하는게 효율적입니다.듀얼 3090은 1800000 으로 사용중)
응용은 영역은 큽니다.
export CUDAECM_MAX_LEVEL=2
으로 해서 단 2단계로 해도 됩니다.
이때는 gpu-server/gpu_config_3.ini 를 gpu-server/gpu_config_2.ini 으로 복사해서 수정한게 좋습니다.
또 다른 응용으로는
export USE_GCD_PROCESS="False" 으로 하고
export W_MUL_INTERVAL=8 (낮춘 사유는 CUDA-ECM의 후보자 최대 갯수가 1000개를 넘어서면 에러가 발생됨)
4. 1.20 버전부터 있던 옵션인데 사용방법을 잘 모르고 계신것중 하나
export CADO_CLIENT_THREAD_COUNT=4
클라이언트의 갯수가 늘어남에 따라 병목현상이 일어나고 있습니다.
5~6대까지는 클라이언트의 프로세스당 스레드 갯수는 2 가 가장 적당했는데요. 지금은 조정이 필요한 듯 보입니다.
CADO_CLIENT_THREAD_COUNT 을 변경할려면 클라이언트 / 마스터 mine.sh 에 모두 적용해야 합니다.
그리고 마스터에서는 추가적으로 bin/cadorun.sh 에서 cado-nfs의 옵션도 바꾸어야 합니다.
--client-threads 4
이렇게 바꾸던지 아니면 추가해야 합니다.
예시)
./cado-nfs.py --parameters ../bin/params.c120 --server $cand tasks.workdir="/dev/ramdisk/c105/" server.port=24242 server.ssl=no server.whitelist=0.0.0.0/0 tasks.sieve.rels_wanted=16500000 tasks.sieve.qrange=12000 tasks.polyselect.threads=8 --client-threads 4 -t all --no-colors
그런데 생각해보니 20 보다는 24또는 25가 괜찮을거 같네요
28비트가 5~10초 걸리는데 2^28 과 2^25 의 차이는 8배이고 2^28과 2^24의 차이는 16배이니..
1초미만으로 유지할려면 24~25 정도로 해도 충분하겠네요
export MAX_SIEVE_LEVEL=24 or export MAX_SIEVE_LEVEL=25
프로그램 내부의 옵션들을 파라메터로 끄집어 내고 있는데 초보자에게 점점 어려워지고 있네요
그러나 최소 한가지 옵션은 변경하는게 좋을거에요.
MAX_SIEVE_LEVEL=20
음.. 20보다는 24~25가 더 좋겠네요