/* g++ -O3 -pedantic -Wall -std=c++11 vecbench.cpp -o vec.exe && ./vec.exe
*/
#include <iostream>
#include <vector>
#include <ctime>
std::vector<std::vector<float>> vec;
int main(int argc, char *argv[]) {
vec.resize(10000000);
clock_t begin = clock();
for (auto &i : vec) {
i.push_back(1.3);
i.push_back(1.3);
i.push_back(1.3);
i.push_back(1.3);
i.push_back(1.3);
i.push_back(1.3);
i.push_back(1.3);
i.push_back(1.3);
i.push_back(1.3);
}
clock_t end = clock();
double elapsed_secs = double(end - begin) / CLOCKS_PER_SEC;
std::cout << "elapsed time: " << elapsed_secs << std::endl;
return 0;
}
Run
# nim c -r --gc:markAndSweep -d:release seqbench.nim
import times, os, strutils
template benchmark(benchmarkName: string, code: untyped) =
block:
let t0 = epochTime()
code
let elapsed = epochTime() - t0
let elapsedStr = elapsed.formatFloat(format = ffDecimal, precision = 3)
echo "CPU Time [", benchmarkName, "] ", elapsedStr, "s"
var vec: seq[seq[float32]]
vec.setLen(10000000)
proc fill() =
for i in 0..< vec.len:
vec[i].add(1.3)
vec[i].add(1.3)
vec[i].add(1.3)
vec[i].add(1.3)
vec[i].add(1.3)
vec[i].add(1.3)
vec[i].add(1.3)
vec[i].add(1.3)
vec[i].add(1.3)
vec[i].add(1.3)
benchmark("elapsed time: ", fill())
Run
C++: 2.766s Nim: 7.607s
Is there any faster way? I tried with shallowCopy, but there wasn't any
difference