Skip to content

Instantly share code, notes, and snippets.

@mrocklin
Created July 4, 2019 15:49
Show Gist options
  • Save mrocklin/bffb9e8deaa8c0adf04d390dd329e7a2 to your computer and use it in GitHub Desktop.
Save mrocklin/bffb9e8deaa8c0adf04d390dd329e7a2 to your computer and use it in GitHub Desktop.
Compare to https://nbviewer.jupyter.org/gist/alimanfoo/32236be34ddf5287bdc740b3722b37af , but run on a V100 in an Amazon p3-8xlarge
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"from scipy.spatial.distance import pdist as sp_pdist\n",
"import numba"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import math"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"@numba.jit(numba.float32[:](numba.int8[:, :]), nopython=True, parallel=True)\n",
"def pdist_cityblock_rowm_nb(x):\n",
" m = x.shape[0]\n",
" n = x.shape[1]\n",
" n_pairs = (n * (n - 1)) // 2\n",
" out = np.zeros(n_pairs, dtype=np.float32)\n",
" for i in numba.prange(m):\n",
" ix = 0\n",
" for j in range(n):\n",
" vj = float(x[i, j])\n",
" for k in range(j + 1, n):\n",
" vk = float(x[i, k])\n",
" d = math.fabs(vk - vj)\n",
" out[ix] += d\n",
" ix += 1\n",
" return out"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"@numba.jit(numba.int64(numba.int64, numba.int64, numba.int64), nopython=True)\n",
"def condensed_coords(i, j, n):\n",
"\n",
" # normalise order\n",
" if i > j:\n",
" i, j = j, i\n",
"\n",
" # calculate number of items in rows before this one (sum of arithmetic\n",
" # progression)\n",
" x = i * ((2 * n) - i - 1) // 2\n",
"\n",
" # add on previous items in current row\n",
" ix = x + j - i - 1\n",
"\n",
" return ix\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"@numba.jit(numba.float32[:](numba.int8[:, :]), nopython=True, parallel=True)\n",
"def pdist_cityblock_colm_nb(x):\n",
" m = x.shape[0]\n",
" n = x.shape[1]\n",
" n_pairs = (n * (n - 1)) // 2\n",
" out = np.zeros(n_pairs, dtype=np.float32)\n",
" for j in numba.prange(n):\n",
" for k in range(j + 1, n):\n",
" d = 0\n",
" for i in range(m):\n",
" vj = float(x[i, j])\n",
" vk = float(x[i, k])\n",
" d += math.fabs(vk - vj)\n",
" ix = condensed_coords(j, k, n)\n",
" out[ix] = d\n",
" return out"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"@numba.jit(numba.float64[:](numba.int8[:, :]), nopython=True, parallel=True)\n",
"def pdist_sqeuclid_colm_nb(x):\n",
" m = x.shape[0]\n",
" n = x.shape[1]\n",
" n_pairs = (n * (n - 1)) // 2\n",
" out = np.zeros(n_pairs, dtype=np.float64)\n",
" for j in numba.prange(n):\n",
" for k in range(j + 1, n):\n",
" d = 0\n",
" for i in range(m):\n",
" vj = float(x[i, j])\n",
" vk = float(x[i, k])\n",
" d += (vj - vk)**2\n",
" ix = condensed_coords(j, k, n)\n",
" out[ix] = d\n",
" return out"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"X = np.random.randint(0, 4, size=(2000, 2000), dtype='i1')"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"Xf = np.asfortranarray(X)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 24 s, sys: 371 ms, total: 24.4 s\n",
"Wall time: 767 ms\n"
]
}
],
"source": [
"%%time\n",
"d_nb = pdist_cityblock_rowm_nb(X)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 35.9 s, sys: 513 ms, total: 36.4 s\n",
"Wall time: 1.14 s\n"
]
}
],
"source": [
"%%time\n",
"d_nb = pdist_cityblock_rowm_nb(Xf)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 33.3 s, sys: 532 ms, total: 33.8 s\n",
"Wall time: 1.44 s\n"
]
}
],
"source": [
"%%time\n",
"d_nb2 = pdist_cityblock_colm_nb(X)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 14.9 s, sys: 347 ms, total: 15.2 s\n",
"Wall time: 559 ms\n"
]
}
],
"source": [
"%%time\n",
"d_nb2 = pdist_cityblock_colm_nb(Xf)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 15.7 s, sys: 445 ms, total: 16.1 s\n",
"Wall time: 654 ms\n"
]
}
],
"source": [
"%%time\n",
"d_nb3 = pdist_sqeuclid_colm_nb(Xf)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([2463., 2500., 2503., ..., 2550., 2408., 2574.], dtype=float32)"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d_nb"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([2502., 2530., 2534., ..., 2550., 2408., 2574.], dtype=float32)"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d_nb2"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([4982., 5106., 5096., ..., 5082., 4728., 5164.])"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d_nb3"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 2.4 s, sys: 48.1 ms, total: 2.45 s\n",
"Wall time: 2.27 s\n"
]
},
{
"data": {
"text/plain": [
"array([2502., 2530., 2534., ..., 2550., 2408., 2574.])"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%%time\n",
"sp_pdist(X.T, metric='cityblock')"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 2.25 s, sys: 0 ns, total: 2.25 s\n",
"Wall time: 2.25 s\n"
]
},
{
"data": {
"text/plain": [
"array([2502., 2530., 2534., ..., 2550., 2408., 2574.])"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%%time\n",
"sp_pdist(Xf.T, metric='cityblock')"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 2.23 s, sys: 12 ms, total: 2.24 s\n",
"Wall time: 2.24 s\n"
]
},
{
"data": {
"text/plain": [
"array([4982., 5106., 5096., ..., 5082., 4728., 5164.])"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%%time\n",
"sp_pdist(X.T, metric='sqeuclidean')"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 2.23 s, sys: 4.05 ms, total: 2.23 s\n",
"Wall time: 2.23 s\n"
]
},
{
"data": {
"text/plain": [
"array([4982., 5106., 5096., ..., 5082., 4728., 5164.])"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%%time\n",
"sp_pdist(Xf.T, metric='sqeuclidean')"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"from numba import cuda"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"@cuda.jit(numba.void(numba.int8[:, :], numba.float32[:, :]))\n",
"def pdist_cityblock_cuda_v1(x, out):\n",
" m = x.shape[0]\n",
" n = x.shape[1]\n",
" assert out.shape[0] == n\n",
" assert out.shape[1] == n\n",
" i, j, k = cuda.grid(3)\n",
" if i < m and j < n and k < n and j < k:\n",
" vj = float(x[i, j])\n",
" vk = float(x[i, k])\n",
" d = math.fabs(vj - vk)\n",
" cuda.atomic.add(out, (j, k), d)\n"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"out = np.zeros((X.shape[1], X.shape[1]), dtype='f4')\n",
"threads = (1, 16, 16)\n",
"blocks = (\n",
" math.ceil(X.shape[0] / threads[0]),\n",
" math.ceil(X.shape[1] / threads[1]),\n",
" math.ceil(X.shape[1] / threads[2]),\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 249 ms, sys: 104 ms, total: 353 ms\n",
"Wall time: 356 ms\n"
]
}
],
"source": [
"%%time\n",
"pdist_cityblock_cuda_v1[blocks, threads](X, out)"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0., 2502., 2530., ..., 2411., 2479., 2489.],\n",
" [ 0., 0., 2526., ..., 2539., 2517., 2517.],\n",
" [ 0., 0., 0., ..., 2553., 2485., 2579.],\n",
" ...,\n",
" [ 0., 0., 0., ..., 0., 2550., 2408.],\n",
" [ 0., 0., 0., ..., 0., 0., 2574.],\n",
" [ 0., 0., 0., ..., 0., 0., 0.]], dtype=float32)"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"out"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
"@cuda.jit(numba.void(numba.int8[:, :], numba.float32[:, :]))\n",
"def pdist_cityblock_cuda_v2(x, out):\n",
" m = x.shape[0]\n",
" n = x.shape[1]\n",
" assert out.shape[0] == n\n",
" assert out.shape[1] == n\n",
" j, k = cuda.grid(2)\n",
" if j < n and k < n and j < k:\n",
" d = 0\n",
" for i in range(m):\n",
" vj = float(x[i, j])\n",
" vk = float(x[i, k])\n",
" d += math.fabs(vj - vk)\n",
" out[j, k] = d\n"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [],
"source": [
"@cuda.jit(numba.void(numba.int8[:, :], numba.float32[:, :]))\n",
"def pdist_sqeuclid_cuda_v2(x, out):\n",
" m = x.shape[0]\n",
" n = x.shape[1]\n",
" assert out.shape[0] == n\n",
" assert out.shape[1] == n\n",
" j, k = cuda.grid(2)\n",
" if j < n and k < n and j < k:\n",
" d = 0\n",
" for i in range(m):\n",
" vj = float(x[i, j])\n",
" vk = float(x[i, k])\n",
" d += (vj - vk)**2\n",
" out[j, k] = d\n"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(125, 125)"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"out = np.zeros((X.shape[1], X.shape[1]), dtype='f4')\n",
"X_device = cuda.to_device(X)\n",
"out_device = cuda.to_device(out)\n",
"threads = (16, 16)\n",
"blocks = (\n",
" math.ceil(X.shape[1] / threads[0]),\n",
" math.ceil(X.shape[1] / threads[1]),\n",
")\n",
"blocks"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 7.37 ms, sys: 0 ns, total: 7.37 ms\n",
"Wall time: 6.74 ms\n"
]
}
],
"source": [
"%%time\n",
"pdist_cityblock_cuda_v2[blocks, threads](X_device, out_device)\n",
"cuda.synchronize()"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0., 2502., 2530., ..., 2411., 2479., 2489.],\n",
" [ 0., 0., 2526., ..., 2539., 2517., 2517.],\n",
" [ 0., 0., 0., ..., 2553., 2485., 2579.],\n",
" ...,\n",
" [ 0., 0., 0., ..., 0., 2550., 2408.],\n",
" [ 0., 0., 0., ..., 0., 0., 2574.],\n",
" [ 0., 0., 0., ..., 0., 0., 0.]], dtype=float32)"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"out_device.copy_to_host()"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(125, 125)"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"out = np.zeros((X.shape[1], X.shape[1]), dtype='f4')\n",
"X_device = cuda.to_device(X)\n",
"out_device = cuda.to_device(out)\n",
"threads = (16, 16)\n",
"blocks = (\n",
" math.ceil(X.shape[1] / threads[0]),\n",
" math.ceil(X.shape[1] / threads[1]),\n",
")\n",
"blocks"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 2.21 ms, sys: 3.97 ms, total: 6.18 ms\n",
"Wall time: 5.55 ms\n"
]
}
],
"source": [
"%%time\n",
"pdist_sqeuclid_cuda_v2[blocks, threads](X_device, out_device)\n",
"cuda.synchronize()"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0., 4982., 5106., ..., 4743., 4971., 4997.],\n",
" [ 0., 0., 5102., ..., 5109., 5069., 5017.],\n",
" [ 0., 0., 0., ..., 5145., 5023., 5219.],\n",
" ...,\n",
" [ 0., 0., 0., ..., 0., 5082., 4728.],\n",
" [ 0., 0., 0., ..., 0., 0., 5164.],\n",
" [ 0., 0., 0., ..., 0., 0., 0.]], dtype=float32)"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"out_device.copy_to_host()"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"System info:\n",
"--------------------------------------------------------------------------------\n",
"__Time Stamp__\n",
"2019-07-04 15:43:50.357812\n",
"\n",
"__Hardware Information__\n",
"Machine : x86_64\n",
"CPU Name : broadwell\n",
"CPU count : 32\n",
"CFS restrictions : None\n",
"CPU Features : \n",
"64bit adx aes avx avx2 bmi bmi2 cmov cx16 f16c fma fsgsbase invpcid lzcnt mmx\n",
"movbe pclmul popcnt prfchw rdrnd rdseed rtm sahf sse sse2 sse3 sse4.1 sse4.2\n",
"ssse3 xsave xsaveopt\n",
"\n",
"__OS Information__\n",
"Platform : Linux-4.15.0-1043-aws-x86_64-with-debian-buster-sid\n",
"Release : 4.15.0-1043-aws\n",
"System Name : Linux\n",
"Version : #45-Ubuntu SMP Mon Jun 24 14:07:03 UTC 2019\n",
"OS specific info : debianbuster/sid\n",
"glibc info : glibc 2.9\n",
"\n",
"__Python Information__\n",
"Python Compiler : GCC 7.3.0\n",
"Python Implementation : CPython\n",
"Python Version : 3.6.8\n",
"Python Locale : en_US UTF-8\n",
"\n",
"__LLVM information__\n",
"LLVM version : 8.0.0\n",
"\n",
"__CUDA Information__\n",
"Found 4 CUDA devices\n",
"id 0 b'Tesla V100-SXM2-16GB' [SUPPORTED]\n",
" compute capability: 7.0\n",
" pci device id: 27\n",
" pci bus id: 0\n",
"id 1 b'Tesla V100-SXM2-16GB' [SUPPORTED]\n",
" compute capability: 7.0\n",
" pci device id: 28\n",
" pci bus id: 0\n",
"id 2 b'Tesla V100-SXM2-16GB' [SUPPORTED]\n",
" compute capability: 7.0\n",
" pci device id: 29\n",
" pci bus id: 0\n",
"id 3 b'Tesla V100-SXM2-16GB' [SUPPORTED]\n",
" compute capability: 7.0\n",
" pci device id: 30\n",
" pci bus id: 0\n",
"Summary:\n",
"\t4/4 devices are supported\n",
"CUDA driver version : 10010\n",
"CUDA libraries:\n",
"Finding cublas from Conda environment\n",
"\tnamed libcublas.so.10.0.130\n",
"\ttrying to open library...\tok\n",
"Finding cusparse from Conda environment\n",
"\tnamed libcusparse.so.10.0.130\n",
"\ttrying to open library...\tok\n",
"Finding cufft from Conda environment\n",
"\tnamed libcufft.so.10.0.145\n",
"\ttrying to open library...\tok\n",
"Finding curand from Conda environment\n",
"\tnamed libcurand.so.10.0.130\n",
"\ttrying to open library...\tok\n",
"Finding nvvm from Conda environment\n",
"\tnamed libnvvm.so.3.3.0\n",
"\ttrying to open library...\tok\n",
"Finding libdevice from Conda environment\n",
"\tsearching for compute_20...\tok\n",
"\tsearching for compute_30...\tok\n",
"\tsearching for compute_35...\tok\n",
"\tsearching for compute_50...\tok\n",
"\n",
"__ROC Information__\n",
"ROC available : False\n",
"Error initialising ROC due to : No ROC toolchains found.\n",
"No HSA Agents found, encountered exception when searching:\n",
"Error at driver init: \n",
"NUMBA_HSA_DRIVER /opt/rocm/lib/libhsa-runtime64.so is not a valid file path. Note it must be a filepath of the .so/.dll/.dylib or the driver:\n",
"\n",
"__SVML Information__\n",
"SVML state, config.USING_SVML : False\n",
"SVML library found and loaded : False\n",
"llvmlite using SVML patched LLVM : True\n",
"SVML operational : False\n",
"\n",
"__Threading Layer Information__\n",
"TBB Threading layer available : False\n",
"+--> Disabled due to : Unknown import problem.\n",
"OpenMP Threading layer available : True\n",
"Workqueue Threading layer available : True\n",
"\n",
"__Numba Environment Variable Information__\n",
"None set.\n",
"\n",
"__Conda Information__\n",
"conda_build_version : not installed\n",
"conda_env_version : 4.7.5\n",
"platform : linux-64\n",
"python_version : 3.6.8.final.0\n",
"root_writable : False\n",
"\n",
"__Current Conda Env__\n",
"_libgcc_mutex 0.1 main \n",
"alembic 1.0.11 pypi_0 pypi\n",
"altair 3.1.0 py36_0 conda-forge\n",
"antlr-python-runtime 4.7.2 py36_1000 conda-forge\n",
"arrow-cpp 0.12.1 py36h0e61e49_0 conda-forge\n",
"asn1crypto 0.24.0 py36_1003 conda-forge\n",
"async-generator 1.10 pypi_0 pypi\n",
"atomicwrites 1.3.0 py36_1 \n",
"attrs 19.1.0 py36_1 \n",
"backcall 0.1.0 pypi_0 pypi\n",
"blas 1.0 mkl \n",
"bleach 3.1.0 pypi_0 pypi\n",
"bokeh 1.2.0 py36_0 conda-forge\n",
"boost-cpp 1.68.0 h11c811c_1000 conda-forge\n",
"bzip2 1.0.6 h14c3975_5 \n",
"ca-certificates 2019.6.16 hecc5488_0 conda-forge\n",
"cartopy 0.17.0 py36h0aa2c8f_1004 conda-forge\n",
"certifi 2019.6.16 py36_0 conda-forge\n",
"certipy 0.1.3 pypi_0 pypi\n",
"cf-units 2.1.1 py36h3010b51_1000 conda-forge\n",
"cffi 1.12.3 py36h8022711_0 conda-forge\n",
"cftime 1.0.3.4 py36hd352d35_1001 conda-forge\n",
"chardet 3.0.4 py36_1003 conda-forge\n",
"click 7.0 py_0 conda-forge\n",
"cloudpickle 1.2.1 py_0 conda-forge\n",
"conda 4.7.5 py36_0 conda-forge\n",
"conda-env 2.6.0 h36134e3_1 \n",
"conda-package-handling 1.3.10 py36_0 \n",
"cryptography 2.7 py36h1ba5d50_0 \n",
"cudatoolkit 10.0.130 0 \n",
"cudf 0.8.0 py36_0 rapidsai\n",
"cudnn 7.6.0 cuda10.0_0 \n",
"cugraph 0.8.1 py36_0 rapidsai\n",
"cuml 0.8.0 cuda10.0_py36_0 rapidsai\n",
"cupy 6.0.0 py36hc0ce245_0 \n",
"curl 7.64.1 hf8cf82a_0 conda-forge\n",
"cycler 0.10.0 py36_0 \n",
"cython 0.29.11 py36he1b5a44_0 conda-forge\n",
"cytoolz 0.9.0.1 py36h14c3975_1001 conda-forge\n",
"dask 2.0.0 py_0 conda-forge\n",
"dask-core 2.0.0 py_0 conda-forge\n",
"dbus 1.13.6 h746ee38_0 \n",
"decorator 4.4.0 pypi_0 pypi\n",
"defusedxml 0.6.0 pypi_0 pypi\n",
"distributed 2.0.1 py_0 conda-forge\n",
"entrypoints 0.3 py36_1000 conda-forge\n",
"expat 2.2.6 he6710b0_0 \n",
"fastrlock 0.4 py36he6710b0_0 \n",
"fontconfig 2.13.0 h9420a91_0 \n",
"freetype 2.9.1 h8a8886c_1 \n",
"geos 3.7.1 hf484d3e_1000 conda-forge\n",
"glib 2.56.2 hd408876_0 \n",
"gst-plugins-base 1.14.0 hbbd80ab_1 \n",
"gstreamer 1.14.0 hb453b48_1 \n",
"hdf4 4.2.13 0 conda-forge\n",
"hdf5 1.10.2 hc401514_3 conda-forge\n",
"heapdict 1.0.0 py36_1000 conda-forge\n",
"icu 58.2 hf484d3e_1000 conda-forge\n",
"idna 2.8 py36_1000 conda-forge\n",
"importlib_metadata 0.17 py36_1 \n",
"intel-openmp 2019.4 243 \n",
"ipykernel 5.1.1 pypi_0 pypi\n",
"ipython 7.6.1 pypi_0 pypi\n",
"ipython-genutils 0.2.0 pypi_0 pypi\n",
"ipywidgets 7.4.2 pypi_0 pypi\n",
"iris 2.2.1 py36_0 conda-forge\n",
"jedi 0.14.0 pypi_0 pypi\n",
"jinja2 2.10.1 py_0 conda-forge\n",
"jpeg 9b h024ee3a_2 \n",
"json5 0.8.4 pypi_0 pypi\n",
"jsonschema 3.0.1 pypi_0 pypi\n",
"jupyter-client 5.2.4 pypi_0 pypi\n",
"jupyter-core 4.5.0 pypi_0 pypi\n",
"jupyterhub 1.0.0 pypi_0 pypi\n",
"jupyterlab 1.0.1 pypi_0 pypi\n",
"jupyterlab-server 1.0.0 pypi_0 pypi\n",
"kiwisolver 1.1.0 py36he6710b0_0 \n",
"krb5 1.16.3 h05b26f9_1001 conda-forge\n",
"libarchive 3.3.3 h5d8350f_5 \n",
"libcudf 0.8.0 cuda10.0_0 rapidsai\n",
"libcugraph 0.8.1 cuda10.0_0 rapidsai\n",
"libcuml 0.8.0 cuda10.0_0 rapidsai\n",
"libcumlmg 0.0.0.dev0 cuda10.0_374 nvidia\n",
"libcurl 7.64.1 hda55be3_0 conda-forge\n",
"libedit 3.1.20170329 hf8c457e_1001 conda-forge\n",
"libffi 3.2.1 hfc679d8_5 conda-forge\n",
"libgcc-ng 9.1.0 hdf63c60_0 \n",
"libgfortran 3.0.0 1 conda-forge\n",
"libgfortran-ng 7.3.0 hdf63c60_0 \n",
"libnetcdf 4.6.1 h10edf3e_2 \n",
"libnvstrings 0.8.0 cuda10.0_0 rapidsai\n",
"libpng 1.6.37 hbc83047_0 \n",
"libprotobuf 3.6.1 hdbcaa40_1001 conda-forge\n",
"librmm 0.8.0 cuda10.0_0 rapidsai\n",
"libssh2 1.8.2 h22169c7_2 conda-forge\n",
"libstdcxx-ng 9.1.0 hdf63c60_0 \n",
"libtiff 4.0.9 he6b73bb_1 conda-forge\n",
"libuuid 1.0.3 h1bed415_2 \n",
"libxcb 1.13 h1bed415_1 \n",
"libxml2 2.9.9 hea5a465_1 \n",
"llvmlite 0.29.0 py36hf484d3e_0 numba\n",
"locket 0.2.0 py_2 conda-forge\n",
"lz4-c 1.8.3 he1b5a44_1001 conda-forge\n",
"lzo 2.10 h49e0be7_2 \n",
"mako 1.0.13 pypi_0 pypi\n",
"markupsafe 1.1.1 py36h14c3975_0 conda-forge\n",
"matplotlib 2.2.3 py36hb69df0a_0 \n",
"mistune 0.8.4 pypi_0 pypi\n",
"mkl 2019.4 243 \n",
"mkl_fft 1.0.12 py36ha843d7b_0 \n",
"mkl_random 1.0.2 py36hd81dba3_0 \n",
"more-itertools 7.0.0 py36_0 \n",
"msgpack-python 0.6.1 py36h6bb024c_0 conda-forge\n",
"nbconvert 5.5.0 pypi_0 pypi\n",
"nbformat 4.4.0 pypi_0 pypi\n",
"nbgitpuller 0.6.1 pypi_0 pypi\n",
"nbresuse 0.3.0 pypi_0 pypi\n",
"nccl 1.3.5 cuda10.0_0 \n",
"ncurses 6.1 hfc679d8_2 conda-forge\n",
"netcdf4 1.4.1 py36ha292673_200 conda-forge\n",
"notebook 5.7.8 pypi_0 pypi\n",
"nteract-on-jupyter 2.0.7 pypi_0 pypi\n",
"numba 0.44.1 np116py36hf484d3e_0 numba\n",
"numpy 1.16.4 py36h7e9f1db_0 \n",
"numpy-base 1.16.4 py36hde5b4d6_0 \n",
"nvstrings 0.8.0 py36_0 rapidsai\n",
"oauthlib 3.0.2 pypi_0 pypi\n",
"olefile 0.46 py_0 conda-forge\n",
"openssl 1.1.1c h7b6447c_1 \n",
"owslib 0.18.0 py_0 conda-forge\n",
"packaging 19.0 py36_0 \n",
"pamela 1.0.0 pypi_0 pypi\n",
"pandas 0.24.2 py36hb3f55d8_0 conda-forge\n",
"pandocfilters 1.4.2 pypi_0 pypi\n",
"parquet-cpp 1.5.1 4 conda-forge\n",
"parso 0.5.0 pypi_0 pypi\n",
"partd 1.0.0 py_0 conda-forge\n",
"pcre 8.43 he6710b0_0 \n",
"pexpect 4.7.0 pypi_0 pypi\n",
"pickleshare 0.7.5 pypi_0 pypi\n",
"pillow 5.4.1 py36h34e0f95_0 \n",
"pip 19.1.1 py36_0 conda-forge\n",
"pluggy 0.12.0 py_0 \n",
"proj4 5.2.0 he1b5a44_1003 conda-forge\n",
"prometheus-client 0.7.1 pypi_0 pypi\n",
"prompt-toolkit 2.0.9 pypi_0 pypi\n",
"psutil 5.6.3 py36h516909a_0 conda-forge\n",
"ptyprocess 0.6.0 pypi_0 pypi\n",
"py 1.8.0 py36_0 \n",
"pyarrow 0.12.1 py36hbbcf98d_0 conda-forge\n",
"pycosat 0.6.3 py36h14c3975_1001 conda-forge\n",
"pycparser 2.19 py36_1 conda-forge\n",
"pyepsg 0.4.0 py_0 conda-forge\n",
"pygments 2.4.2 pypi_0 pypi\n",
"pykdtree 1.3.1 py36h3010b51_1002 conda-forge\n",
"pyke 1.1.1 py36_1000 conda-forge\n",
"pyopenssl 19.0.0 py36_0 conda-forge\n",
"pyparsing 2.4.0 py_0 \n",
"pyproj 1.9.6 py36h516909a_1002 conda-forge\n",
"pyqt 5.9.2 py36h05f1152_2 \n",
"pyrsistent 0.15.2 py36h516909a_0 conda-forge\n",
"pyshp 2.1.0 py_0 conda-forge\n",
"pysocks 1.7.0 py36_0 conda-forge\n",
"pytest 5.0.0 py36_0 \n",
"python 3.6.8 h0371630_0 \n",
"python-dateutil 2.8.0 py_0 conda-forge\n",
"python-editor 1.0.4 pypi_0 pypi\n",
"python-libarchive-c 2.8 py36_6 \n",
"pytz 2019.1 py_0 conda-forge\n",
"pyyaml 5.1.1 py36h516909a_0 conda-forge\n",
"pyzmq 18.0.2 pypi_0 pypi\n",
"qt 5.9.7 h5867ecd_1 \n",
"readline 7.0 hf8c457e_1001 conda-forge\n",
"requests 2.22.0 py36_0 conda-forge\n",
"rmm 0.8.0 py36_0 rapidsai\n",
"ruamel_yaml 0.15.71 py36h14c3975_1000 conda-forge\n",
"scipy 1.2.1 py36h7c811a0_0 \n",
"send2trash 1.5.0 pypi_0 pypi\n",
"setuptools 41.0.1 py36_0 conda-forge\n",
"shapely 1.6.4 py36h06cd6f9_1005 conda-forge\n",
"sip 4.19.8 py36hf484d3e_0 \n",
"six 1.12.0 py36_1000 conda-forge\n",
"sortedcontainers 2.1.0 py_0 conda-forge\n",
"sqlalchemy 1.3.5 pypi_0 pypi\n",
"sqlite 3.28.0 h8b20d00_0 conda-forge\n",
"tblib 1.4.0 py_0 conda-forge\n",
"terminado 0.8.2 pypi_0 pypi\n",
"testpath 0.4.2 pypi_0 pypi\n",
"thrift-cpp 0.12.0 h0a07b25_1002 conda-forge\n",
"tk 8.6.9 hed695b0_1002 conda-forge\n",
"toolz 0.9.0 py_1 conda-forge\n",
"tornado 5.1.1 pypi_0 pypi\n",
"tqdm 4.32.1 py_0 \n",
"traitlets 4.3.2 pypi_0 pypi\n",
"udunits2 2.2.27.6 h4e0c4b3_1001 conda-forge\n",
"urllib3 1.24.3 py36_0 conda-forge\n",
"wcwidth 0.1.7 pypi_0 pypi\n",
"webencodings 0.5.1 pypi_0 pypi\n",
"wheel 0.33.4 py36_0 conda-forge\n",
"widgetsnbextension 3.4.2 pypi_0 pypi\n",
"xz 5.2.4 h14c3975_1001 conda-forge\n",
"yaml 0.1.7 h14c3975_1001 conda-forge\n",
"zict 1.0.0 py_0 conda-forge\n",
"zipp 0.5.1 py_0 \n",
"zlib 1.2.11 h14c3975_1004 conda-forge\n",
"zstd 1.3.7 h0b5b093_0 \n",
"--------------------------------------------------------------------------------\n",
"If requested, please copy and paste the information between\n",
"the dashed (----) lines, or from a given specific section as\n",
"appropriate.\n",
"\n",
"=============================================================\n",
"IMPORTANT: Please ensure that you are happy with sharing the\n",
"contents of the information present, any information that you\n",
"wish to keep private you should remove before sharing.\n",
"=============================================================\n",
"\n"
]
}
],
"source": [
"!numba -s"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"jupytext": {
"text_representation": {
"extension": ".py",
"format_name": "percent",
"format_version": "1.2",
"jupytext_version": "1.1.1"
}
},
"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.6.8"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment