Недавно я пытался создать простую программу, которая вычисляет FLOPS. Поскольку c++
достаточно быстр, поэтому я думаю, что стоит постараться добиться близкого результата.
Когда я скомпилировал его с помощью плагинов Notepad ++, NppExec
, он отлично работает, но я его не создаю. Когда я создаю и запускаю в CodeBlocks, он продолжает итерацию и не завершит процесс. Поэтому я возвращаюсь к блокноту ++ и компилирую его снова, тогда на этот раз, когда я запустил его, он работает нормально, итерация прошла только секунду.
C++ вычислить GFlops
#include<iostream>
#include<conio.h>
#include<ctime>
#include<iomanip>
using namespace std;
int main(){
float a=1.0,b=2.0,var,j;
double flop;
clock_t start,end;
cout<<"\n Iterating...";
start=clock();
for(j=0;j<999999999;j++){ // Iterates 999999999 times
var=a*b+a/b; // <-- 5 Flops, or am I wrong?
}
end=clock();
cout<<"\n\n Calculating...";
double secs=((float)(end-start))/CLOCKS_PER_SEC;
flop=999999; // Actually is 999999999, but integer overflow in expression
flop=5*(flop*1000+999); // In the brackets I make the value to same as 999999999
// Multiply with 5 and basically get Flops here
flop/=secs; // To get the Flops in second, multiply with time elapsed
string prefix,fstr;
if(flop/1000000000>=1||flop/1000000000<1){
flop/=1000000000;
prefix="GFLOPS";
}
else if(flop/1000000000000>=1){
flop/=1000000000000;
prefix="TFLOPS";
}
cout<<"\n\n\n Floating-points Operations Per Second\n\n > "<<setprecision(3)<<flop<<" "<<prefix;
getch();
return 0;
}
Если вы знаете, как сделать результат более точным, идти вперед, любой ответ будет оценен по достоинству!
** Третий **, не могли бы вы объяснить это проще? ** Четвертое **, когда я назначаю '999999999' на флоп, компилятор показывает ошибку« целочисленное переполнение в выражении ». ** Седьмой **, поэтому вычисление выполняется только один раз ... чтобы исправить это, я собираюсь «var = a * b + a/b', а затем« var = 0 »на каждой итерации? –
Просто убедитесь, что первый вызов 'clock' происходит до цикла, а второй - после него. –
Вам нужно присвоить значение переменной «var», которая меняет каждую итерацию. –