2011-08-03 36 views
5

Tôi có hàng trăm tệp Mathematica dài và tôi muốn sử dụng đánh giá song song. Tôi có một bộ vi xử lý 2 x 4 lõi mỗi máy với bộ nhớ 16 Gb. Giấy phép Mathematica của tôi cho phép tôi chạy tối đa 2 hạt nhân chính với 1 trong số các bậc thầy có thể có 4 hạt nhân nô lệ (đây là cách giải thích của tôi sau khi tôi chơi với nó một lúc).Đánh giá các ô song song trong Mathematica

Tôi đã sử dụng để chạy mã của mình trong hai hạt nhân chính trong hai sổ ghi chép khác nhau. Để tăng tốc độ hơn nữa, tôi đã cố gắng đóng gói một vài ô với ParallelEvaluate[] và dường như nó hoạt động. Sau đó, tôi cũng có 4 bản sao của mã của tôi chạy không biết lẫn nhau thông qua một trong những hạt nhân chính, đó là tốt. (Tôi về cơ bản cố gắng chạy càng nhiều bản sao của mã của tôi/mathkernel song song càng tốt. Tôi không chụp cho bất cứ điều gì thực sự song song chưa).

Vì mã của tôi quá dài và phức tạp, tôi không muốn chỉnh sửa lại từng ô để làm cho chúng đánh giá song song. Có bất cứ điều gì huyền diệu tôi có thể đặt vào đầu của máy tính xách tay của tôi để mỗi tế bào được đánh giá sau đó sẽ được theo mặc định ParallelEvaluate[ ... cell contents.... ]?

+1

Bạn có thực sự chắc chắn rằng bạn muốn cho 'ParallelEvaluate []' tất cả các tế bào của bạn? Bạn đã thử nghiệm nó trên mã của bạn chưa? Gợi ý: Có thể bạn sẽ nhận được danh sách mà bạn đang nhận được một kết quả duy nhất ngay bây giờ ... –

+0

Có Tôi đang nhận được danh sách các bảng và đó là ok. Tôi sẽ tự kết hợp các bảng đó trong hạt nhân chính và phân tích kết quả. Tôi chỉ cố gắng tìm ra cách dễ nhất để sử dụng tất cả các mathkernels để tăng tốc độ tính toán. – Hsn

+0

Tôi đã cố gắng thử nghiệm với $ Pre = ParallelEvaluate ;, nhưng tôi không thể sử dụng Mma ngay bây giờ (vấn đề HW) có lẽ bạn muốn thử nó –

Trả lời

2

Theo đề xuất của belisarius, $ Pre = ParallelEvaluate thực hiện chính xác những gì tôi muốn. Một vấn đề là khi tôi làm $ Pre = Identity để tắt nó đi vì vậy tôi có thể quay trở lại hạt nhân chính của tôi, mathematica vẫn cố gắng để đánh giá rằng trong hạt nhân nô lệ thay vì chủ và thất bại. Tôi đã giải quyết nó như sau: SetSharedVariable [parallelcontrol]; parallelcontrol = ParallelEvaluate; $ Pre: = parallelcontrol; ... mọi thứ được đánh giá trong nô lệ ở đây ...; parallelcontrol = Nhận dạng; .... tất cả mọi thứ quay trở lại được đánh giá trên tổng thể duy nhất ... Dưới đây là một hoạt động mẫu trên máy tính xách tay của tôi trong đó có 2 lõi:

LaunchKernels[] 

{KernelObject [1, "địa phương"], KernelObject [2, "địa phương"]}

$KernelID 
ParallelEvaluate[$KernelID] 

{1, 2}

SetSharedVariable[parcontrol]; $Pre := parcontrol; parcontrol = ParallelEvaluate 

Null [ParallelEvaluate]

$KernelID 

{1, 2}

parcontrol = Identity 

{Identity, nhận dạng}

$KernelID 
parcontrol = ParallelEvaluate 

ParallelEvaluate

$KernelID 

{1, 2}

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