2009-09-24 2 views
2

C# 콘솔 앱, 몬테카를로 시뮬레이션 전체 CPU 바인딩, 실행 시간은 사용 가능한 전용 스레드/코어 수에 반비례합니다 (1 : 1 비율 유지) 코어/스레드).비즈니스 하드웨어 업그레이드 정당성 향상을위한 CPU 속도 향상 가능성 비교

그것은 현재에 매일 실행 :

AMD 옵테론

응용 3 개 스레드를 사용하여 멀티 스레드가 275 2.21 @ GHz의 (4 코어), 4 스레드는 다른 프로세스 컨트롤러 앱입니다.

실행하려면 하루에 15 시간 씩 이 필요합니다.

내가 같은 작업은 다음과 CPU의로 구성된 시스템에서 실행하는 데 걸리는 수있는 기간 최선을 추정해야합니다

http://en.wikipedia.org/wiki/Intel_Nehalem_(microarchitecture) 
2 x X5570 
2 x X5540 

과 사례를 비교, 나는 그것을 사용 코딩합니다 사용 가능한 스레드 저렴한 x5540보다 2 x x5570 CPU를 갖춘 서버가 필요하다는 것을 정당화하고 싶습니다 (단일 마더 보드에서 2 cpus를 지원합니다). 이렇게하면 8 코어, 16 스레드 (네 할렘 칩이 작동하는 방식)가 운영 체제에 제공됩니다. 그래서 내 애플 리케이션을 위해 몬테카를로 시뮬레이션에 15 스레드.

아이디어가 있습니까? 단일 스레드 벤치 마크에 관련된 모든 3CPUS의 벤치 마크 데이터를 볼 수있는 웹 사이트가 있습니까? 나는 케이스와 스레드 수를 추정 할 수있다. 필요한 경우 벤치 마크를 설치하고 실행하기 위해 현재 시스템에 액세스 할 수 있습니다.

비즈니스는 또한 향후 3 개월 동안이 앱의 작업량을 지시하고 있습니다. 은 약 12 ​​시간으로 증가하며 24 시간 시계에서 완료해야합니다.

도움을 주시면 감사하겠습니다.

는 여기를 게시 한 : http://www.passmark.com/forum/showthread.php?t=2308 잘하면 더 나은 자신이 그래서 난 효과적으로 훨씬 더 도움이 될 것입니다 코어 당 점수를 얻을 수 있습니다 벤치마킹 설명 할 수있다.

+2

작업 부하를 여러 스레드로 확장 할 수 있다면 더 많은 수의 저렴한 시스템을 확보 할 수 있습니다. 단일 기계에 포장해야하는 이유가 있습니까? –

+0

나는 당신이 말하는 것을 이해하고 동의합니다. 그러나 이것이 은행에서 일하는 방식입니다. 서버간에 앱을 배포 할 수 없으며 단일 서버 여야합니다. 승인 된 다른 프로세스는 Datasynapse와 같은 그리드 시스템을 다시 작성하는 것입니다. 매우 길게 승인 프로세스입니다. 시간이나 예산이 없습니다. 현재 제공되는 옵션은 마감일, 예산 및 은행 승인 프로세스, 문서화를 충족시키는 최상의 단일 서버 시스템으로 업그레이드됩니다. 고통 스럽지만 게임을해야만하므로이 정당성 문서를 작성할 필요가 있습니다. – m3ntat

+0

내 대답보기 - X5570도 충분히 빠르다고 생각하지 않습니다. –

답변

0

tomshardware.com에는 포괄적 인 CPU 벤치 마크 목록이 있습니다. 그러나 ... 당신은 단지 그들을 나눌 수 없습니다. 당신이 얻을 수있는만큼 사과와 사과를 가까이서 비교할 필요가 있습니다. 당신의 작업 부하에 대한 지침의 혼합이 의존 할 수도 있고 그렇지 않을 수도 있기 때문에 당신이 얻지 못할 것입니다. 1.75x 단일 스레드 속도 향상 작업이 CPU가 결합하고 있지 않은 경우 -

나는 , 당신은 당신이 1.5 배에 아마 있다는 것을 이것에 대한 실제 데이터가 필요이 같은 공식이 적용되지 않습니다 바랍니다 추측 것 고도로 벡터화.

