{ "cells": [ { "attachments": {}, "cell_type": "markdown", "id": "8414ba1c-c56d-46e3-a099-d00044905eda", "metadata": {}, "source": [ "# Parallelized Cubic Spline Interpolation" ] }, { "cell_type": "markdown", "id": "8f1b4641", "metadata": {}, "source": [ "We recommend first working through Trajectory_tutorial.ipynb and Amplitude_tutorial.ipynb before reading this tutorial." ] }, { "attachments": {}, "cell_type": "markdown", "id": "1cf56b82-e6a1-405c-ba54-9a31decb1f64", "metadata": {}, "source": [ "A part of the Fast EMRI waveforms package is parallelized cubic spline interpolation. This generally means fitting and evaluating many splines in parallel with the same input x array. This is available for GPUs and CPUs (not parallelized for CPU). The user can perform this operation entirely in Python while leveraging [CuPy](https://cupy.dev/) for GPUs. However, the evaluation will not be as efficient as when it is implemented properly in a customized kernel. The spline class ([CubicSplineInterpolant](https://bhptoolkit.org/FastEMRIWaveforms/user/sum.html#few.summation.interpolatedmodesum.CubicSplineInterpolant)) can provide an 1D flattened array of all spline coefficients for use in a custom CUDA kernel. " ] }, { "cell_type": "code", "execution_count": 1, "id": "3c526d1a", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "import few\n", "\n", "# tune few configuration\n", "cfg_set = few.get_config_setter(reset=True)\n", "\n", "# Uncomment if you want to force CPU or GPU usage\n", "# Leave commented to let FEW automatically select the best available hardware\n", "# - To force CPU usage:\n", "# cfg_set.enable_backends(\"cpu\")\n", "# - To force GPU usage with CUDA 12.x\n", "# cfg_set.enable_backends(\"cuda12x\", \"cpu\")\n", "# - To force GPU usage with CUDA 11.x\n", "# cfg_set.enable_backends(\"cuda11x\", \"cpu\")\n", "\n", "cfg_set.set_log_level(\"info\")" ] }, { "cell_type": "code", "execution_count": 2, "id": "19ba8ad4", "metadata": {}, "outputs": [], "source": [ "from few.trajectory.inspiral import EMRIInspiral\n", "from few.trajectory.ode import SchwarzEccFlux\n", "from few.amplitude.romannet import RomanAmplitude\n", "\n", "traj = EMRIInspiral(func=SchwarzEccFlux)\n", "amp = RomanAmplitude()\n", "\n", "# parameters\n", "m1 = 1e5\n", "m2 = 1e1\n", "a = 0.0 # Schwarzschild as we are using SchwarzEccFlux here\n", "p0 = 10.0\n", "e0 = 0.7\n", "xI = 1.0 # +1 for prograde, -1 for retrograde inspirals\n", "\n", "# get trajectory\n", "t, p, e, x, Phi_phi, Phi_theta, Phi_r = traj(m1, m2, a, p0, e0, xI)\n", "\n", "# The shape is (nb of data points in parameter space, mode values)\n", "teuk_modes = amp(a, p, e, x)" ] }, { "cell_type": "code", "execution_count": 3, "id": "18b9882f-3e6d-4ca2-8730-c034ae96e649", "metadata": {}, "outputs": [], "source": [ "from few.summation.interpolatedmodesum import CubicSplineInterpolant\n", "\n", "# Let's take the amplitudes from the last step and spline those.\n", "# For the argument of CubicSplineInterpolant, the shape of the input has to be switched.\n", "# We will split real and imaginary components\n", "\n", "# First argument will be the real, then imaginary mode values, and second argument the data points.\n", "interp_in = np.zeros((teuk_modes.shape[1] * 2, teuk_modes.shape[0]))\n", "\n", "interp_in[: teuk_modes.shape[1], :] = teuk_modes.T.real\n", "interp_in[teuk_modes.shape[1] :, :] = teuk_modes.T.imag\n", "\n", "spline_of_interp_in = CubicSplineInterpolant(t, interp_in)" ] }, { "cell_type": "code", "execution_count": 4, "id": "04ebee73-84eb-4e73-945a-8d59eef9795e", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjgAAAGdCAYAAAAfTAk2AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjUsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvWftoOwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAWIBJREFUeJzt3Xl8VNX9//HXzCSZ7EMgG4GQhH0Ja8ISFoWqgEtdaguopbZarPpFQGxLkVrRfivar9al7tSf2NaKrYrVFlFwQWUnENYQ2UICJARIMpOFJJPM/f0RGI2E1Ql3mLyfj8c8Su49c+dzcynz9tx7zrEYhmEgIiIiEkCsZhcgIiIi4msKOCIiIhJwFHBEREQk4CjgiIiISMBRwBEREZGAo4AjIiIiAUcBR0RERAKOAo6IiIgEnCCzCzCDx+Ph4MGDREVFYbFYzC5HREREzoJhGFRUVJCUlITVevo+mlYZcA4ePEhycrLZZYiIiMh5KCwspGPHjqdt0yoDTlRUFND4C4qOjja5GhERETkbLpeL5ORk7/f46bTKgHPitlR0dLQCjoiIyEXmbB4v0UPGIiIiEnAUcERERCTgKOCIiIhIwGmVz+CcDcMwqK+vp6GhwexSxE8EBwdjs9nMLkNERM6CAk4z6urqKCoqorq62uxSxI9YLBY6duxIZGSk2aWIiMgZKOB8i8fjYe/evdhsNpKSkggJCdFkgIJhGBw+fJj9+/fTrVs39eSIiPg5BZxvqaurw+PxkJycTHh4uNnliB+Ji4sjPz8ft9utgCMi4uf0kPEpnGkKaGl91JMnInLx0Le4iIiIBBwFnAAyevRoZsyYYXYZ34nFYuHdd9815bPnzp3LgAEDTPlsERHxLQWcAPLOO+/w+9///qza5ufnY7FYyMnJadmiWphCiYiINEcPGQeQtm3bmvK5breb4OBgUz5bRESkOerBCSDfvEWVmprKI488wm233UZUVBSdOnXi5Zdf9rZNS0sDYODAgVgsFkaPHu3d9+qrr9KrVy9CQ0Pp2bMnzz//vHffiZ6ff/7zn4wePZrQ0FD+/ve/s2DBAtq0acO7775L9+7dCQ0N5YorrqCwsLBJjS+88AJdunQhJCSEHj168Le//e205zRr1iy6d+9OeHg4nTt35oEHHsDtdgOwYMECHnroITZt2oTFYsFisbBgwQIAnE4nd9xxB/Hx8URHR/O9732PTZs2NTn2o48+SkJCAlFRUdx+++3U1NSc0+9bREROtu9oFXPf28Zzn+4ytQ4FnLNgGAbVdfWmvAzDOO+6n3jiCTIzM9m4cSN33303d911Fzt27ABg7dq1ACxbtoyioiLeeecdAObPn8+cOXP4wx/+QG5uLo888ggPPPAAr732WpNjz5o1i2nTppGbm8u4ceMAqK6u5g9/+AOvvfYaK1aswOVyMWnSJO97Fi1axPTp07nvvvvYunUrv/jFL/jZz37Gp59+espziIqKYsGCBWzfvp2nn36a+fPn8+STTwIwceJE7rvvPvr06UNRURFFRUVMnDgRwzC4+uqrKS4uZvHixWRnZzNo0CAuu+wySktLAfjnP//Jgw8+yB/+8AfWr19P+/btmwQ5ERE5P2X7dxK/9lFYbe6/qbpFdRaOuRvo/bsPTfns7Q+PIzzk/C7TVVddxd133w00BpInn3ySzz77jJ49exIXFwdAu3btSExM9L7n97//PU888QQ/+MEPgMaenu3bt/PSSy9x6623etvNmDHD2+YEt9vNs88+y9ChQwF47bXX6NWrF2vXrmXIkCE8/vjj/PSnP/XWNHPmTFavXs3jjz/OmDFjmj2H3/72t94/p6amct999/Hmm2/y61//mrCwMCIjIwkKCmpyDp988glbtmyhpKQEu90OwOOPP867777LW2+9xR133MFTTz3Fbbfdxs9//nMA/vd//5dly5apF0dE5DsKqi7mx7ZlHHR3MLUO9eAEsH79+nn/bLFYSExMpKSk5JTtDx8+TGFhIbfffjuRkZHe1//+7/+ye/fuJm0zMzNPen9QUFCT7T179qRNmzbk5uYCkJuby4gRI5q8Z8SIEd79zXnrrbcYOXIkiYmJREZG8sADD1BQUHDa887OzqayspJ27do1OY+9e/d6zyM3N5esrKwm7/v2zyIicu5ccZn0q/0L06P+ZGod6sE5C2HBNrY/PM60zz5f337w12Kx4PF4Ttn+xL758+d7e2FO+PbMvREREc0eo7nJ8L657dv7DcM45QR6q1evZtKkSTz00EOMGzcOh8PBwoULeeKJJ055DifOo3379nz22Wcn7WvTps1p3ysiIt+N5/iTFWbPjaqAcxYsFst53ybyVyEhIQBNVktPSEigQ4cO7Nmzh1tuueWcj1lfX8/69esZMmQIAHl5eZSXl9OzZ08AevXqxZdffslPfvIT73tWrlxJr169mj3eihUrSElJYc6cOd5t+/btO+k8vr3i+6BBgyguLiYoKIjU1NRmj92rVy9Wr17dpJbVq1ef/cmKiEizPMefHbWanHAC61tbzlp8fDxhYWEsWbKEjh07EhoaisPhYO7cuUybNo3o6GiuvPJKamtrWb9+PWVlZcycOfO0xwwODuaee+7hmWeeITg4mKlTpzJs2DBv4PnVr37FhAkTvA/8vv/++7zzzjssW7as2eN17dqVgoICFi5cyODBg/nvf//LokWLmrRJTU1l79695OTk0LFjR6Kiorj88svJysri+uuv57HHHqNHjx4cPHiQxYsXc/3115OZmcn06dO59dZbyczMZOTIkbz++uts27aNzp07++YXLCLSSoUfyeFvwY/grE4BRplWh57BaaWCgoJ45plneOmll0hKSuK6664D4Oc//zl/+ctfWLBgAX379uXSSy9lwYIF3mHlpxMeHs6sWbO4+eabycrKIiwsjIULF3r3X3/99Tz99NP83//9H3369OGll17i1VdfbTJE/Zuuu+467r33XqZOncqAAQNYuXIlDzzwQJM2N954I+PHj2fMmDHExcXxxhtvYLFYWLx4MZdccgm33XYb3bt3Z9KkSeTn55OQkAA0jsD63e9+x6xZs8jIyGDfvn3cdddd5/nbFBGRE4JrjjLKtpXuDTtNrcNifJdxyBcpl8uFw+HA6XQSHR3dZF9NTQ179+4lLS2N0NBQkyq8+CxYsIAZM2ZQXl5udiktRn83RETOLGfpPxiw4i7ygnrQ47drfXrs031/f5t6cERERMRnDKNxwIphcsRQwBERERHfORFwLAo4EgB++tOfBvTtKREROUuexpGt6sERERGRgOHx9uCYO0xcAUdERER8xjDAbdjwWM5/olpf0Dw4IiIi4jMHOoznh7WJjEyO5e8m1qEeHBEREfGZEzMZm71UgwKOiIiI+MyJJQ+1VIOIiIgEjNiSlcwPfhGXqy8wxLQ61IPTys2dO5cBAwac03tGjx7NjBkzTK9DRET8T3j1Aa6wZdOlNs/UOtSD08r98pe/5J577jmn97zzzjsEBwe3UEUiInIxM/xkmLgCTitlGAYNDQ1ERkYSGRl5Tu9t27ZtC1UlIiIXveMBx+ynjHWLKoDU1tYybdo04uPjCQ0NZeTIkaxbtw6Azz77DIvFwocffkhmZiZ2u50vvvjipFtD9fX1TJs2jTZt2tCuXTtmzZrFrbfeyvXXX+9t8+1bVKmpqTzyyCPcdtttREVF0alTJ15++eUmtc2aNYvu3bsTHh5O586deeCBB3C73S356xARERN8vRaVufPgKOCci7qqU7/cNefQ9tjZtT1Hv/71r3n77bd57bXX2LBhA127dmXcuHGUlpY2aTNv3jxyc3Pp16/fScd47LHHeP3113n11VdZsWIFLpeLd99994yf/cQTT5CZmcnGjRu5++67ueuuu9ixY4d3f1RUFAsWLGD79u08/fTTzJ8/nyeffPKcz1FERPycxz/WotItqnPxSNKp93UbC7f86+uf/68ruKubb5syEn72369/fqovVB89ud1c51mXVlVVxQsvvMCCBQu48sorAZg/fz5Lly7llVdeYfDgwQA8/PDDXHHFFac8zp///Gdmz57NDTfcAMCzzz7L4sWLz/j5V111FXfffTfQ2Fvz5JNP8tlnn9GzZ08Afvvb33rbpqamct999/Hmm2/y61//+qzPUURELgJ+stimAk6A2L17N263mxEjRni3BQcHM2TIEHJzc70BJzMz85THcDqdHDp0iCFDvh7WZ7PZyMjIwHNiYoNT+GZvkMViITExkZKSEu+2t956i6eeeopdu3ZRWVlJfX090dHR53yeIiLi307cojL7JpECzrm4/+Cp9317zY1f7TpN229d9Blbzr+m4wzvzJGWk7Z/c1tERMQZj9XcMc7k26OqLBaLNxStXr2aSZMm8dBDDzFu3DgcDgcLFy7kiSeeOONxRUTk4rK14038eHM/ru2RxKn/k7rl6RmccxEScepXcOg5tA07u7bnoGvXroSEhPDll196t7ndbtavX0+vXr3O6hgOh4OEhATWrl3r3dbQ0MDGjRvPqZZvW7FiBSkpKcyZM4fMzEy6devGvn37vtMxRUTEP3mwUE8Q2MydTuSCBJznn3+etLQ0QkNDycjI4Isvvjhl26KiIm6++WZ69OiB1Wo95YRyb7/9Nr1798Zut9O7d28WLVrUQtVfHCIiIrjrrrv41a9+xZIlS9i+fTtTpkyhurqa22+//ayPc8899zBv3jz+/e9/k5eXx/Tp0ykrKzupV+dcdO3alYKCAhYuXMju3bt55plnWv31EhEJVJ7jnf5mL9XQ4gHnzTff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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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6txrz549JCQkNGKLRERE5HisR49qADBc5m7212j74DRl2gdHRETE88pLi/F/riUAJQ/uIyi4uUfv3yT2wREREZHzi+WYISqzp40owRERERGPaEpDVI06B0dERETOH1abD9tc8biw0NLkCTBKcERERMQjrFYrQyufBWCN3dw5rhqiEhEREY+oOdGg5tdOk9cwKcERERERj7EezXDMXqOtISoRERHxmK98/4KfUQXFCyGktWlxKMERERERj2nNIezWKjKrKkyNQ0NUIiIi4jHOo6mF2fsIK8ERERERjzE4OgfH5LOolOCIiIiIx7iOTjJ2mbzRnxIcERER8RjjaGph9mniSnBERETEY1xNZIhKq6hERETEYw4QwxFXMWA7adnGpARHREREPOZPvlM5XFTBvJBEU+PQEJWIiIh4jPXoUQ0uLRMXERERb6GjGkRERMTrvFQ1meZ+uVhz34ZWfUyLQz04IiIi4jEJxn6SrOkY1aWmxqEER0RERDymdh8ctNGfiIiIeAv3UQ2GEhwRERHxEu6djJ3ayVhERES8hMuiHhwRERHxMrU9OIbJc3C0TFxEREQ8Jt/aHLuzGJfF3BRDCY6IiIh4zKMhU9hysJBZET1NjUNDVCIiIuIxTWUnYyU4IiIi4jHWo4dR6SwqERER8Rqji6bxid+TBB9ea2ocSnBERETEY1pX7yPFuhNbeb6pcSjBEREREc85OgcH7YMjIiIi3sK9D44SHBEREfEWRu0qKpeOahAREREvoR4cERER8TqG5WhqYagHR0RERLxEuTWQAiMQp2EzNQ4lOCIiIuIxf4t6mu4Vb5PR4kpT41CCIyIiIh7z81EN2slYREREvMTPRzWYHIe5Hy8iIiLe5Lq8d3nf9/8RdWiJqXEowRERERGPia/4iYttWwgsP2RqHEpwRERExGNql4lrDo6IiIh4D/c+OF680V9eXh7Dhw/H4XDgcDgYPnw4+fn5J6xjGAaTJk0iNjaWgIAABg4cyJYtW45bdujQoVgsFj799FPPN0BEREROy3lxVMOtt97K+vXrmT9/PvPnz2f9+vUMHz78hHWee+45XnrpJaZPn86qVauIiYnhyiuvpKioqF7ZadOmYak9tVRERESagNoeHHOHqHwa68bbtm1j/vz5LF++nD59+gAwY8YMUlNT2b59Ox07dqxXxzAMpk2bxmOPPcYNN9wAwHvvvUd0dDT/+te/uOeee9xlN2zYwEsvvcSqVato0aJFYzVDRERETsPPc3C8dIgqLS0Nh8PhTm4A+vbti8PhYNmyZQ3W2bNnD1lZWQwaNMh9zW63M2DAgDp1SktLueWWW5g+fToxMTEnjaWiooLCwsI6LxEREfE8w2Kj0rB57yTjrKwsoqKi6l2PiooiKyvruHUAoqOj61yPjo6uU2fcuHH069eP66677pRimTJlinsekMPhIC4u7lSbISIiIqfho7i/0qHin2xsebOpcZx2gjNp0iQsFssJX6tXrwZocH6MYRgnnTfzy/ePrfP555/z7bffMm3atFOOeeLEiRQUFLhfGRkZp1xXRERETp17J2OTtzI+7Tk4o0eP5uabT5yVJSQksHHjRg4dqr/Jz+HDh+v10NSqHW7KysqqM68mOzvbXefbb7/lp59+onnz5nXq3njjjfTv359FixbVu6/dbsdut58wZhEREfn1juY3ph/VcNoJTkREBBERESctl5qaSkFBAStXrqR3794ArFixgoKCAvr169dgncTERGJiYli4cCE9evQAoLKyksWLFzN16lQAHnnkEe6666469bp27crLL7/MNddcc7rNEREREQ9KzfmEgb7fU37490B70+JotFVUSUlJDBkyhBEjRvDmm28CcPfdd/Ob3/ymzgqqTp06MWXKFH77299isVgYO3YszzzzDO3bt6d9+/Y888wzBAYGcuuttwI1vTwNTSyOj48nMTGxsZojIiIip6BF+U5SbGtYUtbb1DgaLcEB+OCDDxgzZox7VdS1117L9OnT65TZvn07BQUF7t8//PDDlJWVMWrUKPLy8ujTpw8LFiwgODi4MUMVERERT2giOxk3aoITFhbG+++/f8Iyv1xGZrFYmDRpEpMmTTrlzzF7KZqIiIgcVZvguLx0HxwRERE5/xhNpAdHCY6IiIh4Tm2CgxIcERER8RaWpnEWlRIcERER8RzNwRERERFv833CGNqV/4P/tRhhahxKcERERMRjLFZfqvHBaXKKoQRHREREPMZ69OxIl8lzcBp1HxwRERE5v3TIWcgrvl9QceRSoKtpcSjBEREREY+JLN1FL9syfiiNNTUODVGJiIiI52ijPxEREfE6R+fgWAynqWEowRERERHPOdqDY9FGfyIiIuItLBZbzS80RCUiIiJew2o5+gslOCIiIuIt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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Get new values\n", "t_new = np.linspace(t[0], t[-1], 1000)\n", "\n", "# Notice the output has the same shape as the inital input to the spline.\n", "new_teuk_modes = spline_of_interp_in(t_new)\n", "\n", "# To get back the original shape (with now data points at t_new), add the real and imaginary values back together and transpose\n", "new_teuk_modes = new_teuk_modes[:teuk_modes.shape[1],:] + 1j * new_teuk_modes[teuk_modes.shape[1]:,:]; new_teuk_modes = new_teuk_modes.T\n", "\n", "# Check the original and interpolated values for the (2,2,0,0) mode\n", "ind = amp.special_index_map[(2, 2, 0, 0)]\n", "\n", "plt.plot(t_new, new_teuk_modes[:,ind].real, label=\"interpolated\")\n", "plt.plot(t, teuk_modes[:, ind].real, \"--\", label=\"original\")\n", "plt.legend()\n", "plt.show()\n", "\n", "plt.plot(t_new, new_teuk_modes[:,ind].imag, label=\"interpolated\")\n", "plt.plot(t, teuk_modes[:, ind].imag, \"--\", label=\"original\")\n", "plt.legend()\n", "plt.show()" ] }, { "attachments": {}, "cell_type": "markdown", "id": "88352b10-edac-456c-a390-111716f38fee", "metadata": {}, "source": [ "To get the array of interp coefficients for CUDA implementations, do the following. The underlying shape of the array is (4, length, ninterps). It is flattened though for entry into GPU kernel. " ] }, { "cell_type": "code", "execution_count": 5, "id": "cc04fd9e-60ee-4d0f-b90b-e45d08b2cb26", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "array([ 6.23856751e-06, 3.56609646e-06, -1.26237401e-06, ...,\n", " 1.24433368e-11, 1.36363437e-11, 7.04123293e-12],\n", " shape=(1352736,))" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "spline_of_interp_in.interp_array" ] }, { "cell_type": "markdown", "id": "2f1b29b9", "metadata": {}, "source": [ "For convenience, the coefficients array can be returned to its original form via the `reshape_shape` attribute:\n" ] }, { "cell_type": "code", "execution_count": 6, "id": "20c13975", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(7686, 44)" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "spline_of_interp_in.interp_array.reshape(spline_of_interp_in.reshape_shape)[0].T.shape" ] }, { "cell_type": "code", "execution_count": 7, "id": "2a6c7f0c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Check\n", "interp_in_recovered = spline_of_interp_in.interp_array.reshape(spline_of_interp_in.reshape_shape)[0].T\n", "np.allclose(\n", " interp_in_recovered, \n", " interp_in\n", " )" ] }, { "cell_type": "code", "execution_count": null, "id": "eac17421", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "few-env", "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.12.11" } }, "nbformat": 4, "nbformat_minor": 5 }