2012-01-18 18 views
5

Tôi có một kịch bản PHP bây giờ looping thông qua sự kết hợp của một tập hợp các mảng. Tôi có thể thử nghiệm 6,1 tỷ trong tổng số 500 triệu tỷ kết hợp trong 1 giờ với một tập lệnh PHP đơn giản. Có thể viết một chương trình bằng bất kỳ ngôn ngữ nào chạy trên PC trung bình đến ngày mà có thể kiểm tra tất cả 500 tỷ kết hợp của nhiều mảng trong vòng chưa đầy 6 giờ?Làm thế nào để kiểm tra 500 tỷ kết hợp trong ít hơn 6 giờ của thời gian thực hiện

Ngoài ra, tôi không có tài nguyên để sử dụng tính toán phân tán hoặc cụm cho nhiệm vụ này. Tôi có thể mong đợi những loại lợi ích nào khi chuyển đổi mã sang java/C# đa luồng?

Cảm ơn bạn

+2

Có phải WPA 48 bit để hack không? ;) – Nabab

+0

Điều này phụ thuộc rất lớn vào phương pháp bạn sử dụng để xử lý các phần tử mảng đó và lượng RAM bạn đang lãng phí để tiết kiệm 500 nghìn tỷ kết hợp đó. Về lý thuyết có, các ngôn ngữ đa luồng có thể sử dụng CPU tốt hơn. –

+0

nếu điều này là vì lý do cao quý, bạn có thể tạo trang "thời gian cpu tặng" và phát tán, thu thập các khối giải pháp do người dùng thực hiện trong trình duyệt của họ ... có thể giải quyết vấn đề tài nguyên của bạn ... –

Trả lời

5

Hãy bắt đầu đơn giản. Bạn có sử dụng luồng không? Nếu không - một kết thúc cao hơn hiện đại, Intel hiện nay có 12 luồng phần cứng trên mỗi bộ xử lý. Điều này có nghĩa là bạn có được hệ số 12 từ luồng.

Nếu ai đó nhận được một máy chủ cụ thể cho rằng anh ta có thể nhận được chủ đề phần cứng 24-32 dễ dàng với chi phí tương đối thấp.

Nếu mảng là bán tĩnh và bạn giả sử card đồ họa adecent, bạn có thể tìm thấy có từ 800 đến 3000 lõi xử lý một tiết kiệm thời gian rất lớn. Không có gì nhịp đập này - và thậm chí cả CPU trung bình có một số khả năng cốt lõi trong chip của họ hoặc card đồ họa những ngày này.

+0

Tôi đồng ý với TomTom - GPGPU-Computing chắc chắn là cách để đi trong trường hợp như vậy và nếu bạn không có tài nguyên để phân cụm hoặc tương tự. – ChrFin

+0

Thậm chí nếu. Có một lý do SuperMicro bán 2 máy chủ đơn vị rack với không gian cho 6 thẻ Nvidia Tesla. NOTHING đánh bại GPU cho các hoạt động song song. Tôi biết một anh chàng làm cho phân tích tùy chọn trên thị trường chứng khoán Mỹ với một máy dưới bàn làm việc của mình - mỗi giây, TẤT CẢ cổ phiếu. Sử dụng một coupld của 6990 cho điều đó. – TomTom

+0

@TomTom không có gì đánh bại GPGPU đối với một loại hoạt động song song cụ thể. Trong trường hợp này có, nó nên được khá phù hợp. – Voo

2

Nếu bạn không có tài nguyên thì tôi sợ phải nói, với số bạn muốn, bạn bị lỗi.

Bạn sẽ cần phải suy nghĩ lại cấu trúc dữ liệu của mình và các thuật toán làm việc trên chúng để có cơ hội hoàn thành câu đố của bạn trong thời gian giới hạn - sử dụng PHP hoặc bất kỳ ngôn ngữ nào khác.

0

Tôi không biết gì về quy trình bạn muốn chạy và có thể không có cách nào để đạt được mục tiêu của bạn với tài nguyên hiện tại, nhưng vì bạn đang yêu cầu ngôn ngữ, và đúng là PHP không phải là ngôn ngữ tốt nhất giải quyết vấn đề tương đương, tôi nên nói rằng Erlang nổi tiếng với những thành tựu đó.

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 

Giả sử bạn đã có một lý Intel Core i7-2600 cpu (3,4 GHz), đó là 4 lõi + hyperthreading = 8 lõi, bạn sẽ cần một tốc độ mỗi lõi của

23.1/6 = 3.9GHz 

có khả năng ép xung cơ bản cao nhất.

Khi bạn tính đến chi phí đầu vào khác, bạn không thể thực hiện những gì bạn muốn. Cpu của bạn không thể làm NOTHING BUT COMPARISONS.

+0

đặt 2 lõi cho chi phí? – Mikeb

+1

Tôi thậm chí không chắc chắn nếu HT với một nhiệm vụ như vậy. Và sau đó tài khoản ở đây thiếu một cái gì đó: 3.9 tỷ so sánh không ánh xạ trực tiếp đến 1 chu kỳ/so sánh. Tùy thuộc vào mã thực tế, chúng tôi sẽ cần nhiều hơn nữa để có được sự kết hợp cần thiết tiếp theo, chi phí lặp trên đầu và vv. Tôi sẽ rất ngạc nhiên nếu chúng tôi nhận được ít hơn một trăm chu kỳ mỗi lần lặp – Voo

Các vấn đề liên quan