이건 fact0rn 소인수분해 관련 기록차원으로 적습니다.
CPU : 2990WX (32C/64T)
소인수분해할 값은 : 228323707958115508544285658910171404797310139136719583233502879849371510733132701972610563
테스트방법 :
taskset -c 0-31 ./yafu -one -plan custom -pretest_ratio 0.23232323232323232 -work 25 -threads 32 -lathreads 32 -of pqFile.txt "factor(228323707958115508544285658910171404797310139136719583233502879849371510733132701972610563)"
가. SMT On/Off 의 차이
[ On - 64T ]
Total factoring time = 39.3603 seconds
[ On - 32T ]
Total factoring time = 35.2886 seconds
[ Off - 32T ]
Total factoring time = 33.1891 seconds
나. 스레드 부여별 차이
[ Off - 32T ]
Total factoring time = 33.1891 seconds
[ Off - 16T ]
Total factoring time = 52.0672 seconds
[ Off - 8T ]
Total factoring time = 92.9966 seconds
다. 나항의 자료를 기초로 한 스레드분배와 프로세스 갯수 분배 계산
어떻게 프로세스와 스레드 분배를 해야 적정할까 매일 고민합니다. 사실 저에게는 이게 가장 골치입니다.
개발자는 4 ~ 8 정도가 효율이 좋다고 했지만 당시는 블럭간 평균시간이 20분이 넘었습니다.
지금은 짧게는 3분이고 평균 6분정도입니다. 그래서 판단해보면 효율이 좋다고 생각되는 2990WX의 적정값은 8~16 정도로 보입니다.
2990WX의 싱글코어 성능은 7950X의 40~45% 수준입니다.
이것을 토대로 7950X의 적정수준은 또 4 ~ 8 수준으로도 보입니다.
그런데 7950X는 AVX512를 지원해요. 이젠 머리가 더 복잡해지게 됩니다.
블럭간간격 (초) | ||||||||||||||||||
수행시간(초) | 프로세스수 | 40 | 50 | 60 | 70 | 80 | 90 | 100 | 110 | 120 | 130 | 140 | 150 | 160 | 170 | 180 | 190 | 200 |
33.1891 | 1 | 1 | 1 | 1 | 2 | 2 | 2 | 3 | 3 | 3 | 3 | 4 | 4 | 4 | 5 | 5 | 5 | 6 |
52.0672 | 2 | 0 | 0 | 2 | 2 | 2 | 2 | 2 | 4 | 4 | 4 | 4 | 4 | 6 | 6 | 6 | 6 | 6 |
92.9966 | 4 | 0 | 0 | 0 | 0 | 0 | 0 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 8 | 8 |