Skip to content

Instantly share code, notes, and snippets.

@xrz000
Created June 19, 2025 06:31
Show Gist options
  • Select an option

  • Save xrz000/e1b37c85ea60c725b82aca379a40aa0b to your computer and use it in GitHub Desktop.

Select an option

Save xrz000/e1b37c85ea60c725b82aca379a40aa0b to your computer and use it in GitHub Desktop.
Testing segy file crossline loading time of some python libraries
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "0f604580-f351-49ec-9ffe-bc89f6463b4f",
"metadata": {},
"outputs": [],
"source": [
"import time\n",
"import tqdm\n",
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "3ca3c792-2d33-465c-b608-06121734158e",
"metadata": {},
"outputs": [],
"source": [
"def test(slice_func=None, lines=()):\n",
" runtimes = []\n",
" trials = len(lines)\n",
" for trial in tqdm.trange(trials):\n",
" start_time = time.time()\n",
" lineidx = lines[trial]\n",
" slice_func(lineidx)\n",
" time_passed = time.time() - start_time\n",
" runtimes.append(time_passed)\n",
" total_runtime = sum(runtimes)\n",
" mean_runtime = np.mean(runtimes)\n",
" std_runtime = np.std(runtimes)\n",
" print(f\"{trials} trials, {total_runtime}s passed, avg {np.mean(runtimes)}s\")\n",
" return runtimes"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "818ba189-5fbf-4600-8c32-70ec0e329f05",
"metadata": {},
"outputs": [],
"source": [
"# Test SEGY file: 13.2GB, shape: [795, 2869, 1500]\n",
"data_path = \"test.sgy\"\n",
"n_ilines = 2256 - 1461\n",
"n_xlines = 3179 - 310\n",
"np.random.seed(0)\n",
"lines = sorted(np.random.choice(np.arange(310, 3179), 100, replace=False))\n",
"results = {}"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "88d2d2a0-6006-4750-b73e-bb50f5f88f6d",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|████████████████████████████████████████████████████████████████████| 100/100 [00:14<00:00, 6.68it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"100 trials, 14.81632137298584s passed, avg 0.1481632137298584s\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"import segyio\n",
"\n",
"segyio_loader = segyio.open(data_path, \"r\")\n",
"\n",
"def sgyio_func(j):\n",
" return segyio_loader.xline[j]\n",
" \n",
"times = test(sgyio_func, lines=lines)\n",
"results[\"segyio\"] = times"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "6ce220fe-6ff7-4d69-b5c3-18f094688d37",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|███████████████████████████████████████████████████████████████████| 100/100 [00:00<00:00, 108.81it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"100 trials, 0.9151480197906494s passed, avg 0.009151480197906493s\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"times = test(sgyio_func, lines=lines)\n",
"results[\"segyio-cache\"] = times"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "b6ad2ebb-a381-452a-b0b7-e27739c438a9",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|████████████████████████████████████████████████████████████████████| 100/100 [00:30<00:00, 3.24it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"100 trials, 30.80193328857422s passed, avg 0.3080193328857422s\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"from mdio import MDIOReader, segy_to_mdio\n",
"\n",
"mdio_path = data_path[:data_path.rfind(\".\")] + \".mdio\"\n",
"mdio_loader = MDIOReader(mdio_path)\n",
"\n",
"def mdio_func(j):\n",
" xline_index = mdio_loader.coord_to_index(j, dimensions=\"crossline\").item()\n",
" return mdio_loader[:, xline_index, :]\n",
"\n",
"times = test(mdio_func, lines=lines)\n",
"results[\"mdio\"] = times"
]
},
{
"cell_type": "markdown",
"id": "b02060e3-9696-474f-88b1-c87d57f45e3f",
"metadata": {},
"source": [
"Clear cache before running segfast test because both segfast and segyio read original SEGY file.\n",
"\n",
"* windows: install [RAMMap](https://learn.microsoft.com/en-us/sysinternals/downloads/rammap) and run \"Empty->Empty Standby List\"\n",
"* linux: echo 3 > /proc/sys/vm/drop_caches"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "135520f0-28fe-451a-9c11-45fa967eddb4",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|████████████████████████████████████████████████████████████████████| 100/100 [00:15<00:00, 6.43it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"100 trials, 15.280656099319458s passed, avg 0.1528065609931946s\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"import segfast\n",
"\n",
"segfast_loader = segfast.open(data_path, engine='memmap')\n",
"\n",
"def segfast_func(j):\n",
" j = j - 310\n",
" index = np.arange(j, j + n_ilines * n_xlines, n_xlines)\n",
" return segfast_loader.load_traces(index)\n",
"\n",
"times = test(segfast_func, lines=lines)\n",
"results[\"segfast\"] = times"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "aa9d6fe3-2328-452a-b25a-c21d161e6ebb",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|███████████████████████████████████████████████████████████████████| 100/100 [00:00<00:00, 260.85it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"100 trials, 0.38136839866638184s passed, avg 0.0038136839866638184s\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"times = test(segfast_func, lines=lines)\n",
"results[\"segfast-cache\"] = times"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "b5be96fd-09c2-463c-b359-aaaa9cd28bb1",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "daa1e2b1e94b43aea5bdbafe2559b02a",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Processing Chunks: 0%| | 0.00/23.0 [00:00<?, ? trace-chunks/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "34f7d8522f834d2fb7231c26ecd8b4d9",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Reading header: 0%| | 0.00/100k [00:00<?, ? traces/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "682b09a3a6d74b87bafa73cf7d0d7454",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Reading header: 0%| | 0.00/100k [00:00<?, ? traces/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "55db91c4ac3042319c97402109b3ae9e",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Reading header: 0%| | 0.00/100k [00:00<?, ? traces/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "5f4cefa0cb7a45b78190d0a3be18b224",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Reading header: 0%| | 0.00/100k [00:00<?, ? traces/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "06786eb54e544c1e83f4a07e85a2d102",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Reading header: 0%| | 0.00/100k [00:00<?, ? traces/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "04a8773e114e4cd5bcfb072165d54fa3",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Reading header: 0%| | 0.00/100k [00:00<?, ? traces/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "79c1691703644f5ab8081774cfaf9f43",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Reading header: 0%| | 0.00/100k [00:00<?, ? traces/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "1a5f67f73bd548c29c6cea9d046849fe",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Reading header: 0%| | 0.00/100k [00:00<?, ? traces/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "80af2c19f916434a8d2b161238b25a58",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Reading header: 0%| | 0.00/100k [00:00<?, ? traces/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "c0b62497911e4f79a1cd326d37ed8343",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Reading header: 0%| | 0.00/100k [00:00<?, ? traces/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "da93495322d7453fb57f4aaabfc5a183",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Reading header: 0%| | 0.00/100k [00:00<?, ? traces/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "6210d6ed5f0a48bcb9eee02287244294",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Reading header: 0%| | 0.00/100k [00:00<?, ? traces/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "09590a3eee46416e8f48b715fa000be4",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Reading header: 0%| | 0.00/100k [00:00<?, ? traces/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "2e6cc6f8fa59498fb3761b32d36830de",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Reading header: 0%| | 0.00/100k [00:00<?, ? traces/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "07086566c7ee4c20965c7d4ae313e603",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Reading header: 0%| | 0.00/100k [00:00<?, ? traces/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "0c08aff64d7c4d5f8cc0a9d021d6138c",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Reading header: 0%| | 0.00/100k [00:00<?, ? traces/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "6fb6a48b19634ce1a114c00ee5e991ed",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Reading header: 0%| | 0.00/100k [00:00<?, ? traces/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "2367b3c9ef3442dc80500e7c16b6527f",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Reading header: 0%| | 0.00/100k [00:00<?, ? traces/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "57e11794213743258b3f664623b37dc8",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Reading header: 0%| | 0.00/100k [00:00<?, ? traces/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "671676800aa14fadb6f881b9b399f655",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Reading header: 0%| | 0.00/100k [00:00<?, ? traces/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "4b17b6f4ffc54c3d89c11a6729f204a8",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Reading header: 0%| | 0.00/100k [00:00<?, ? traces/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "6eb0ab4a6e7140a089f692985d27c7f9",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Reading header: 0%| | 0.00/100k [00:00<?, ? traces/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "8d7822ba76f34bf1a0992c8ea76a2281",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Reading header: 0%| | 0.00/80.9k [00:00<?, ? traces/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|████████████████████████████████████████████████████████████████████| 100/100 [00:05<00:00, 18.29it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"100 trials, 5.4560887813568115s passed, avg 0.05456088781356812s\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"import xarray as xr\n",
"from segysak.progress import Progress\n",
"\n",
"segysak_loader = xr.open_dataset(data_path, dim_byte_fields={\"iline\": 9, \"xline\": 21})\n",
"\n",
"def segysak_func(j):\n",
" return segysak_loader.sel(xline=j).to_dataarray().to_numpy()[0, :, :]\n",
"\n",
"times = test(segysak_func, lines=lines)\n",
"results[\"segysak\"] = times"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "d721326a-e024-4854-b4a1-5fcc1c2a119c",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[Text(0, 0, '0.148163'),\n",
" Text(0, 0, '0.00915148'),\n",
" Text(0, 0, '0.308019'),\n",
" Text(0, 0, '0.152807'),\n",
" Text(0, 0, '0.00381368'),\n",
" Text(0, 0, '0.0545609')]"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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xUpEWrfmGz58kC1btsT+/fdfK136LuvYsatly5bdPf/XXzusbt0a0R7XtGkfu/0AkDARLAMAYmzfvr3WsWNrS5o0qTVu3MyOHDlsH3zwvm3dutnefnt4pEA1HAWir7zynFtPOBs3bnCPTz/9gqVKlSrSc9mznw1cIyIi7J9//rFTp05Z+vTpXfC7bNlSFxTv2bPH2rXrFNjWU091tk2bNlq9eo+6wPejj6ZYp05tbeTI8VakyHVuvhMnjlvXrh3s7793WYMGjSxp0mQ2efIEN9/YsRMsVarUljlzFnvppZ5R9nfv3r0uyL7uuhssR46cF3lWAcQHBMsAgBhTYLx//z57//1pljfv1W6aHvv06WFLliy2u+66x3fZvXv32MsvP2crVvzkO8+mTRssY8ZMVqNGLd95jh496gLlrFmzWtq0ae3hh+u4vx49XrSpUye7wFiB65Il39ratb9bt27PWq1addyy9913vz36aG17//3x1qPH627avHlzbf36dTZs2GgrUeIWN+3mm4u6HwVz535sjzxSz9KkSROlFVyefbarpU6dxnr06GPJk/NVCyRk5CwDAGLsiy8W2m233REIlEVBZLp06dxzfn75ZaU1bFjHfv/9Vxd8+tm4caMVKFAg2n1QOoUogA1WvnwFl57x669r3L+3bNnsHrW/npw5r7KCBQvbhg3rA9M+/3yBFSxYKBAoy6233m6FChW2//1vke9+fPPNl/btt1/b4483sauvzhftPgOI/wiWAQAxcvDgAdu58y+XchAsWbJkdu2117lWXD/btm21m24qauPGTbL77isfbctygQKFAkGxUilCZcqUya666qooKR8HDuwP7I/kyZM3kGPt0fp27/47kIss69b9EeWYRNPWrv0j7H6eOXPGRo9+x666KpfLkwaQ8HFvCAAQI//8s9s9hsvNVfCpVAY/FSpUsoceqhZpPaGOHj3i8oZ3795tzZo1sj//XOcC37Jly1nnzk9blixZ3Hya5gXEHuUxz5o1w02/6aab3bR77y1nt91WygYP7u9avrWPEyeOd2kkjz76+P9v86gdOXLEsmfPEfaYtE/qkJghQ4ZIz33zzVeudbp792ej5FYDSJhoWb5E1GLxzDNdrHLl+61atQr21ltvuIvr+dJFuHr1ijZ//rxzzvvKK8/bffeVjjJdLSUjRw6z2rWrul7hjRrV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QgXLmzevZcqUKa53JUHgfF3ZatWqZaVKlbKkSWl/iC+efvppW7NmjVWrVs1y587tvogvhUaNGtn+/futcePGltBxzoDwCJbhG/zpD+eH83Vlq127dlzvAkL8/vvvVqRIEevfv/8l3c4///xjyZMnjq9SzhkQHs0gAIBERekwp0+ftixZssT1riQYnDPAH8FyHDl16pQNHDjQqlatasWLF7c777zTOnTo4H7Zh+aQdezY0UqXLu3mUwvWjBkzwq7zo48+surVq7v5KlasaB988IENHz7c3Urbtm2bbd261f1/69atw14otQ8NGjSINgdX29Y+aBu33XabPfnkk/bjjz/apXYln69NmzbZU089Zffcc4/dcsstbn1z5syJNM+ZM2fsww8/dPuj7RQtWtTKly9vvXr1ssOHD0dZp3IRNa/Wp/XqnG3YsCHKfEePHrXXX3/dzaM8xjp16thXX30VZb7jx4/boEGD3HnUtsuWLeu2feDAAYtLyiXWLeWNGzdaq1at3PHqvfHKK6/YiRMn3Gus11fTtc+9e/d2x+LZvXu3Pf/883b33Xe7eXSeNC3cdkJzlvX/48aNc+9ZnRNtV8uvW7fOrhRx8blVvv3NN9/s5v3+++/ddL0+niVLlrj3gvZF85UpUybs+3/Xrl32zDPPuM+RXr/777/fevbsaXv37nXPa1tat+bbvn27+39tm3MW++csIiLC7bPSnUqWLGn33XefPffcc249oddKTdd2tX1dC3Uc33zzTZR16nPco0cPty6tU+fn/fffdz8YQun4db3U+bvrrrvs1VdfDXtd/emnn6x58+Zuu1qnlvnyyy8tMX7nyfjx4+3hhx9210bluOvY9f4Jdb7vn3Cvu1KDtE/6HopL3AeJI6+99ppNmTLFfah1Yfn7779dALN48WIXCCn/deXKldakSRP3hqlUqZJly5bNBSq6GOii0LVr18D63nnnHXv77bctX758Vq9evcCFQOvx6Dm9qb/99lsXxATn12q7+/btcx9GP1rf5MmT3TofeeQRO3LkiC1atMjlnb311lv20EMPcb5i+XzpwqiLvYLWBx54wK3riy++sO7du7vtezl/CkwnTZrkAlodz8mTJ+3rr7+2iRMnuovgiBEjAuscOnSo+4JSTmLNmjXdvHPnzrVly5bZ9OnT3XF7XnrpJXe7VPuqLweda11IdZHV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",
"text/plain": [
"<Figure size 819.2x614.4 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import seaborn as sns\n",
"from functools import reduce\n",
"sns.set_theme(style=\"whitegrid\")\n",
"sns.set_theme(rc={\"figure.dpi\": 128})\n",
"\n",
"values = tuple([y for y in results.values()])\n",
"y = reduce(lambda a, b: a + b, values)\n",
"keys = list(results.keys())\n",
"keys = [[a] * len(b) for a, b in zip(keys, values)]\n",
"x = reduce(lambda a, b: a + b, keys)\n",
"\n",
"g = sns.barplot(x=x, y=y, log_scale=None)\n",
"g.bar_label(g.containers[0], fontsize=10)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.11.6"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment