Dari sudut pandang superkomputer, lebih baik tidak berpikir dalam beban CPU / GPU dalam persentase tetapi menentukan berapa banyak operasi yang dibutuhkan oleh masalah Anda dan kemudian membandingkannya dengan kinerja puncak sistem.
Jika Anda mendapatkan utilisasi CPU 100%, itu tidak berarti Anda mendapatkan semua kinerja dari sistem. CPU sering kali dapat melakukan banyak hal yang berbeda secara bersamaan, misalnya pembagian dan penambahan. Jika Anda dapat memulai divisi lebih awal, itu mungkin bisa tumpang tindih dengan penambahan. CPU desktop Anda kemungkinan besar memiliki unit out of order yang akan menyusun ulang laporan untuk mendapatkan manfaat dari tumpang tindih tersebut. Atau jika Anda memiliki program berikut:
if (expr1)
expr2;
else
expr3;
CPU penataan ulang akan mencoba untuk menghitung tiga ekspresi pada saat yang sama dan kemudian membuang hasil salah satunya. Ini membuatnya lebih cepat secara keseluruhan. Jika Anda memiliki beberapa pemblokir dalam program Anda dan Anda tidak dapat memesan ulang, maka Anda menggunakan lebih sedikit jalur di CPU, tetapi mungkin masih akan menunjukkan 100%.
Kemudian Anda memiliki fitur SIMD di CPU yang merupakan operasi vektor. Ini seperti GPGPU-cahaya dalam arti bahwa Anda biasanya hanya memiliki empat atau delapan operasi pada saat yang sama, GPU memang suka 32 atau 64. Masih Anda harus menggunakannya untuk engkol keluar FLOPS.
Hal-hal seperti berbagi palsu dapat menyebabkan biaya sinkronisasi yang berat yang biasanya muncul sebagai beban kernel di Linux. CPU sepenuhnya digunakan tetapi Anda tidak memiliki banyak throughput yang bermanfaat.
Saya telah melakukan beberapa pemrograman pada mesin IBM Blue Gene / Q. Ia memiliki banyak tingkatan hierarki ( skema Blue Gene / L yang sudah ketinggalan zaman ) dan karenanya sulit diprogram secara efisien. Anda harus menggunakan hierarki lengkap hingga ke SIMD dan SMT (Intel menyebut HyperThreading ini) untuk mendapatkan kinerja yang baik.
Dan kemudian jaringan sering membatasi Anda. Oleh karena itu ternyata lebih cepat dalam waktu (jam dinding) untuk menghitung hal-hal di banyak CPU pada saat yang sama alih-alih berkomunikasi melalui jaringan. Ini akan menempatkan lebih banyak beban pada CPU dan membuat program berjalan lebih cepat. Tetapi throughput program yang sebenarnya tidak sebagus yang terlihat dari angka mentah.
Jika Anda menambahkan GPU ke dalam campuran, akan menjadi semakin sulit untuk mengatur semua ini untuk menghasilkan kinerja. Itu akan menjadi salah satu hal yang akan saya mulai lakukan dalam Tesis Master Lattice QCD saya dalam beberapa bulan.
NO-OP
pada saat yang sama, yang akan menyebabkan keduanya memiliki beban 100%.