1) C# 및 CLR을 사용하여 1) GC가 막히고 일련 화되지 않도록 조치하지 않은 한 다음을 고려해야합니다. 2) 네 할렘에 하이퍼 스레딩이있어 완벽한 16x 속도 향상을 볼 수 없으며 코드 최적화 방법에 따라 8 배에서 12 배까지 속도가 향상됩니다. 여기에 낙천적이 되라. (단지 16x는 기대하지 마라.) 3) 얼마나 많은 논쟁을했는지 모르겠다. 3 개의 스레드에서 좋은 스케일링을 얻는다! = 16 개의 스레드에서 좋은 스케일링을하면 여기에 드래곤이있을 수있다.

I CALC 봉투는 것 등이 :

15시간 * 3 개 스레드/A 할렘에 단일 스레드 작업 시간의 1.5 X = 30 시간이다.

12분의 30

= 2.5 시간 (최상의 경우)

8분의 30 = 3.75 시간 (최악의 경우)를 20 배 증가 진정으로 존재하는 경우

병렬 실행 시간을 의미한다 : 2.5 시간 * 20 = 50 시간 (최상의 경우)

3.74 시간 * 20 = 75시간 (최악의 경우) 응용 프로그램 중

어떻게 프로파일 한 많이, 당신이 만들 수 있겠 배? 1 개의 서버로는 충분하지만 가능성은 낮습니다.

그리고 이런 일에 도움이되는 .NET 4.0 또는 .Net 3.5 CTP의 작업 병렬 라이브러리를 사용해보십시오. 당신이 설명한 필요에 따라 확장 할 수있는 단일 박스 서버를 찾기 -Rick

+0

감사합니다 릭 나는 Parallels 라이브러리를 시험해 보았습니다. 그렇습니다. 그것은 훌륭하지만 작동하지만 최대 스레드 수를 조절할 수는 없습니다. 이 상자에는 다른 응용 프로그램이있어서 너무 느려져서 실행해야하기 때문에이 응용 프로그램에서 n-1 스레드를 사용할 수있게됩니다. 가장 가능성이 높은 스레드는 15 개입니다 (최선의 경우). – m3ntat

+0

나는 프로파일 링, 프로파일 링, 도트 렛 (dottrace), ibm 정화/정량화 등 소프트웨어를 사용하여 소프트웨어를 현명하게 최적화하고 내 머센 트위스터를 최적화했다. 이것으로 할 수있는만큼 많이 행해졌습니다. 이제 하드웨어가되었습니다. – m3ntat

+0

필자는 x5570을 사용해 본 결과, SSE가 아닌 코드의 경우 12 배까지 향상되었습니다. 명령 파이프 라인이 전체 속도 향상 인 경우 하이퍼 스레드이므로 * more *를 최적화하면 8 배로 떨어집니다. 일반적으로 SSE를 통해 몬테카를로를 벡터화 할 수있는 기회가 있습니다. 코어 당 4 배의 대용량 승리 가능성이 있지만, 적어도 커널에 대해서는 C# 외부로 이동하는 것을 의미합니다. – Rick

0

필자는 사지에 나가서 듀얼 소켓 X5570도 사용자가 계획 한 작업량으로 확장 할 수 없다고 말합니다. 여러 시스템에 계산을 분산해야합니다. 간단한 수학 :

현재 워크로드

3 cores * 15 real-world-hours = 45 cpu-time-hours 

제안 20X 워크로드 따라서

45 cpu-time-hours * 20 = 900 cpu-time-hours 
900 cpu-time-hours/(20 hours-per-day-per-core) = 45 cores 

, 당신은 증가에도 불구하고 (당신의 목표를 달성하기 위해 45 개 2.2GHz의 옵테론 코어의 상응하는 필요 처리 시간은 하루 15 시간에서 20 시간까지). 네 할렘 CPU가 3 배 더 빠르더라도 스레드 당 스레드 당이라도 성장할 공간이 없기 때문에 성능 봉투의 바깥 가장자리에있게됩니다. 또한 하이퍼 스레딩이 응용 프로그램에서도 작동한다고 가정합니다.

