#include <iostream>
#include <vector>
#include <list>
#include <future>
#include <chrono>
#include <cmath>
int main() {
{
std::vector<double> vin(10000000, 5.0);
std::vector<double> vout(10000000);
auto s = std::chrono::system_clock::now();
for (int i = 0; i < 10000000; i++)
vout[i] = pow(vin[i] * vin[i] / 4.0, vin[i] * vin[i] / 4.0);
std::cout << (std::chrono::system_clock::now() - s).count() << std::endl;
}
{
std::cout << std::thread::hardware_concurrency() << std::endl;
std::vector<double> vin(10000000, 5.0);
std::vector<double> vout(10000000);
auto s = std::chrono::system_clock::now();
std::list<std::future<void>> fs;
auto f = [&vin, &vout](int i1, int i2){
for (int i = i1; i < i2; i++)
vout[i] = pow(vin[i] * vin[i] / 4.0, vin[i] * vin[i] / 4.0);
};
for (int i = 0; i < 10 ; i++) {
fs.emplace_back(std::async(std::launch::async, f, i*1000000, (i+1)*1000000));
}
for (auto& f : fs) f.get();
std::cout << (std::chrono::system_clock::now() - s).count() << std::endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bGlzdD4KI2luY2x1ZGUgPGZ1dHVyZT4KI2luY2x1ZGUgPGNocm9ubz4KI2luY2x1ZGUgPGNtYXRoPgoKaW50IG1haW4oKSB7CgkKCXsKCQlzdGQ6OnZlY3Rvcjxkb3VibGU+IHZpbigxMDAwMDAwMCwgNS4wKTsKCQlzdGQ6OnZlY3Rvcjxkb3VibGU+IHZvdXQoMTAwMDAwMDApOwoJCQoJCWF1dG8gcyA9IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpOwoJCQoJCWZvciAoaW50IGkgPSAwOyBpIDwgMTAwMDAwMDA7IGkrKykKCQkJdm91dFtpXSA9IHBvdyh2aW5baV0gKiB2aW5baV0gLyA0LjAsIHZpbltpXSAqIHZpbltpXSAvIDQuMCk7CgkJCQoJCXN0ZDo6Y291dCA8PCAoc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCkgLSBzKS5jb3VudCgpIDw8IHN0ZDo6ZW5kbDsKCX0KCQoJewoJCXN0ZDo6Y291dCA8PCBzdGQ6OnRocmVhZDo6aGFyZHdhcmVfY29uY3VycmVuY3koKSA8PCBzdGQ6OmVuZGw7CgkJCgkJc3RkOjp2ZWN0b3I8ZG91YmxlPiB2aW4oMTAwMDAwMDAsIDUuMCk7CgkJc3RkOjp2ZWN0b3I8ZG91YmxlPiB2b3V0KDEwMDAwMDAwKTsKCQkKCQlhdXRvIHMgPSBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKTsKCQkKCQlzdGQ6Omxpc3Q8c3RkOjpmdXR1cmU8dm9pZD4+IGZzOwoJCQoJCWF1dG8gZiA9IFsmdmluLCAmdm91dF0oaW50IGkxLCBpbnQgaTIpewoJCQlmb3IgKGludCBpID0gaTE7IGkgPCBpMjsgaSsrKQoJCQkJdm91dFtpXSA9IHBvdyh2aW5baV0gKiB2aW5baV0gLyA0LjAsIHZpbltpXSAqIHZpbltpXSAvIDQuMCk7CgkJfTsKCQkKCQlmb3IgKGludCBpID0gMDsgaSA8IDEwIDsgaSsrKSB7CgkJCWZzLmVtcGxhY2VfYmFjayhzdGQ6OmFzeW5jKHN0ZDo6bGF1bmNoOjphc3luYywgZiwgaSoxMDAwMDAwLCAoaSsxKSoxMDAwMDAwKSk7CgkJfQoJCQoJCWZvciAoYXV0byYgZiA6IGZzKSBmLmdldCgpOwoJCQoJCXN0ZDo6Y291dCA8PCAoc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCkgLSBzKS5jb3VudCgpIDw8IHN0ZDo6ZW5kbDsKCX0KCQoJcmV0dXJuIDA7Cn0=