Idomu palyginti kiek RPI greitesnis uz x86 procesoriu. 1 fredas - 8 kartai 4 fredai - 14 kartų
#include <time.h> #include <stdlib.h> #include <thread> #include <iostream> #include <thread> #include <stdio.h> #include <mutex> #include <ctime> /* c++ -Wall -std=c++11 -pthread speed.cpp sudo ./a.out */ std::mutex mtx; bool must_exit = false; int64_t counter = 0; double compute_task() { int ln = 1000000; double *a = new double[ln]; double *b = new double[ln]; for (int i = 0; i<ln; i++) { a[i] = i; //1.0 * rand() / RAND_MAX; b[i] = i*i - i * 2; //1.0 * rand() / RAND_MAX; } double c = 0; while (must_exit == false) { for (int i = 0; i<ln; i++) { c += a[i] * b[i]; } mtx.lock(); counter++; mtx.unlock(); } delete a; delete b; return c; } int main() { int tcount = 7; std::thread *tasks[100]; for (int i = 0; i<tcount; i++) { tasks[i] = new std::thread(compute_task); } for (int i = 0; i<10; i++) { auto scounter = counter; std::this_thread::sleep_for(std::chrono::seconds(1)); auto fcounter = counter; std::cout << "tasks per second: " << fcounter - scounter << ", counter: " << counter << "\n"; } must_exit = true; for (int i = 0; i<tcount; i++) { tasks[i]->join(); delete tasks[i]; } std::cout << "done\n"; return 0; }