Open
Description
Here is a simple benchmark for appending to a list in Python:
from ltypes import i32
def test_list():
a: list[i32] = [0, 1, 2, 3, 4]
n: i32 = 100000000
i: i32
for i in range(n):
a.append(i + 5)
print(a[n])
test_list()
and C++:
#include <vector>
#include <iostream>
int main() {
std::vector<int32_t> a = {0, 1, 2, 3, 4};
int32_t n = 100000000;
for (int32_t i = 0; i < n; i++) {
a.push_back(i + 5);
}
std::cout << a[n] << std::endl;
return 0;
}
Results on Apple M1 Max (I ran each benchmark many times, took the lowest numbers):
$ clang++ -std=c++17 -O3 a.cpp
$ time ./a.out
100000000
./a.out 0.07s user 0.09s system 94% cpu 0.170 total
$ g++ -O3 -march=native a.cpp
$ time ./a.out
100000000
./a.out 0.06s user 0.09s system 93% cpu 0.164 total
$ lpython --fast a.py
$ time ./a.out
100000000
./a.out 0.05s user 0.03s system 93% cpu 0.089 total
$ time PYTHONPATH=../src/runtime/ltypes python a.py
100000000
PYTHONPATH=../src/runtime/ltypes python a.py 4.21s user 0.51s system 99% cpu 4.730 total
Compiler | Time | Relative |
---|---|---|
LPython | 0.089 | 1.0 |
g++ | 0.164 | 1.84 |
Clang++ | 0.170 | 1.91 |
Python | 4.730 | 53.15 |
Versions:
$ clang++ --version
Apple clang version 13.0.0 (clang-1300.0.29.30)
Target: arm64-apple-darwin21.3.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
$ g++ --version
g++ (Spack GCC) 11.3.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ lpython --version
LPython version: 0.3.0-350-g6d29003ea
Platform: macOS ARM
Default target: arm64-apple-darwin21.3.0
$ python --version
Python 3.10.2
Thanks @czgdp1807 for implementing lists in our LLVM backend (#835)! This is just a first implementation, but I already like the results. :)
Metadata
Metadata
Assignees
Labels
No labels