2012-01-18 3 views
5

이제 일련의 배열 조합을 통해 반복되는 PHP 스크립트가 있습니다. 간단한 PHP 스크립트를 사용하여 1 시간 만에 총 500 조 개의 조합 중 61 억을 테스트 할 수 있습니다. ~ 6 시간 이내에 여러 배열의 모든 500 조 조합을 테스트 할 수있는 오늘날의 평균 PC에서 실행되는 언어로 프로그램을 작성할 수 있습니까?6 시간 미만의 실행 시간에서 500 조 조합을 테스트하는 방법

또한이 작업에는 분산 또는 클러스터 컴퓨팅을 사용할 리소스가 없습니다. 어떤 종류의 이득이 코드를 다중 스레드 된 java/C#로 변환 할 것으로 기대할 수 있습니까?

고맙습니다.

+2

해킹 할 WPA 48 비트입니까? ;) – Nabab

+0

이것은 배열 요소를 처리하는 데 사용하는 방법과 이러한 500 조 가지 조합을 저장하는 데 낭비되는 RAM 양에 따라 크게 달라집니다. 이론적으로 다중 스레드 언어는 CPU를 더 잘 활용할 수 있습니다. –

+0

이것이 고귀한 원인이라면 "cpu 시간 기부"페이지를 만들고 브라우저에서 사용자가 수행 한 솔루션 블록을 수집하여 바이러스 성이 없어 ... 리소스 문제를 해결할 수 있습니다 ... –

답변

5

간단 해 보겠습니다. 스레딩을 사용합니까? 그렇지 않다면 현대의 고급 프로세서 인 인텔은 오늘날 프로세서 당 12 개의 하드웨어 스레드를 가지고 있습니다. 이것은 스레딩에서 12의 인수를 얻는다는 것을 의미합니다.

누군가가 특정 서버를 확보하면 비교적 저렴한 비용으로 24-32 하드웨어 스레드를 쉽게 얻을 수 있습니다.

배열이 정적 인 경우 adecent 그래픽 카드를 사용하면 800에서 3000 개의 프로세서 코어를 사용하면 시간을 크게 절약 할 수 있습니다. 이 점을 뛰어 넘는 것은 없습니다. 심지어 평균적인 CPU조차도 칩이나 그래픽 카드에 요즘 핵심 기능을 많이 갖추고 있습니다.

+0

TomTom에 동의합니다 - GPGPU- 컴퓨팅은 이러한 경우에 가고 클러스터링이나 이와 유사한 리소스가없는 경우 명확한 방법입니다. – ChrFin

+0

경우에도. SuperMicro가 6 개의 Nvidia Tesla 카드 용 공간이있는 2 개의 랙 유닛 서버를 판매하는 이유가 있습니다. NOTHING은 병렬화 작업에 GPU보다 우수합니다. 나는 그의 책상 아래에있는 기계로 미국 주식 시장에서 옵션 분석을하는 사람을 알고있다. 매초마다, 모든 주식. 6990의 커플을 사용합니다. – TomTom

+0

@TomTom은 특정 종류의 병렬 작업에 GPGPU보다 우수합니다. 이 경우 네, 아주 잘 맞아야합니다. – Voo

2

리소스가 없으면 원하는 숫자로 말하면서 두려워 할 것입니다.

PHP 나 다른 언어를 사용하여 제한 시간 내에 퍼즐을 완료 할 수있는 데이터 구조와 알고리즘을 다시 생각해보아야합니다.

0

실행하려는 프로세스에 대해 아무것도 알지 못하지만 현재 리소스로 목표를 달성 할 방법이 없을 수도 있지만 언어를 묻는 것이므로 PHP가 최선의 방법이 아니라는 것은 사실입니다 paralelism을 다루기 위해서, Erlang은 그러한 업적으로 유명합니다.

3
500 trillion comparisons in 6 hours 
= 
83.3 trillion comparisons in 1 hour 
= 
1.4 trillion comparisons per minute 
= 
23.1 billion comparisons per second 

은 당신이 4 개 코어 + 하이퍼 스레딩 = 8 개 코어 인 인텔 코어 i7-2600 CPU (3.4GHz로)를 가지고 가정하면,

23.1/6 = 3.9GHz 
의 코어 당 속도를 필요 했어

은 기본 오버 클러킹 가능성의 극한에 있습니다.

다른 오버 헤드를 고려하면 원하는 것은 불가능합니다. 귀하의 CPU는 아무런 비교도 할 수 없습니다.

+0

오버 헤드 용으로 2 개의 코어를 예약 했습니까? – Mikeb

+1

그런 작업을하는 HT도 확실하지 않습니다. 그리고 여기에있는 계정에는 뭔가 빠져 있습니다. 39 억 개의 비교는 1 사이클/비교에 직접 매핑되지 않습니다. 실제 코드에 따라 우리는 다음에 필요한 조합을 얻거나 오버 헤드를 반복하는 등의 작업을 훨씬 더 많이 수행해야합니다. 우리가 반복 당 적어도 100 사이클 미만으로 얻을 수 있다면 꽤 놀랄 것입니다. – Voo