Skip to content

Instantly share code, notes, and snippets.

@eteq
Created April 19, 2021 17:57
Show Gist options
  • Save eteq/2c1b9c5b5ba04cb8d36a8f4df78087b9 to your computer and use it in GitHub Desktop.
Save eteq/2c1b9c5b5ba04cb8d36a8f4df78087b9 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Performance tests of Numerical and Astronomy Python Workflows for a User in 2021\n",
"\n",
"*Erik Tollerud* \n",
"\n",
"*@eteq*\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This post contains a typical execution time analysis of several possible devices that might be available to the typical scientist (particularly Astronomy, although probably applicable to similar programming-oriented science disciplines) in early 2021.\n",
"\n",
"Note, though: while this provides some useful checks on speed of basic workflow elements, in many scientific workflows, the most relevant metric is not the speed of your computer, but rather the speed of your ability to write the code! To me the real test is: when you run a cell, is it slow enough to interrupt your mental flow? If not, it's fast enough. The below is hopefully a guide to show exactly that. Any workflow you have to walk away from, well, you probably have something else to do anyway, so orders-of-magnitude are all that matter!\n",
"\n",
"**Methodology Caveat**\n",
"These tests were not executed particularly carefully *by design* - this is meant to represent the experience of someone who does not want to sit down and fiddle with their machine settings for hours and hours to shave off every last millisecond of run time. So there is no special compiling/optimization, adjust ment of caching, or even closing of browser tabs to make the performance metrics more consistent. But that's on purpose, because I always have a bunch of tabs open when working, anyway!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Preliminaries "
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from collections import defaultdict\n",
"\n",
"import numpy as np\n",
"\n",
"%matplotlib inline\n",
"from matplotlib import pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Generic Numeric/scientific Operations\n",
"\n",
"We start with a more numerically-oriented set of tests. These focus on basic number crunching, linear algebra, raw numerical I/O, etc. Specifically, the following:\n",
"\n",
"* Basic Numpy arithmetic\n",
"* Eigenvalue decomposition\n",
"* Singular Value Decomposition (on a non-square matrix)\n",
"* Least Squares fit to a Gaussian\n",
"* Writing a \"small\" array (300 KB)\n",
"* Writing a \"largish\" array (300 MB)\n",
"* For all of the above, the time to generate the random data sets is checked\n",
"\n",
"The cell below contains the full set of tests. It writes out to a file because that's the easiest way to make sure the same thing is run on all the different devices, but you can also comment out the `%%writefile` line and run it directly in the notebook."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Overwriting npprofile.py\n"
]
}
],
"source": [
"%%writefile npprofile.py\n",
"\n",
"import os\n",
"import time\n",
"import tempfile\n",
"\n",
"import numpy as np\n",
"\n",
"from scipy import optimize\n",
"\n",
"\n",
"N = 50\n",
"sz = 300\n",
"\n",
"\n",
"ts = []\n",
"ts_rand = []\n",
"for i in range(N + 1):\n",
" prest = time.time()\n",
" a = np.random.randn(sz * sz)\n",
" st = time.time()\n",
" c = ((1.2*a + 3 ) / 4 - 5.6 ) ** 4 \n",
" et=time.time()\n",
" ts.append((et-st)*1000)\n",
" ts_rand.append((st-prest)*1000)\n",
"# remove the first one since it might be tainted by imports\n",
"for l in (ts, ts_rand):\n",
" del l[0]\n",
"\n",
"print(f'Arithmetic Operations (n={sz*sz})', np.mean(ts), '±', np.std(ts), 'ms')\n",
"print('RNG', np.mean(ts_rand), '±', np.std(ts_rand), 'ms')\n",
"\n",
"ts = []\n",
"ts_rand = []\n",
"for i in range(N + 1):\n",
" prest = time.time()\n",
" a = np.random.randn(sz, sz)\n",
" st = time.time()\n",
" e=np.linalg.eig(a)\n",
" et=time.time()\n",
" ts.append((et-st)*1000)\n",
" ts_rand.append((st-prest)*1000)\\\n",
"# remove the first one since it might be tainted by imports\n",
"for l in (ts, ts_rand):\n",
" del l[0]\n",
"\n",
"print(f'Eig ({sz} x {sz})', np.mean(ts), '±', np.std(ts), 'ms')\n",
"print('RNG', np.mean(ts_rand), '±', np.std(ts_rand), 'ms')\n",
"\n",
"ts = []\n",
"ts_rand = []\n",
"for i in range(N + 1):\n",
" prest = time.time()\n",
" a = np.random.randn(2*sz, sz)\n",
" st = time.time()\n",
" e=np.linalg.svd(a)\n",
" et=time.time()\n",
" ts.append((et-st)*1000)\n",
" ts_rand.append((st-prest)*1000)\n",
"# remove the first one since it might be tainted by imports\n",
"for l in (ts, ts_rand):\n",
" del l[0]\n",
"\n",
"print(f'SVD ({2*sz} x {sz})', np.mean(ts), '±', np.std(ts), 'ms')\n",
"print('RNG', np.mean(ts_rand), '±', np.std(ts_rand), 'ms')\n",
"\n",
"\n",
"\n",
"ts = []\n",
"ts_rand = []\n",
"def fopt(p, x, y):\n",
" A, mu, sig = p\n",
" model = A*np.exp(-0.5 * ((x-mu)/sig)**2)\n",
" return model - y\n",
"for i in range(N + 1):\n",
" prest = time.time()\n",
" xgauss = np.linspace(-3, 3, sz*sz)\n",
" ygauss = fopt((10, 1, .6), xgauss, 0) + np.random.randn(len(xgauss))\n",
" st = time.time()\n",
" optimize.least_squares(fopt, [11, .5, .9], args=[xgauss, ygauss], method='lm')\n",
" et = time.time()\n",
" ts.append((et-st)*1000)\n",
" ts_rand.append((st-prest)*1000)\n",
"# remove the first one since it might be tainted by imports\n",
"for l in (ts, ts_rand):\n",
" del l[0]\n",
"\n",
"print(f'Leastsq (n={sz*sz})', np.mean(ts), '±', np.std(ts), 'ms')\n",
"print('RNG', np.mean(ts_rand), '±', np.std(ts_rand), 'ms')\n",
"\n",
"tr1 = []\n",
"tr2 = []\n",
"tkB = []\n",
"tMB = []\n",
"for i in range(N//8 + 1): #//8 because writing can be hard on SSDs, and seems to be very repeatable anyway\n",
" t1 = time.time()\n",
" kbarr = np.random.randint(256, size=1024*sz, dtype='uint8')\n",
" t2 = time.time()\n",
" Mbarr = np.random.randint(256, size=1024*1024*sz, dtype='uint8')\n",
" t3 = time.time()\n",
" tr1.append(t2 - t1)\n",
" tr2.append(t3 - t2)\n",
"\n",
" with tempfile.NamedTemporaryFile() as f:\n",
" st = time.time()\n",
" np.save(f, kbarr)\n",
" et = time.time()\n",
" tkB.append(et-st)\n",
"\n",
" with tempfile.NamedTemporaryFile() as f:\n",
" st = time.time()\n",
" np.save(f, Mbarr)\n",
" et = time.time()\n",
" tMB.append(et-st)\n",
"# remove the first one since it might be tainted by imports\n",
"for l in (tr1, tr2, tkB, tMB):\n",
" del l[0]\n",
"\n",
"print(f'Write ({sz} KB)', np.mean(tkB), '±', np.std(tkB), 'ms')\n",
"print('RNG', np.mean(tr1), '±', np.std(tr1), 'ms')\n",
"print(f'Write ({sz} MB)', np.mean(tMB), '±', np.std(tMB), 'ms')\n",
"print('RNG', np.mean(tr2), '±', np.std(tr2), 'ms')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Below is the results of running the above on several devices:\n",
"\n",
"* A new laptop with a top-of-the-line Intel mobile processor (mobile = balance of power efficiency and performance), on Linux or Windows (using [WSL](https://docs.microsoft.com/en-us/windows/wsl/about))\n",
"* An iMac that was top-of-the-line in 2015\n",
"* A hand-built Windows desktop with a mid-range Intel processor from 2014 on [WSL](https://docs.microsoft.com/en-us/windows/wsl/about)\n",
"* A Samsung S21 Ultra, which uses the Qualcomm 888, a state-of-the-art ARM processor\n",
"\n",
"Note that, aside from the hand-built machine (which is hard to apples-to-apples compare) these are all relatively similar prices to purchase as of 2021.\n",
"\n",
"Android is a relatively locked-down OS, so there's not a single obvious way to use Python, but there are various apps that let you get to a terminal or otherwise run Python - hence several different mechanisms of running python scripts on Android are included for the S21. Specifically:\n",
"* [Pydroid](https://play.google.com/store/apps/details?id=ru.iiec.pydroid3&hl=en_US&gl=US), a more IDE like approach, \n",
"* [Termux](https://termux.com/), a relatively thin layer around the linux system at the core of Android, and \n",
"* [AnLinux](https://play.google.com/store/apps/details?id=exa.lnx.a&hl=en_US&gl=US), a layer that essentially creates more familiar linux environments on top of Termux."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"nppprofile_data = {}\n",
"\n",
"#HP spectre x360 (2020) on ubuntu 20.04 shortly after reboot (attached to an egpu):\n",
"#Intel(R) Core(TM) i7-1065G7 CPU @ 1.30GHz\n",
"nppprofile_data['ultrabook-linux'] = \"\"\"\n",
"Arithmetic Operations (n=90000) 1.6756057739257812 ± 0.3688577466492849 ms\n",
"RNG 1.7036724090576172 ± 0.3487183753829759 ms\n",
"Eig (300 x 300) 87.32826232910156 ± 7.635946221140548 ms\n",
"RNG 2.881178855895996 ± 0.20569738749601182 ms\n",
"SVD (600 x 300) 31.614999771118164 ± 3.6539909780748583 ms\n",
"RNG 6.116633415222168 ± 0.1097590840008892 ms\n",
"Leastsq (n=90000) 37.378525733947754 ± 1.3944810645194972 ms\n",
"RNG 3.880915641784668 ± 0.08596371316124923 ms\n",
"Write (300 KB) 0.0008246898651123047 ± 0.000797926920265935 ms\n",
"RNG 0.0004380544026692708 ± 0.000132861889237448 ms\n",
"Write (300 MB) 0.15468204021453857 ± 0.0038820216803405073 ms\n",
"RNG 0.35952723026275635 ± 0.042130659425058725 ms\n",
"\n",
"\"\"\"\n",
"\n",
"#Same machine on windows subsystem for linux\n",
"nppprofile_data['ultrabook-wsl'] = \"\"\"\n",
"Arithmetic Operations (n=90000) 4.832429885864258 ± 0.18373089164953693 ms\n",
"RNG 2.8391218185424805 ± 0.13812821901274971 ms\n",
"Eig (300 x 300) 113.80751132965088 ± 22.498752193976614 ms\n",
"RNG 4.834494590759277 ± 0.5230535848315021 ms\n",
"SVD (600 x 300) 43.30723285675049 ± 22.532194668748375 ms\n",
"RNG 10.174250602722168 ± 0.8574586455109767 ms\n",
"Leastsq (n=90000) 48.835811614990234 ± 3.2048900663966524 ms\n",
"RNG 5.980625152587891 ± 0.4472850713612565 ms\n",
"Write (300 KB) 0.0004915396372477213 ± 8.223571042651581e-05 ms\n",
"RNG 0.00046324729919433594 ± 3.511450546600878e-05 ms\n",
"Write (300 MB) 0.1921478509902954 ± 0.011080115081110224 ms\n",
"RNG 0.4553593397140503 ± 0.03169751993885473 ms\n",
"\n",
"\"\"\"\n",
"\n",
"\n",
"# 2015 iMac nearly maxed out\n",
"#Intel(R) Core(TM) i7-4790K CPU @ 4.00GHz\n",
"nppprofile_data['iMac-2015']=\"\"\"\n",
"Arithmetic Operations (n=90000) 2.3137378692626953 ± 0.08105763590143897 ms\n",
"RNG 2.070302963256836 ± 0.035946508882229194 ms\n",
"Eig (300 x 300) 40.73537349700928 ± 0.8877029951961521 ms\n",
"RNG 2.100992202758789 ± 0.05319846743322194 ms\n",
"SVD (600 x 300) 19.57542896270752 ± 0.6718816379966097 ms\n",
"RNG 4.210338592529297 ± 0.08190987009025406 ms\n",
"Leastsq (n=90000) 43.709702491760254 ± 1.626838423905233 ms\n",
"RNG 3.3311891555786133 ± 0.1692955819066108 ms\n",
"Write (300 KB) 0.00046435991923014325 ± 0.00019626250313539386 ms\n",
"RNG 0.0005466938018798828 ± 8.96728588509377e-05 ms\n",
"Write (300 MB) 0.43807244300842285 ± 0.033577342528322805 ms\n",
"RNG 0.47133394082387287 ± 0.029525434342570843 ms\n",
"\n",
"\"\"\"\n",
"\n",
"# Midrange windows desktop on WSL\n",
"#Intel(R) Core(TM) i5-4670K CPU @ 3.40GHz\n",
"nppprofile_data['desktop-2014-wsl'] = \"\"\"\n",
"Arithmetic Operations (n=90000) 5.980334281921387 ± 0.2104658348356849 ms\n",
"RNG 4.324584007263184 ± 1.0804979944176138 ms\n",
"Eig (300 x 300) 50.49713134765625 ± 2.0623265808992093 ms\n",
"RNG 2.8104686737060547 ± 0.0156216365157509 ms\n",
"SVD (600 x 300) 28.721413612365723 ± 5.101158795147819 ms\n",
"RNG 6.0588836669921875 ± 0.55144857116891 ms\n",
"Leastsq (n=90000) 87.6505708694458 ± 3.08129761424699 ms\n",
"RNG 6.100587844848633 ± 0.4707221997963097 ms\n",
"Write (300 KB) 0.0013281901677449544 ± 0.0013958411843367031 ms\n",
"RNG 0.0004692872365315755 ± 1.4913818493830237e-05 ms\n",
"Write (300 MB) 0.14026343822479248 ± 0.0023074786719720066 ms\n",
"RNG 0.6560348272323608 ± 0.009111507587664876 ms\n",
"\n",
"\"\"\"\n",
"\n",
"#Samsung S21 Ultra using Pydroid\n",
"# Snapdragon 888\n",
"nppprofile_data['highandroid-2021-pydroid'] = \"\"\"\n",
"Arithmetic Operations (n=90000) 2.443075180053711 ± 0.09796898794472672 ms\n",
"RNG 2.286715507507324 ± 0.03912888908399019 ms\n",
"Eig (300 x 300) 146.36609077453613 ± 13.92771544144655 ms\n",
"RNG 2.5898265838623047 ± 0.3223041232934862 ms\n",
"SVD (600 x 300) 120.31131744384766 ± 8.356954123605899 ms\n",
"RNG 5.516853332519531 ± 0.5379121736035692 ms\n",
"Leastsq (n=90000) 103.03671360015869 ± 3.413509906924827 ms\n",
"RNG 5.648460388183594 ± 0.5531529589972044 ms\n",
"Write (300 KB) 0.0007154544194539388 ± 2.2834068417978086e-05 ms\n",
"RNG 0.0014925003051757812 ± 9.316595580475708e-05 ms\n",
"Write (300 MB) 0.33723100026448566 ± 0.0038397555237155026 ms\n",
"RNG 1.3123644590377808 ± 0.05261338173658255 ms\n",
"\"\"\"\n",
"\n",
"#Samsung S21 Ultra using Termux\n",
"# Snapdragon 888\n",
"# some are 0 because scipy is unavailable\n",
"nppprofile_data['highandroid-2021-termux'] = \"\"\"\n",
"Arithmetic Operations (n=90000) 2.175107002258301 ± 0.10424237669373446 ms\n",
"RNG 1.7603015899658203 ± 0.04076398733090065 ms\n",
"Eig (300 x 300) 210.49492835998535 ± 3.9608078538338294 ms\n",
"RNG 1.8459177017211914 ± 0.05442355394188722 ms\n",
"SVD (600 x 300) 268.0877351760864 ± 2.306343832925803 ms\n",
"RNG 3.6109209060668945 ± 0.08536337754031413 ms\n",
"Leastsq (n=90000) 0.0 ± 0.0 ms\n",
"RNG 0.0 ± 0.0 ms\n",
"Write (300 KB) 0.0005832513173421224 ± 2.3740978869500227e-05 ms\n",
"RNG 0.0005519390106201172 ± 2.1529958964280505e-05 ms\n",
"Write (300 MB) 0.3305274248123169 ± 0.005845571513869176 ms\n",
"RNG 0.3960670630137126 ± 0.001248675055207535 ms\n",
"\n",
"\"\"\"\n",
"\n",
"#Samsung S21 Ultra using AnLinux Ubuntu, enhanced processing, no battery optimization\n",
"# Snapdragon 888\n",
"nppprofile_data['highandroid-2021-anlinux'] = \"\"\"\n",
"Arithmetic Operations (n=90000) 1.5455341339111328 ± 0.25446268813232686 ms\n",
"RNG 1.5759468078613281 ± 0.1421778326858043 ms\n",
"Eig (300 x 300) 105.60596942901611 ± 9.093983856141131 ms\n",
"RNG 2.099013328552246 ± 0.03460866388542104 ms\n",
"SVD (600 x 300) 193.0505132675171 ± 23.852222798661916 ms\n",
"RNG 17.71977424621582 ± 3.4671751132076625 ms\n",
"Leastsq (n=90000) 41.48430824279785 ± 1.7697894147441546 ms\n",
"RNG 4.266977310180664 ± 1.0803862724244608 ms\n",
"Write (300 KB) 0.0005009969075520834 ± 5.461965613345033e-05 ms\n",
"RNG 0.0005480448404947916 ± 7.536600306582695e-05 ms\n",
"Write (300 MB) 0.32338865598042804 ± 0.0029522671250881453 ms\n",
"RNG 0.38102173805236816 ± 0.03997051661768271 ms\n",
"\"\"\""
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"test_names = {}\n",
"vals = defaultdict(list)\n",
"uncs = defaultdict(list)\n",
"for data_entry in nppprofile_data.values():\n",
" for idx, line in enumerate(data_entry.strip().split('\\n')):\n",
" nameval, unc = line.replace(' ms', '').split(' ± ')\n",
" nameval = nameval.split(' ')\n",
" val = nameval[-1]\n",
" name = ' '.join(nameval[:-1])\n",
"\n",
" test_names[idx] = name\n",
" vals[idx].append(float(val))\n",
" uncs[idx].append(float(unc))\n",
"\n",
"vals = dict(vals)\n",
"uncs = dict(uncs)\n",
"machine_names = list(nppprofile_data.keys())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Having pulled the data and refomatted into a suitable format, we can now plot the results:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x1152 with 12 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig, axs = plt.subplots(len(vals)//2, 2, figsize=(12, 16))\n",
"\n",
"andmsk = np.array(['android' in nm for nm in machine_names])\n",
"\n",
"for i in vals.keys():\n",
" ax = axs[i//2, i%2]\n",
" val = np.array(vals[i])\n",
" unc = np.array(uncs[i])\n",
" test_name = test_names[i]\n",
" \n",
" xs = np.arange(len(machine_names))\n",
" ax.errorbar(xs[~andmsk], val[~andmsk], unc[~andmsk], fmt='o')\n",
" ax.errorbar(xs[andmsk], val[andmsk], unc[andmsk], fmt='o')\n",
" #ax.errorbar(np.arange(len(machine_names)), val, unc, fmt='o')\n",
" ax.set_title(test_name)\n",
" ax.set_ylim(0, ax.get_ylim()[1])\n",
" \n",
"for ax in axs.ravel():\n",
" ax.set_xticklabels('')\n",
"for ax in axs[:, 0]:\n",
" ax.set_ylabel('ms')\n",
" \n",
"if len(vals) % 2:\n",
" # odd number of tests\n",
" for ax in (axs[-1, 0], axs[-2, 1]):\n",
" ax.set_xticks(np.arange(len(machine_names)))\n",
" ax.set_xticklabels(machine_names, rotation=90)\n",
" axs[-1, 1].set_visible(False)\n",
"else:\n",
" # even number of tests\n",
" for ax in axs[-1]:\n",
" ax.set_xticks(np.arange(len(machine_names)))\n",
" ax.set_xticklabels(machine_names, rotation=90)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Orange is the phone, and Blue are the Intel-based \"traditional computers\". \n",
"\n",
"Rather shockingly, the phone equals or out-performs the computers in several cases. It is a few x slower for eigenvalue decomposition and SVD, however. It's not implausible that this is driven by the lack of carefully-optimized linear algebra libraries for aarch64, though, as the platform is less used for these applications, and I spent less time trying to find optimal packages or compile the underlying libraries myself."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Practical Astronomy Operations\n",
"\n",
"Below are more astronomy-oriented workflows, leaning heavily on [Astropy](http://www.astropy.org/). Concretely, these are:\n",
"\n",
"* Creation of a `SkyCoord` object uniformly sampling the sphere, using either a trigonometric approach, or a conceptually simpler spherical-volume-sampling approach.\n",
"* Matching two `SkyCoord` catalogs on-sky or in 3D space.\n",
"* `astropy.table.Table` basic operations\n",
"* `astropy.cosmology` redshift-to-luminosity distance conversion (for Planck2018 LCDM)\n",
"* Mixing of table and coordinate operations in one test\n",
"* FITS I/O and arithmetic operations on a smallish but relatively typical astronomy CCD-sized image\n",
"\n",
"The cell below can be run as-is or saved to a script and run that way."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Overwriting astprofile.py\n"
]
}
],
"source": [
"%%writefile astprofile.py\n",
"\n",
"import os\n",
"import time\n",
"import tempfile\n",
"\n",
"import numpy as np\n",
"\n",
"from astropy import units as u\n",
"from astropy.coordinates import SkyCoord, CartesianRepresentation\n",
"from astropy import table, cosmology\n",
"from astropy.io import fits\n",
"\n",
"N = 25\n",
"\n",
"sz_big = 512*512\n",
"sz_small = 1024\n",
"\n",
"dts1 = []\n",
"dts2 = []\n",
"for i in range(N + 1):\n",
" t1 = time.time()\n",
" phi = 2 * np.pi * np.random.rand(sz_big) * u.radian\n",
" theta = (np.arccos(1 - 2*np.random.rand(sz_big)) - np.pi/2)* u.radian\n",
" sc = SkyCoord(dec=theta, ra=phi)\n",
"\n",
" t2 = time.time()\n",
"\n",
" xyz = np.random.rand(3, sz_big*2)*2 - 1\n",
" r = np.sum(xyz**2, axis=0)**0.5\n",
" scr = SkyCoord(CartesianRepresentation(xyz[:, r<1][:, :sz_big]*u.au))\n",
" assert len(sc) == sz_big\n",
" t3 = time.time()\n",
"\n",
" dts1.append((t2 - t1)*1000)\n",
" dts2.append((t3 - t2)*1000)\n",
"# remove the first one since it might be tainted by imports\n",
"for l in (dts1, dts2):\n",
" del l[0]\n",
"\n",
"print(f'sc gen acos', np.mean(dts1), '±', np.std(dts1), 'ms')\n",
"print(f'sc gen r', np.mean(dts2), '±', np.std(dts2), 'ms')\n",
"\n",
"tmatch1 = []\n",
"tmatch2 = []\n",
"ttable1 = []\n",
"ttable2 = []\n",
"for i in range(N + 1):\n",
" sc_small = SkyCoord(ra=np.random.rand(sz_small)*np.pi/10 * u.radian,\n",
" dec=np.random.rand(sz_small)*np.pi/20 * u.radian,\n",
" distance=np.random.randn(sz_small)**2 * u.au)\n",
"\n",
" sc_big2 = sc.copy()\n",
"\n",
" st = time.time()\n",
" idx = sc_small.match_to_catalog_sky((sc_big2))[0]\n",
" sc_big2[idx]\n",
" et = time.time()\n",
" tmatch1.append((et-st)*1000)\n",
"\n",
" sc_big2 = scr.copy()\n",
" st = time.time()\n",
" idx = sc_small.match_to_catalog_3d((sc_big2))[0]\n",
" sc_big2[idx]\n",
" et = time.time()\n",
" tmatch2.append((et-st)*1000)\n",
"\n",
" objnames = ['SGC{i}' for i in range(sz_big)]\n",
" mags = np.random.rand(sz_big)*10 + 10\n",
"\n",
" st = time.time()\n",
" tab = table.Table(data={'name': objnames, 'ra': sc_big2.ra, 'dec': sc_big2.dec, 'r_mag': mags})\n",
" subtab = tab[tab['r_mag'] < 15]\n",
" st2 = time.time()\n",
" SkyCoord.guess_from_table(subtab)\n",
" et = time.time()\n",
" ttable1.append((st2-st)*1000)\n",
" ttable2.append((et-st2)*1000)\n",
"# remove the first one since it might be tainted by imports\n",
"for l in (tmatch1, tmatch2, ttable1, ttable2):\n",
" del l[0]\n",
"\n",
"print(f'sc match sky ({sz_big} + {sz_small}):', np.mean(tmatch1), '±', np.std(tmatch1), 'ms')\n",
"print(f'sc match 3d ({sz_big} + {sz_small}):', np.mean(tmatch2), '±', np.std(tmatch2), 'ms')\n",
"print(f'table operations (N={sz_big}):', np.mean(ttable1), '±', np.std(ttable1), 'ms')\n",
"print(f'table+sc guess (N={sz_big}):', np.mean(ttable2), '±', np.std(ttable2), 'ms')\n",
"\n",
"tcosmo = []\n",
"for i in range(N):\n",
" zs = np.random.rand(sz_small)\n",
" st = time.time()\n",
" cosmology.Planck18.luminosity_distance(zs)\n",
" et = time.time()\n",
" tcosmo.append((et-st)*1000)\n",
"# remove the first one since it might be tainted by imports\n",
"for l in (tcosmo,):\n",
" del l[0]\n",
"print(f'cosmology/lum dist (N={sz_small})', np.mean(tcosmo), '±', np.std(tcosmo), 'ms')\n",
"\n",
"\n",
"sz_image = (1024, 2048)\n",
"im = np.random.randint(2**15, size=sz_image, dtype='uint16')\n",
"\n",
"t_img_ops = []\n",
"t_img_writes = []\n",
"t_img_reads = []\n",
"for i in range(N//5):\n",
" st = time.time()\n",
" hdu = fits.PrimaryHDU(im)\n",
" hdul = fits.HDUList([hdu])\n",
"\n",
" new_data = hdul[0].data - 1.2*hdul[0].data\n",
" hdul.append(fits.ImageHDU(new_data))\n",
"\n",
" et = time.time()\n",
" t_img_ops.append((et-st)*1000)\n",
"\n",
" with tempfile.NamedTemporaryFile() as f:\n",
" st = time.time()\n",
" hdul.writeto(f)\n",
" et = time.time()\n",
" t_img_writes.append((et-st)*1000)\n",
" f.seek(0)\n",
" st = time.time()\n",
" ff = fits.open(f, mode='update')\n",
" d = [hdu.data.copy() for hdu in ff]\n",
" et = time.time()\n",
" t_img_reads.append((et-st)*1000)\n",
"# remove the first one since it might be tainted by imports\n",
"for l in (t_img_ops, t_img_writes, t_img_reads):\n",
" del l[0]\n",
"\n",
"print(f'fits operations ({sz_image}):', np.mean(t_img_ops), '±', np.std(t_img_ops), 'ms')\n",
"print(f'write fits ({sz_image} x 2):', np.mean(t_img_writes), '±', np.std(t_img_writes), 'ms')\n",
"print(f'read fits ({sz_image} x 2):', np.mean(t_img_reads), '±', np.std(t_img_reads), 'ms')"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"astprofile_data = {}\n",
"\n",
"#HP spectre x360 (2020) on ubuntu 20.04 shortly after reboot (attached to an egpu):\n",
"#Intel(R) Core(TM) i7-1065G7 CPU @ 1.30GHz\n",
"astprofile_data['ultrabook-linux'] = \"\"\"\n",
"sc gen acos 12.842092514038086 ± 0.6722904480313653 ms\n",
"sc gen r 50.011844635009766 ± 1.396443023079295 ms\n",
"sc match sky (262144 + 1024): 60.12982368469238 ± 8.70020309929742 ms\n",
"sc match 3d (262144 + 1024): 58.58334541320801 ± 2.0472988809456214 ms\n",
"table operations (N=262144): 29.957971572875977 ± 0.8245573441342412 ms\n",
"table+sc guess (N=262144): 2.676219940185547 ± 0.27850526726104774 ms\n",
"cosmology/lum dist (N=1024) 8.378162384033203 ± 10.027830058918557 ms\n",
"fits operations ((1024, 2048)): 8.668661117553711 ± 2.4358964051300016 ms\n",
"write fits ((1024, 2048) x 2): 14.883184432983398 ± 3.074780985818674 ms\n",
"read fits ((1024, 2048) x 2): 6.48188591003418 ± 1.3695594136788176 ms\n",
"\"\"\"\n",
"\n",
"#Same machine on windows subsystem for linux\n",
"astprofile_data['ultrabook-wsl'] = \"\"\"\n",
"sc gen acos 14.613504409790039 ± 0.7271670047555933 ms\n",
"sc gen r 56.64877891540527 ± 1.7119539234432843 ms\n",
"sc match sky (262144 + 1024): 69.91011619567871 ± 1.8061275966995818 ms\n",
"sc match 3d (262144 + 1024): 71.30675315856934 ± 1.8147002549001203 ms\n",
"table operations (N=262144): 32.91806221008301 ± 1.124963057940266 ms\n",
"table+sc guess (N=262144): 3.114309310913086 ± 0.26113611482609267 ms\n",
"cosmology/lum dist (N=1024) 11.075417200724283 ± 0.805692122180425 ms\n",
"fits operations ((1024, 2048)): 7.7422261238098145 ± 1.9125828402586698 ms\n",
"write fits ((1024, 2048) x 2): 14.831364154815674 ± 0.3663309177892698 ms\n",
"read fits ((1024, 2048) x 2): 6.840229034423828 ± 1.1189445580168444 ms\n",
"\"\"\"\n",
"\n",
"# 2015 iMac nearly maxed out\n",
"#Intel(R) Core(TM) i7-4790K CPU @ 4.00GHz\n",
"astprofile_data['iMac-2015']=\"\"\"\n",
"sc gen acos 13.168296813964844 ± 1.0857403537185053 ms\n",
"sc gen r 53.190011978149414 ± 3.155536790274871 ms\n",
"sc match sky (262144 + 1024): 51.28659248352051 ± 3.682698417194298 ms\n",
"sc match 3d (262144 + 1024): 50.61375617980957 ± 2.1685561403578313 ms\n",
"table operations (N=262144): 34.831552505493164 ± 1.599833744113237 ms\n",
"table+sc guess (N=262144): 2.776632308959961 ± 0.3777887938317537 ms\n",
"cosmology/lum dist (N=1024) 10.283837715784708 ± 0.05534307494328314 ms\n",
"fits operations ((1024, 2048)): 11.98512315750122 ± 3.069392256270619 ms\n",
"write fits ((1024, 2048) x 2): 53.21228504180908 ± 0.3454074507822927 ms\n",
"read fits ((1024, 2048) x 2): 32.88692235946655 ± 1.148757105488188 ms\n",
"\"\"\"\n",
"\n",
"# Midrange windows desktop on WSL\n",
"#Intel(R) Core(TM) i5-4670K CPU @ 3.40GHz\n",
"astprofile_data['desktop-2014-wsl'] = \"\"\"\n",
"sc gen acos 15.425453186035156 ± 0.4633349179205587 ms\n",
"sc gen r 68.1332015991211 ± 6.873381615891233 ms\n",
"sc match sky (262144 + 1024): 74.66437339782715 ± 2.0985225455659644 ms\n",
"sc match 3d (262144 + 1024): 77.05792427062988 ± 1.0324446191673073 ms\n",
"table operations (N=262144): 35.49234390258789 ± 0.6469692568082389 ms\n",
"table+sc guess (N=262144): 3.2297611236572266 ± 0.16665856379837637 ms\n",
"cosmology/lum dist (N=1024) 10.366390148798624 ± 0.28290357005102457 ms\n",
"fits operations ((1024, 2048)): 20.4164981842041 ± 9.674421361333419 ms\n",
"write fits ((1024, 2048) x 2): 15.024721622467041 ± 0.4563531644205001 ms\n",
"read fits ((1024, 2048) x 2): 22.221803665161133 ± 6.64362245100332 ms\n",
"\"\"\"\n",
"\n",
"#Samsung S21 Ultra using Pydroid\n",
"# Snapdragon 888\n",
"astprofile_data['highandroid-2021-pydroid'] = \"\"\"\n",
"sc gen acos 23.489856719970703 ± 0.42243584345656904 ms\n",
"sc gen r 77.1247386932373 ± 0.28679086159876765 ms\n",
"sc match sky (262144 + 1024): 63.94397735595703 ± 9.868335193276538 ms\n",
"sc match 3d (262144 + 1024): 60.43668746948242 ± 0.42401081727717355 ms\n",
"table operations (N=262144): 39.35305595397949 ± 0.4626641513497839 ms\n",
"table+sc guess (N=262144): 5.342597961425781 ± 0.24932977509490548 ms\n",
"cosmology/lum dist (N=1024) 11.884967486063639 ± 0.9114423661391373 ms\n",
"fits operations ((1024, 2048)): 13.368892669677734 ± 0.48117895875093597 ms\n",
"write fits ((1024, 2048) x 2): 26.287508010864258 ± 1.5190836158341297 ms\n",
"read fits ((1024, 2048) x 2): 28.046226501464844 ± 12.596456665834499 ms\n",
"\"\"\"\n",
"\n",
"#Samsung S21 Ultra using AnLinux Ubuntu, enh processing/no battery optimization\n",
"# Snapdragon 888\n",
"astprofile_data['highandroid-2021-anlinux'] = \"\"\"\n",
"sc gen acos 13.16655158996582 ± 0.2982963311616191 ms\n",
"sc gen r 45.601444244384766 ± 2.2279403657623265 ms\n",
"sc match sky (262144 + 1024): 51.74835205078125 ± 0.7975183843463821 ms\n",
"sc match 3d (262144 + 1024): 52.8885555267334 ± 0.7346391386768037 ms\n",
"table operations (N=262144): 46.15926742553711 ± 0.40573682356127655 ms\n",
"table+sc guess (N=262144): 2.8734397888183594 ± 0.055282268475837726 ms\n",
"cosmology/lum dist (N=1024) 6.613612174987793 ± 0.15888013579429994 ms\n",
"fits operations ((1024, 2048)): 10.212361812591553 ± 2.448267983131714 ms\n",
"write fits ((1024, 2048) x 2): 15.184521675109863 ± 0.5650024980852292 ms\n",
"read fits ((1024, 2048) x 2): 27.90158987045288 ± 4.763780226317586 ms\n",
"\"\"\""
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"test_names = {}\n",
"vals = defaultdict(list)\n",
"uncs = defaultdict(list)\n",
"for data_entry in astprofile_data.values():\n",
" for idx, line in enumerate(data_entry.strip().split('\\n')):\n",
" nameval, unc = line.replace(' ms', '').split(' ± ')\n",
" nameval = nameval.split(' ')\n",
" val = nameval[-1]\n",
" name = ' '.join(nameval[:-1])\n",
"\n",
" test_names[idx] = name\n",
" vals[idx].append(float(val))\n",
" uncs[idx].append(float(unc))\n",
"\n",
"vals = dict(vals)\n",
"uncs = dict(uncs)\n",
"machine_names = list(astprofile_data.keys())"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bool(len(vals) % 2)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x1152 with 10 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig, axs = plt.subplots(int(np.ceil(len(vals)/2)), 2, figsize=(12, 16))\n",
"\n",
"\n",
"andmsk = np.array(['android' in nm for nm in machine_names])\n",
"\n",
"for i in vals.keys():\n",
" ax = axs[i//2, i%2]\n",
" val = np.array(vals[i])\n",
" unc = np.array(uncs[i])\n",
" test_name = test_names[i]\n",
" \n",
" xs = np.arange(len(machine_names))\n",
" ax.errorbar(xs[~andmsk], val[~andmsk], unc[~andmsk], fmt='o')\n",
" ax.errorbar(xs[andmsk], val[andmsk], unc[andmsk], fmt='o')\n",
" ax.set_title(test_name)\n",
" ax.set_ylim(0, ax.get_ylim()[1])\n",
" \n",
"for ax in axs.ravel():\n",
" ax.set_xticklabels('')\n",
"for ax in axs[:, 0]:\n",
" ax.set_ylabel('ms')\n",
"\n",
"if len(machine_names) % 2:\n",
" # odd number of tests\n",
" for ax in (axs[-1, 0], axs[-2, 1]):\n",
" ax.set_xticks(np.arange(len(machine_names)))\n",
" ax.set_xticklabels(machine_names, rotation=90)\n",
" axs[-1, 1].set_visible(False)\n",
"else:\n",
" # even number of tests\n",
" for ax in axs[-1]:\n",
" ax.set_xticks(np.arange(len(machine_names)))\n",
" ax.set_xticklabels(machine_names, rotation=90)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Orange is the phone, and Blue are the Intel-based \"traditional computers\". \n",
"\n",
"Broadly speaking, all perform fairly similarly. In some cases the phone beats out the computers, and in others vice versa. The only striking outlier is the slow hard drive on the older mac (not necessarily surprising, as it is the oldest SSD on the list given that the mid-range desktop got a newer drive several years later."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Conclusions"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Surprisingly: for most applications, the phone is comparable to, or in a few cases even exceeds the performance of the laptop/desktop devices. In a few cases it's 2-3x slower, although this is probably at least in part due to a lack of care in compilation/optimization for aarch64.\n",
"\n",
"**If your android phone can be connected to a keyboard/mouse/monitor, and has one of the \"Desktop-like\" modes available, it may be a reasonable replacement for a laptop or mid-range desktop if you are a scientific programmer/data scientist.**\n",
"\n",
"Caveat: this is a pretty top-of-the-line ARM processor for phones, and the more traditional computer comparisons are more like mid-range devices. Then again, computers are usually more expensive than phones, such that all options listed here are fairly comparable as of 2021 (since the older devices are cheaper than their brand-new counterparts). So from a FLOP per dollar perspective on a regular daily-work device, compabilities are suprisingly close. We may be nearing the only-one-device-needed threshold!"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.5"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
@eteq
Copy link
Author

eteq commented Apr 19, 2021

Additional runs of the benchmark scripts welcome! Feel free to just drop the output here is the comments

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment