Bagaimana cara berbagi CPU atau RAM?

21

Dalam jaringan kami berbagi File (Disk Driver) atau Database. Tetapi bagaimana kita bisa berbagi CPU atau RAM melalui jaringan.

MJH
sumber
3
Masalah dengan melakukan ini adalah bahwa dibandingkan dengan latensi skala nanosecond antara CPU dan RAM, jaringan sangat lambat!
Phoshi
@ Phoshi: Bahkan dengan latensi yang ditambahkan oleh jaringan, pengaturan seperti itu mungkin lebih cepat daripada swap berbasis disk.
Piskvor
@Piskvor: Tapi seperti yang bisa dikatakan siapa pun, swap berbasis disk adalah hit kinerja yang sangat besar!
Phoshi
@ Phoshi: Saya setuju - memang demikian, dan solusi optimal adalah "menambah lebih banyak memori fisik." Yang saya katakan adalah paging out ke perangkat cepat (misalnya ramdisk) melalui jaringan cepat mungkin masih lebih cepat daripada paging out ke disk fisik. Dengan kata lain: ini mungkin perangkat swap yang lebih cepat daripada swap pada media fisik, meskipun itu akan banyak pesanan yang besarnya lebih lambat dari RAM fisik.
Piskvor
1
@Piskvor: Sepenuhnya masuk akal, dan bahkan jika Anda salah itu pasti dengan urutan yang sama besarnya, jadi tidak akan secara signifikan lebih buruk dalam kasus terburuk. Saya kira mungkin lebih murah untuk memiliki lebih banyak penyimpanan fisik lokal!
Phoshi

Jawaban:

21

Untuk melakukan ini, program yang mengakses sumber daya CPU / RAM harus dirancang khusus untuk mengakses sumber daya tersebut. Suatu sistem yang diatur dengan cara ini disebut cluster, dan cara khas sumber daya dibagikan adalah dengan protokol yang disebut MPI (message passing interface). Ini adalah unduhan gratis dan menggunakannya dengan Linux dapat menghasilkan cluster yang kuat (bahkan mungkin komputer super) dengan biaya minimal, tetapi sekali lagi itu tidak berguna kecuali Anda memiliki program yang dirancang khusus untuk memanfaatkan MPI. Ada beberapa tutorial kluster yang baik di luar sana, jika Anda masih tertarik Anda harus memeriksanya.

Edit:

Saya akan merekomendasikan tutorial di sini jika Anda ingin mengatur sebuah cluster. Saya membuat cluster dengan mengikuti tutorial ini sekitar setahun yang lalu dan itu bekerja dengan cukup baik. Tutorialnya agak lama, jadi beberapa file mungkin tidak persis seperti yang dikatakan dalam tutorial tersebut (kadang-kadang file berpindah-pindah di distro Linux yang berbeda / lebih baru) tetapi jika Anda yang paling tidak terbiasa dengan Linux itu seharusnya tidak menjadi masalah. Tutorial menggunakan versi MPI yang lebih lama, tetapi saya menggunakan versi terbaru dan tidak memiliki masalah yang tidak mudah diselesaikan. Bergantung pada apa yang Anda lakukan mungkin sebenarnya ada program di luar sana yang dapat memanfaatkan MPI. Saya tahu ada beberapa program encoding video dan angka-angka yang memanfaatkan MPI yang dapat diunduh dari sumber universal.

ubiquibacon
sumber
tolong beri tahu saya beberapa referensi.
MJH
1
@ MJH lihat jawaban saya yang diedit.
ubiquibacon
terima kasih. tetapi tutorial ini berfungsi di Linux dan saya menggunakan Windows.juga dengan ini, aplikasi harus menulis di bawah MPI, dan batasannya.
MJH
3
@ MJH jika Anda ingin bekerja dengan Windows maka Anda hanya perlu perpustakaan MPI yang bekerja dengan Windows, tetapi konsepnya sama. MPICH bekerja dengan Windows, atau Anda dapat membangun cluster Windows Anda dengan Windows HPC (telah membangun konduktivitas MPI) jika Anda memiliki beberapa koin untuk dijatuhkan. Meskipun ini memungkinkan Anda menggunakan Windows, Anda masih harus menggunakan program yang ditulis untuk MPI, tidak ada jalan lain saat ini.
ubiquibacon
2
Terima kasih atas jawaban ini - tutorial yang dirujuk tampaknya telah mengubah alamat menjadi uiowa.edu/mihpclab/hpcSystsemTechnicalReport/… ... Cheers!
sdaau
9

Anda dapat berbagi RAM menggunakan disk RAM, tetapi itu terlihat seperti berbagi disk normal, kecuali bahwa ini ada dalam RAM komputer lain. Tidak ada cara langsung untuk satu komputer untuk menggunakan RAM komputer lain seolah-olah itu adalah RAM sendiri, tetapi ada beberapa cara untuk menggunakan RAM komputer lain. Lebih lanjut tentang itu di paragraf berikutnya.

Sedangkan untuk berbagi CPU, itu mungkin tetapi tidak ada standar tunggal untuk itu. Anda tidak bisa hanya membagikannya dan membiarkan komputer lain mengambil sumber daya yang diperlukan. Sebaliknya, Anda harus memiliki aplikasi yang dirancang khusus yang dapat bekerja pada beberapa komputer sekaligus. Ini sering disebut komputasi terdistribusi dan digunakan oleh beberapa proyek penelitian seperti SETI @ Home, Einstein @ Home, Climateprediction.net dan banyak lainnya.

Pada dasarnya program bekerja sedemikian rupa sehingga ada satu server pusat yang mendistribusikan pekerjaan yang perlu dilakukan. Komputer di jaringan mengunduh unit kerja dari komputer pusat dan memprosesnya. Setelah itu komputer pusat menerima hasil dari klien dan menggabungkannya menjadi satu hasil yang kohesif. Dengan cara ini komputer "berbagi" sumber daya CPU dan RAM melalui jaringan. Kelemahan dari ini adalah bahwa program perlu dibuat sedemikian rupa untuk bekerja melalui jaringan dan sekarang komputasi terdistribusi tidak cukup populer di antara kegunaan umum untuk komputer sehingga hanya sejumlah kecil program khusus yang mendukungnya. Di sisi lain, ini biasanya digunakan untuk tujuan ilmiah karena lebih murah untuk mendapatkan sejumlah besar komputer pribadi atau playstation 3 daripada untuk mendapatkan akses ke komputer mainframe.

AndrejaKo
sumber
apakah ada perangkat lunak untuk membagikan aplikasi saya di jaringan saya? tanpa perlu ke jaringan asing! (mis. saya ingin membuat file, bahwa PC saya membuat ini dalam 7 hari, tetapi saya membagikan ini ke jaringan saya dan merender pengurangan menjadi 1 hari?
MJH
@ MJH Sayangnya, saya belum pernah mendengar ada program yang bisa melakukan rendering.
AndrejaKo
1
berbagi ramdisks agak sia-sia meskipun bukan? Anda mendapatkan volatilitas ram, dengan lambatnya penyimpanan yang terpasang jaringan
Journeyman Geek
1
@AndrejaKo Untuk lurus transcoding video saya belum pernah mendengar tentang salah satu (tetapi beberapa melakukan googling saya menemukan 1 atau dua proyek dalam alpha / beta yang melakukan). Namun, untuk rendering 3D, saya belum melihat program rendering 3D sejak tahun 90-an yang tidak mendukung rendering jaringan .
Scott Chamberlain
5

apakah ada perangkat lunak untuk membagikan aplikasi saya di jaringan saya? tanpa perlu ke jaringan asing! (mis. saya ingin membuat file, bahwa PC saya membuat ini dalam 7 hari, tetapi saya membagikan ini ke jaringan saya dan merender pengurangan menjadi 1 hari? - MJH 12 Maret 11 jam 1:19

Anda telah jatuh ke dalam Masalah XY , Anda seharusnya tidak bertanya "bagaimana saya bisa berbagi komputer cpu dan ram accros" tetapi "bagaimana saya bisa menggunakan beberapa komputer untuk membuat renders saya dalam menggunakan ZZZZZ lebih cepat?"

Ini sangat tergantung pada perangkat lunak apa yang Anda gunakan, dan apa yang Anda render (apakah Anda transcoding video, atau Anda rendering model / video 3D?).

Untuk mengambil beberapa contoh, perangkat lunak 3D Blender gratis mendukung rendering terdistribusi di mana Anda dapat memiliki banyak komputer yang bekerja bersama untuk menghasilkan satu output. Jika Anda melakukan rendering video, beberapa googling cepat menemukan proyek open source MediaEncodingCluster yang memungkinkan Anda untuk merender file video dan audio menggunakan banyak komputer.

Scott Chamberlain
sumber
5

Satu-satunya sistem operasi yang saya tahu yang memungkinkan untuk berbagi CPU / RAM adalah plan9. Di sana Anda dapat mengekspor / memasang hampir semua hal. Ini tidak berarti pertunjukan itu bagus, tentu saja.

Heinrich Spindeln
sumber
0

Ini akan menjadi fitur yang bagus untuk berbagi cpu / ram untuk tugas melalui jaringan. Saat ini kami masih terikat sedikit gagasan lama untuk menjaga program di dalam kotak di mana hal-hal terjadi, tetapi kami dapat mengizinkan beberapa CPU pada mesin yang sama untuk mengakses sniplet kode yang sama. Kami memiliki satu metode (setidaknya) yang melakukan sesuatu seperti ini. java di halaman web berfungsi dengan menggunakan server dan klien, tetapi masih terkunci di cara server-klien untuk melakukan sesuatu (di mana server menyimpan sebagian besar data). Apa yang kita butuhkan untuk dapat menetapkan tugas ke mesin dengan cara yang sama seperti yang kita lakukan ketika kita memiliki beberapa CPU (kecuali mesin yang melakukan pekerjaan perlu memiliki program snip dan data snip ditugaskan. Ini memang menempatkan beban yang lebih berat pada jaringan meskipun jika tugas-tugas itu sendiri tidak bersifat sederhana dan dapat menghasilkan kemacetan baru terbentuk. Saya suka ide di mana itu

k9dog
sumber