Cara menentukan jumlah FLOP yang dapat dilakukan komputer saya

15

Saya ingin menentukan jumlah teoritis FLOP (Operasi Titik Terapung) yang dapat dilakukan komputer saya. Dapatkah seseorang tolong bantu saya dengan ini. (Saya ingin membandingkan komputer saya dengan beberapa superkomputer hanya untuk mengetahui perbedaan di antara mereka)

Sangat Andal
sumber

Jawaban:

9

Puncak teoritis FLOP / s diberikan oleh: Jumlah core mudah. Frekuensi rata-rata seharusnya, secara teori, merupakan faktor dalam sejumlah Turbo Boost (Intel) atau Turbo Core (AMD), tetapi frekuensi operasi adalah batas bawah yang baik. Operasi per siklus bergantung pada arsitektur dan mungkin sulit ditemukan (8 untuk SandyBridge dan IvyBridge, lihat slide 26 ). Ini adalah subjek dari pertanyaan stack overflow ini , yang mencakup angka untuk sekelompok arsitektur modern.

Jumlah coreFrekuensi rata-rataOperasi per siklus
Max Hutchinson
sumber
1
Ok, saya memiliki 2 core, Frekuensi Operasi: 1,8 GHz, Teknologi Intel Turbo Boost: 3,00 Ghz, saya tidak dapat menemukan operasi per siklus, berikut adalah situs webnya: ark.intel.com/products/75460/… terima kasih
Ol 'Dapat Diandalkan
Haswell dapat melakukan 16 DP / siklus. Saya baru saja menambahkan tautan di badan jawaban ke jawaban SO.
Max Hutchinson
Apakah ini berarti komputer saya dapat melakukan: 2 x 3.000.000.000 Hz x 16 = 96 Giga FLOPs?
Ol 'Reliable
Ini berarti dapat dilakukan antara 2 * 1,8 GHz * 16 DP = 57,6 GFLOP / dtk dan 96 GFLOP / dtk, tergantung pada frekuensi rata-rata aktual. Jika Anda perlu menggunakan nomor tunggal, 57.6 adalah nomor yang lebih adil, IMO.
Max Hutchinson
2
Tingkat FLOP umumnya merupakan ukuran buruk dari 'kebaikan' prosesor. Lihat scicomp.stackexchange.com/questions/114/… misalnya. Anda mungkin ingin memikirkan tentang biaya pembatas tugas Anda (mis. Komputasi terikat vs memori terikat vs disk terikat) dan fokus pada perangkat keras yang relevan (sistem komputasi, sistem memori, I / O).
Max Hutchinson
4

Anda perlu mengetahui model dan vendor CPU di mesin Anda. Setelah Anda memilikinya, Anda dapat melihat di situs web vendor (atau mungkin di Wikipedia) clock rate, jumlah chip / soket, jumlah core per chip, jumlah operasi floating point per siklus, dan lebar vektor dari operasi tersebut . Kemudian, Anda cukup gandakan.

Ambil contoh, prosesor Intel Xeon E5-2680 "Sandy Bridge" di Stampede tempat saya bekerja. Spesifikasi adalah:

  • 2.7GHz
  • 2 chip / node, 8 core / chip
  • 2 instruksi vektor / siklus
  • Petunjuk AVX lebar 256-bit (4 operan presisi ganda simultan)

Mengalikannya menghasilkan 345.6 GF / node atau 2.2 PF untuk bagian yang tidak dipercepat dari sistem.

Kami biasanya berpikir dalam hal operasi presisi ganda (64-bit), karena itulah presisi yang diperlukan untuk sebagian besar pengguna kami, tetapi Anda dapat mengulang perhitungan dalam istilah presisi tunggal jika Anda mau. Ini biasanya hanya mengubah faktor terakhir, katakan 8 Jepit SP / instruksi bukan 4 DP Jepit / inst, tetapi bisa sangat berbeda dari itu. GPU yang lebih tua, misalnya, hanya melakukan DP sekitar 1/8 tingkat SP. Jika Anda pernah mengutip angka untuk sistem Anda, Anda harus eksplisit tentang yang Anda gunakan jika tidak presisi ganda karena orang akan menganggap itu nomor, jika tidak.

Juga, jika chip Anda mendukung instruksi FMA (multiply-add-add), dan dapat melakukannya dengan kecepatan penuh, maka kebanyakan orang menghitung ini sebagai 2 operasi floating-point meskipun penghitung kinerja perangkat keras mungkin menghitungnya hanya sebagai satu instruksi.

Terakhir, Anda juga dapat melakukan ini untuk akselerator apa pun yang mungkin ada di sistem Anda (seperti GPU atau Xeon Phi) dan menambahkan kinerja itu ke kinerja CPU untuk mendapatkan total teoritis.

Bill Barth
sumber
Tidak cukup mengetahui model CPU, kita perlu mencari tahu frekuensi operasi yang sebenarnya
Aksakal
@ Aksakal, untuk analisis teoritis, mungkin OK untuk memilih frekuensi nominal. Sulit untuk mengetahui frekuensi chip Anda akan berjalan karena itu tergantung pada beban kerja dan kualitas AC Anda.
Bill Barth
2

Saya memahami bahwa Anda meminta nilai teoretis, tetapi karena ini hampir selalu tidak dapat diakses oleh kode nyata, bahkan LINPACK, Anda mungkin ingin menjalankan (dioptimalkan) DGEMM untuk matriks yang sangat besar. Alasan saya lebih suka metode ini adalah karena memperlihatkan beberapa kekurangan prosesor tertentu yang mencegah mereka dari mencapai nilai kegagalan puncak teoretis mereka.

Misalnya, GPU NVIDIA saat ini melakukan operasi integer dan floating-point pada pipa yang sama. Ini berarti bahwa Anda hanya dapat mencapai puncak kegagalan teoretis jika Anda tidak melakukan perhitungan integer sama sekali . Karena pengindeksan larik dan segala bentuk akses data lainnya memerlukan aritmatika bilangan bulat di suatu tempat, tidak ada kode yang dapat mencapai kegagalan puncak teoretis pada GPU NVIDIA. Dalam kebanyakan kasus, seseorang melihat ~ 80% sebagai batas atas. Untuk CPU yang mengeluarkan operasi integer dan floating-point secara bersamaan, ini bukan masalah.

Pada beberapa prosesor multicore seperti GPU seperti Intel Knights Corner dan Blue Gene / Q, lebih sulit untuk mencapai puncak kegagalan daripada pada CPU tradisional untuk masalah pipa yang serupa (walaupun keduanya dapat mencapai ~ 90% dari puncak dalam DGEMM besar setidaknya ).

Jeff
sumber
Mengapa tidak ada kode yang dapat mencapai puncak teoritis di GPU NVIDIA?
skytree
Lihat paragraf 2. Namun, semua ini relevan dengan arsitektur yang lebih tua. Arsitektur NVIDIA yang lebih baru dapat mengeksekusi integer dan floating-point secara bersamaan dan mencapai> 90% puncak di DGEMM besar.
Jeff