Saya telah menemukan sebuah artikel di mana para siswa menggunakan lalu lintas jaringan untuk menggambarkan universitas mereka pada grafik IPv6 negara tersebut . [gambar]
Tujuan Anda sederhana untuk diceritakan, tetapi sulit untuk diimplementasikan. Gambarlah teks MAIL (karena itu adalah salah satu dari beberapa kata yang dapat dibaca pada grafik 1D) pada grafik CPU.
Seharusnya terlihat seperti ini:
Menguraikan sedikit lebih banyak tentang apa yang memenuhi syarat:
- Kode tidak perlu lintas platform (jadi Anda tidak perlu berurusan dengan API yang tidak dikenal).
- Anda dapat menangkapnya di utilitas penggunaan CPU umum yang Anda miliki.
- Grafik terlihat sedikit lebih buruk pada mesin yang berbeda: Saya percaya Anda saat ini.
- % Penggunaan CPU dasar harus kontinu, jadi jika Anda menghasilkan gelombang acak dan menyorot sesuatu yang mirip dengan kata MAIL, itu jelas curang.
- Anda dapat memilih beban maksimum untuk digunakan, tetapi harus cukup substansial untuk melihatnya dengan jelas.
- Anda harus mengikuti linearitas dari contoh. (Untuk M terlihat seperti ini: basis%, lalu peningkatan mendadak ke max yang ditentukan, turun secara bertahap ke% yang lebih rendah, naik kembali ke maks dan tiba-tiba turun ke basis% lagi.)
- Jika tidak dapat dibaca, bagaimanapun juga, pemilih akan melihat.
Celah standar berlaku. Kirimkan gambar juga!
Jawaban:
Python, 143
Setiap karakter string sesuai dengan satu detik aktivitas, dari karakter ASCII
0
(beban maksimum) hingga~
(beban sangat ringan). Program ini berjalan pada loop waktu-disinkronkan, sehingga Anda dapat menjalankan beberapa instance untuk hasil yang lebih bagus.Saya menggunakan Python 2.7.6 pada OS X dengan Intel Core i7, tetapi harus bekerja pada komputer lain dengan sedikit penyesuaian (sesuaikan
0.001
). Tangkapan layar di bawah ini diambil dengan aktivitas latar belakang yang signifikan.Pembaruan - Saya dapat menghasilkan grafik yang lebih jelas dengan
time()/10
dan frekuensi pembaruan yang lebih rendah:Dan akhirnya, inilah versi yang lebih golf ( 123 byte ) dan hasilnya :
sumber
Python,
358281268221194 byteMonokrom adalah begitu tahun lalu. Ini menggunakan beberapa proses dan syscalls untuk mencapai dua grafik CPU berwarna !
Output dari Activity Monitor (OS X 10.9):
Output dari MenuMeters:
Semua output dihasilkan dengan kecepatan pembaruan 1s. Tidak ada tugas latar belakang yang signifikan yang berjalan, meskipun output ini cukup mudah mengalahkan tugas CPU berulir tunggal.
Kode ini mengasumsikan Anda memiliki 8 core. Seharusnya cukup mudah untuk memodifikasi lebih sedikit / lebih banyak. Ini portabel untuk sistem Linux / UNIX (meskipun hanya diuji pada OS X), dan harus menghasilkan output dua warna yang sama untuk setiap monitor CPU yang dapat membedakan Pengguna dari waktu CPU Sistem.
Pada dasarnya, ini bekerja dengan melepaskan tujuh proses, yang masing-masing akan memilih untuk menghabiskan 1 detik tidur, berputar di usermode, atau memutar kernel. Berputar dalam mode kernel dicapai dengan meminta gumpalan data yang besar
/dev/urandom
, yang memaksa pengemudi/dev/urandom
untuk menghabiskan banyak siklus CPU "sistem".DIedit [21/07]: Dipersingkat secara signifikan dengan menggunakan
fork()
alih-alihmultiprocessing.Process
(/dev/urandom
hanya berfungsi pada sistem * NIX jadi ini tidak mengurangi portabilitas). Namun perlu dicatat bahwa program sekarang memunculkan tugas latar belakang ; Anda mungkin haruskillall Python
(atau serupa) untuk menyingkirkan pemakan CPU.Saya tidak bisa menahan diri untuk tidak menerapkan beberapa surat lagi. Saya mendapat 16 surat, ditambah beberapa simbol:
Alfabet lengkapnya adalah "ACDFHILMNOPTUVWY", dengan simbol "._ ~ / \". Mungkin ada lebih banyak karakter yang dapat diwakili.
Kode yang sepenuhnya tidak dipisahkan untuk tambahan surat:
sumber
C (Intel Core Duo + OS X / Darwin), 248 byte
Kode ini kira-kira portabel seperti Great Pyramid of Cheops. Maaf soal itu. Nilai yang dikembalikan dari
mach_absolute_time()
tergantung pada perangkat keras, tetapi pada mesin saya nilai bertambah sekitar sekali per nanosecond.Inilah hasilnya:
Ada dua grafik karena prosesor memiliki dua core. Saya mengatur beban CPU maksimum menjadi sekitar 90% karena proses ini dapat beralih antar core setiap kali saya menelepon
usleep()
. Dengan muatan 100%, proses dirantai ke satu inti dan hasilnya tidak terbaca ( lihat ini, misalnya )sumber
uint64_t
variabel ke dalam header darifor
loop berikut ?Ruby, 150 karakter
Sejauh ini tidak terlalu pendek, tapi menurut saya outputnya agak bagus, jadi saya pikir saya akan tetap memposting ini. Seperti kebanyakan solusi lain, Anda mungkin harus menyematkan proses Ruby ke inti tertentu dengan mengawalinya dengan
taskset -c $core
.Kode adalah kombinasi sederhana dari spinning / tidur untuk waktu tertentu, yang harus membuatnya agak portabel. Gradien halus dibuat dengan memvariasikan rasio putaran / waktu tidur.
Menurunkan frekuensi pengambilan sampel CPU membuat bagian tepi terlihat sedikit lebih baik:
Dengan menambahkan beberapa huruf lagi ke alfabet (
AILMNUVW
agak dapat dikenali), kita juga dapat menulis beberapa kata lain:Gambar-gambar ini dihasilkan dengan kode berikut:
Kata-kata yang dapat ditulis dengan huruf yang diimplementasikan dapat ditemukan dengan
sumber
Python, pada Intel Pentium 4 3.0Ghz,
180 166 145 141138 bytePanggil dengan
taskset -c 0 python cpu_graph_drawer.py
.taskset
diperlukan untuk membatasi proses untuk menggunakan hanya satu CPU / core (hyperthreading dalam kasus saya.)Hasilnya tidak terlalu bagus.
sumber
gnome-system-monitor
satu-satunya hal yang saya tahu. Punya alternatif yang akan berjalan pada LMDE Cinnamon?a=[...]+[(.1,.2)]*10
bukan.extend
.Java 8, 482 karakter
Setiap karakter dalam String berarti jumlah utas, yang akan digunakan. Gambar diambil pada Intel Core i3 (2 core / 4 utas).
Sunting : lebih banyak versi golf (322 karakter), fungsi yang sama:
sumber
C, 78 byte
Anda tidak pernah mengatakan kami tidak dapat menerima input pengguna, sooo ..
Program ini membaca dari standar dan setiap kali membaca karakter itu mengeksekusi CPU sia-sia untuk loop, kemudian memanggil main lagi. Anda mengontrol jumlah waktu CPU yang digunakan dengan melakukan spam pada tombol enter dengan kecepatan berbeda.
Saya menjalankan ini pada intel i3 4130T, yang merupakan prosesor yang cukup baru. Tetapi jarak tempuh Anda mungkin bervariasi, jika menggunakan waktu CPU lebih banyak atau lebih sedikit daripada yang praktis untuk Anda amati, cobalah bermain dengan jumlah shift dalam loop tunda.
Program saya luar biasa karena:
Setelah beberapa kali mencoba saya menghasilkan grafik yang terlihat seperti ini:
sumber
taskset -c 1 [file]
yes | [program]