필자가 보아본 가장 좋은 경우는 X5570을 기존 Opteron의 성능보다 2 배 더 높게 설정 한 것입니다.

자료 : http://www.dailytech.com/Server+roundup+Intel+Nehalem+Xeon+versus+AMD+Shanghai+Opteron/article15036.htm

+0

현재 작업량은 총 3 코어 = 15 시간입니다. 1 코어가 있다면 45 시간이 걸릴 것입니다. – m3ntat

+0

그건 제가 말한 것입니다 - 총 작업량은 현재 45 시간 분량의 1 코어입니다. –

+0

네가 잘못 해석 한 것을 유감스럽게 생각합니다. 완료하는 데 약 900 시간의 단일 스레드 작업이 있음에 동의합니다. 이 응용 프로그램을 실행하는 15 스레드를 얻을 수있는 경우 = 900/15 = 60 시간이 현재 하드웨어에서 작동합니다.네 할렘이 하루에 20 시간 씩 쓰레드 당 3 배 더 빨라지면 실제로 멀티플 플라이어가 무엇인지 알 필요가 있습니다. 알아 내야 만합니다. – m3ntat

2

당신은 cuda의 알고리즘을 다시 생각했다? 현재 하루 GPU를 사용하여 이러한 10-100 배의 계산을 증가시킵니다. 이 방법으로 뚱뚱한 비디오 카드를 구입하면됩니다

+0

CUDA 코드를 쉽게 실행할 수 없다면 CUDA 코드는이 단계에서 옵션이 아닙니다. – m3ntat

+1

cuda는 c를 기반으로합니다. 나는 당신의 알고리즘이 얼마나 큰지는 모르지만 그것을 이식하는 데는 가치가있을 것이다. 요인 10-50의 속도는 나에게 큰 인센티브로 보입니다 – Toad

1

는 어려울 것입니다. Sun CoolThreads 나 기타 높은 스레드 수의 서버를 보는 것이 좋습니다. 개별적인 클럭 속도가 낮더라도. 데이터 집합들이 소리만큼 큰 경우 http://www.sun.com/servers/coolthreads/t5240/index.xml

메모리 및 CPU 캐시 대역폭이 당신을 위해 제한하는 요인이 될 수 있습니다 http://www.sun.com/servers/coolthreads/overview/performance.jsp

T5240은 128 개 개의 스레드를 지원합니다. 디스크에서 데이터를 가져 오는 데 얼마의 시간이 소요됩니까? 대폭 증가 된 RAM 크기와 캐시가 도움이됩니까?

더 적은 계산으로 동일하거나 유사한 솔루션을 제공 할 수있는 다른 알고리즘이 있는지 확인할 수 있습니다.

계산 스레드를 최적화하는 데 많은 시간을 투자 한 것처럼 들리지만 모든 계산이 실제로 최종 결과에 중요한 영향을 주나요?

바로 가기를 계산할 수있는 방법이 있습니까?

최종 결과에 무시할만한 영향을 미치는 항목을 식별하고 해당 계산을 건너 뛸 수있는 방법이 있습니까?

진보적 인 반복으로 세부 묘사가 추가 된 초기 반복에는 저해상도 모델을 사용할 수 있습니까?

내가 알고있는 Monte Carlo 알고리즘은 비 결정적이며 런타임은 샘플 수와 관련이 있습니다. 검사하는 항목의 수를 제한하기 위해 샘플링 모델을 최적화하는 방법이 있습니까?

분명히 나는 ​​어떤 문제 도메인이나 데이터 집합을 처리하는지 알지 못하지만 동일한 결과를 산출 할 수있는 또 다른 접근법이있을 수 있습니다.

0

큰 망치를 휘두르고 있지만, 일부 중금속 4 웨이 서버를 살펴 보는 것이 좋습니다. 그들은 비싸지 만 최소한 하나의 상자에 최대 24 개의 물리적 코어를 확보 할 수 있습니다. 다른 모든 최적화 방법 (SIMD 포함)을 다 써 버린 경우 고려해야 할 사항입니다.

메모리 대역폭과 같은 다른 병목 현상에도 시달리고 있습니다. 몬테 카를로 시뮬레이션의 성능 특성을 모르지만 한 자원을 늘리면 다른 병목 현상이 나타날 수 있습니다.