diff --git a/.github/workflows/jlse.yaml b/.github/workflows/jlse.yaml
index f8a2bbc2..a44c3be2 100644
--- a/.github/workflows/jlse.yaml
+++ b/.github/workflows/jlse.yaml
@@ -17,16 +17,16 @@ jobs:
run:
working-directory: run/automake
steps:
- # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v2
with:
submodules: recursive
- - name: Update subpackages
+ - name: Update packages
run: |
- (cd ../../analysis/spec/ && python setup.py develop --user --no-deps)
- (cd ../../qtree/ && python setup.py develop --user --no-deps)
+ (cd ../../ && python setup.py develop --user)
+ (cd ../../analysis/spec/ && python setup.py develop --user)
+ (cd ../../qtree/ && python setup.py develop --user)
- name: Remove previous result.md
run: |
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 27a26720..7764edb3 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -15,25 +15,46 @@ jobs:
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest
+ container: robbyjo/ubuntu-mkl:18.04-2019.1
- # Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
+ - name: Setup git
+ run: |
+ yes | apt-get update
+ yes | apt-get install software-properties-common python3 python3-pip
+ yes | add-apt-repository ppa:git-core/ppa
+ yes | apt-get update
+ yes | apt-get install git
+
- uses: actions/checkout@v2
with:
- submodules: recursive
-
- - name: Setup Python
- uses: actions/setup-python@v2
- with:
- python-version: 3.x
+ submodules: recursive
+
+ - name: Link to proper python
+ run: |
+ ln -srf $(which python3) /usr/bin/python
+ ln -srf $(which pip3) /usr/bin/pip
+ which pip3
+ echo $PATH
- name: Setup dependencies
+ env:
+ LC_CTYPE: en_US.UTF-8
+ LANG: en_US.UTF-8
+ LC_ALL: C.UTF-8
run: |
+ pip install --upgrade pip
+ pip install --upgrade setuptools
+ pip --version
pip install .
pip install pytest mock
- cd qtree && pip install .
+ (cd qtree && pip install .)
+ (cd scratchpad/cpp_connections/vanilia/nparray/ && pip install .)
- name: Test
- run: cd qtensor && pytest
+ env:
+ LD_PRELOAD: "/opt/intel/mkl/lib/intel64/libmkl_def.so:/opt/intel/mkl/lib/intel64/libmkl_avx2.so:/opt/intel/mkl/lib/intel64/libmkl_core.so:/opt/intel/mkl/lib/intel64/libmkl_intel_lp64.so:/opt/intel/mkl/lib/intel64/libmkl_intel_thread.so:/opt/intel/lib/intel64_lin/libiomp5.so"
+ LC_ALL: C.UTF-8
+ run: cd qtensor && pytest -s
diff --git a/.gitignore b/.gitignore
index ec0ab8aa..e83b302f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,8 +14,6 @@ dist/
downloads/
eggs/
.eggs/
-lib/
-lib64/
parts/
sdist/
var/
diff --git a/README.md b/README.md
index d7545d40..fc35f7a8 100644
--- a/README.md
+++ b/README.md
@@ -148,3 +148,9 @@ treewidth = opt.treewidth
mems, flops = tn.simulation_cost(peo)
print('Max memory=', max(mems), 'Total flops=', sum(flops))
```
+
+### Use cli to run benchmarks
+
+```bash
+» python -m qtensor.cli generate-qaoa-ansatz-circuit -p 3 -n 24 | python -m qtensor.cli sim-file --profile --max-tw 27
+```
diff --git a/analysis/spec/notebooks/Time_vs_FLOP.ipynb b/analysis/spec/notebooks/Time_vs_FLOP.ipynb
index 77d83c40..36cd5c6d 100644
--- a/analysis/spec/notebooks/Time_vs_FLOP.ipynb
+++ b/analysis/spec/notebooks/Time_vs_FLOP.ipynb
@@ -7,7 +7,7 @@
},
"source": [
"
Table of Contents
\n",
- ""
+ ""
]
},
{
@@ -27,8 +27,8 @@
"execution_count": 1,
"metadata": {
"ExecuteTime": {
- "end_time": "2020-10-07T10:23:46.967223Z",
- "start_time": "2020-10-07T10:23:44.534313Z"
+ "end_time": "2020-10-11T03:32:44.317870Z",
+ "start_time": "2020-10-11T03:32:41.940108Z"
}
},
"outputs": [],
@@ -37,6 +37,7 @@
"import sys\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
+ "import scipy\n",
"\n",
"import qtensor as qt\n",
"from cartesian_explorer import Explorer"
@@ -47,8 +48,8 @@
"execution_count": 2,
"metadata": {
"ExecuteTime": {
- "end_time": "2020-10-07T10:23:46.974535Z",
- "start_time": "2020-10-07T10:23:46.968412Z"
+ "end_time": "2020-10-11T03:32:44.323932Z",
+ "start_time": "2020-10-11T03:32:44.320677Z"
}
},
"outputs": [],
@@ -64,8 +65,8 @@
"execution_count": 3,
"metadata": {
"ExecuteTime": {
- "end_time": "2020-10-07T10:23:46.980521Z",
- "start_time": "2020-10-07T10:23:46.977197Z"
+ "end_time": "2020-10-11T03:32:44.352129Z",
+ "start_time": "2020-10-11T03:32:44.339056Z"
}
},
"outputs": [],
@@ -103,16 +104,17 @@
"execution_count": 4,
"metadata": {
"ExecuteTime": {
- "end_time": "2020-10-07T10:23:46.986625Z",
- "start_time": "2020-10-07T10:23:46.982470Z"
+ "end_time": "2020-10-11T03:32:45.497342Z",
+ "start_time": "2020-10-11T03:32:45.491342Z"
}
},
"outputs": [],
"source": [
"N = 1000\n",
- "p = 4\n",
- "edge_idx = 7\n",
- " "
+ "p = 3\n",
+ "edge_idx = 28\n",
+ "degree = 4\n",
+ " though I do think a nicer treatment of it would probably be "
]
},
{
@@ -120,33 +122,149 @@
"execution_count": 5,
"metadata": {
"ExecuteTime": {
- "end_time": "2020-10-07T10:23:49.052258Z",
- "start_time": "2020-10-07T10:23:48.001942Z"
- },
- "scrolled": false
+ "end_time": "2020-10-11T03:32:46.435411Z",
+ "start_time": "2020-10-11T03:32:46.164940Z"
+ }
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Line graph nodes 1671\n"
+ ]
+ }
+ ],
"source": [
- " \n",
"gamma, beta = [.1]*p, [.3]*p\n",
- "graph = qt.toolbox.random_graph(nodes=N, degree=3)\n",
+ "graph = qt.toolbox.random_graph(nodes=N, degree=degree, seed=108)\n",
"\n",
"comp = qt.QtreeQAOAComposer(graph, gamma=gamma, beta=beta)\n",
"\n",
"comp.energy_expectation_lightcone(list(graph.edges())[edge_idx])\n",
"tn = qt.optimisation.TensorNet.QtreeTensorNet.from_qtree_gates(comp.circuit)\n",
+ "line_graph = tn.get_line_graph()\n",
+ "print('Line graph nodes', line_graph.number_of_nodes())"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Using greedy optimizer"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2020-10-11T03:32:49.121865Z",
+ "start_time": "2020-10-11T03:32:48.199388Z"
+ },
+ "scrolled": false
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "treewidth 21\n"
+ ]
+ }
+ ],
+ "source": [
"opt = qt.optimisation.Optimizer.DefaultOptimizer()\n",
"peo, _ = opt.optimize(tn)\n",
+ "print('treewidth', opt.treewidth)\n",
+ "if opt.treewidth > 100:\n",
+ " raise Exception('Too large treewidth')\n",
"costs, mems = tn.simulation_cost(peo)"
]
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": 7,
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2020-10-11T03:32:50.149626Z",
+ "start_time": "2020-10-11T03:32:49.123067Z"
+ },
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Total FLOPS=0.034049645 G, Memory=0.033554432 G\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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BsYYY8iTgepGjBihlZWVPdq3qamJ0tLSzAaUBYUYdyHGDBZ3NhVizFCYcTc1NbFhw4b9qjoyIwfM9XgYqsq8efO0p1544YUe75tLhRh3IcasanFnUyHGrFqYcb/wwgsKvK79YWwiEVksIncdOnQol2EYY8yAZ20GxhhjcpsMVPUJVV1aUVGRyzCMMWbAy4sG5HgCgQC1tbW0trYm3a6iooL169dnKarMyXTcxcXFjB07Fq833cEyjTEmx8lARBYDi6dMOWLyK2praykvL6eyspLIGFvxNTQ0UF5e3odR9o1Mxq2q1NXVUVtby8SJEzNyTGPMwJK31UStra0MHz48aSIwESLC8OHDuy1FGWNMInndm8gSQersWhljeiNvSwbGGNOfPFLXxL5A/k79YF1Lk7j11luZMWMGY8aM4Zprrsl1OMaYAnUwGOILH+xn8fq9uQ4lobztTZQP/uu//ovnnnuO5557jtdffz3X4RhjClTQGQ90a1v+TlmR120GuXT11VezdetWzjvvPA4ePNi+vKamhjPOOIPZs2dz5plnsn37dgCuuOIKrr76aubPn8+0adN48sknAXjvvfdYsGABc+bMYfbs2WzatCknn8cYkzvRG204jweJzmnJQFWfAJ6YP3/+V5Jtt+9/bqXtw81x14VCIQ653Wmfu2jiFEZelXjGvjvvvJP//d//5YUXXmi/sQN8/etf5/LLL+fyyy9n2bJlXHvttTz22GNAJFG89tprbNmyhdNPP53Nmzdz55138o1vfINLL70Uv99PKJS/dYbGmL7hdjp4HAyF+cqWOu6ePDzHER3J2gzStHr1ai655BIAvvjFL/Lyyx1T+37hC1/A5XIxdepUJk2axIYNGzjppJP46U9/ys0338y2bdsYNGhQrkI3xuRIbF+/ZXsbcxZHMgXRZpDsG3w+PXTWtXuniHDJJZewcOFCnnrqKT71qU/xm9/8hjPOOCNHERpjciGPa4faWZtBmj7+8Y+zYsUKAH7/+99z6qmntq97+OGHCYfDbNmyha1btzJ9+nS2bt3KpEmTuPbaazn//PN55513chW6McYkZM8ZpOm2227jnnvuYfbs2TzwwAPccsst7evGjx/PggULOO+887jzzjspLi5m5cqVzJo1izlz5rBu3Touu+yyHEZvjMkFLYCyQUFUE+VKTU0NEOkpdMUVVwAwYcIE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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plt.plot(costs, label='flops')\n",
+ "plt.plot(mems, label='memory')\n",
+ "plt.yscale('log')\n",
+ "plt.legend()\n",
+ "plt.grid()\n",
+ "plt.title('Simulation cost per step')\n",
+ "print(f'Total FLOPS={sum(costs)/1e9} G, Memory={max(mems)/1e9} G')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Using tamaki optimizer"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2020-10-11T03:25:03.478651Z",
+ "start_time": "2020-10-11T03:24:51.686901Z"
+ },
+ "scrolled": false
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "treewidth 17\n"
+ ]
+ }
+ ],
+ "source": [
+ "opt = qt.optimisation.Optimizer.TamakiOptimizer(wait_time=10)\n",
+ "peo, _ = opt.optimize(tn)\n",
+ "print('treewidth', opt.treewidth)\n",
+ "if opt.treewidth > 100:\n",
+ " raise Exception('Too large treewidth')\n",
+ "costs, mems = tn.simulation_cost(peo)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
"metadata": {
"ExecuteTime": {
- "end_time": "2020-10-07T10:23:50.164426Z",
- "start_time": "2020-10-07T10:23:49.770343Z"
+ "end_time": "2020-10-11T03:25:04.376000Z",
+ "start_time": "2020-10-11T03:25:03.480448Z"
},
"scrolled": true
},
@@ -155,12 +273,12 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "Total FLOPS=0.247250917 G, Memory=0.268435456 G\n"
+ "Total FLOPS=0.002586149 G, Memory=0.002097152 G\n"
]
},
{
"data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXYAAAEICAYAAABLdt/UAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAA28klEQVR4nO3deXxcZbnA8d8za9am6UK6Ny3QAqW1QCk7hJ0iyKbIIlDEy0UFFJdrRUG594KiXjdQC2oBK1JBEVBAFiVApaUsBaQLNC1pm+5JkzT7bO/945xJJ5NJMjOZNXm+n08+nTnLe55zkj7zznve875ijEEppdTQ4ch2AEoppVJLE7tSSg0xmtiVUmqI0cSulFJDjCZ2pZQaYjSxK6XUEKOJXfVJRK4UkefTVPaDIvK/g9i/VUSmpzImpYYKTezDnIicKCKviUiziOwVkX+JyNEAxpiHjTFn5UCM1SLyuchlxpgSY8ymbMUUr1ix5woRqRWRM7Idh0o9V7YDUNkjIiOAvwGfBx4FPMBJQFc241LJERGXMSaQ7ThU9mmNfXibAWCMecQYEzTGdBhjnjfGvAcgIgtFZHl4YxExIvIFEdkgIi0i8j8icqBd498nIo+KiCfWvhH7HxQdhIiUi8jfRGSPiDTaryfZ6+7E+rC5125+uTe6LBEpE5Hf2ftvFpFvi4gjMg4R+ZFd9kcisqCvCyIik0XkcbushojjOexyN4vIbvt4Zfa6AhH5vb19k4i8ISIVfcUedbxK+1yuF5HtIrJDRL4Wsd4hIotEZKNd/qMiMipq3+tEZAvwzxjlj7GvZ5P9jexVu8ylwBTgr3Zs/2Vvf6z9+2wSkXdFpCqirGoR+Z6IrLJ/30+GY1E5xhijP8P0BxgBNAAPAQuA8qj1C4HlEe8N8KS93yysmv0/gOlAGbAWuCbWvhH7H2S/fhD4X/v1aOASoAgoBR4DnojYrxr4XD9l/c6OqxSoBD4ErouIww/8B+DE+nayHZAY18MJvAv8BCgGCoAT7XWfBWrscy0BHgeW2uv+E/irHb8TOAoY0VfsUcestM/lEfuYs4E9wBn2+i8BK4FJgBe4D3gkat/f2fsWxij/e8BiwG3/nBQ+d6A2fBz7/UT77+FcrErfmfb7sRHnsg043D7en4HfZ/vvWH96/2iNfRgzxuwDTsRKDr8G9ojIUyJS0c9uPzDG7DPGrAHeB543xmwyxjQDzwJHJBFHgzHmz8aYdmNMC3AncEo8+4qIE7gM+KYxpsUYUwv8H3BVxGabjTG/NsYEsT7ExgOxznE+MAH4ujGmzRjTaYwJf+u4Evixfa6twDeBy0TEhfXBMRrrgyZojHnLvraJuMM+5r+BB4DL7eU3AN8yxtQZY7qA7wKftI8b9l17344Y5frt851qjPEbY141xvQ1QNRngGeMMc8YY0LGmBeAN7ESfdhSY8z7xpg24DbgUvt3oHKIJvZhzhizzhiz0BgzCasmNgH4aT+77Ip43RHjfUmiMYhIkYjcZzdz7ANeAUbGmTDGYNVEN0cs24xV+wzbGX5hjGm3X8aKczLWh0CsduoJMY7hwvqAWAo8Byyzm1N+ICLuOGKPtDWq7An266nAX+ymkSZgHRCk5wdT5L7Rfoj1TeN5EdkkIov62XYq8KnwsezjnYj1wdBXnG6s34HKIZrYVTdjzHqsJpLDU1BcG1bTBAAiMq6fbb8KzASOMcaMAE4O7xYOrZ9967FqpVMjlk3BajJI1FZgSlRtOGx7jGMEgF12TfgOY8xhwPHAecDVccQeaXJU2dsjYlpgjBkZ8VNgjIk8vz6PYX+L+aoxZjrwCeArInJ6H/ttxaqRRx6r2Bjz/X7i9GP9DlQO0cQ+jInIISLy1YgblZOxmgBWpqD4d4FZIjJXRAqwmhD6UopV22+yb8Z9J2r9Lqy27V7s5pVHgTtFpFREpgJfAX6fRMyrgB3A90Wk2L4peoK97hHgFhGZJiIlwF3AH40xARE5VURm298w9mElu9BAsUe5zf7mMgu4FvijvXyxfW5TAURkrIhcEO8Jich5InKQiAjQjFXb7yu23wPni8jZIuK0z78q/Pdh+4yIHCYiRcB/A3+yfwcqh2hiH95agGOA10WkDSuhv49Vgx4UY8yHWP/xXwQ2AMv72fynQCFWzW8l8Peo9T/DalduFJGfx9j/JqxvCJvs4/wBWJJEzEHgfOAgYAtQB3zaXr0Eq8nlFeAjoNM+LsA44E9YSX0d8LK9bTyxh72M1WTyD+BHxpjwg2E/A57Cakppwbo+xyRwWgdj/Q5agRXAL40xL9nrvgd82252+ZoxZitwAXAr1g3crcDX6ZknlmJ9q9uJdXP55gRiURkSvjuulMoCEanE+qBw99G2nzNEpBqrF8xvsh2L6p/W2JVSaojRxK6UUkOMNsUopdQQozV2pZQaYnJiELAxY8aYysrKpPZta2ujuLg4tQFlQL7GDfkbu8adWfkaN+RP7G+99Va9MWZs9PKcSOyVlZW8+eabSe1bXV1NVVVVagPKgHyNG/I3do07s/I1bsif2EVkc6zl2hSjlFJDjCZ2pZQaYjSxK6XUEJMTbeyx+P1+6urq6Ozs7He7srIy1q1bl6GoUifVcRcUFDBp0iTc7kQHFVRKDTU5m9jr6uooLS2lsrISa/yi2FpaWigtLc1gZKmRyriNMTQ0NFBXV8e0adNSUqZSKn/lbFNMZ2cno0eP7jepK4uIMHr06AG/3SilhoecTeyAJvUE6LVSSoXldGJXSqmh4Pd7WmkNhgbeMEU0sffj5z//OYceeigTJ07kxhtvzHY4Sqk89HpLF9fUNPDFTXszdsycvXmaC375y1/y4osv8uKLLyb9ZKxSanhrC1k19Tpf5obb1xp7H2644QY2bdrEggULaGxs7F5eW1vLaaedxpw5czj99NPZsmULAAsXLuSGG25g3rx5zJgxg7/97W8ArFmzhvnz5zN37lzmzJnDhg0bsnI+SqnscNpT9wYzOJBuXtTY9/z253R9VBNzXTAYpNkZz2T2PXmnHcTY6/qe1Wvx4sX8/e9/56WXXupO0gA33XQT11xzDddccw1Llizh5ptv5oknngCspL9q1So2btzIqaeeSk1NDYsXL+ZLX/oSV155JT6fj2BQp4dUajhx2v0aMvk/X2vsCVqxYgVXXHEFAFdddRXLl++fyvPSSy/F4XBw8MEHM336dNavX89xxx3HXXfdxd13383mzZspLCzMVuhKqSxwSrjGnrkqe17U2PurWefSA0rRXQ5FhCuuuIJjjjmGp59+mnPPPZf77ruP0047LUsRKqUyLdyekMmmGK2xJ+j4449n2bJlADz88MOcdNJJ3esee+wxQqEQGzduZNOmTcycOZNNmzYxffp0br75Zi644ALee++9bIWulMqCcFNMe8iw05eZBpm8qLHnknvuuYdrr72WH/7wh4wdO5YHHnige92UKVOYP38++/btY/HixRQUFPDoo4+ydOlS3G4348aN49Zbb81i9EqpTAs3xazt8DPxrTq6jp2CK80PFGpi70dtbS1g9XhZuHAhAFOnTuWf//xnzO3POOMMFi9e3GPZokWLWLRoUTrDVErlsOiuHf6QweVMb2LXphillEojR1QOz8Tzp1pjT5EHH3ww2yEopfJAJu6hao1dKaXSKDqRhzKQ2TWxK6VUGkUn8kw0xWhiV0qpNDrivR093psMNMZoYldKqQzSphillBpi9OapAiAQyNxwn0qp9Ap0dKT9GJrY+1FbW8shhxzCwoULmTFjBldeeSUvvvgiJ5xwAgcffDCrVq2ira2Nz372s8yfP58jjjiCJ598ErC6P1544YWceeaZVFZWcu+99/LjH/+YI444gmOPPZa9e61B99955x2OPfZY5syZw0UXXdQ9RHBVVRVf/vKXmTdvHnfeeSfTpk3D7/cDsG/fvh7vlVL5IxhK/+3TvOjHfstHe3m33RdzXSAQxOVqS7jMjxV5+Mm0UQNuV1NTw2OPPcaSJUs4+uij+cMf/sDy5ct56qmnuOuuuzjssMM47bTTWLJkCU1NTcyfP58zzjgDgPfff5/Vq1fT2dnJQQcdxN13383q1au55ZZbeOSRR1i0aBFXX30199xzD6eccgq33347d9xxBz/96U8B8Pl83RN81NbW8vTTT3PhhReybNkyLr74Ytxud8LnrZTKLpOBUR61xj6AadOmMXv2bBwOB7NmzeL0009HRJg9eza1tbU8//zzfP/732fu3LlUVVXR2dnZPfnGqaeeSmlpKWPHjqWsrIzzzz8fgNmzZ7Nlyxaam5tpamrilFNOAeCaa67hlVde6T72pz/96e7Xn/vc57rHpXnggQe49tprM3UJlFIpFAqlfyCwvKix91ezTvewvV6vt/u1w+Hofu9wOAgEAjidTv785z8zc+bMHvu9/vrrA+47kOLi4u7XJ5xwArW1tVRXVxMMBjn88MMHdV5KqewIZWCyHa2xD9LZZ5/NPffc0/31avXq1XHvW1ZWRnl5Oa+++ioAS5cu7a69x3L11VdzxRVXaG1dqTymiT0P3Hbbbfj9fubMmcOsWbO47bbbEtr/oYce4utf/zpz5szhnXfe4fbbb+9z2yuvvJLGxkYuv/zywYatlMoSvXmaZZWVlbz//vvd7yMH+opcd9999/XaN3KoX9g/BHB43SWXXALA3LlzWblyZa/9q6urey1bvnw5n/zkJxk5cmRiJ6KUyhkmAzV2Tex54qabbuLZZ5/lmWeeyXYoSqlBCGmNXYXdc8892Q5BKZUCmWhjz+nEbozpNUG0ii0TfWOVUvFrDoR4aE9rr+WZ6O6YszdPCwoKaGho0IQVB2MMDQ0NFBQUZDsUpZTtpo/2ckttY6/lweAwboqZNGkSdXV17Nmzp9/tOjs78zKhpTrugoICJk2alLLylFKDszcQO4Gb4fyAktvtZtq0aQNuV11dzRFHHJGBiFIrX+NWSsWnr0bkTNTYc7YpRiml8llftwe1V4xSSuUZf8jQ2c+9wUw0xaS8xi4iJ4nIYhH5jYi8lurylVIql523fjcjV23N/aYYEVkiIrtF5P2o5eeIyAciUiMiiwCMMa8aY24A/gY8lPqQlVIqd73Y3NnvepOBpph4a+wPAudELhARJ/ALYAFwGHC5iBwWsckVwB9SEKNSSuWdPmvsudIrxhjziohURi2eD9QYYzYBiMgy4AJgrYhMAZqNMS19lSki1wPXA1RUVMQcGyUera2tSe+bTfkaN+Rv7Bp3ZuVr3DDI2L1Wb76G+npwFvdaXVNTQ7Cz/1r9YA3m5ulEYGvE+zrgGPv1dcAD/e1sjLkfuB9g3rx5pqqqKqkgqqurSXbfbMrXuCF/Y9e4Mytf44ZBxr5iMwCvxUjqAJVTK6k66cQkI4tPWnrFGGO+k45ylVIq3wVCuT013jZgcsT7SfYypZRSfegyuXPzNJY3gINFZJqIeIDLgKdSE5ZSSuWfJ/a2D7hNVw51d3wEWAHMFJE6EbnOGBMAbgSeA9YBjxpj1qQvVKWUym2XfND/2FYAvgw0xcTbKybmXGzGmGcAnflBKaWwasoD1cd9uVJjV0opNbB4Zo/ozPE2dqWUUjZ/yBDPo0eZqLHrIGBKKTUIIWNoCxl+t7v3bEmxZKKNXWvsSik1CN/Y3MTIVVvZ5Y+vJt6liV0ppXLbUnte0/Y4B/daXjgqneEAmtiVUmpQwvVvR1y3TuG5EePTF4xNE7tSSg1COLE/sCe+NvZM0MSulFKDEE7sfU1enQ2a2JVSahD6mQUvazSxK6XUIORgXtfErpRSg2ESTO2VLQ1pimQ/TexKKZWkzV0BmoOJJXZP0J+maPbTxK6UUkmo7Qww/e3Ep6AIxtktcjA0sSulVBK2+gJJ7RfSxK6UUkNLUDSxK6VUTko2PWuNXSmlhpiQ1tiVUio3bffFM/p6b5rYlVIqR12+oT7ubT/TWNv9WtvYlVJqCIhMtAbBpHkcAk3sSimVZq6Ip1ODDgeEkmvGiZcmdqWUStBXa/cmtL0zooZuRDABTexKKZVTfrqjJaHtnRGvg+KAYHIPN8VLE7tSSqWZM6IpJiQOTEATu1JK5YxdSXRzjGxjDzicGG1jV0qp3PDXve1MeKsu4f1cEW3sfqcLtMaulFK54fXWrqT2k4i+6yGHgyZ/eofu1cSulFJxcqZonJdFu3wpKacvmtiVUipOziTzevRujV2a2JVSKic4UjQagGh3R6WUyg2OJJtiJGp8GIcJpSKcPmliV0qpOKWqKaYylN6mGFdaS1dKqSHinLW7qO1KsgnFhGg8ejK1u3ZxxBYf04MdqQ0uiiZ2pZSKwwvNncnvHAwxwuWgxGUNLhAM6uiOSimV3+wnTZ0uqy4d1DZ2pZTKrsBgx0+3E7nTadXYQyGtsSulVFY1BgZXww4ncqfTrrGHtMaulFJZNTWJ8WEi+e0KusuuseddYheRKhF5VUQWi0hVqstXSqlM6xpky0m4c6MjfPM0F6bGE5ElIrJbRN6PWn6OiHwgIjUisshebIBWoAAY3MecUkrlmS+WOfnrIQf0WBZO7C6H3caeIzdPHwTOiVwgIk7gF8AC4DDgchE5DHjVGLMA+AZwR+pCVUqp3PfVEcJJI7w9lvmM9YhSeEiCYC7cPDXGvAJET/I3H6gxxmwyxviAZcAFxnR/FDUCXpRSKo991JnYELsi4IkaQsBvP3saniIv3Yl9MA8oTQS2RryvA44RkYuBs4GRwL197Swi1wPXA1RUVFBdXZ1UEK2trUnvm035Gjfkb+wad2bla9zQM/ZlzjJwjYp73zc3bGLkhg3gnba/PL+f6upqfAh4K2lsbk7rtUn5k6fGmMeBx+PY7n7gfoB58+aZqqqqpI5XXV1NsvtmU77GDfkbu8adWfkaN/SM/bW6ZtjaFPe+xx5/HBM8LlixuXuZeLxUVVXhDxl4fQslpaVpvTaD6RWzDZgc8X6SvUwppYYMf4I9WPwxNvdJzzb2UC70iunDG8DBIjJNRDzAZcBTqQlLKaVyQ6KJ3Rej/dxvp9pwws2V7o6PACuAmSJSJyLXGWMCwI3Ac8A64FFjzJr0haqUUpkXSDAHV3p7t3D7xEq1IoIzFCS9M57G2cZujLm8j+XPAM+kNCKllMohiYwT84OWj3A7pvZa7pf9dWh3KIjfpGgqpj7osL1KKRWDMYaf7WjhJzta4t6nr3Ttc+xP7J5QkPROs6FjxSilVEw1nQG+urkxsZ2kj9ReMaH7pZXY01tj18SulFIxtAQTf+y/r3QdLCzufp2JxK5NMUopFeU98dLalPiMSX1V2H0RzfRuE6Krrw1TRBO7UkpFucUzIaGHkgYS2QXSY0Ld3R/TRZtilFIqRSSiiaXcuT+9fmpMUfdrjwl1P7CULlpjV0opoDEQ5MC3t3HFmOKBN7a1zp9Myar9Q2ZF5utt8yZhsB5wKnbsX2El9vTWqTWxK6UU8HqLj+ag4Ve7WuPep9AZnaD3J3CvncwLom6Uiggfjug5XnuqaWJXSg1LH3X6cYgw1X5SNBVTX8TTwvJ2qZXUGwNByl3OAbZOjiZ2pdSwdNDq7QAEj7OeFDUMfvwWSaDtvCsYgjQldr15qpRSkIK0DpLIJNWd7Sk4Ymya2JVSCkjJgIvBYPybBuLfNlHaFKOUGvaOfHc777anYMzFBGrswWBg8Mfrg9bYlVLD3mCS+vLDxzGnq9l6Exq4Fv4l/x4AAmmssWtiV0qpQTiu1MssXxsAwTgS+8FYNXWtsSulVA7z2J1h/HG0xDjsIXxDSQwyFi9N7EopNUjhxO6L4w6sy2ltrDV2pZRKE+eKzYMuw92d2Afe1mEPJ6Bt7EoplSIbO/0Urhx8Mo/kth9M8seYyDqas7spRhO7UkqlxKP17XHVrBPhsceFiWcCDafTeto0kMjDTAnSxK6UGlYcKRox9+eV5d2vPXaNPZ42dkcGauz6gJJSalhJRW22ZpKTaeNHdL8Pj+QYT2/4cFNMUJtilFIqNX65s2XQZUQP9uW2k7XPDPx1wGU3xWhiV0qpFAgZwxZfChJqVP4unmSNEOmccdiAu4abYoLaxq6UUoPXHkevlXhI1AxI3gIvAIGikgH3dTqsGnsojqdUk6WJXSk1bLQFU5XYo5piwt0d4yje6Qz3Y9cau1JKDdoWX2qe9nREJfbu7o5x9IoJd3fUphillEqBZfVtSe97bIln/5uoxH5ksbXuvPLCAcvprrGnMbFrd0ellBrAvGAbrxw+Bc/KLUDvppiZhW7aj5nS3e2xP16nEwjg0xq7UkoNXrJN7J5QEGdEMo81tWk8SR3A67Tq0ztN+tKvJnal1LCRbGI3Ub1pEpm0OprHbSX2m4orky5jIJrYlVJD0hN723lod2uPZcEkp6x2lY3s8T66u2MiCouKkt43XtrGrpQachoDQS75wJqC7uBCF8eXFgDJ19ije8EMosKO15H++rQmdqXUkNMZ0XSy3RfEGEMICMTRHTGm6MQexyiOcRaVFprYlVJDSvTEGZ/+sH7QZU7z9kyVMohat0cTu1JKxWdbV4DfD6Kfen9+NKWs54JBJOfxHivtntxYB0xNvqB+aGJXSg0JV2yoZ3lLV1rKLnK7e7yXQfZBn9m8i2K/b1Bl9Ed7xSilhoTWYPoe+HG6nD3eD7Y1RQykbwgwTexKqSHClca7kuFEGW7icJWW9bVpXJxYN3PTJeWJXUQOFZHFIvInEfl8qstXSqloW7sCvNmWvqaN8EeGJ0Xz6jnIgRq7iCwRkd0i8n7U8nNE5AMRqRGRRQDGmHXGmBuAS4ETUh+yUkr1tK4jnknpkhd+0jQ8t2koyQedwpxAioaGjyneGvuDwDmRC0TECfwCWAAcBlwuIofZ6z4BPA08k7JIlVLDQtAYLv1gDwvW7oq733lRqmaoHoDHzpjxjLveHwektSlGTJwXTkQqgb8ZYw633x8HfNcYc7b9/psAxpjvRezztDHm432Udz1wPUBFRcVRy5YtS+oEWltbKSkZeNaSXJOvcUP+xq5xZ1aycb8rBXzFMx6Ab/j3cFaodYA94B0p4Kv2PoPx6UATjeKkxNfBfGcILyGWO4r5QnAvABvEw1+dpXw50DCoduyvtrjw+jq5a/TgOiaeeuqpbxlj5kUvH0ypE4GtEe/rgGNEpAq4GPDST43dGHM/cD/AvHnzTFVVVVJBVFdXk+y+2ZSvcUP+xq5xZ1ayce9paAP7oaK73WO567heeauXjsYOWL874WNFumH7Gn5xybmAHfspVQDcHLFNFfAfgzqKxfvsSiToStvvNeX92I0x1UB1qstVSg0PydSEO1LQYO3PxLP+NodAII2HG8y3iW3A5Ij3k+xlSimVNGcSCbYtBZNWuGYcPugy4mW1sae/e2Yy3gAOFpFpIuIBLgOeSk1YSqnhKtF01xQIsbCmYdDHDRamfzjdMCfpvXkab3fHR4AVwEwRqROR64wxAeBG4DlgHfCoMWZN+kJVSg0Hibaq/HB7c0qO60925MckWIk9yzV2Y8zlxpjxxhi3MWaSMea39vJnjDEzjDEHGmPuTFuUSqlhI3oyjF/vagFgjz/Iwpp6Nnbu77O+xx/kFztbUnLcQObyOg6BYLYTu1JKZUp0jf2GTXt5samDcW/WsXRPGzNWb+9eN/+9HbQkOHtGia+z+/UB7v0p8KJRmWuKcQGBNPa919EdlVI5JVbb805/7Afwt/gSezBfTIj3/vhdpv7ykSQiSx0PhoA4B94wSZrYlVI5JRijrbsh0DPd1/uDLNk98INL0cSAuNwDb5hmbsDn1MSulBomYtXY10eNBTP1rW10JnmzM9Aw+BmVBssrBr/DhTGmexyaVNI2dqVUTniuqYPZ72znrdb9ozSWOe1Bt6JyeLJJ3WFChNoTr+mnmkcEv8MJofSM8ag1dqVUTjh3nTUkwNqI2vkBDsNol4v2FA2FKCJUfPnbKSlrMLwCPqcbEwggztSnYa2xK6WyqqOfmY8CO7dT7BT2BuKv2Tr6eQpVnE5KTzkrofjSwSNYTTH+9Aw3rIldKZU1b7Z2UbJqKw/vid08csieLYx0Ovh7U2fM9bE4TN+J/ahib8IxpoPX4cDncmEC6Uns2hSj1DBjjOHWLU1UlRVw9sjCrMSwtt3Hx9ft5qLRVt/xZ5s6em3zrReX8vH1K/F+6kJea/XRFTL8ob6NC0YV8p2tPZ82/dK4Un5mP6gUK7F/b8pIji/1Mqso+z1iwJqJKehwEvD50pKEtcau1DDTHjL8YPs+LhjkMLeDccL7O9niC/KzHVYyjjU648fXr2R0+z5KrjqTG8o93DJhBG/MGc+3J43k2BJP93YjO1q45Vff7H4vUUUV+Lv4r4llnDiigHJX+roYJsLrsFJvlzbFKKVSIVyfHewsQIPRGvW06BN7e9fYI9vKfVs/6rMsR8jQtWHd/vdRPWaCjtxI5pHqndY3h8f2BdJSviZ2pYaZdM61mUqRTSqhjvYe60wf2wFI1FgzgTT0Ohmsta5iAH67Lz3dHTWxKzXMDHYi5kyJrHmbzp41+n4Te1SNPRfPNmQ//epM081TTexKDTMJjpmVNZEJu+3t13us8+3eFbFdzxNyZnBc9WSF7KdNoz+EUkUTu1LDTGT9dnNXgKs31PNYQxt31aVmXPNEY+hLdMKOFGze2/3aGVVjT2YGpkxz2DFGx56y8tNSqlIqZ0W2sV9XU8/D9W1c9mE9t21tylpMkSYSYPaOjRQEfLgnTsE1tgLT2UH7e29Rc9HJND/7F0zEWObhWu+Dy74HwEuzKvjGhBHcO20UAP86fFzmT2IAPxhndTNd4GtKS/m5d1dBKZVWkaMnduVIs8yeeZMY5bZ6r7S+Vs3Opd/tXifeAkJdXWz/zi3Wtvf/BK66o3t9uNZ73Ja1+A4vx1nsYXax1R3y8+NKM3QGiZngtVKvS8eKUUqlQuSX/9daunqsc67YTOv8yRQ6HbQGQ5St2sqhhW7WdfgZ6XRQf/QkRITvbGnif7dZTTcfHjGBKR4Xt9Tu5ZH6dprsIQKWEX83Q7dDMMEAH119Pq4Dxncvd9jt5R1rVvfY3kS0tkR2ixRvbjxZOhCny0q9wRRMwh2LNsUoNcwMlEoeabC6Fv7KfpJznT0oV1Mw1D0uejipA5y3bjf/aO7kV7tau5M6wCvO4rhjKnYIGy89g1B7G77aGgA8kysZffUNlJ58Bu5xk3CWle/fIWKSCmdEkhf3/geXcpnTHos9lKabp1pjHwYa/EGmvb2N9pDh5BFefjl9NLPesaYXe+7QA1i0pYmaTj/zS7w8OmMso9/YytcmjOC2SWWUrdrau0DvNFixudfiOUVuxrmd/HnmWIqcvesMX/5oL/dEzU95XImXgwpdLN3TBkD7MVP40fZmbt/azKrZ4ziqpHcNLGAMn/pgD0819uwCd2Kpl8leJ4/Ut3OA28GOeZO5ZkM9v69vY8uRE+O+XkPdQMkkvD5WI4Evxr6tQROzS2G8jQxzTSdbb74aomqv42/7Ie6xFRTNPpKR51/aY533vR3QZg3vWzBxCiMvvBxHcUlaxjZPh3BiD6bpoQJN7MPAL3a20Gb/Ab28r4vvRNwkO3vd/sfK/9HcyR32uh9t38fsBMfVeK/dz3v4+bAzwNzi3jWn6KQOsKK1ixWt+5sDXm/t4nZ7HJAL1+9h67xJvfZZ1+7vldQBlrd0gX2I3f4QnSHD7+utD4zbtzZxVUJnM3QNprtjW4yd2wbZnOCuq8Vf17uiIP3MMNSjH7sIY675/KBiyLT9iT09TTGa2IeB6P+Kf2poj7kdwF/27l9XFqPWHY//2NjAZw8oIWTPDpNIHerUNfv7J2/3B7l1cyMHFrjY4Q8y2eNijz9IvJWy4te3dL9+ZV8XDa7RPFhTjzEwq8iNxy7o5X2dFDmE+kCIE0q9rGr10RIMMd7jpD1kmORx0hQIMdrlZHWbj62+ABeNKuLm8aVcuH4PZ40sYJLHhcGaLGKUy0FDIMQZZQU809hBoVNw29dhnNtJW8hQ6hRWtnRRHwjxtQkjOKbEy8Kaei4dXUy5y4HPGF7e10mJ08FmdwUXb2vmsYZ2Dixw0RQIMcLpYITTesbS6xBea+miMRDi7JGFXDiqiP+pa0IAn4FDC928uq+TQwrdtARDjHb33/b996ZOWoOG52J8eP56VysTPD33bw4antjb+2/qXSnkp9v3Dfh7KvLFHrlRXH2nJxPxzSE/6ug9hbtkpufWqSZ2FWVrxOTAJUkm9rfbfLz90d6BN4zD3XEkhnhs6gqwyTkC7CafvrzYHN/wsPfsbOn+BrKmI/bTg/GWdUttY/fryLbrbo4i3tjSBFjXtj+/3d3Kb6PmAl1t77M1zomf/7K3vccHfKT/2xH79/GbGPOPrnQWsXJzY4yte5q2d0fsFf0MBfD5caX85ybrb+yLOdrzpT/hxB7SGrtKVrI1mkQfPf/U6CKOK/XyldqB/zMP5OGDx/B8UwcPDZCI47Hi8HE8vredH0Z9SHwwdwL37Wrlx30kq0TsPXoyk96qS8lMP3uPnsyoN2Lc20ix/1vxJ05f8SzOUBAjDhwmxIQ774WDDu3epsAh+Iyh1OmgPRjqHjhM7HUG6LTP2SlWbwyHCE7guVde4aQTT4p57G13fIXQ+n/jd7go8fX+ZgD919g/V1HK5yryL6GHhatMsSbuTgVN7KpP/gQrE14RSpOs5Ucrckh3U8lglbscFDh6lzXW7aTMlZpjlLkclDolJYm9zJWZzmruXdsoDIS/AVi1ef+KlxhzyKwe23ntqkGsG+JgNQXFUoLp81z2rH0XQkEKsL7tlJ62AOeIkWBClF/8GTo/XIvDW5DgGeWP8CXTXjEq4/wJ/tF5HII3Bxs8+0o8Hklt+6w3T3pkhMV6ZN+kKdH0tv843ukzqLjpmz3WFs87LkNxZEe6a+zaj30YCDQn1zTS2dyU0PYtL/yVpl/+IKljRdvxvW/i256a5oht112Ev773pBKePhJ+slJdXrrFHIAqTW2+/R1HPPnR9zyVRAQxobTV2DWxDwP+rbVJ7de+bcvAG0VwGIO0xZ67MhmRkycMhjsYoGvTh72Wp3qwqKFQYydjNfb98uWholRzGqNNMbnEGENryLAvEMLrkO4n+YocQpv9sEb4xmPAWF3cslmba3QmN8/jbk9RQv2xUj0EqemKfwLj/niCAbpqa2DC7B7L6751I80HHguHxr7Bl4i6b90IJ3wGyscPvHE8ZZ339UGXM5BYIwsG6nfj37MrxtZJlL+vKa6yhmONHawP1mCaviBpYk/CrVua+EEC3fA+Xl7IU4cckMaI+ratK8CvSycnte+iYFmvZa5goM8Zaaa3NfbZwyFRY9r2Mal5T0rKcgcDjAvFmIIsZJhQuy4liV0cTmbXrmVNChK7OJyM6GxjX0H8j+QnwxNjkoe2VctpW7U8JeWPBzY/MPB2jsL0nmeucpgQgTRNA6KJPQmJJPVpXhfbutIzr2E8NvusY8/YvYXz1q3kwIZtrKuYysTmehqKRrC3aATWjSwhfEOrzVNIZeNOppz5cXyPL6W5oJigOPAG/Jy7fiVPzjqRNk8Bp2x6FwP8bt7ZVLQ08gV3BwXnfZxv/vNhNo0aR0HA311yCOFjOzbS6fbQVFBCsa+TBetf58lZJ9DuKeCSf7/MR6PG8/jhJ/OxHRs5Z+F1HPX2KnzLH6e5oIhOt5diXwc+p5vSznZm1NfR7vGyp3gkY1ubOHPDmzw2pwojwuWr/8HyabP5+8z5nL/2NQ78+e9Y+MqL7H3lMZoKS3CFgpyx4S3G3/0zrnr6T+x66RFGtzdTWz6OMze8SW35ePYUl3FQwzY+GDuFtRVTaXd7Ke9opdDfxebyCsa37GXGnq2snHIYN/3rcSbe/zC3XXsxFa2NTNhXz0fl47lozau8NvVwivydFPh9fDRqPB+OnUxQHBQGuijw+9gxYjSVjTsZ29rEv8dN59Z//p6JS5/kxcvOYelRZ1HR2siuknIuWPMvnp9xNFOaduF3OFl/wFRqy8fhDgUob2/BG/Tz4ZjJlHe0MKl5D+sOmMLnVj1Nod9HffEI/E4XqyYfit/pIigOjtm6jlOnT6bsk5/CUVBAsLmJYOs+nCUjUva3t/6DDzhk5syY60wgQMe6dymYefiQv1HaF3coRCBNj1dpYk+zio1r2DtmPDBh0GV1hkyvbnudIYMvZChxSvfg/ZHb7fRZ3/X+57klzN2xEYAzat6O63jjzziJHetf77X8inf+0eP9nX//LQCO08/F5faw8M2/x31OC996rvt1RWsTx26x29XPOY0iE+TG1/4ad1n/serp7tcLPljFgg9WAdZX/QIT4vMrn+qxvbg9iDi47o1neiyftWv/4+0n1r7f7zGvevuF7tcFLgdfWPFkj/WVjck1a5R1tXPja0/0WBYZ57n2uSXi9JqeIySOPO8OSk44Nan44tHuKmZEVVWf68vOuSBtx84HnlCQLk3suWN0WzMNxb2bKWIp9nexIxBghy/ApLe28eBBo7lqbEn3en/IUPD6Fr47qYzbJo8ErKFTU628o/c4LQMxgcS+aYjDmbr20hTeiHR4Yg/lKh5PSvs7Sr71u+7nASCVfp5QEH+aErv2iknCBWv+Ffe2pW4XfnF0D336YNSj1+HBuX6Uokfn+zKlqXd3v4H49+xMbAcRUpYpU3gjtq8Pm1SPBJhvvTvEEf946Sr13CaET9KTgjWxJ8GfwH+IYkJ0OfquGbWl67Z4lGRSWMODv+y1zFHU940uz9RpOIpL+lyfCOeoMbjH9R7ZMRni9uAaE/vmtXtCcjeWYymc9bGUleUsH5WysvoiBXn2DWOI8Zgg/Y/8kzz9LpYEfz+DE0XziOB3OPq8992WpvGYoxUcMpuSk07HM3EKvi2bcI05gGDLPoIxHkIyXZ24xlbgKCrGUVBEqLMdEwzicHsomnc8bzxwH4dMn0bh4XPBQMtLz+IsK6dswcVgDGO/8F8Edm23a7DW7VNjQngrD8IEA4Ta2nAUFFB01HG0rXwF4+ui+LgqArt30LriZbyVB1Jw0CF4pkxDnE5CHW2EfD4c3gJMIICjsAjPxMmE/D5C+5pxjhhJ4dyjaf3XS2BClJ58Jh1r36N99esUH30C4nIx4tRz+HDtGg6cOB5xuij82DwASo4/ldDn23COKCOweyeFc48msHsnwX1NuMdNxLdtC77NGzE+H46SEhzeQgL1u3CWleMeN5HOmvWMPP9TAIxZ+EXc4yfhGnMA/p3bKDnuFDrXv494CxC3B//Obfi3b4VQCHG7kYIignvrcY05AGfZSHxbayn/1NUATL33Yfb981lc5aNZ/8brfOwz19K++g3cYyswwQC+LbX4d+9AXC4cxVZc/u1bcRQV4Rw1Fv/2LYw46xM4PF6CzU2YUJDOD9ZAKIgJBCg4+FAKD0vdB5FKnNeE6EpTjV0y9whx3+bNm2fefPPNpPatrq6mqp8bNMkwxnDlhnpqOmO3MW/c00BTUXwDEP3njrXcP+4QDiz0dJd3VLGHlpYWSktL6QgZ1trNNEfZY5i/NcAIfsloKWmgaPaRKSkrHdc8EzTuzMrXuCEzsR/13BusLR5Fx4kHJl2GiLxljJkXvVxr7DF0hgx/bGhnRqiTylDvJFu6YyMH1W/jD0ecTrvHmm38Dw//N98+5zo2jZ7Ihe+/SofLCwLnSQsbuoIUzJ1PTWeAqlIPRU4nLhPsHhd7bYefeYUuDrDfF/k6afek7mvy/z77G7j4/JSVp5QaPJ/ThTcYe8jnwdLEHkOnz7rYl1T/ud+ue19/+Y893j/720W9tin7+CXc98KfmHjcoWy99VrKzr+UsZ+9kerqtVQdeiihjnY2XfFJio6Yz4Tbf4QJhdh46ydTe0KA+8YvprxMpVTyjm/ZzR/Lp6al7JQndhGZDnwLKDPGpD5DZUBHlzVVW9mco5j6n9fF3GbPr35E+9u9+3hHE5eLUEc7u3783wA0//VRujauZ2xTM3Uv/Anjs74RtK9eZT1KHuz7Gf4x191M/W9/3mv5+Fu/T8Fhs/noMx+Pud/0ZS/gyJPZ25UaLlwiBBzpaWOPK7GLyBLgPGC3MebwiOXnAD8DnMBvjDHfN8ZsAq4TkT+lI+BM6PLbk+QWFeEeUxFzmwO++A1qr7u4+/2EO37Crp/8D8GmvRQfcxKhTuvR+uKjT6DroxprNLut4D3oEMThxDgcVr/vAqspxz1xitX9zOG0+hcHAvv/xeolMuKs8xGPhz2/+hFFRx4DxhBsbqToyGMQp5OKr9xO01OP4hpbQcAeo6P8ks9oUlcqB7mF7CZ24EHgXuB34QUi4gR+AZwJ1AFviMhTxpi1qQ4y07rsphhvP5NGuEaN4aC/vNJj2bQHnoi57cQ75vZatqG6msOTuDlTdtYnKDvrEzHXlZ50BqUnnZFwmUqpzHM5hKCk51mCuBK7MeYVEamMWjwfqLFr6IjIMuACIK7ELiLXA9cDVFRUUF1dHWfIPbW2tia9b1/q9rXC2NnU79yR8rLD0hF3puRr7Bp3ZuVr3JCZ2Nv27SM0xsE/q6tT/kDRYNrYJwKRMyHUAceIyGjgTuAIEfmmMeZ7sXY2xtwP3A9Wd8dkuhY98eZqXtyxl/IU3ynY6bAewpk+dSpVxx2d2sJt2hUs8zTuzMrXuCEzsf/jGWvMpRNOOrnf1oFkpPzmqTGmAbgh1eXG8tcdjTxYeVRayvYE/BxYUZ6WspVSymW3rwf8frzO1N4HG0xi3wZEPo89yV6WMYsXnMRlL7/MySeenPKyHU7B7UpuggqllBpIOLH7An6KyZ3E/gZwsIhMw0rolwFXpCSqOLldbtxOF15vfg2+pJRS4cTu96X+SfO4GnZE5BFgBTBTROpE5DpjTAC4EXgOWAc8aoxZk/IIlVJqCApPl+n3p34innh7xVzex/JngGdirVNKKdU3l9Pq6ugLpj6x67C9SimVBZE3T1NNE7tSSmWBx2W3sSc4U1k8NLErpVQWuOwJe9LRxq6JXSmlssDt0jZ2pZQaUsI19oDW2JVSamgI19j9/QzVnSxN7EoplQUFo8YAIAeMT3nZmtiVUioLvCUlAJiy1I9JpYldKaWywCXWk6cBY1JetiZ2pZTKApeV1/GnPq9rYldKqWwY63JyyagiDnCnfhallI/HrpRSamAHF7p5dObYtJStNXallBpiNLErpdQQo4ldKaWGGE3sSik1xGhiV0qpIUYTu1JKDTGa2JVSaojRxK6UUkOMmDSMU5BwECJ7gM1J7j4GqE9hOJmSr3FD/saucWdWvsYN+RP7VGNMr6ecciKxD4aIvGmMmZftOBKVr3FD/saucWdWvsYN+R07aFOMUkoNOZrYlVJqiBkKif3+bAeQpHyNG/I3do07s/I1bsjv2PO/jV0ppVRPQ6HGrpRSKoImdqWUGmLyOrGLyDki8oGI1IjIomzHE0lEJovISyKyVkTWiMiX7OXfFZFtIvKO/XNuxD7ftM/lAxE5O4ux14rIv+343rSXjRKRF0Rkg/1vub1cROTndtzviciRWYp5ZsQ1fUdE9onIl3P1eovIEhHZLSLvRyxL+BqLyDX29htE5Josxf1DEVlvx/YXERlpL68UkY6Ia784Yp+j7L+xGvvcJAtxJ/y3kcs5pwdjTF7+AE5gIzAd8ADvAodlO66I+MYDR9qvS4EPgcOA7wJfi7H9YfY5eIFp9rk5sxR7LTAmatkPgEX260XA3fbrc4FnAQGOBV7PgWvvBHYCU3P1egMnA0cC7yd7jYFRwCb733L7dXkW4j4LcNmv746IuzJyu6hyVtnnIva5LchC3An9beR6zon8yeca+3ygxhizyRjjA5YBF2Q5pm7GmB3GmLft1y3AOmBiP7tcACwzxnQZYz4CarDOMVdcADxkv34IuDBi+e+MZSUwUkTGZyG+SKcDG40x/T3NnNXrbYx5BdgbI6ZErvHZwAvGmL3GmEbgBeCcTMdtjHneGBOw364EJvVXhh37CGPMSmNl0t+x/1zToo/r3Ze+/jZyOudEyufEPhHYGvG+jv4TZ9aISCVwBPC6vehG+2vrkvDXbXLrfAzwvIi8JSLX28sqjDE77Nc7gQr7dS7FHXYZ8EjE+1y/3mGJXuNcPIfPYtXAw6aJyGoReVlETrKXTcSKNSybcSfyt5GL1zumfE7seUFESoA/A182xuwDfgUcCMwFdgD/l73o+nSiMeZIYAHwRRE5OXKlXcvKyX6yIuIBPgE8Zi/Kh+vdSy5f476IyLeAAPCwvWgHMMUYcwTwFeAPIjIiW/HFkJd/G/HI58S+DZgc8X6SvSxniIgbK6k/bIx5HMAYs8sYEzTGhIBfs//rf86cjzFmm/3vbuAvWDHuCjex2P/utjfPmbhtC4C3jTG7ID+ud4REr3HOnIOILATOA660P5SwmzIa7NdvYbVPz7BjjGyuyUrcSfxt5Mz1Hkg+J/Y3gINFZJpdS7sMeCrLMXWz7/L/FlhnjPlxxPLI9ueLgPBd+qeAy0TEKyLTgIOxbjBllIgUi0hp+DXWjbH37fjCvS6uAZ60Xz8FXG333DgWaI5oTsiGy4lohsn16x0l0Wv8HHCWiJTbzQhn2csySkTOAf4L+IQxpj1i+VgRcdqvp2Nd40127PtE5Fj7/8nV7D/XTMad6N9GTuecHrJ993YwP1i9BT7Eqgl8K9vxRMV2ItZX6feAd+yfc4GlwL/t5U8B4yP2+ZZ9Lh+Q5l4C/cQ9Hetu/7vAmvB1BUYD/wA2AC8Co+zlAvzCjvvfwLwsXvNioAEoi1iWk9cb68NnB+DHaqu9LplrjNWmXWP/XJuluGuw2p7Df+eL7W0vsf+G3gHeBs6PKGceViLdCNyL/RR8huNO+G8jl3NO5I8OKaCUUkNMPjfFKKWUikETu1JKDTGa2JVSaojRxK6UUkOMJnallBpiNLErpdQQo4ldKaWGmP8Hj46b6Iz+R+UAAAAASUVORK5CYII=\n",
+ "image/png": "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\n",
"text/plain": [
""
]
@@ -195,14 +313,25 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 8,
"metadata": {
"ExecuteTime": {
- "end_time": "2020-10-07T07:23:49.308184Z",
- "start_time": "2020-10-07T07:23:48.102918Z"
+ "end_time": "2020-10-11T03:33:13.080314Z",
+ "start_time": "2020-10-11T03:33:10.463143Z"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([-0.14101067-3.12250226e-17j])"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"backend = qt.PerfNumpyBackend(print=False)\n",
"sim = qt.QtreeSimulator(bucket_backend=backend)\n",
@@ -224,15 +353,35 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 9,
"metadata": {
"ExecuteTime": {
- "end_time": "2020-10-07T07:24:09.759656Z",
- "start_time": "2020-10-07T07:24:08.942804Z"
+ "end_time": "2020-10-11T03:33:14.381426Z",
+ "start_time": "2020-10-11T03:33:13.081720Z"
},
"scrolled": true
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Total time=1.9989681243896484\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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nQcffJD777+fp556KrWCaIL45BO45x7429/gtdcC4+basdAqFCYOW0qzwtLqCuuuYknJKs1QolU3njVrFm+YtU4MvF4vV155JQsXLqSqqor58+dTVVXF+vXrOeWUU4J+ampqePvtt6moqKCsLDkXR7pp/N/rtK1cETTmbQ2/Icdix19vYeNl58SfGEL9K8/Q8MrTNLzxYty5HRvWsPvxuWFKzNfWitdYFJl7kDJqbYUqQGMNdvvP+fwTdO7Yisco+RJaddhKaLl62aGWL4tYBcp6CJtRPkZaFMvQoSoWlWrFksz/g8ltt93GlVdemVpBNEFEC9Kbnl4RydUAOISXFHYKSWlJl2TprivMv0oTpVDOBX7cXaEMLXtqVkgtkalTp7Jx48agsc8++4xx48YxZoxyZ5x77rm89NJLHH744bxq1jaxUFlZSUtLC1VVVeTk5DB9+nRsIemmc+fOZe5cVbPN7XbHNC0j+mClj2EP3EHjodNo3v9QCpa8T8u+h+DLzQOvF9O4SdhklT6G3X8nNk/w48y6r7+iKTdQ/yWiLD6f/3wti99X533vveiPTREYsGwpucDmzxbzxYBAqpituRFXzXbax0z0jw3/128RUvL14FE0dwSu3fB7fudP961t6yAPaCsoIauxgfojT6D4Q5Ug6M3Owd4eWMfy+asvUQps2LyZLysrcezZRWgIfunLz9M+KpApYWtpYhiwdtMWWizXozf8/K6tmygDln+ymI7tgdhNefmBfPyxpLJyRULyeDwepkyZ4n8/Z84c5swJdpkn8/8wadIkbrzxRk4++WQOMvPcNT1CPMeATUTWPDbhw5PYsqmMJ5l04/nANKBUCFEN/FZK+bAQwlylaQce6coqzVAMLftKXl7eJfHmbt26lRGW2iPl5eV8GhpksPDHP/4RgHnz5lFaWhqmVCD4nzgvLy+qz1N2uvlw4escNW0a0htw1/haW1j/rzaKFy1k8onT2frJewyTHobe+Ec89XvYaOyfqC+1c+c2NnnCbeSRZYMotRwjkj/Y21jPhpD9jjpkSlBBRc/uWjZefBZDf/NX8gxronPXTmzZudjy8tn4n3/iBQprt7G/5fhbbriMjm+rGP3469iNoo1r71L/VUcecggfLF/B0UcfTePbr1BrPorZbAwfP4H6VSsoGTyYYfeo8svrPqtEut1klwwMcveNz8ti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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
"source": [
"profile_results = backend._profile_results\n",
"step_times = [x[1] for x in profile_results.values()]\n",
@@ -271,11 +420,11 @@
},
{
"cell_type": "code",
- "execution_count": 23,
+ "execution_count": 10,
"metadata": {
"ExecuteTime": {
- "end_time": "2020-10-07T10:32:30.352158Z",
- "start_time": "2020-10-07T10:32:30.333400Z"
+ "end_time": "2020-10-11T03:33:18.651384Z",
+ "start_time": "2020-10-11T03:33:18.636636Z"
}
},
"outputs": [],
@@ -297,15 +446,19 @@
" return qt.optimisation.TensorNet.QtreeTensorNet.from_qtree_gates(circuit)\n",
"\n",
"@ex.provider\n",
- "def peo(tn):\n",
- " opt = qt.optimisation.Optimizer.DefaultOptimizer()\n",
+ "def peo(tn, ordering_algo='greedy', tamaki_wait_time=15):\n",
+ " if ordering_algo=='greedy':\n",
+ " opt = qt.optimisation.Optimizer.DefaultOptimizer()\n",
+ " elif 'tamaki' in ordering_algo:\n",
+ " if '_' in ordering_algo:\n",
+ " _, time_str = ordering_algo.split('_')\n",
+ " tamaki_wait_time=int(time_str)\n",
+ " opt = qt.optimisation.Optimizer.TamakiOptimizer(wait_time=tamaki_wait_time)\n",
" peo, _ = opt.optimize(tn)\n",
" return tuple(peo)\n",
"\n",
"@ex.provider\n",
"def sim_costs(tn, peo):\n",
- " opt = qt.optimisation.Optimizer.DefaultOptimizer()\n",
- " peo, _ = opt.optimize(tn)\n",
" costs, mems = tn.simulation_cost(peo)\n",
" return costs, mems\n",
"\n",
@@ -317,11 +470,11 @@
},
{
"cell_type": "code",
- "execution_count": 24,
+ "execution_count": 11,
"metadata": {
"ExecuteTime": {
- "end_time": "2020-10-07T10:32:30.486762Z",
- "start_time": "2020-10-07T10:32:30.475258Z"
+ "end_time": "2020-10-11T03:33:19.218710Z",
+ "start_time": "2020-10-11T03:33:19.214736Z"
}
},
"outputs": [],
@@ -340,11 +493,11 @@
},
{
"cell_type": "code",
- "execution_count": 27,
+ "execution_count": 12,
"metadata": {
"ExecuteTime": {
- "end_time": "2020-10-07T10:33:46.364675Z",
- "start_time": "2020-10-07T10:33:46.361706Z"
+ "end_time": "2020-10-11T03:33:19.709292Z",
+ "start_time": "2020-10-11T03:33:19.687803Z"
}
},
"outputs": [],
@@ -355,23 +508,24 @@
},
{
"cell_type": "code",
- "execution_count": 30,
+ "execution_count": 13,
"metadata": {
"ExecuteTime": {
- "end_time": "2020-10-07T10:35:58.030517Z",
- "start_time": "2020-10-07T10:35:57.468824Z"
- }
+ "end_time": "2020-10-11T03:33:34.270292Z",
+ "start_time": "2020-10-11T03:33:20.397957Z"
+ },
+ "scrolled": false
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "38797a3855c44faf80bd24f505fa9b8d",
+ "model_id": "aacd4f2ba12c42098133c49a47077d7c",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
- "HBox(children=(FloatProgress(value=0.0, max=120.0), HTML(value='')))"
+ "HBox(children=(FloatProgress(value=0.0, max=40.0), HTML(value='')))"
]
},
"metadata": {},
@@ -386,7 +540,7 @@
},
{
"data": {
- "image/png": "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\n",
+ "image/png": "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\n",
"text/plain": [
""
]
@@ -399,7 +553,7 @@
],
"source": [
"fig = ex.plot_variables2d(('sum_flops', 'max_mem'), n=[N], p=[3],\n",
- " d=[3,4], edge_idx=range(30),\n",
+ " d=[3,4], edge_idx=range(10),\n",
" seed=[SEED]\n",
" )\n",
"for ax in fig.axes:\n",
@@ -407,6 +561,62 @@
" ax.grid()"
]
},
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2020-10-11T03:32:05.580417Z",
+ "start_time": "2020-10-11T03:32:05.034225Z"
+ },
+ "scrolled": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "58766bb48c1142a885c375dc4a55818c",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "HBox(children=(FloatProgress(value=0.0, max=40.0), HTML(value='')))"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "fig = ex.plot_variables2d(('sum_flops', 'max_mem'), n=[N], p=[3],\n",
+ " d=[3,4], edge_idx=range(10)\n",
+ " ,seed=[SEED]\n",
+ " ,ordering_algo=['tamaki_5']\n",
+ " )\n",
+ "for ax in fig.axes:\n",
+ " ax.set_yscale('log')\n",
+ " ax.grid()"
+ ]
+ },
{
"cell_type": "markdown",
"metadata": {
@@ -428,56 +638,43 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2020-10-07T07:43:46.450025Z",
- "start_time": "2020-10-07T07:43:46.445069Z"
- }
- },
- "outputs": [],
- "source": [
- "#export\n",
- "EDGE_IDX_FOR_SEED = {\n",
- " 107: [2, 3, 10, 15]\n",
- "}\n",
- "\n",
- "EDGE_IDX_FOR_SEED_JLSE = {\n",
- " 107: [2, 4, 8, 14, 15, 21]\n",
- "}"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
+ "execution_count": 14,
"metadata": {
"ExecuteTime": {
- "end_time": "2020-10-07T07:39:58.442055Z",
- "start_time": "2020-10-07T07:39:58.439007Z"
+ "end_time": "2020-10-11T03:33:37.905921Z",
+ "start_time": "2020-10-11T03:33:37.897612Z"
}
},
"outputs": [],
"source": [
- "edge_indices = EDGE_IDX_FOR_SEED[SEED]\n",
+ "edge_indices = [2]\n",
"ds = [3, 4]\n",
"p = 3"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 15,
"metadata": {
"ExecuteTime": {
- "end_time": "2020-10-07T08:17:25.827182Z",
- "start_time": "2020-10-07T08:17:25.810647Z"
+ "end_time": "2020-10-11T03:33:45.437646Z",
+ "start_time": "2020-10-11T03:33:45.430812Z"
}
},
"outputs": [],
"source": [
"#export\n",
"@ex.provider\n",
- "def sim_profile(circuit, tn):\n",
- " backend = qt.PerfNumpyBackend(print=False)\n",
+ "def sim_profile(circuit, tn, backend='numpy'):\n",
+ " if backend == 'numpy':\n",
+ " backend = qt.PerfNumpyBackend(print=False)\n",
+ " elif backend == 'mkl':\n",
+ " backend = qt.ProcessingFrameworks.PerfBackend.from_backend(\n",
+ " qt.ProcessingFrameworks.CMKLExtendedBackend, print=False)\n",
+ " elif backend == 'debug_mkl':\n",
+ " backend = qt.DebugFrameworks.DebugMKLBackend()\n",
+ " elif backend == 'exatn':\n",
+ " backend = qt.ProcessingFrameworks.PerfBackend.from_backend(qt.ProcessingFrameworks.ExaTnBackend, print=False)\n",
" sim = qt.QtreeSimulator(bucket_backend=backend)\n",
"\n",
" sim.simulate(circuit)\n",
@@ -493,58 +690,159 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 16,
"metadata": {
"ExecuteTime": {
- "end_time": "2020-10-07T07:40:00.853291Z",
- "start_time": "2020-10-07T07:40:00.237722Z"
+ "end_time": "2020-10-11T03:33:47.801203Z",
+ "start_time": "2020-10-11T03:33:47.289919Z"
},
"scrolled": false
},
- "outputs": [],
- "source": [
- "f = ex.draw_dependency_graph(figsize=(7,6), node_size=20)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2020-10-07T07:40:01.553712Z",
- "start_time": "2020-10-07T07:40:01.484774Z"
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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1uvStm1bwsLCqFOnDi1btiQ6OtrRRkJCAr1798bf35+goCCOHDnipLvNv5TIiIhInhMTE8PAgQNZsmQJv/zyC3fddRenT592XD99+jRbtmxhwYIF+Pj48O2337Jjxw52795NdHQ0X3zxhaPshg0bmDhxIvv27aNr164MGTLEcW3btm28/vrr7Nmzh5CQECZOnJij9ylKZEREJA/avHkzAQEB3HXXXQAMGDCAggULOq6Hh4djsVgASE1NZdSoUQQGBlKvXj22b99OZGSko2yzZs0cJ1YPGTKEiIgI7HY7AE2bNqVatWqO7w8fPpwTtydX0M6+IiKS73h5eTm+f+edd4iJiWHLli14eHjwzDPPcOHChUzV4+Hh4fjearVqzo0TqEdGRETynCZNmrB7924OHjwIwPz580lOTk63bFxcHOXKlcPDw4M///yTxYsXX3V906ZNHDhwAIBZs2bRpk0brFZr9t6AZJp6ZEREJM8pU6YMs2bNolu3bhQqVIj27dvj5eWFj4/PNWWfeuopevToQd26dalQoQIhISFXXW/WrBmjRo3i0KFDlCxZkrlz5+bQXUhmWIwxNy5ksXgD8fHx8Xh7e2d/VCIiIrfp3LlzFC1aFIClS5fywgsvsH///puqY86cOSxdupSlS5dmQ4RyPWfPnqVYsWIAxYwxZzMqpx4ZERHJk95//30+//xz7HY73t7eLFiwwNkhSTZQj4yIiIjkOpntkdFkXxEREXFZGloSEZE8xxhz1VJoq9WKm5v+754X6XdVRETylF69euHm5kbBggVp06YNbm5uSmLyMPXIiIhInrB161batm1LYmIiBQsWZMmSJXTu3NnZYUk2U4oqIiIur1u3bjRu3JjExETatGnD+fPnlcTkE+qRERERl7Vhwwbat29PUlIShQoV4ttvv6V9+/bODktykHpkRETE5djtdrp06UKLFi1ISkoiNDSUxMREJTH5kHpkRETEpURERNCpUycuXLiAh4cH33//Pa1bt3Z2WOIk6pERERGXYLfbCQkJoU2bNly4cIEuXbqQlJSkJCafU4+MiIjkeqtWreLuu+/m4sWLFClShB9//JHmzZs7OyzJBdQjIyIiuZbdbqdVq1aEhoZy8eJFunfvTmJiopIYcVCPjIiI5ErLly/nvvvuIzk5GU9PT/7zn//QoEEDZ4cluYx6ZEREJFex2+00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yrJlyzh27BijR48mIiKC5s2b4+fnx9SpUzl9+nS2xhAXF5du0rRt2zYaNmzIo48+mmNJlYhIZrh8IrNnzx6aN29OYGAg9erVo1+/fjRr1oy6devi5+dHWFgY7u7uLF++nK+//pqAgADq1q3Lww8/fNUyWLvdTr169QgNDeW9997LcFgJYNq0adStW5d69eoxZswY3n777Wy5txEjRtC+fXvHZN9bNWXKFAoXLozNZiMgIIB27doRHR2ddYFKlqtQoQIvvvgihw8f5scff6Ru3bo899xz3HHHHY6Jw9mRUFyZ3F/JbrcDaZvi3W5PoohIVsqTy69vlpY5iyuIiYlh7ty5zJw5k99++40aNWowaNAgwsPDKVu2bJa0ceedd3LkyJGr3rNaraSmpvLkk0/y+uuva1dfEckR+Wb5tUh+UaZMGUaOHMmBAweIiIigcePGjBs3jooVK3LfffexcuVKR8/JrTp79uqfFW5ublSuXJn169czdepUJTEikuuoRyYDMTExhIaGXvN++/bteeutt7KsnaFDh6Y7x2bTpk0ULlw4y9qRvCk2Npb58+czc+ZM9u7dS5UqVXj44Yd56KGHqFix4k3X5+HhwcWLFx2T3YcPH86rr76qBEZEclxme2SUyIjkAcYYtmzZwsyZM1m0aBEXLlygc+fODB48mM6dO+PufuOdFlJSUihQoAAA1apVY/78+TRr1iy7QxcRSZeGlnLAxYsXWbduHZGRkVrJkcsdOnSIgQMHOuUMrpxgsVgcuwT/8ccffPDBB/zxxx/cc889VKlShTFjxnD06FFH+f+d43UO+BSYhMWylsKFPejevTu//vqrkhgRcQnqkblFqampdOrUid27d7N7925Kly7t7JDyCQOsB74GUoAuQAcyysmjo6N55ZVX+PTTT0lNTaVz586sWLEix6J1tl27djFz5kzmz59PQkICISEhDB48mJ49exIX9w0+Pg+SlsxYATvQBPge8HFi1CIiGlrKdlOmTOGZZ57hhx9+SHcujWQHAwwBZoFjU+oUoCtpiU0BR8kTJ07w6quv8vHHH2OMcUyC7dChAytXrszRqHODxMREvvjiC2bOnMmmTZsAqFvXgru7oUIFqFQJDh2C48fBz68yixZFUbBgQSdHLSL5WWYTGZc/osAZdu3axahRoxgxYoSSmGxisVh48cUXWbFiBYmJiYwb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VQtvb29mz57teO/QoUPExsbedt379+8nMDDwtusRuRF3Zwcgkhv16NGDH374gZCQkGuujR49moMHD1KwYEGKFCnChx9+CMBzzz1Hr1698Pf3p27dujRu3DhHYi1dujQLFiygf//+pKSkULx4cRYvXuzogahbty5z5szhySefpGDBgnz22WdYLBa+/PJL5s+fT8GCBUlNTWX69OnX1H3y5Enc3W/8YyKjuu69917mzZuHzWaje/fuvPTSSyxcuJBHHnmE8+fPk5ycTL169Vi4cOF1YwUoAqwGfv7vVwng0n/fS8/YsWN58sknHUNu999/Pz179nRcr127Ns2bNyc2NpZ77rmHBx54gJMnT9KjRw8SExOxWCz4+vpe1Ttx2S+//EKDBg1u+Fwyy9/fnwceeIC6detSsmRJunXr5ri2fPlyVq5cydatWylSpAjvvPMOPXv2ZOPGjbc97OXu7s7y5csZPnw4U6ZMwW63U6pUKcfvx62Kjo7GbrcrkZEcYTH/nal/3UIWizcQHx8fj7e3d/ZHJeJkCQkJNGvWjE2bNuHp6enscG5ZREQEw4cPv2q+xc146623KF++fIZnHmWl2431ZrRu3Zrhw4dflTBklt1up0mTJmzZsgU3N3Vqp+f555+nRo0aDBo0yNmhiAs7e/bs5ZWRxYwxZzMqpx4ZkXR4eXkxZcoUjh49ip+fn7PDcZpnn33W2SHkOlarlW3btjk7jFytQoUKDBw40NlhSD6hHhmRXCQsLMyxguey4sWLO+aN5Effffcdo0ePvub9F154wbGiJj+aNWtWuvN03n//fYKDg50QkUjWymyPjBIZERERyXUym8hogFdERERclhIZERERcVlKZERERMRlKZERERERl6VERkRERFyWEhkRERFxWUpkRERExGUpkRERERGXpURGREREXJYSGREREXFZSmRERETEZSmREREREZelREZERERclhIZERERcVlKZERERMRlKZERERERl6VERkRERFyWEhkRERFxWUpkRERExGUpkRERERGXpURGREREXJYSGREREXFZSmRERETEZSmREREREZelREZERERclhIZERERcVlKZERERMRlKZERERERl6VERkRERFyWEhkRERFxWe43U/js2bPZFYeIiIiIQ2ZzDosx5saFLJY7gBO3GZOIiIjIzapojDmZ0cXMJjIWoAJwLgsDExEREbmeosApc51kJVOJjIiIiEhupMm+IiIi4rKUyIiIiIjLUiIjIiIiLkuJjIiIiLgsJTIiIiLispTIiIiIiMtSIiMiIiIu6/8BeVD535L6ZT0AAAAASUVORK5CYII=\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
}
- },
- "outputs": [],
+ ],
"source": [
- "estimators = ex.map_variable('step_flops', d=ds, edge_idx=edge_indices, n=[N], p=[p])"
+ "f = ex.draw_dependency_graph(figsize=(7,6), node_size=20)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 21,
"metadata": {
"ExecuteTime": {
- "end_time": "2020-10-07T07:40:03.546159Z",
- "start_time": "2020-10-07T07:40:02.010399Z"
+ "end_time": "2020-10-11T03:34:24.680002Z",
+ "start_time": "2020-10-11T03:34:24.650994Z"
},
"scrolled": false
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "1b32ab81edaf452eaf14d5c7e462e6e0",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "HBox(children=(FloatProgress(value=0.0, max=2.0), HTML(value='')))"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "1192070"
+ ]
+ },
+ "execution_count": 21,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
- "times = ex.map_variable('step_sim_time', d=ds, edge_idx=edge_indices, n=[N], p=[p])"
+ "estimators = ex.map_variable('step_flops', d=ds, edge_idx=edge_indices,\n",
+ " n=[N], p=[p], seed=[SEED]\n",
+ " )\n",
+ "max(np.max(estimators))"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 19,
"metadata": {
"ExecuteTime": {
- "end_time": "2020-10-07T07:40:04.393623Z",
- "start_time": "2020-10-07T07:40:04.134441Z"
- }
+ "end_time": "2020-10-11T03:34:04.920612Z",
+ "start_time": "2020-10-11T03:34:03.202761Z"
+ },
+ "scrolled": false
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "9b287cacb9c2431aacc94463a54cee33",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "HBox(children=(FloatProgress(value=0.0, max=2.0), HTML(value='')))"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/home/dali/side-projects-hobby/cartesian_explorer/cartesian_explorer/ExplorerBasic.py:72: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray\n",
+ " result = np.array(list(tqdm(\n"
+ ]
+ }
+ ],
+ "source": [
+ "times = ex.map_variable('step_sim_time', d=ds, edge_idx=edge_indices,\n",
+ " n=[N], p=[p], seed=[SEED], backend=['mkl'])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2020-10-11T03:34:27.480257Z",
+ "start_time": "2020-10-11T03:34:27.300743Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Text(0, 0.5, 'Runtime')"
+ ]
+ },
+ "execution_count": 22,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
"source": [
"est_flat = np.concatenate(estimators.flatten())\n",
"times_flat = np.concatenate(times.flatten())\n",
@@ -576,48 +874,79 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 27,
"metadata": {
"ExecuteTime": {
- "end_time": "2020-10-07T08:20:00.827753Z",
- "start_time": "2020-10-07T08:20:00.819148Z"
+ "end_time": "2020-10-11T03:38:15.650497Z",
+ "start_time": "2020-10-11T03:38:15.632471Z"
}
},
"outputs": [],
"source": [
"#export\n",
"def plot_with_filter(est_flat, times_flat):\n",
- " filt = (est_flat>1e4) #& (times_flat>1e-4)\n",
+ " filt = (est_flat>5e4) #& (times_flat>1e-4)\n",
" est_flat_filtered = est_flat[filt]\n",
" times_flat_filtered = times_flat[filt]\n",
"\n",
" # Fit times\n",
" log_fit_coef = np.polyfit(np.log(est_flat_filtered), np.log(times_flat_filtered), 1)\n",
" fit_coef = np.polyfit(est_flat_filtered, times_flat_filtered, 1)\n",
+ " def fixed_slope(x, shift):\n",
+ " slope = 1.0\n",
+ " return x*slope + shift\n",
+ " popt, pcov = scipy.optimize.curve_fit(fixed_slope, np.log(est_flat_filtered), np.log(times_flat_filtered))\n",
" print('Lin fit:', fit_coef)\n",
" print('Log fit:', log_fit_coef)\n",
+ " print('Slope-1 log fit:', popt)\n",
" fit_fn = np.poly1d(log_fit_coef)\n",
+ " fit_fn = fixed_slope\n",
"\n",
" # Plot scatter with filtered data\n",
- " plt.scatter(est_flat_filtered, times_flat_filtered)\n",
- " xfit = 10**np.linspace(4, 7, 100)\n",
- " plt.plot(xfit, np.exp(fit_fn(np.log(xfit))), color='blue')\n",
+ " plt.scatter(est_flat_filtered, times_flat_filtered, marker='x')\n",
+ " min_x = np.log10(est_flat_filtered.min())\n",
+ " max_x = np.log10(est_flat_filtered.max()) + .5\n",
+ " xfit = 10**np.linspace(min_x, max_x, 100)\n",
+ " plt.plot(xfit, np.exp(fit_fn(np.log(xfit), popt[0])), color='blue')\n",
" plt.loglog()\n",
" plt.xlabel('estimated FLOP')\n",
" plt.ylabel('Runtime')\n",
+ " plt.grid()\n",
" return log_fit_coef, fit_coef"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 28,
"metadata": {
"ExecuteTime": {
- "end_time": "2020-10-07T08:20:00.986928Z",
- "start_time": "2020-10-07T08:20:00.964812Z"
+ "end_time": "2020-10-11T03:38:17.235983Z",
+ "start_time": "2020-10-11T03:38:16.590680Z"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Lin fit: [ 3.95588723e-08 -8.67827872e-03]\n",
+ "Log fit: [ 1.29641774 -22.79449518]\n",
+ "Slope-1 log fit: [-19.11949889]\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
"source": [
"log_fit_coef, fit_coef = plot_with_filter(est_flat, times_flat)"
]
@@ -638,14 +967,22 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 29,
"metadata": {
"ExecuteTime": {
- "end_time": "2020-10-07T07:40:10.141424Z",
- "start_time": "2020-10-07T07:40:10.138386Z"
+ "end_time": "2020-10-11T03:38:42.394084Z",
+ "start_time": "2020-10-11T03:38:42.385458Z"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Factual FLOPS on a laptop 3.333333e+07\n"
+ ]
+ }
+ ],
"source": [
"FLOP = 1e6/.03\n",
"print(f'Factual FLOPS on a laptop {FLOP:e}')"
@@ -660,29 +997,52 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 30,
"metadata": {
"ExecuteTime": {
- "end_time": "2020-10-07T07:40:12.055353Z",
- "start_time": "2020-10-07T07:40:12.050244Z"
+ "end_time": "2020-10-11T03:38:43.794429Z",
+ "start_time": "2020-10-11T03:38:43.789660Z"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Factual FLOPS on a laptop, from log fit 7.934571e+09\n"
+ ]
+ }
+ ],
"source": [
"FLOP_logfit = np.exp(-log_fit_coef[1])\n",
"print(f'Factual FLOPS on a laptop, from log fit {FLOP_logfit:e}')"
]
},
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Compare with matrix multiplication"
+ ]
+ },
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 31,
"metadata": {
"ExecuteTime": {
- "end_time": "2020-10-07T07:40:16.520371Z",
- "start_time": "2020-10-07T07:40:12.850181Z"
+ "end_time": "2020-10-11T03:38:51.089545Z",
+ "start_time": "2020-10-11T03:38:47.401257Z"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "4.45 ms ± 487 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
+ ]
+ }
+ ],
"source": [
"N = 500\n",
"matmul_flop = N**2*(N-1)\n",
@@ -690,69 +1050,80 @@
"%timeit np.matmul(x,y)"
]
},
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "#### Compare with matrix multiplication"
- ]
- },
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 32,
"metadata": {
"ExecuteTime": {
- "end_time": "2020-10-07T07:40:19.790768Z",
- "start_time": "2020-10-07T07:40:19.787939Z"
+ "end_time": "2020-10-11T03:38:51.102068Z",
+ "start_time": "2020-10-11T03:38:51.090876Z"
}
},
"outputs": [],
"source": [
- "FLOPS_matmul = matmul_flop/4.65e-3\n",
- "print(f'FLOPS on this laptop for matrix mul: {FLOPS_matmul:e}')"
+ "#export\n",
+ "import timeit\n",
+ "def get_log_flops_vs_matmul(log_fit_coef):\n",
+ " FLOPS_logfit = np.exp(-log_fit_coef[1])\n",
+ "\n",
+ " N = 500\n",
+ " matmul_flop = N**2*(N-1)\n",
+ " x, y = np.random.randn(2, N, N)\n",
+ " number = 100\n",
+ " matmul_time = timeit.timeit(lambda: np.matmul(x,y)\n",
+ " , number=number)/number\n",
+ "\n",
+ " FLOPS_matmul = matmul_flop/matmul_time\n",
+ " \n",
+ " return FLOPS_logfit, FLOPS_matmul"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 33,
"metadata": {
"ExecuteTime": {
- "end_time": "2020-10-07T07:40:20.329754Z",
- "start_time": "2020-10-07T07:40:20.326436Z"
+ "end_time": "2020-10-11T03:38:51.944811Z",
+ "start_time": "2020-10-11T03:38:51.106891Z"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Simulator inefficiency: 1.9337510525337913\n",
+ "Simulator optimality: 0.5171296474226614\n"
+ ]
+ }
+ ],
"source": [
+ "FLOP_logfit, FLOPS_matmul = get_log_flops_vs_matmul(log_fit_coef)\n",
"print(f'Simulator inefficiency: {FLOPS_matmul/FLOP_logfit}')\n",
"print(f'Simulator optimality: {FLOP_logfit/FLOPS_matmul}')"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 34,
"metadata": {
"ExecuteTime": {
- "end_time": "2020-10-07T08:25:27.943213Z",
- "start_time": "2020-10-07T08:25:27.939822Z"
+ "end_time": "2020-10-11T03:38:52.758397Z",
+ "start_time": "2020-10-11T03:38:52.744737Z"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "FLOPS on this laptop for matrix mul: 2.682796e+10\n"
+ ]
+ }
+ ],
"source": [
- "#export\n",
- "import timeit\n",
- "def get_log_flops_vs_matmul(log_fit_coef):\n",
- " FLOPS_logfit = np.exp(-log_fit_coef[1])\n",
- "\n",
- " N = 300\n",
- " matmul_flop = N**2*(N-1)\n",
- " x, y = np.random.randn(2, N, N)\n",
- " number = 100\n",
- " matmul_time = timeit.timeit(lambda: np.matmul(x,y)\n",
- " , number=number)/number\n",
- "\n",
- " FLOPS_matmul = matmul_flop/matmul_time\n",
- " \n",
- " return FLOPS_logfit, FLOPS_matmul"
+ "FLOPS_matmul = matmul_flop/4.65e-3\n",
+ "print(f'FLOPS on this laptop for matrix mul: {FLOPS_matmul:e}')"
]
},
{
@@ -771,14 +1142,52 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 51,
"metadata": {
"ExecuteTime": {
- "end_time": "2020-10-07T08:14:59.391811Z",
- "start_time": "2020-10-07T08:14:59.381070Z"
+ "end_time": "2020-10-11T03:19:32.887639Z",
+ "start_time": "2020-10-11T03:19:32.862780Z"
}
},
- "outputs": [],
+ "outputs": [
+ {
+ "ename": "NameError",
+ "evalue": "name 'FLOPS_matmul' is not defined",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[0;31m--------------------------------------------------------------------------\u001b[0m",
+ "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
+ "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf'Simulator inefficiency: {FLOPS_matmul/FLOP_logfit}'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf'Simulator optimality: {FLOP_logfit/FLOPS_matmul}'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;31mNameError\u001b[0m: name 'FLOPS_matmul' is not defined"
+ ]
+ }
+ ],
+ "source": [
+ "print(f'Simulator inefficiency: {FLOPS_matmul/FLOP_logfit}')\n",
+ "print(f'Simulator optimality: {FLOP_logfit/FLOPS_matmul}')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2020-10-11T03:39:10.751939Z",
+ "start_time": "2020-10-11T03:39:10.718466Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 35,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# export\n",
"import click\n",
@@ -787,9 +1196,20 @@
"def cli():\n",
" pass\n",
"\n",
- "@cli.command()\n",
- "@click.argument('filename')\n",
- "def time_vs_flops_plot(filename):\n",
+ "@click.argument('filename', nargs=-1)\n",
+ "@click.option('-B', '--backend', default='numpy')\n",
+ "@click.option('-M', '--max-memory', default=3e8)\n",
+ "@click.option('-s', '--seed', default=SEED)\n",
+ "@click.option('-O', '--ordering_algo', default='greedy'\n",
+ " ,help=(\"One of (greedy, tamaki, tamaki_{wait_time})\"\n",
+ " \"'tamaki_15' means heuristic solver running for 15 seconds per graph\"\n",
+ " )\n",
+ " )\n",
+ "@click.option('--min-memory', default=3e6)\n",
+ "def time_vs_flops_plot(filename=None, backend='numpy', seed=SEED,\n",
+ " max_memory=2e8, min_memory=1e6,\n",
+ " ordering_algo='greedy'\n",
+ " ):\n",
" \"\"\"\n",
" Plots times and estimated FLOP for each step of several QAOA energy computation contractions.\n",
" \n",
@@ -799,34 +1219,200 @@
" - N = 1000\n",
" \n",
" \"\"\"\n",
- " edge_indices = EDGE_IDX_FOR_SEED[SEED]\n",
" ds = [3, 4]\n",
" p = 3\n",
" N = 1000\n",
" \n",
- " estimators = ex.map_variable('step_flops', d=ds,\n",
- " edge_idx=edge_indices, n=[N], p=[p], seed=[SEED])\n",
- " maxmems = ex.map_variable('max_mem', d=ds,\n",
- " edge_idx=edge_indices, n=[N], p=[p], seed=[SEED])\n",
- " if np.max(maxmems)>1e10:\n",
- " print('memory estimations:', maxmems)\n",
- " raise Exception('Will get too large tetsors!!')\n",
+ " edges_to_try = 20\n",
+ " estimators, maxmems = ex.map_variables(\n",
+ " ('step_flops', 'max_mem'),\n",
+ " d=ds,\n",
+ " edge_idx=range(edges_to_try), n=[N], p=[p],\n",
+ " seed=[seed],\n",
+ " ordering_algo=[ordering_algo],\n",
+ " )\n",
+ " \n",
+ " \n",
+ " selector = ((min_memory < maxmems) & (maxmems < max_memory)).all(axis=0)\n",
+ " edge_indices = np.arange(edges_to_try)[selector]\n",
+ " print('Selected edges', edge_indices)\n",
+ " print('Estimated memories', maxmems.T[selector].flatten())\n",
+ " estimators = estimators.T[selector]\n",
" \n",
" times = ex.map_variable('step_sim_time', d=ds,\n",
- " edge_idx=edge_indices, n=[N], p=[p], seed=[SEED])\n",
+ " edge_idx=edge_indices, n=[N], p=[p]\n",
+ " ,seed=[seed]\n",
+ " ,backend=[backend]\n",
+ " ,ordering_algo=[ordering_algo]\n",
+ " )\n",
" \n",
- " est_flat = np.concatenate(estimators.flatten())\n",
+ " est_flat = np.concatenate(estimators.T.flatten())\n",
" times_flat = np.concatenate(times.flatten())\n",
" \n",
" log_fit_coef, fit_coef = plot_with_filter(est_flat, times_flat)\n",
- " plt.savefig(filename)\n",
+ " if filename:\n",
+ " plt.savefig(filename[0])\n",
" \n",
" fit, matmul = get_log_flops_vs_matmul(log_fit_coef)\n",
" \n",
" print('===Results===')\n",
+ " print(f'Total time: {times_flat.sum():.5}')\n",
" print(f'Simulator fitted flops: {fit/1e9:.5} G')\n",
" print(f'Matmul flops: {matmul/1e9:.5} G')\n",
- " print(f'Simulator optimality: {fit/matmul}')"
+ " print(f'Simulator optimality: {fit/matmul}')\n",
+ "\n",
+ "cli.command()(time_vs_flops_plot)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 36,
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2020-10-11T03:39:58.588851Z",
+ "start_time": "2020-10-11T03:39:12.389753Z"
+ },
+ "scrolled": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "00c65522a7cd40e4999f31e3da7ba01f",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "HBox(children=(FloatProgress(value=0.0, max=40.0), HTML(value='')))"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Selected edges [ 0 2 3 4 10 13 16]\n",
+ "Estimated memories [27262976 1310720 7864320 37748736 11534336 16777216 46137344 436207616\n",
+ " 3145728 83886080 2621440 14680064 13631488 5767168]\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/home/dali/side-projects-hobby/cartesian_explorer/cartesian_explorer/ExplorerBasic.py:72: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray\n",
+ " result = np.array(list(tqdm(\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "6a05b71100b745a3a8b1674130988427",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "HBox(children=(FloatProgress(value=0.0, max=14.0), HTML(value='')))"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Lin fit: [2.11670890e-08 6.72474995e-03]\n",
+ "Log fit: [ 1.33334429 -23.18701601]\n",
+ "Slope-1 log fit: [-18.95265756]\n",
+ "===Results===\n",
+ "Total time: 9.8551\n",
+ "Simulator fitted flops: 11.749 G\n",
+ "Matmul flops: 28.388 G\n",
+ "Simulator optimality: 0.41387031429035953\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "fbf71d18456449bc8d67fa0bdb46cee5",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "HBox(children=(FloatProgress(value=0.0, max=40.0), HTML(value='')))"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Selected edges [ 0 2 3 4 10 13 16]\n",
+ "Estimated memories [27262976 1310720 7864320 37748736 11534336 16777216 46137344 436207616\n",
+ " 3145728 83886080 2621440 14680064 13631488 5767168]\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/home/dali/side-projects-hobby/cartesian_explorer/cartesian_explorer/ExplorerBasic.py:72: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray\n",
+ " result = np.array(list(tqdm(\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "7894f510be9e4a9fbc9687a923902b5e",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "HBox(children=(FloatProgress(value=0.0, max=14.0), HTML(value='')))"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Lin fit: [ 1.61124218e-08 -1.83452513e-03]\n",
+ "Log fit: [ 1.25167296 -22.48619316]\n",
+ "Slope-1 log fit: [-19.28927764]\n",
+ "===Results===\n",
+ "Total time: 6.3469\n",
+ "Simulator fitted flops: 5.8295 G\n",
+ "Matmul flops: 23.118 G\n",
+ "Simulator optimality: 0.2521579552905311\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "time_vs_flops_plot(max_memory=5e8, min_memory=1e6)\n",
+ "time_vs_flops_plot(max_memory=5e8, min_memory=1e6, backend='mkl')"
]
},
{
@@ -838,11 +1424,11 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 37,
"metadata": {
"ExecuteTime": {
- "end_time": "2020-10-07T08:24:00.725270Z",
- "start_time": "2020-10-07T08:24:00.720844Z"
+ "end_time": "2020-10-11T03:41:01.528110Z",
+ "start_time": "2020-10-11T03:41:01.526254Z"
}
},
"outputs": [],
@@ -853,11 +1439,11 @@
},
{
"cell_type": "code",
- "execution_count": 35,
+ "execution_count": 39,
"metadata": {
"ExecuteTime": {
- "end_time": "2020-10-07T11:26:28.836173Z",
- "start_time": "2020-10-07T11:26:28.792839Z"
+ "end_time": "2020-10-11T04:13:46.365119Z",
+ "start_time": "2020-10-11T04:13:46.294641Z"
}
},
"outputs": [
@@ -865,6 +1451,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
+ "Converted QAOA_bench.ipynb.\n",
"Converted Time_vs_FLOP.ipynb.\n"
]
}
@@ -901,7 +1488,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.8.5"
+ "version": "3.7.6"
},
"toc": {
"base_numbering": 1,
@@ -919,7 +1506,7 @@
"width": "165px"
},
"toc_section_display": true,
- "toc_window_display": true
+ "toc_window_display": false
}
},
"nbformat": 4,
diff --git a/analysis/spec/qtensor_specs/_nbdev.py b/analysis/spec/qtensor_specs/_nbdev.py
index f5881898..560d8c9b 100644
--- a/analysis/spec/qtensor_specs/_nbdev.py
+++ b/analysis/spec/qtensor_specs/_nbdev.py
@@ -12,8 +12,6 @@
"step_flops": "Time_vs_FLOP.ipynb",
"max_mem": "Time_vs_FLOP.ipynb",
"SEED": "Time_vs_FLOP.ipynb",
- "EDGE_IDX_FOR_SEED": "Time_vs_FLOP.ipynb",
- "EDGE_IDX_FOR_SEED_JLSE": "Time_vs_FLOP.ipynb",
"sim_profile": "Time_vs_FLOP.ipynb",
"step_sim_time": "Time_vs_FLOP.ipynb",
"plot_with_filter": "Time_vs_FLOP.ipynb",
diff --git a/analysis/spec/qtensor_specs/time_vs_flop.py b/analysis/spec/qtensor_specs/time_vs_flop.py
index 0c6d16d8..18dbe9c6 100644
--- a/analysis/spec/qtensor_specs/time_vs_flop.py
+++ b/analysis/spec/qtensor_specs/time_vs_flop.py
@@ -1,13 +1,13 @@
# AUTOGENERATED! DO NOT EDIT! File to edit: notebooks/Time_vs_FLOP.ipynb (unless otherwise specified).
__all__ = ['ex', 'graph', 'circuit', 'tn', 'peo', 'sim_costs', 'sum_flops', 'step_flops', 'max_mem', 'SEED',
- 'EDGE_IDX_FOR_SEED', 'EDGE_IDX_FOR_SEED_JLSE', 'sim_profile', 'step_sim_time', 'plot_with_filter',
- 'get_log_flops_vs_matmul', 'cli', 'time_vs_flops_plot']
+ 'sim_profile', 'step_sim_time', 'plot_with_filter', 'get_log_flops_vs_matmul', 'cli', 'time_vs_flops_plot']
# Cell
import sys
import numpy as np
import matplotlib.pyplot as plt
+import scipy
import qtensor as qt
from cartesian_explorer import Explorer
@@ -37,15 +37,19 @@ def tn(circuit):
return qt.optimisation.TensorNet.QtreeTensorNet.from_qtree_gates(circuit)
@ex.provider
-def peo(tn):
- opt = qt.optimisation.Optimizer.DefaultOptimizer()
+def peo(tn, ordering_algo='greedy', tamaki_wait_time=15):
+ if ordering_algo=='greedy':
+ opt = qt.optimisation.Optimizer.DefaultOptimizer()
+ elif 'tamaki' in ordering_algo:
+ if '_' in ordering_algo:
+ _, time_str = ordering_algo.split('_')
+ tamaki_wait_time=int(time_str)
+ opt = qt.optimisation.Optimizer.TamakiOptimizer(wait_time=tamaki_wait_time)
peo, _ = opt.optimize(tn)
return tuple(peo)
@ex.provider
def sim_costs(tn, peo):
- opt = qt.optimisation.Optimizer.DefaultOptimizer()
- peo, _ = opt.optimize(tn)
costs, mems = tn.simulation_cost(peo)
return costs, mems
@@ -68,19 +72,16 @@ def max_mem(sim_costs):
# Cell
SEED=107
-# Cell
-EDGE_IDX_FOR_SEED = {
- 107: [2, 3, 10, 15]
-}
-
-EDGE_IDX_FOR_SEED_JLSE = {
- 107: [2, 4, 8, 14, 15, 21]
-}
-
# Cell
@ex.provider
-def sim_profile(circuit, tn):
- backend = qt.PerfNumpyBackend(print=False)
+def sim_profile(circuit, tn, backend='numpy'):
+ if backend == 'numpy':
+ backend = qt.PerfNumpyBackend(print=False)
+ elif backend == 'mkl':
+ backend = qt.ProcessingFrameworks.PerfBackend.from_backend(
+ qt.ProcessingFrameworks.CMKLExtendedBackend, print=False)
+ elif backend == 'debug_mkl':
+ backend = qt.DebugFrameworks.DebugMKLBackend()
sim = qt.QtreeSimulator(bucket_backend=backend)
sim.simulate(circuit)
@@ -95,24 +96,33 @@ def step_sim_time(sim_profile, tn):
# Cell
def plot_with_filter(est_flat, times_flat):
- filt = (est_flat>1e4) #& (times_flat>1e-4)
+ filt = (est_flat>5e4) #& (times_flat>1e-4)
est_flat_filtered = est_flat[filt]
times_flat_filtered = times_flat[filt]
# Fit times
log_fit_coef = np.polyfit(np.log(est_flat_filtered), np.log(times_flat_filtered), 1)
fit_coef = np.polyfit(est_flat_filtered, times_flat_filtered, 1)
+ def fixed_slope(x, shift):
+ slope = 1.0
+ return x*slope + shift
+ popt, pcov = scipy.optimize.curve_fit(fixed_slope, np.log(est_flat_filtered), np.log(times_flat_filtered))
print('Lin fit:', fit_coef)
print('Log fit:', log_fit_coef)
+ print('Slope-1 log fit:', popt)
fit_fn = np.poly1d(log_fit_coef)
+ fit_fn = fixed_slope
# Plot scatter with filtered data
- plt.scatter(est_flat_filtered, times_flat_filtered)
- xfit = 10**np.linspace(4, 7, 100)
- plt.plot(xfit, np.exp(fit_fn(np.log(xfit))), color='blue')
+ plt.scatter(est_flat_filtered, times_flat_filtered, marker='x')
+ min_x = np.log10(est_flat_filtered.min())
+ max_x = np.log10(est_flat_filtered.max()) + .5
+ xfit = 10**np.linspace(min_x, max_x, 100)
+ plt.plot(xfit, np.exp(fit_fn(np.log(xfit), popt[0])), color='blue')
plt.loglog()
plt.xlabel('estimated FLOP')
plt.ylabel('Runtime')
+ plt.grid()
return log_fit_coef, fit_coef
# Cell
@@ -120,7 +130,7 @@ def plot_with_filter(est_flat, times_flat):
def get_log_flops_vs_matmul(log_fit_coef):
FLOPS_logfit = np.exp(-log_fit_coef[1])
- N = 300
+ N = 500
matmul_flop = N**2*(N-1)
x, y = np.random.randn(2, N, N)
number = 100
@@ -138,9 +148,20 @@ def get_log_flops_vs_matmul(log_fit_coef):
def cli():
pass
-@cli.command()
-@click.argument('filename')
-def time_vs_flops_plot(filename):
+@click.argument('filename', nargs=-1)
+@click.option('-B', '--backend', default='numpy')
+@click.option('-M', '--max-memory', default=3e8)
+@click.option('-s', '--seed', default=SEED)
+@click.option('-O', '--ordering_algo', default='greedy'
+ ,help=("One of (greedy, tamaki, tamaki_{wait_time})"
+ "'tamki_15' means heuristic solver running for 15 seconds per graph"
+ )
+ )
+@click.option('--min-memory', default=3e6)
+def time_vs_flops_plot(filename=None, backend='numpy', seed=SEED,
+ max_memory=2e8, min_memory=1e6,
+ ordering_algo='greedy', tamaki_time=10
+ ):
"""
Plots times and estimated FLOP for each step of several QAOA energy computation contractions.
@@ -150,31 +171,46 @@ def time_vs_flops_plot(filename):
- N = 1000
"""
- edge_indices = EDGE_IDX_FOR_SEED[SEED]
ds = [3, 4]
p = 3
N = 1000
- estimators = ex.map_variable('step_flops', d=ds,
- edge_idx=edge_indices, n=[N], p=[p], seed=[SEED])
- maxmems = ex.map_variable('max_mem', d=ds,
- edge_idx=edge_indices, n=[N], p=[p], seed=[SEED])
- if np.max(maxmems)>1e10:
- print('memory estimations:', maxmems)
- raise Exception('Will get too large tetsors!!')
+ edges_to_try = 20
+ estimators, maxmems = ex.map_variables(
+ ('step_flops', 'max_mem'),
+ d=ds,
+ edge_idx=range(edges_to_try), n=[N], p=[p],
+ seed=[seed],
+ ordering_algo=[ordering_algo],
+ )
+
+
+ selector = ((min_memory < maxmems) & (maxmems < max_memory)).all(axis=0)
+ edge_indices = np.arange(edges_to_try)[selector]
+ print('Selected edges', edge_indices)
+ print('Estimated memories', maxmems.T[selector].flatten())
+ estimators = estimators.T[selector]
times = ex.map_variable('step_sim_time', d=ds,
- edge_idx=edge_indices, n=[N], p=[p], seed=[SEED])
+ edge_idx=edge_indices, n=[N], p=[p]
+ ,seed=[seed]
+ ,backend=[backend]
+ ,ordering_algo=[ordering_algo]
+ )
- est_flat = np.concatenate(estimators.flatten())
+ est_flat = np.concatenate(estimators.T.flatten())
times_flat = np.concatenate(times.flatten())
log_fit_coef, fit_coef = plot_with_filter(est_flat, times_flat)
- plt.savefig(filename)
+ if filename:
+ plt.savefig(filename[0])
fit, matmul = get_log_flops_vs_matmul(log_fit_coef)
print('===Results===')
+ print(f'Total time: {times_flat.sum():.5}')
print(f'Simulator fitted flops: {fit/1e9:.5} G')
print(f'Matmul flops: {matmul/1e9:.5} G')
- print(f'Simulator optimality: {fit/matmul}')
\ No newline at end of file
+ print(f'Simulator optimality: {fit/matmul}')
+
+cli.command()(time_vs_flops_plot)
\ No newline at end of file
diff --git a/bench/mklbench/bench.cpp b/bench/mklbench/bench.cpp
index 1ef73012..eb2489e0 100644
--- a/bench/mklbench/bench.cpp
+++ b/bench/mklbench/bench.cpp
@@ -157,29 +157,20 @@ int main(void)
// transa transb M N K
int i;
- run_size(do_trans, no_trans, 4096);
-
-// for (i = 10; i >= -10; i--)
-// run_size(do_trans, no_trans, 4096 + i);
-// for (i = 10; i >= -10; i--)
-// run_size(do_trans, no_trans, 2048 + i);
-// for (i = 10; i >= -10; i--)
-// run_size(do_trans, no_trans, 1024 + i);
-// for (i = 10; i >= -10; i--)
-// run_size(do_trans, no_trans, 256 + i);
-// for (i = 10; i >= -10; i--)
-// run_size(do_trans, no_trans, 128 + i);
-// for (i = 10; i >= -10; i--)
-// run_size(do_trans, no_trans, 32 + i);
-//
-// for (i = 4096; i >= 512; i -= 256)
-// run_size(no_trans, no_trans, i, i, i);
-//
-// for (i = 512; i >= 64; i -= 32)
-// run_size(no_trans, no_trans, i, i, i);
-
-// for (i = 64; i >= 16; i -= 1)
-// run_size(no_trans, no_trans, i, i, i);
+ //run_size(no_trans, do_trans, 4096, 4096, 4096);
+ run_size(no_trans, do_trans, 4096, 1, 4096);
+ //run_size(no_trans, do_trans, 1000, 1000, 1000);
+ run_size(no_trans, do_trans, 1000, 1, 1000);
+
+ // for (i = 4096; i >= 512; i -= 256)
+ // run_size(no_trans, no_trans, i, i, i);
+
+ //for (i = 512; i >= 64; i -= 32)
+ // run_size(no_trans, no_trans, i, i, i);
+
+ //for (i = 64; i >= 16; i -= 1)
+ // run_size(no_trans, no_trans, i, i, i);
+
return EXIT_SUCCESS;
}
diff --git a/bench/pybench/tn_bench.py b/bench/pybench/tn_bench.py
index ec728b68..8f2617e3 100644
--- a/bench/pybench/tn_bench.py
+++ b/bench/pybench/tn_bench.py
@@ -29,6 +29,6 @@ def run(n, num_iter, num_batch):
if __name__ == "__main__":
tn.set_default_backend(sys.argv[1])
- for i in range(4102, 4090 - 1, -1):
- run(i, 20, 1)
+ for i in range(4120, 4082 - 2, -2):
+ run(i, 10, 1)
diff --git a/data/README.md b/data/README.md
new file mode 100644
index 00000000..914b9cc8
--- /dev/null
+++ b/data/README.md
@@ -0,0 +1 @@
+debugging backend and mkl_verbose add 3 seconds to a 18 senond task
diff --git a/data/debug_log_matched.log b/data/debug_log_matched.log
new file mode 100644
index 00000000..61efd8e7
--- /dev/null
+++ b/data/debug_log_matched.log
@@ -0,0 +1,1181 @@
+==
+PROF:: Bucket contains: [XPhase+(v_1827,v_1828), E162(v_1827), E1817(v_1827,v_1828,v_1829,v_1830,v_1831,v_1832,v_1833,v_1834,v_1835,v_1836,v_1837,v_1839,v_1840,v_1843,v_1844,v_1849,v_1856,v_1860), E1820(v_1827,v_1828,v_1829,v_1830,v_1831,v_1832,v_1833,v_1834,v_1835,v_1836,v_1837,v_1842,v_1847,v_1851,v_1852,v_1855,v_1859,v_1861,v_1864,v_1865,v_1866)]
+ Starting debug_mkl_contract, input sizes: 4 2 output: 4
+ * Dimensions: C[0]:2 C[1]:2 C[2]:1
+ MKL_VERBOSE ZGEMM(N,T,1,2,1,0x7ffc3fd2db50,0x4c0f190,1,0x4d90500,2,0x7ffc3fd2db60,0x4d8ff30,1) 5.28us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1,2,1,0x7ffc3fd2db50,0x4c0f1a0,1,0x4d90520,2,0x7ffc3fd2db60,0x4d8ff50,1) 253ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ Duration: 0 milliseconds
+ After debug_mkl_contract, duration: 7.963180541992188e-05
+ Starting debug_mkl_contract, input sizes: 4 262144 output: 262144
+ Dimensions: C[0]:4 C[1]:1 C[2]:65536
+ MKL_VERBOSE ZGEMM(N,T,65536,1,1,0x7ffc3fd2db50,0xaea0390,65536,0x4d8ff30,1,0x7ffc3fd2db60,0xb2a03a0,65536) 127.61us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,65536,1,1,0x7ffc3fd2db50,0xafa0390,65536,0x4d8ff40,1,0x7ffc3fd2db60,0xb3a03a0,65536) 740.05us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,65536,1,1,0x7ffc3fd2db50,0xb0a0390,65536,0x4d8ff50,1,0x7ffc3fd2db60,0xb4a03a0,65536) 55.17us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,65536,1,1,0x7ffc3fd2db50,0xb1a0390,65536,0x4d8ff60,1,0x7ffc3fd2db60,0xb5a03a0,65536) 180.17us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ Duration: 1 milliseconds
+ After debug_mkl_contract, duration: 0.001222372055053711
+ Starting debug_mkl_contract_sum, input sizes: 262144 2097152 output: 134217728
+ * Dimensions: f:1024 k:2 n:1024 m:128
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5dfff010,1048576,0xb2a03a0,131072,0x7ffc3fd2dde0,0x7f58dbff5010,1024) 1.05ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e003010,1048576,0xb2a0ba0,131072,0x7ffc3fd2dde0,0x7f58dc1f5010,1024) 958.32us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e007010,1048576,0xb2a13a0,131072,0x7ffc3fd2dde0,0x7f58dc3f5010,1024) 942.88us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e00b010,1048576,0xb2a1ba0,131072,0x7ffc3fd2dde0,0x7f58dc5f5010,1024) 957.45us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e00f010,1048576,0xb2a23a0,131072,0x7ffc3fd2dde0,0x7f58dc7f5010,1024) 928.45us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e013010,1048576,0xb2a2ba0,131072,0x7ffc3fd2dde0,0x7f58dc9f5010,1024) 903.97us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e017010,1048576,0xb2a33a0,131072,0x7ffc3fd2dde0,0x7f58dcbf5010,1024) 901.50us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e01b010,1048576,0xb2a3ba0,131072,0x7ffc3fd2dde0,0x7f58dcdf5010,1024) 886.54us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e01f010,1048576,0xb2a43a0,131072,0x7ffc3fd2dde0,0x7f58dcff5010,1024) 968.97us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e023010,1048576,0xb2a4ba0,131072,0x7ffc3fd2dde0,0x7f58dd1f5010,1024) 903.14us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e027010,1048576,0xb2a53a0,131072,0x7ffc3fd2dde0,0x7f58dd3f5010,1024) 911.73us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e02b010,1048576,0xb2a5ba0,131072,0x7ffc3fd2dde0,0x7f58dd5f5010,1024) 927.15us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e02f010,1048576,0xb2a63a0,131072,0x7ffc3fd2dde0,0x7f58dd7f5010,1024) 913.26us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e033010,1048576,0xb2a6ba0,131072,0x7ffc3fd2dde0,0x7f58dd9f5010,1024) 914.10us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e037010,1048576,0xb2a73a0,131072,0x7ffc3fd2dde0,0x7f58ddbf5010,1024) 912.27us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e03b010,1048576,0xb2a7ba0,131072,0x7ffc3fd2dde0,0x7f58dddf5010,1024) 920.12us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e03f010,1048576,0xb2a83a0,131072,0x7ffc3fd2dde0,0x7f58ddff5010,1024) 917.93us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e043010,1048576,0xb2a8ba0,131072,0x7ffc3fd2dde0,0x7f58de1f5010,1024) 927.94us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e047010,1048576,0xb2a93a0,131072,0x7ffc3fd2dde0,0x7f58de3f5010,1024) 919.64us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e04b010,1048576,0xb2a9ba0,131072,0x7ffc3fd2dde0,0x7f58de5f5010,1024) 987.16us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e04f010,1048576,0xb2aa3a0,131072,0x7ffc3fd2dde0,0x7f58de7f5010,1024) 1.01ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e053010,1048576,0xb2aaba0,131072,0x7ffc3fd2dde0,0x7f58de9f5010,1024) 950.49us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e057010,1048576,0xb2ab3a0,131072,0x7ffc3fd2dde0,0x7f58debf5010,1024) 936.80us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e05b010,1048576,0xb2abba0,131072,0x7ffc3fd2dde0,0x7f58dedf5010,1024) 913.59us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e05f010,1048576,0xb2ac3a0,131072,0x7ffc3fd2dde0,0x7f58deff5010,1024) 961.82us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e063010,1048576,0xb2acba0,131072,0x7ffc3fd2dde0,0x7f58df1f5010,1024) 1.00ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e067010,1048576,0xb2ad3a0,131072,0x7ffc3fd2dde0,0x7f58df3f5010,1024) 886.38us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e06b010,1048576,0xb2adba0,131072,0x7ffc3fd2dde0,0x7f58df5f5010,1024) 854.98us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e06f010,1048576,0xb2ae3a0,131072,0x7ffc3fd2dde0,0x7f58df7f5010,1024) 833.66us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e073010,1048576,0xb2aeba0,131072,0x7ffc3fd2dde0,0x7f58df9f5010,1024) 837.83us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e077010,1048576,0xb2af3a0,131072,0x7ffc3fd2dde0,0x7f58dfbf5010,1024) 847.38us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e07b010,1048576,0xb2afba0,131072,0x7ffc3fd2dde0,0x7f58dfdf5010,1024) 844.66us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e07f010,1048576,0xb2b03a0,131072,0x7ffc3fd2dde0,0x7f58dfff5010,1024) 846.41us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e083010,1048576,0xb2b0ba0,131072,0x7ffc3fd2dde0,0x7f58e01f5010,1024) 840.42us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e087010,1048576,0xb2b13a0,131072,0x7ffc3fd2dde0,0x7f58e03f5010,1024) 855.80us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e08b010,1048576,0xb2b1ba0,131072,0x7ffc3fd2dde0,0x7f58e05f5010,1024) 871.87us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e08f010,1048576,0xb2b23a0,131072,0x7ffc3fd2dde0,0x7f58e07f5010,1024) 876.54us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e093010,1048576,0xb2b2ba0,131072,0x7ffc3fd2dde0,0x7f58e09f5010,1024) 926.04us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e097010,1048576,0xb2b33a0,131072,0x7ffc3fd2dde0,0x7f58e0bf5010,1024) 927.38us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e09b010,1048576,0xb2b3ba0,131072,0x7ffc3fd2dde0,0x7f58e0df5010,1024) 964.08us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e09f010,1048576,0xb2b43a0,131072,0x7ffc3fd2dde0,0x7f58e0ff5010,1024) 975.92us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e0a3010,1048576,0xb2b4ba0,131072,0x7ffc3fd2dde0,0x7f58e11f5010,1024) 936.81us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e0a7010,1048576,0xb2b53a0,131072,0x7ffc3fd2dde0,0x7f58e13f5010,1024) 939.43us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e0ab010,1048576,0xb2b5ba0,131072,0x7ffc3fd2dde0,0x7f58e15f5010,1024) 1.02ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ [ ... and 200 lines like above...]
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e3cf010,1048576,0xb31a3a0,131072,0x7ffc3fd2dde0,0x7f58fa7f5010,1024) 1.03ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e3d3010,1048576,0xb31aba0,131072,0x7ffc3fd2dde0,0x7f58fa9f5010,1024) 995.09us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e3d7010,1048576,0xb31b3a0,131072,0x7ffc3fd2dde0,0x7f58fabf5010,1024) 1.03ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e3db010,1048576,0xb31bba0,131072,0x7ffc3fd2dde0,0x7f58fadf5010,1024) 1.03ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e3df010,1048576,0xb31c3a0,131072,0x7ffc3fd2dde0,0x7f58faff5010,1024) 943.77us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e3e3010,1048576,0xb31cba0,131072,0x7ffc3fd2dde0,0x7f58fb1f5010,1024) 991.87us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e3e7010,1048576,0xb31d3a0,131072,0x7ffc3fd2dde0,0x7f58fb3f5010,1024) 1.02ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e3eb010,1048576,0xb31dba0,131072,0x7ffc3fd2dde0,0x7f58fb5f5010,1024) 1.01ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e3ef010,1048576,0xb31e3a0,131072,0x7ffc3fd2dde0,0x7f58fb7f5010,1024) 925.15us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e3f3010,1048576,0xb31eba0,131072,0x7ffc3fd2dde0,0x7f58fb9f5010,1024) 1.01ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e3f7010,1048576,0xb31f3a0,131072,0x7ffc3fd2dde0,0x7f58fbbf5010,1024) 951.69us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e3fb010,1048576,0xb31fba0,131072,0x7ffc3fd2dde0,0x7f58fbdf5010,1024) 988.33us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e3ff010,1048576,0xb3203a0,131072,0x7ffc3fd2dde0,0x7f58fbff5010,1024) 959.36us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e403010,1048576,0xb320ba0,131072,0x7ffc3fd2dde0,0x7f58fc1f5010,1024) 945.27us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e407010,1048576,0xb3213a0,131072,0x7ffc3fd2dde0,0x7f58fc3f5010,1024) 973.20us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e40b010,1048576,0xb321ba0,131072,0x7ffc3fd2dde0,0x7f58fc5f5010,1024) 1.01ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e40f010,1048576,0xb3223a0,131072,0x7ffc3fd2dde0,0x7f58fc7f5010,1024) 986.68us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e413010,1048576,0xb322ba0,131072,0x7ffc3fd2dde0,0x7f58fc9f5010,1024) 982.35us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e417010,1048576,0xb3233a0,131072,0x7ffc3fd2dde0,0x7f58fcbf5010,1024) 973.71us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e41b010,1048576,0xb323ba0,131072,0x7ffc3fd2dde0,0x7f58fcdf5010,1024) 959.75us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e41f010,1048576,0xb3243a0,131072,0x7ffc3fd2dde0,0x7f58fcff5010,1024) 1.03ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e423010,1048576,0xb324ba0,131072,0x7ffc3fd2dde0,0x7f58fd1f5010,1024) 981.14us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e427010,1048576,0xb3253a0,131072,0x7ffc3fd2dde0,0x7f58fd3f5010,1024) 964.30us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e42b010,1048576,0xb325ba0,131072,0x7ffc3fd2dde0,0x7f58fd5f5010,1024) 945.46us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e42f010,1048576,0xb3263a0,131072,0x7ffc3fd2dde0,0x7f58fd7f5010,1024) 938.79us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e433010,1048576,0xb326ba0,131072,0x7ffc3fd2dde0,0x7f58fd9f5010,1024) 962.15us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e437010,1048576,0xb3273a0,131072,0x7ffc3fd2dde0,0x7f58fdbf5010,1024) 954.58us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e43b010,1048576,0xb327ba0,131072,0x7ffc3fd2dde0,0x7f58fddf5010,1024) 928.71us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e43f010,1048576,0xb3283a0,131072,0x7ffc3fd2dde0,0x7f58fdff5010,1024) 943.96us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e443010,1048576,0xb328ba0,131072,0x7ffc3fd2dde0,0x7f58fe1f5010,1024) 975.09us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e447010,1048576,0xb3293a0,131072,0x7ffc3fd2dde0,0x7f58fe3f5010,1024) 965.79us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e44b010,1048576,0xb329ba0,131072,0x7ffc3fd2dde0,0x7f58fe5f5010,1024) 970.16us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e44f010,1048576,0xb32a3a0,131072,0x7ffc3fd2dde0,0x7f58fe7f5010,1024) 942.79us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e453010,1048576,0xb32aba0,131072,0x7ffc3fd2dde0,0x7f58fe9f5010,1024) 944.25us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e457010,1048576,0xb32b3a0,131072,0x7ffc3fd2dde0,0x7f58febf5010,1024) 1.03ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e45b010,1048576,0xb32bba0,131072,0x7ffc3fd2dde0,0x7f58fedf5010,1024) 1.04ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e45f010,1048576,0xb32c3a0,131072,0x7ffc3fd2dde0,0x7f58feff5010,1024) 958.20us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e463010,1048576,0xb32cba0,131072,0x7ffc3fd2dde0,0x7f58ff1f5010,1024) 955.83us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e467010,1048576,0xb32d3a0,131072,0x7ffc3fd2dde0,0x7f58ff3f5010,1024) 959.13us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e46b010,1048576,0xb32dba0,131072,0x7ffc3fd2dde0,0x7f58ff5f5010,1024) 950.82us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e46f010,1048576,0xb32e3a0,131072,0x7ffc3fd2dde0,0x7f58ff7f5010,1024) 968.35us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e473010,1048576,0xb32eba0,131072,0x7ffc3fd2dde0,0x7f58ff9f5010,1024) 955.30us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e477010,1048576,0xb32f3a0,131072,0x7ffc3fd2dde0,0x7f58ffbf5010,1024) 943.74us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e47b010,1048576,0xb32fba0,131072,0x7ffc3fd2dde0,0x7f58ffdf5010,1024) 931.45us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e47f010,1048576,0xb3303a0,131072,0x7ffc3fd2dde0,0x7f58ffff5010,1024) 986.62us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e483010,1048576,0xb330ba0,131072,0x7ffc3fd2dde0,0x7f59001f5010,1024) 977.91us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e487010,1048576,0xb3313a0,131072,0x7ffc3fd2dde0,0x7f59003f5010,1024) 946.17us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e48b010,1048576,0xb331ba0,131072,0x7ffc3fd2dde0,0x7f59005f5010,1024) 946.69us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e48f010,1048576,0xb3323a0,131072,0x7ffc3fd2dde0,0x7f59007f5010,1024) 946.97us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e493010,1048576,0xb332ba0,131072,0x7ffc3fd2dde0,0x7f59009f5010,1024) 956.75us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e497010,1048576,0xb3333a0,131072,0x7ffc3fd2dde0,0x7f5900bf5010,1024) 941.58us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e49b010,1048576,0xb333ba0,131072,0x7ffc3fd2dde0,0x7f5900df5010,1024) 928.58us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e49f010,1048576,0xb3343a0,131072,0x7ffc3fd2dde0,0x7f5900ff5010,1024) 912.98us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e4a3010,1048576,0xb334ba0,131072,0x7ffc3fd2dde0,0x7f59011f5010,1024) 931.40us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e4a7010,1048576,0xb3353a0,131072,0x7ffc3fd2dde0,0x7f59013f5010,1024) 914.45us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e4ab010,1048576,0xb335ba0,131072,0x7ffc3fd2dde0,0x7f59015f5010,1024) 929.06us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e4af010,1048576,0xb3363a0,131072,0x7ffc3fd2dde0,0x7f59017f5010,1024) 917.62us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e4b3010,1048576,0xb336ba0,131072,0x7ffc3fd2dde0,0x7f59019f5010,1024) 931.48us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e4b7010,1048576,0xb3373a0,131072,0x7ffc3fd2dde0,0x7f5901bf5010,1024) 901.58us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e4bb010,1048576,0xb337ba0,131072,0x7ffc3fd2dde0,0x7f5901df5010,1024) 928.18us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e4bf010,1048576,0xb3383a0,131072,0x7ffc3fd2dde0,0x7f5901ff5010,1024) 929.69us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e4c3010,1048576,0xb338ba0,131072,0x7ffc3fd2dde0,0x7f59021f5010,1024) 929.45us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e4c7010,1048576,0xb3393a0,131072,0x7ffc3fd2dde0,0x7f59023f5010,1024) 968.94us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e4cb010,1048576,0xb339ba0,131072,0x7ffc3fd2dde0,0x7f59025f5010,1024) 979.51us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e4cf010,1048576,0xb33a3a0,131072,0x7ffc3fd2dde0,0x7f59027f5010,1024) 1.00ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e4d3010,1048576,0xb33aba0,131072,0x7ffc3fd2dde0,0x7f59029f5010,1024) 1.02ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e4d7010,1048576,0xb33b3a0,131072,0x7ffc3fd2dde0,0x7f5902bf5010,1024) 994.58us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e4db010,1048576,0xb33bba0,131072,0x7ffc3fd2dde0,0x7f5902df5010,1024) 1.04ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e4df010,1048576,0xb33c3a0,131072,0x7ffc3fd2dde0,0x7f5902ff5010,1024) 1.03ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e4e3010,1048576,0xb33cba0,131072,0x7ffc3fd2dde0,0x7f59031f5010,1024) 1.03ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e4e7010,1048576,0xb33d3a0,131072,0x7ffc3fd2dde0,0x7f59033f5010,1024) 1.05ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e4eb010,1048576,0xb33dba0,131072,0x7ffc3fd2dde0,0x7f59035f5010,1024) 1.03ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e4ef010,1048576,0xb33e3a0,131072,0x7ffc3fd2dde0,0x7f59037f5010,1024) 1.01ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e4f3010,1048576,0xb33eba0,131072,0x7ffc3fd2dde0,0x7f59039f5010,1024) 1.03ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e4f7010,1048576,0xb33f3a0,131072,0x7ffc3fd2dde0,0x7f5903bf5010,1024) 1.04ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e4fb010,1048576,0xb33fba0,131072,0x7ffc3fd2dde0,0x7f5903df5010,1024) 1.03ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e4ff010,1048576,0xb3403a0,131072,0x7ffc3fd2dde0,0x7f5903ff5010,1024) 1.04ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e503010,1048576,0xb340ba0,131072,0x7ffc3fd2dde0,0x7f59041f5010,1024) 1.02ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e507010,1048576,0xb3413a0,131072,0x7ffc3fd2dde0,0x7f59043f5010,1024) 1.05ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e50b010,1048576,0xb341ba0,131072,0x7ffc3fd2dde0,0x7f59045f5010,1024) 1.04ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e50f010,1048576,0xb3423a0,131072,0x7ffc3fd2dde0,0x7f59047f5010,1024) 1.04ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e513010,1048576,0xb342ba0,131072,0x7ffc3fd2dde0,0x7f59049f5010,1024) 1.02ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e517010,1048576,0xb3433a0,131072,0x7ffc3fd2dde0,0x7f5904bf5010,1024) 1.02ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e51b010,1048576,0xb343ba0,131072,0x7ffc3fd2dde0,0x7f5904df5010,1024) 1.02ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e51f010,1048576,0xb3443a0,131072,0x7ffc3fd2dde0,0x7f5904ff5010,1024) 1.03ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e523010,1048576,0xb344ba0,131072,0x7ffc3fd2dde0,0x7f59051f5010,1024) 1.02ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e527010,1048576,0xb3453a0,131072,0x7ffc3fd2dde0,0x7f59053f5010,1024) 1.03ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e52b010,1048576,0xb345ba0,131072,0x7ffc3fd2dde0,0x7f59055f5010,1024) 1.01ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e52f010,1048576,0xb3463a0,131072,0x7ffc3fd2dde0,0x7f59057f5010,1024) 1.02ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e533010,1048576,0xb346ba0,131072,0x7ffc3fd2dde0,0x7f59059f5010,1024) 1.03ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e537010,1048576,0xb3473a0,131072,0x7ffc3fd2dde0,0x7f5905bf5010,1024) 1.03ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e53b010,1048576,0xb347ba0,131072,0x7ffc3fd2dde0,0x7f5905df5010,1024) 1.03ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e53f010,1048576,0xb3483a0,131072,0x7ffc3fd2dde0,0x7f5905ff5010,1024) 1.02ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e543010,1048576,0xb348ba0,131072,0x7ffc3fd2dde0,0x7f59061f5010,1024) 1.05ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e547010,1048576,0xb3493a0,131072,0x7ffc3fd2dde0,0x7f59063f5010,1024) 1.01ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e54b010,1048576,0xb349ba0,131072,0x7ffc3fd2dde0,0x7f59065f5010,1024) 1.03ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e54f010,1048576,0xb34a3a0,131072,0x7ffc3fd2dde0,0x7f59067f5010,1024) 1.02ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e553010,1048576,0xb34aba0,131072,0x7ffc3fd2dde0,0x7f59069f5010,1024) 1.03ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e557010,1048576,0xb34b3a0,131072,0x7ffc3fd2dde0,0x7f5906bf5010,1024) 1.03ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e55b010,1048576,0xb34bba0,131072,0x7ffc3fd2dde0,0x7f5906df5010,1024) 1.04ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e55f010,1048576,0xb34c3a0,131072,0x7ffc3fd2dde0,0x7f5906ff5010,1024) 1.04ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e563010,1048576,0xb34cba0,131072,0x7ffc3fd2dde0,0x7f59071f5010,1024) 1.03ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e567010,1048576,0xb34d3a0,131072,0x7ffc3fd2dde0,0x7f59073f5010,1024) 1.01ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e56b010,1048576,0xb34dba0,131072,0x7ffc3fd2dde0,0x7f59075f5010,1024) 1.04ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e56f010,1048576,0xb34e3a0,131072,0x7ffc3fd2dde0,0x7f59077f5010,1024) 1.02ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e573010,1048576,0xb34eba0,131072,0x7ffc3fd2dde0,0x7f59079f5010,1024) 1.02ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e577010,1048576,0xb34f3a0,131072,0x7ffc3fd2dde0,0x7f5907bf5010,1024) 1.01ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e57b010,1048576,0xb34fba0,131072,0x7ffc3fd2dde0,0x7f5907df5010,1024) 1.02ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e57f010,1048576,0xb3503a0,131072,0x7ffc3fd2dde0,0x7f5907ff5010,1024) 979.51us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e583010,1048576,0xb350ba0,131072,0x7ffc3fd2dde0,0x7f59081f5010,1024) 993.47us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e587010,1048576,0xb3513a0,131072,0x7ffc3fd2dde0,0x7f59083f5010,1024) 1.01ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e58b010,1048576,0xb351ba0,131072,0x7ffc3fd2dde0,0x7f59085f5010,1024) 988.89us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e58f010,1048576,0xb3523a0,131072,0x7ffc3fd2dde0,0x7f59087f5010,1024) 1.02ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e593010,1048576,0xb352ba0,131072,0x7ffc3fd2dde0,0x7f59089f5010,1024) 1.03ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e597010,1048576,0xb3533a0,131072,0x7ffc3fd2dde0,0x7f5908bf5010,1024) 995.65us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e59b010,1048576,0xb353ba0,131072,0x7ffc3fd2dde0,0x7f5908df5010,1024) 991.90us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e59f010,1048576,0xb3543a0,131072,0x7ffc3fd2dde0,0x7f5908ff5010,1024) 995.89us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e5a3010,1048576,0xb354ba0,131072,0x7ffc3fd2dde0,0x7f59091f5010,1024) 1.01ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e5a7010,1048576,0xb3553a0,131072,0x7ffc3fd2dde0,0x7f59093f5010,1024) 995.04us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e5ab010,1048576,0xb355ba0,131072,0x7ffc3fd2dde0,0x7f59095f5010,1024) 1.02ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e5af010,1048576,0xb3563a0,131072,0x7ffc3fd2dde0,0x7f59097f5010,1024) 983.48us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e5b3010,1048576,0xb356ba0,131072,0x7ffc3fd2dde0,0x7f59099f5010,1024) 1.01ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e5b7010,1048576,0xb3573a0,131072,0x7ffc3fd2dde0,0x7f5909bf5010,1024) 1.02ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e5bb010,1048576,0xb357ba0,131072,0x7ffc3fd2dde0,0x7f5909df5010,1024) 1.01ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e5bf010,1048576,0xb3583a0,131072,0x7ffc3fd2dde0,0x7f5909ff5010,1024) 998.35us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e5c3010,1048576,0xb358ba0,131072,0x7ffc3fd2dde0,0x7f590a1f5010,1024) 988.64us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e5c7010,1048576,0xb3593a0,131072,0x7ffc3fd2dde0,0x7f590a3f5010,1024) 957.56us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e5cb010,1048576,0xb359ba0,131072,0x7ffc3fd2dde0,0x7f590a5f5010,1024) 1.02ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e5cf010,1048576,0xb35a3a0,131072,0x7ffc3fd2dde0,0x7f590a7f5010,1024) 997.89us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e5d3010,1048576,0xb35aba0,131072,0x7ffc3fd2dde0,0x7f590a9f5010,1024) 1.00ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e5d7010,1048576,0xb35b3a0,131072,0x7ffc3fd2dde0,0x7f590abf5010,1024) 980.69us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e5db010,1048576,0xb35bba0,131072,0x7ffc3fd2dde0,0x7f590adf5010,1024) 1.02ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e5df010,1048576,0xb35c3a0,131072,0x7ffc3fd2dde0,0x7f590aff5010,1024) 1.02ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e5e3010,1048576,0xb35cba0,131072,0x7ffc3fd2dde0,0x7f590b1f5010,1024) 1.00ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e5e7010,1048576,0xb35d3a0,131072,0x7ffc3fd2dde0,0x7f590b3f5010,1024) 1.01ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e5eb010,1048576,0xb35dba0,131072,0x7ffc3fd2dde0,0x7f590b5f5010,1024) 1.00ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e5ef010,1048576,0xb35e3a0,131072,0x7ffc3fd2dde0,0x7f590b7f5010,1024) 997.80us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e5f3010,1048576,0xb35eba0,131072,0x7ffc3fd2dde0,0x7f590b9f5010,1024) 961.92us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e5f7010,1048576,0xb35f3a0,131072,0x7ffc3fd2dde0,0x7f590bbf5010,1024) 1.01ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e5fb010,1048576,0xb35fba0,131072,0x7ffc3fd2dde0,0x7f590bdf5010,1024) 1.02ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e5ff010,1048576,0xb3603a0,131072,0x7ffc3fd2dde0,0x7f590bff5010,1024) 1.02ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e603010,1048576,0xb360ba0,131072,0x7ffc3fd2dde0,0x7f590c1f5010,1024) 1.05ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e607010,1048576,0xb3613a0,131072,0x7ffc3fd2dde0,0x7f590c3f5010,1024) 1.05ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e60b010,1048576,0xb361ba0,131072,0x7ffc3fd2dde0,0x7f590c5f5010,1024) 993.51us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e60f010,1048576,0xb3623a0,131072,0x7ffc3fd2dde0,0x7f590c7f5010,1024) 1.02ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e613010,1048576,0xb362ba0,131072,0x7ffc3fd2dde0,0x7f590c9f5010,1024) 1.01ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e617010,1048576,0xb3633a0,131072,0x7ffc3fd2dde0,0x7f590cbf5010,1024) 1.00ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e61b010,1048576,0xb363ba0,131072,0x7ffc3fd2dde0,0x7f590cdf5010,1024) 1.01ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e61f010,1048576,0xb3643a0,131072,0x7ffc3fd2dde0,0x7f590cff5010,1024) 1.01ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e623010,1048576,0xb364ba0,131072,0x7ffc3fd2dde0,0x7f590d1f5010,1024) 988.68us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e627010,1048576,0xb3653a0,131072,0x7ffc3fd2dde0,0x7f590d3f5010,1024) 978.39us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e62b010,1048576,0xb365ba0,131072,0x7ffc3fd2dde0,0x7f590d5f5010,1024) 1.00ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e62f010,1048576,0xb3663a0,131072,0x7ffc3fd2dde0,0x7f590d7f5010,1024) 1.00ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e633010,1048576,0xb366ba0,131072,0x7ffc3fd2dde0,0x7f590d9f5010,1024) 972.30us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e637010,1048576,0xb3673a0,131072,0x7ffc3fd2dde0,0x7f590dbf5010,1024) 994.98us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e63b010,1048576,0xb367ba0,131072,0x7ffc3fd2dde0,0x7f590ddf5010,1024) 991.37us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e63f010,1048576,0xb3683a0,131072,0x7ffc3fd2dde0,0x7f590dff5010,1024) 1.00ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e643010,1048576,0xb368ba0,131072,0x7ffc3fd2dde0,0x7f590e1f5010,1024) 968.08us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e647010,1048576,0xb3693a0,131072,0x7ffc3fd2dde0,0x7f590e3f5010,1024) 996.04us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e64b010,1048576,0xb369ba0,131072,0x7ffc3fd2dde0,0x7f590e5f5010,1024) 1.01ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e64f010,1048576,0xb36a3a0,131072,0x7ffc3fd2dde0,0x7f590e7f5010,1024) 1.03ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e653010,1048576,0xb36aba0,131072,0x7ffc3fd2dde0,0x7f590e9f5010,1024) 993.95us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e657010,1048576,0xb36b3a0,131072,0x7ffc3fd2dde0,0x7f590ebf5010,1024) 1.01ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e65b010,1048576,0xb36bba0,131072,0x7ffc3fd2dde0,0x7f590edf5010,1024) 1.00ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e65f010,1048576,0xb36c3a0,131072,0x7ffc3fd2dde0,0x7f590eff5010,1024) 999.36us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e663010,1048576,0xb36cba0,131072,0x7ffc3fd2dde0,0x7f590f1f5010,1024) 1.01ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e667010,1048576,0xb36d3a0,131072,0x7ffc3fd2dde0,0x7f590f3f5010,1024) 1.00ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e66b010,1048576,0xb36dba0,131072,0x7ffc3fd2dde0,0x7f590f5f5010,1024) 1.01ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e66f010,1048576,0xb36e3a0,131072,0x7ffc3fd2dde0,0x7f590f7f5010,1024) 1.02ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e673010,1048576,0xb36eba0,131072,0x7ffc3fd2dde0,0x7f590f9f5010,1024) 1.02ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e677010,1048576,0xb36f3a0,131072,0x7ffc3fd2dde0,0x7f590fbf5010,1024) 999.73us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e67b010,1048576,0xb36fba0,131072,0x7ffc3fd2dde0,0x7f590fdf5010,1024) 1.04ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e67f010,1048576,0xb3703a0,131072,0x7ffc3fd2dde0,0x7f590fff5010,1024) 1.02ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e683010,1048576,0xb370ba0,131072,0x7ffc3fd2dde0,0x7f59101f5010,1024) 1.03ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e687010,1048576,0xb3713a0,131072,0x7ffc3fd2dde0,0x7f59103f5010,1024) 1.03ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e68b010,1048576,0xb371ba0,131072,0x7ffc3fd2dde0,0x7f59105f5010,1024) 1.03ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e68f010,1048576,0xb3723a0,131072,0x7ffc3fd2dde0,0x7f59107f5010,1024) 1.02ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e693010,1048576,0xb372ba0,131072,0x7ffc3fd2dde0,0x7f59109f5010,1024) 1.04ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e697010,1048576,0xb3733a0,131072,0x7ffc3fd2dde0,0x7f5910bf5010,1024) 1.02ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e69b010,1048576,0xb373ba0,131072,0x7ffc3fd2dde0,0x7f5910df5010,1024) 1.05ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e69f010,1048576,0xb3743a0,131072,0x7ffc3fd2dde0,0x7f5910ff5010,1024) 1.05ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e6a3010,1048576,0xb374ba0,131072,0x7ffc3fd2dde0,0x7f59111f5010,1024) 1.02ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e6a7010,1048576,0xb3753a0,131072,0x7ffc3fd2dde0,0x7f59113f5010,1024) 1.03ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e6ab010,1048576,0xb375ba0,131072,0x7ffc3fd2dde0,0x7f59115f5010,1024) 1.03ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e6af010,1048576,0xb3763a0,131072,0x7ffc3fd2dde0,0x7f59117f5010,1024) 1.04ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e6b3010,1048576,0xb376ba0,131072,0x7ffc3fd2dde0,0x7f59119f5010,1024) 1.03ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e6b7010,1048576,0xb3773a0,131072,0x7ffc3fd2dde0,0x7f5911bf5010,1024) 1.03ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e6bb010,1048576,0xb377ba0,131072,0x7ffc3fd2dde0,0x7f5911df5010,1024) 1.04ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e6bf010,1048576,0xb3783a0,131072,0x7ffc3fd2dde0,0x7f5911ff5010,1024) 1.04ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e6c3010,1048576,0xb378ba0,131072,0x7ffc3fd2dde0,0x7f59121f5010,1024) 1.03ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e6c7010,1048576,0xb3793a0,131072,0x7ffc3fd2dde0,0x7f59123f5010,1024) 1.03ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e6cb010,1048576,0xb379ba0,131072,0x7ffc3fd2dde0,0x7f59125f5010,1024) 1.02ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e6cf010,1048576,0xb37a3a0,131072,0x7ffc3fd2dde0,0x7f59127f5010,1024) 1.03ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e6d3010,1048576,0xb37aba0,131072,0x7ffc3fd2dde0,0x7f59129f5010,1024) 1.06ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e6d7010,1048576,0xb37b3a0,131072,0x7ffc3fd2dde0,0x7f5912bf5010,1024) 1.03ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e6db010,1048576,0xb37bba0,131072,0x7ffc3fd2dde0,0x7f5912df5010,1024) 1.01ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e6df010,1048576,0xb37c3a0,131072,0x7ffc3fd2dde0,0x7f5912ff5010,1024) 1.03ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e6e3010,1048576,0xb37cba0,131072,0x7ffc3fd2dde0,0x7f59131f5010,1024) 1.02ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e6e7010,1048576,0xb37d3a0,131072,0x7ffc3fd2dde0,0x7f59133f5010,1024) 1.04ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e6eb010,1048576,0xb37dba0,131072,0x7ffc3fd2dde0,0x7f59135f5010,1024) 997.57us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e6ef010,1048576,0xb37e3a0,131072,0x7ffc3fd2dde0,0x7f59137f5010,1024) 983.01us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e6f3010,1048576,0xb37eba0,131072,0x7ffc3fd2dde0,0x7f59139f5010,1024) 979.34us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e6f7010,1048576,0xb37f3a0,131072,0x7ffc3fd2dde0,0x7f5913bf5010,1024) 989.11us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e6fb010,1048576,0xb37fba0,131072,0x7ffc3fd2dde0,0x7f5913df5010,1024) 998.51us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e6ff010,1048576,0xb3803a0,131072,0x7ffc3fd2dde0,0x7f5913ff5010,1024) 997.17us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e703010,1048576,0xb380ba0,131072,0x7ffc3fd2dde0,0x7f59141f5010,1024) 987.13us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e707010,1048576,0xb3813a0,131072,0x7ffc3fd2dde0,0x7f59143f5010,1024) 986.73us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e70b010,1048576,0xb381ba0,131072,0x7ffc3fd2dde0,0x7f59145f5010,1024) 995.17us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e70f010,1048576,0xb3823a0,131072,0x7ffc3fd2dde0,0x7f59147f5010,1024) 978.82us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e713010,1048576,0xb382ba0,131072,0x7ffc3fd2dde0,0x7f59149f5010,1024) 992.72us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e717010,1048576,0xb3833a0,131072,0x7ffc3fd2dde0,0x7f5914bf5010,1024) 1.00ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e71b010,1048576,0xb383ba0,131072,0x7ffc3fd2dde0,0x7f5914df5010,1024) 993.64us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e71f010,1048576,0xb3843a0,131072,0x7ffc3fd2dde0,0x7f5914ff5010,1024) 997.16us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e723010,1048576,0xb384ba0,131072,0x7ffc3fd2dde0,0x7f59151f5010,1024) 986.47us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e727010,1048576,0xb3853a0,131072,0x7ffc3fd2dde0,0x7f59153f5010,1024) 995.57us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e72b010,1048576,0xb385ba0,131072,0x7ffc3fd2dde0,0x7f59155f5010,1024) 981.23us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e72f010,1048576,0xb3863a0,131072,0x7ffc3fd2dde0,0x7f59157f5010,1024) 956.03us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e733010,1048576,0xb386ba0,131072,0x7ffc3fd2dde0,0x7f59159f5010,1024) 957.57us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e737010,1048576,0xb3873a0,131072,0x7ffc3fd2dde0,0x7f5915bf5010,1024) 981.13us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e73b010,1048576,0xb387ba0,131072,0x7ffc3fd2dde0,0x7f5915df5010,1024) 990.95us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e73f010,1048576,0xb3883a0,131072,0x7ffc3fd2dde0,0x7f5915ff5010,1024) 953.31us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e743010,1048576,0xb388ba0,131072,0x7ffc3fd2dde0,0x7f59161f5010,1024) 948.35us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e747010,1048576,0xb3893a0,131072,0x7ffc3fd2dde0,0x7f59163f5010,1024) 991.57us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e74b010,1048576,0xb389ba0,131072,0x7ffc3fd2dde0,0x7f59165f5010,1024) 983.05us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e74f010,1048576,0xb38a3a0,131072,0x7ffc3fd2dde0,0x7f59167f5010,1024) 949.39us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e753010,1048576,0xb38aba0,131072,0x7ffc3fd2dde0,0x7f59169f5010,1024) 904.40us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e757010,1048576,0xb38b3a0,131072,0x7ffc3fd2dde0,0x7f5916bf5010,1024) 907.30us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5e75b010,1048576,0xb38bba0,131072,0x7ffc3fd2dde0,0x7f5916df5010,1024) 924.83us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ [... and 550 lines like above...]
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5eff7010,1048576,0xb49f3a0,131072,0x7ffc3fd2dde0,0x7f595bbf5010,1024) 960.20us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,128,2,0x7ffc3fd2ddd0,0x7f5a5effb010,1048576,0xb49fba0,131072,0x7ffc3fd2dde0,0x7f595bdf5010,1024) 341.73us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ * Duration: 1003 milliseconds
+* After debug_mkl_contract_sum, duration: 1.003293752670288
+PROF:: perf data process bucket time: 1.0074033737182617
+==
+
+PROF:: Bucket contains: [XPhase+(v_1828,v_1829), E1827(v_1828,v_1829,v_1830,v_1831,v_1832,v_1833,v_1834,v_1835,v_1836,v_1837,v_1839,v_1840,v_1842,v_1843,v_1844,v_1847,v_1849,v_1851,v_1852,v_1855,v_1856,v_1859,v_1860,v_1861,v_1864,v_1865,v_1866)]
+ Starting debug_mkl_contract_sum, input sizes: 4 134217728 output: 67108864
+ Dimensions: f:2 k:2 n:33554432 m:1
+ MKL_VERBOSE ZGEMM(N,T,33554432,1,2,0x7ffc3fd2ddd0,0x7f585bff4010,67108864,0x4d8ff30,2,0x7ffc3fd2dde0,0x7f581bff3010,33554432) 32.40ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,33554432,1,2,0x7ffc3fd2ddd0,0x7f587bff4010,67108864,0x4d8ff40,2,0x7ffc3fd2dde0,0x7f583bff3010,33554432) 32.17ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ Duration: 64 milliseconds
+ After debug_mkl_contract_sum, duration: 0.06471776962280273
+PROF:: perf data process bucket time: 0.7571535110473633
+==
+
+PROF:: Bucket contains: [E1616(v_1839,v_1843,v_1848,v_1852,v_1861,v_1866), E1837(v_1839,v_1840,v_1842,v_1843,v_1844,v_1847,v_1848,v_1849,v_1851,v_1852,v_1855,v_1856,v_1859,v_1860,v_1861,v_1864,v_1865,v_1866), E1838(v_1839,v_1840,v_1841,v_1842,v_1843,v_1844,v_1845,v_1846,v_1847,v_1848,v_1849,v_1850,v_1851,v_1852,v_1853,v_1854,v_1855,v_1856,v_1857,v_1858,v_1859,v_1860,v_1861,v_1862,v_1863,v_1864,v_1865,v_1866)]
+ Starting debug_mkl_contract, input sizes: 64 262144 output: 262144
+ After debug_mkl_contract, duration: 0.0024564266204833984
+ Starting debug_mkl_contract_sum, input sizes: 262144 268435456 output: 134217728
+ Dimensions: f:131072 k:2 n:1024 m:1
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561bff1010,134217728,0xcaa03c0,131072,0x7ffc3fd2dde0,0x7f559bff0010,1024) 25.37us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561bff5010,134217728,0xcaa03d0,131072,0x7ffc3fd2dde0,0x7f559bff4010,1024) 13.76us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561bff9010,134217728,0xcaa03e0,131072,0x7ffc3fd2dde0,0x7f559bff8010,1024) 11.35us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561bffd010,134217728,0xcaa03f0,131072,0x7ffc3fd2dde0,0x7f559bffc010,1024) 429.51us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c001010,134217728,0xcaa0400,131072,0x7ffc3fd2dde0,0x7f559c000010,1024) 5.36us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c005010,134217728,0xcaa0410,131072,0x7ffc3fd2dde0,0x7f559c004010,1024) 5.43us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c009010,134217728,0xcaa0420,131072,0x7ffc3fd2dde0,0x7f559c008010,1024) 5.20us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c00d010,134217728,0xcaa0430,131072,0x7ffc3fd2dde0,0x7f559c00c010,1024) 4.99us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c011010,134217728,0xcaa0440,131072,0x7ffc3fd2dde0,0x7f559c010010,1024) 5.47us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c015010,134217728,0xcaa0450,131072,0x7ffc3fd2dde0,0x7f559c014010,1024) 4.96us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c019010,134217728,0xcaa0460,131072,0x7ffc3fd2dde0,0x7f559c018010,1024) 5.38us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c01d010,134217728,0xcaa0470,131072,0x7ffc3fd2dde0,0x7f559c01c010,1024) 4.95us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c021010,134217728,0xcaa0480,131072,0x7ffc3fd2dde0,0x7f559c020010,1024) 4.71us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c025010,134217728,0xcaa0490,131072,0x7ffc3fd2dde0,0x7f559c024010,1024) 5.05us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c029010,134217728,0xcaa04a0,131072,0x7ffc3fd2dde0,0x7f559c028010,1024) 4.98us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c02d010,134217728,0xcaa04b0,131072,0x7ffc3fd2dde0,0x7f559c02c010,1024) 4.56us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c031010,134217728,0xcaa04c0,131072,0x7ffc3fd2dde0,0x7f559c030010,1024) 5.13us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c035010,134217728,0xcaa04d0,131072,0x7ffc3fd2dde0,0x7f559c034010,1024) 5.31us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c039010,134217728,0xcaa04e0,131072,0x7ffc3fd2dde0,0x7f559c038010,1024) 4.87us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c03d010,134217728,0xcaa04f0,131072,0x7ffc3fd2dde0,0x7f559c03c010,1024) 5.14us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c041010,134217728,0xcaa0500,131072,0x7ffc3fd2dde0,0x7f559c040010,1024) 5.08us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c045010,134217728,0xcaa0510,131072,0x7ffc3fd2dde0,0x7f559c044010,1024) 4.73us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c049010,134217728,0xcaa0520,131072,0x7ffc3fd2dde0,0x7f559c048010,1024) 5.00us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c04d010,134217728,0xcaa0530,131072,0x7ffc3fd2dde0,0x7f559c04c010,1024) 5.07us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c051010,134217728,0xcaa0540,131072,0x7ffc3fd2dde0,0x7f559c050010,1024) 5.22us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c055010,134217728,0xcaa0550,131072,0x7ffc3fd2dde0,0x7f559c054010,1024) 4.75us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c059010,134217728,0xcaa0560,131072,0x7ffc3fd2dde0,0x7f559c058010,1024) 5.33us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c05d010,134217728,0xcaa0570,131072,0x7ffc3fd2dde0,0x7f559c05c010,1024) 5.63us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c061010,134217728,0xcaa0580,131072,0x7ffc3fd2dde0,0x7f559c060010,1024) 4.79us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c065010,134217728,0xcaa0590,131072,0x7ffc3fd2dde0,0x7f559c064010,1024) 5.64us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c069010,134217728,0xcaa05a0,131072,0x7ffc3fd2dde0,0x7f559c068010,1024) 5.12us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c06d010,134217728,0xcaa05b0,131072,0x7ffc3fd2dde0,0x7f559c06c010,1024) 5.02us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c071010,134217728,0xcaa05c0,131072,0x7ffc3fd2dde0,0x7f559c070010,1024) 5.20us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c075010,134217728,0xcaa05d0,131072,0x7ffc3fd2dde0,0x7f559c074010,1024) 5.19us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c079010,134217728,0xcaa05e0,131072,0x7ffc3fd2dde0,0x7f559c078010,1024) 4.71us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c07d010,134217728,0xcaa05f0,131072,0x7ffc3fd2dde0,0x7f559c07c010,1024) 4.92us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c081010,134217728,0xcaa0600,131072,0x7ffc3fd2dde0,0x7f559c080010,1024) 5.81us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c085010,134217728,0xcaa0610,131072,0x7ffc3fd2dde0,0x7f559c084010,1024) 5.13us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c089010,134217728,0xcaa0620,131072,0x7ffc3fd2dde0,0x7f559c088010,1024) 4.99us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c08d010,134217728,0xcaa0630,131072,0x7ffc3fd2dde0,0x7f559c08c010,1024) 5.61us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f561c091010,134217728,0xcaa0640,131072,0x7ffc3fd2dde0,0x7f559c090010,1024) 4.99us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ [... and 131 000 lines more like that...]
+ [... occasionaly turning to something strange: ...]
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f5693171010,134217728,0xcc7c9c0,131072,0x7ffc3fd2dde0,0x7f5613170010,1024) 4.79us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f5693175010,134217728,0xcc7c9d0,131072,0x7ffc3fd2dde0,0x7f5613174010,1024) 17.81us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f5693179010,134217728,0xcc7c9e0,131072,0x7ffc3fd2dde0,0x7f5613178010,1024) 9.91us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f569317d010,134217728,0xcc7c9f0,131072,0x7ffc3fd2dde0,0x7f561317c010,1024) 29.51us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f5693181010,134217728,0xcc7ca00,131072,0x7ffc3fd2dde0,0x7f5613180010,1024) 9.49us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ [... 8 lines like aobove ]
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f56931a9010,134217728,0xcc7caa0,131072,0x7ffc3fd2dde0,0x7f56131a8010,1024) 9.56us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f56931ad010,134217728,0xcc7cab0,131072,0x7ffc3fd2dde0,0x7f56131ac010,1024) 9.20us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f56931b1010,134217728,0xcc7cac0,131072,0x7ffc3fd2dde0,0x7f56131b0010,1024) 10.44us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f56931b5010,134217728,0xcc7cad0,131072,0x7ffc3fd2dde0,0x7f56131b4010,1024) 9.40us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f56931b9010,134217728,0xcc7cae0,131072,0x7ffc3fd2dde0,0x7f56131b8010,1024) 9.40us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ [... 10 lines like above...]
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f56931e5010,134217728,0xcc7cb90,131072,0x7ffc3fd2dde0,0x7f56131e4010,1024) 9.61us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f56931e9010,134217728,0xcc7cba0,131072,0x7ffc3fd2dde0,0x7f56131e8010,1024) 9.67us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f56931ed010,134217728,0xcc7cbb0,131072,0x7ffc3fd2dde0,0x7f56131ec010,1024) 9.89us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f56931f1010,134217728,0xcc7cbc0,131072,0x7ffc3fd2dde0,0x7f56131f0010,1024) 9.83us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f56931f5010,134217728,0xcc7cbd0,131072,0x7ffc3fd2dde0,0x7f56131f4010,1024) 9.80us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f56931f9010,134217728,0xcc7cbe0,131072,0x7ffc3fd2dde0,0x7f56131f8010,1024) 4.42us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ ! MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f56931fd010,134217728,0xcc7cbf0,131072,0x7ffc3fd2dde0,0x7f56131fc010,1024) 392.54us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,1024,1,2,0x7ffc3fd2ddd0,0x7f5693201010,134217728,0xcc7cc00,131072,0x7ffc3fd2dde0,0x7f5613200010,1024) 5.01us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ [... 2362000/131072 = 18 us per loop, but in logs most are 5 us. Why?... ]
+ Duration: 2362 milliseconds
+ * After debug_mkl_contract_sum, duration: 2.362922191619873
+PROF:: perf data process bucket time: 6.452457666397095
+==
+
+PROF:: Bucket contains: [E1697(v_1840,v_1844,v_1849,v_1856,v_1860,v_1865), E1839(v_1840,v_1841,v_1842,v_1843,v_1844,v_1845,v_1846,v_1847,v_1848,v_1849,v_1850,v_1851,v_1852,v_1853,v_1854,v_1855,v_1856,v_1857,v_1858,v_1859,v_1860,v_1861,v_1862,v_1863,v_1864,v_1865,v_1866)]
+ Starting debug_mkl_contract_sum, input sizes: 64 134217728 output: 67108864
+ Dimensions: f:32 k:2 n:2097152 m:1
+ MKL_VERBOSE ZGEMM(N,T,2097152,1,2,0x7ffc3fd2ddd0,0x7f569bff1010,67108864,0x4d808c0,32,0x7ffc3fd2dde0,0x7f586fff1010,2097152) 2.97ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,2097152,1,2,0x7ffc3fd2ddd0,0x7f569dff1010,67108864,0x4d808d0,32,0x7ffc3fd2dde0,0x7f5871ff1010,2097152) 2.58ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,2097152,1,2,0x7ffc3fd2ddd0,0x7f569fff1010,67108864,0x4d808e0,32,0x7ffc3fd2dde0,0x7f5873ff1010,2097152) 2.65ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,2097152,1,2,0x7ffc3fd2ddd0,0x7f56a1ff1010,67108864,0x4d808f0,32,0x7ffc3fd2dde0,0x7f5875ff1010,2097152) 2.61ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,2097152,1,2,0x7ffc3fd2ddd0,0x7f56a3ff1010,67108864,0x4d80900,32,0x7ffc3fd2dde0,0x7f5877ff1010,2097152) 2.54ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,2097152,1,2,0x7ffc3fd2ddd0,0x7f56a5ff1010,67108864,0x4d80910,32,0x7ffc3fd2dde0,0x7f5879ff1010,2097152) 2.55ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,2097152,1,2,0x7ffc3fd2ddd0,0x7f56a7ff1010,67108864,0x4d80920,32,0x7ffc3fd2dde0,0x7f587bff1010,2097152) 2.49ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,2097152,1,2,0x7ffc3fd2ddd0,0x7f56a9ff1010,67108864,0x4d80930,32,0x7ffc3fd2dde0,0x7f587dff1010,2097152) 2.45ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,2097152,1,2,0x7ffc3fd2ddd0,0x7f56abff1010,67108864,0x4d80940,32,0x7ffc3fd2dde0,0x7f587fff1010,2097152) 2.39ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,2097152,1,2,0x7ffc3fd2ddd0,0x7f56adff1010,67108864,0x4d80950,32,0x7ffc3fd2dde0,0x7f5881ff1010,2097152) 2.56ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,2097152,1,2,0x7ffc3fd2ddd0,0x7f56afff1010,67108864,0x4d80960,32,0x7ffc3fd2dde0,0x7f5883ff1010,2097152) 2.52ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,2097152,1,2,0x7ffc3fd2ddd0,0x7f56b1ff1010,67108864,0x4d80970,32,0x7ffc3fd2dde0,0x7f5885ff1010,2097152) 2.43ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,2097152,1,2,0x7ffc3fd2ddd0,0x7f56b3ff1010,67108864,0x4d80980,32,0x7ffc3fd2dde0,0x7f5887ff1010,2097152) 2.46ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,2097152,1,2,0x7ffc3fd2ddd0,0x7f56b5ff1010,67108864,0x4d80990,32,0x7ffc3fd2dde0,0x7f5889ff1010,2097152) 2.45ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,2097152,1,2,0x7ffc3fd2ddd0,0x7f56b7ff1010,67108864,0x4d809a0,32,0x7ffc3fd2dde0,0x7f588bff1010,2097152) 2.60ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,2097152,1,2,0x7ffc3fd2ddd0,0x7f56b9ff1010,67108864,0x4d809b0,32,0x7ffc3fd2dde0,0x7f588dff1010,2097152) 2.58ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,2097152,1,2,0x7ffc3fd2ddd0,0x7f56bbff1010,67108864,0x4d809c0,32,0x7ffc3fd2dde0,0x7f588fff1010,2097152) 2.49ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,2097152,1,2,0x7ffc3fd2ddd0,0x7f56bdff1010,67108864,0x4d809d0,32,0x7ffc3fd2dde0,0x7f5891ff1010,2097152) 2.48ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,2097152,1,2,0x7ffc3fd2ddd0,0x7f56bfff1010,67108864,0x4d809e0,32,0x7ffc3fd2dde0,0x7f5893ff1010,2097152) 2.52ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,2097152,1,2,0x7ffc3fd2ddd0,0x7f56c1ff1010,67108864,0x4d809f0,32,0x7ffc3fd2dde0,0x7f5895ff1010,2097152) 2.60ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,2097152,1,2,0x7ffc3fd2ddd0,0x7f56c3ff1010,67108864,0x4d80a00,32,0x7ffc3fd2dde0,0x7f5897ff1010,2097152) 2.57ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,2097152,1,2,0x7ffc3fd2ddd0,0x7f56c5ff1010,67108864,0x4d80a10,32,0x7ffc3fd2dde0,0x7f5899ff1010,2097152) 2.54ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,2097152,1,2,0x7ffc3fd2ddd0,0x7f56c7ff1010,67108864,0x4d80a20,32,0x7ffc3fd2dde0,0x7f589bff1010,2097152) 2.57ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,2097152,1,2,0x7ffc3fd2ddd0,0x7f56c9ff1010,67108864,0x4d80a30,32,0x7ffc3fd2dde0,0x7f589dff1010,2097152) 2.61ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,2097152,1,2,0x7ffc3fd2ddd0,0x7f56cbff1010,67108864,0x4d80a40,32,0x7ffc3fd2dde0,0x7f589fff1010,2097152) 2.68ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,2097152,1,2,0x7ffc3fd2ddd0,0x7f56cdff1010,67108864,0x4d80a50,32,0x7ffc3fd2dde0,0x7f58a1ff1010,2097152) 2.51ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,2097152,1,2,0x7ffc3fd2ddd0,0x7f56cfff1010,67108864,0x4d80a60,32,0x7ffc3fd2dde0,0x7f58a3ff1010,2097152) 2.45ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,2097152,1,2,0x7ffc3fd2ddd0,0x7f56d1ff1010,67108864,0x4d80a70,32,0x7ffc3fd2dde0,0x7f58a5ff1010,2097152) 2.41ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,2097152,1,2,0x7ffc3fd2ddd0,0x7f56d3ff1010,67108864,0x4d80a80,32,0x7ffc3fd2dde0,0x7f58a7ff1010,2097152) 2.53ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,2097152,1,2,0x7ffc3fd2ddd0,0x7f56d5ff1010,67108864,0x4d80a90,32,0x7ffc3fd2dde0,0x7f58a9ff1010,2097152) 2.59ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,2097152,1,2,0x7ffc3fd2ddd0,0x7f56d7ff1010,67108864,0x4d80aa0,32,0x7ffc3fd2dde0,0x7f58abff1010,2097152) 2.63ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,2097152,1,2,0x7ffc3fd2ddd0,0x7f56d9ff1010,67108864,0x4d80ab0,32,0x7ffc3fd2dde0,0x7f58adff1010,2097152) 2.54ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ Duration: 82 milliseconds
+ After debug_mkl_contract_sum, duration: 0.08215188980102539
+PROF:: perf data process bucket time: 1.5319533348083496
+==
+
+PROF:: Bucket contains: [XPhase+(v_1841,v_1846), E1840(v_1841,v_1842,v_1843,v_1844,v_1845,v_1846,v_1847,v_1848,v_1849,v_1850,v_1851,v_1852,v_1853,v_1854,v_1855,v_1856,v_1857,v_1858,v_1859,v_1860,v_1861,v_1862,v_1863,v_1864,v_1865,v_1866)]
+ Starting debug_mkl_contract_sum, input sizes: 4 67108864 output: 33554432
+ Dimensions: f:2 k:2 n:16777216 m:1
+ MKL_VERBOSE ZGEMM(N,T,16777216,1,2,0x7ffc3fd2ddd0,0x7f56dbff1010,33554432,0x4d8ff30,2,0x7ffc3fd2dde0,0x7f56bbff0010,16777216) 16.61ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,16777216,1,2,0x7ffc3fd2ddd0,0x7f56ebff1010,33554432,0x4d8ff40,2,0x7ffc3fd2dde0,0x7f56cbff0010,16777216) 16.17ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ Duration: 32 milliseconds
+ After debug_mkl_contract_sum, duration: 0.03291201591491699
+PROF:: perf data process bucket time: 0.46090030670166016
+==
+
+PROF:: Bucket contains: [E1841(v_1842,v_1843,v_1844,v_1845,v_1846,v_1847,v_1848,v_1849,v_1850,v_1851,v_1852,v_1853,v_1854,v_1855,v_1856,v_1857,v_1858,v_1859,v_1860,v_1861,v_1862,v_1863,v_1864,v_1865,v_1866)]
+PROF:: perf data process bucket time: 0.17297935485839844
+PROF:: Bucket contains: [E1842(v_1843,v_1844,v_1845,v_1846,v_1847,v_1848,v_1849,v_1850,v_1851,v_1852,v_1853,v_1854,v_1855,v_1856,v_1857,v_1858,v_1859,v_1860,v_1861,v_1862,v_1863,v_1864,v_1865,v_1866)]
+PROF:: perf data process bucket time: 0.0806725025177002
+PROF:: Bucket contains: [E1843(v_1844,v_1845,v_1846,v_1847,v_1848,v_1849,v_1850,v_1851,v_1852,v_1853,v_1854,v_1855,v_1856,v_1857,v_1858,v_1859,v_1860,v_1861,v_1862,v_1863,v_1864,v_1865,v_1866)]
+PROF:: perf data process bucket time: 0.039273977279663086
+==
+
+PROF:: Bucket contains: [E453(v_1845,v_1853), E1776(v_1845,v_1846,v_1850,v_1851,v_1852,v_1853,v_1854,v_1855,v_1857,v_1858,v_1859,v_1861,v_1862,v_1863,v_1864,v_1866), E1844(v_1845,v_1846,v_1847,v_1848,v_1849,v_1850,v_1851,v_1852,v_1853,v_1854,v_1855,v_1856,v_1857,v_1858,v_1859,v_1860,v_1861,v_1862,v_1863,v_1864,v_1865,v_1866)]
+ Starting debug_mkl_contract, input sizes: 4 65536 output: 65536
+ Dimensions: C[0]:4 C[1]:1 C[2]:16384
+ MKL_VERBOSE ZGEMM(N,T,16384,1,1,0x7ffc3fd2db50,0xcaa03c0,16384,0x4dfb050,1,0x7ffc3fd2db60,0xcba03d0,16384) 1.72ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,16384,1,1,0x7ffc3fd2db50,0xcae03c0,16384,0x4dfb060,1,0x7ffc3fd2db60,0xcbe03d0,16384) 379.13us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,16384,1,1,0x7ffc3fd2db50,0xcb203c0,16384,0x4dfb070,1,0x7ffc3fd2db60,0xcc203d0,16384) 23.91us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,16384,1,1,0x7ffc3fd2db50,0xcb603c0,16384,0x4dfb080,1,0x7ffc3fd2db60,0xcc603d0,16384) 19.53us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ Duration: 2 milliseconds
+ After debug_mkl_contract, duration: 0.002335786819458008
+ Starting debug_mkl_contract_sum, input sizes: 65536 4194304 output: 2097152
+ Dimensions: f:32768 k:2 n:64 m:1
+ *
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f1010,2097152,0xcaa03c0,32768,0x7ffc3fd2dde0,0x7f5b041e6010,64) 21.78us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f1410,2097152,0xcaa03d0,32768,0x7ffc3fd2dde0,0x7f5b041e6410,64) 410ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f1810,2097152,0xcaa03e0,32768,0x7ffc3fd2dde0,0x7f5b041e6810,64) 529ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f1c10,2097152,0xcaa03f0,32768,0x7ffc3fd2dde0,0x7f5b041e6c10,64) 2.78us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f2010,2097152,0xcaa0400,32768,0x7ffc3fd2dde0,0x7f5b041e7010,64) 613ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f2410,2097152,0xcaa0410,32768,0x7ffc3fd2dde0,0x7f5b041e7410,64) 590ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f2810,2097152,0xcaa0420,32768,0x7ffc3fd2dde0,0x7f5b041e7810,64) 251ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f2c10,2097152,0xcaa0430,32768,0x7ffc3fd2dde0,0x7f5b041e7c10,64) 2.52us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f3010,2097152,0xcaa0440,32768,0x7ffc3fd2dde0,0x7f5b041e8010,64) 520ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f3410,2097152,0xcaa0450,32768,0x7ffc3fd2dde0,0x7f5b041e8410,64) 680ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f3810,2097152,0xcaa0460,32768,0x7ffc3fd2dde0,0x7f5b041e8810,64) 315ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f3c10,2097152,0xcaa0470,32768,0x7ffc3fd2dde0,0x7f5b041e8c10,64) 2.31us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f4010,2097152,0xcaa0480,32768,0x7ffc3fd2dde0,0x7f5b041e9010,64) 596ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f4410,2097152,0xcaa0490,32768,0x7ffc3fd2dde0,0x7f5b041e9410,64) 417ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f4810,2097152,0xcaa04a0,32768,0x7ffc3fd2dde0,0x7f5b041e9810,64) 281ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f4c10,2097152,0xcaa04b0,32768,0x7ffc3fd2dde0,0x7f5b041e9c10,64) 2.11us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f5010,2097152,0xcaa04c0,32768,0x7ffc3fd2dde0,0x7f5b041ea010,64) 501ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f5410,2097152,0xcaa04d0,32768,0x7ffc3fd2dde0,0x7f5b041ea410,64) 542ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f5810,2097152,0xcaa04e0,32768,0x7ffc3fd2dde0,0x7f5b041ea810,64) 268ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f5c10,2097152,0xcaa04f0,32768,0x7ffc3fd2dde0,0x7f5b041eac10,64) 3.63us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f6010,2097152,0xcaa0500,32768,0x7ffc3fd2dde0,0x7f5b041eb010,64) 495ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f6410,2097152,0xcaa0510,32768,0x7ffc3fd2dde0,0x7f5b041eb410,64) 654ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f6810,2097152,0xcaa0520,32768,0x7ffc3fd2dde0,0x7f5b041eb810,64) 244ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f6c10,2097152,0xcaa0530,32768,0x7ffc3fd2dde0,0x7f5b041ebc10,64) 2.10us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f7010,2097152,0xcaa0540,32768,0x7ffc3fd2dde0,0x7f5b041ec010,64) 458ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f7410,2097152,0xcaa0550,32768,0x7ffc3fd2dde0,0x7f5b041ec410,64) 348ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f7810,2097152,0xcaa0560,32768,0x7ffc3fd2dde0,0x7f5b041ec810,64) 307ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f7c10,2097152,0xcaa0570,32768,0x7ffc3fd2dde0,0x7f5b041ecc10,64) 2.38us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f8010,2097152,0xcaa0580,32768,0x7ffc3fd2dde0,0x7f5b041ed010,64) 501ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f8410,2097152,0xcaa0590,32768,0x7ffc3fd2dde0,0x7f5b041ed410,64) 430ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f8810,2097152,0xcaa05a0,32768,0x7ffc3fd2dde0,0x7f5b041ed810,64) 268ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f8c10,2097152,0xcaa05b0,32768,0x7ffc3fd2dde0,0x7f5b041edc10,64) 6.41us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f9010,2097152,0xcaa05c0,32768,0x7ffc3fd2dde0,0x7f5b041ee010,64) 494ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f9410,2097152,0xcaa05d0,32768,0x7ffc3fd2dde0,0x7f5b041ee410,64) 542ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f9810,2097152,0xcaa05e0,32768,0x7ffc3fd2dde0,0x7f5b041ee810,64) 307ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079f9c10,2097152,0xcaa05f0,32768,0x7ffc3fd2dde0,0x7f5b041eec10,64) 2.16us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079fa010,2097152,0xcaa0600,32768,0x7ffc3fd2dde0,0x7f5b041ef010,64) 505ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079fa410,2097152,0xcaa0610,32768,0x7ffc3fd2dde0,0x7f5b041ef410,64) 462ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079fa810,2097152,0xcaa0620,32768,0x7ffc3fd2dde0,0x7f5b041ef810,64) 596ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079fac10,2097152,0xcaa0630,32768,0x7ffc3fd2dde0,0x7f5b041efc10,64) 2.15us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079fb010,2097152,0xcaa0640,32768,0x7ffc3fd2dde0,0x7f5b041f0010,64) 862ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079fb410,2097152,0xcaa0650,32768,0x7ffc3fd2dde0,0x7f5b041f0410,64) 507ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079fb810,2097152,0xcaa0660,32768,0x7ffc3fd2dde0,0x7f5b041f0810,64) 365ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079fbc10,2097152,0xcaa0670,32768,0x7ffc3fd2dde0,0x7f5b041f0c10,64) 2.21us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079fc010,2097152,0xcaa0680,32768,0x7ffc3fd2dde0,0x7f5b041f1010,64) 587ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079fc410,2097152,0xcaa0690,32768,0x7ffc3fd2dde0,0x7f5b041f1410,64) 613ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079fc810,2097152,0xcaa06a0,32768,0x7ffc3fd2dde0,0x7f5b041f1810,64) 386ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079fcc10,2097152,0xcaa06b0,32768,0x7ffc3fd2dde0,0x7f5b041f1c10,64) 2.76us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079fd010,2097152,0xcaa06c0,32768,0x7ffc3fd2dde0,0x7f5b041f2010,64) 509ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079fd410,2097152,0xcaa06d0,32768,0x7ffc3fd2dde0,0x7f5b041f2410,64) 427ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079fd810,2097152,0xcaa06e0,32768,0x7ffc3fd2dde0,0x7f5b041f2810,64) 296ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079fdc10,2097152,0xcaa06f0,32768,0x7ffc3fd2dde0,0x7f5b041f2c10,64) 2.35us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079fe010,2097152,0xcaa0700,32768,0x7ffc3fd2dde0,0x7f5b041f3010,64) 520ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079fe410,2097152,0xcaa0710,32768,0x7ffc3fd2dde0,0x7f5b041f3410,64) 432ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079fe810,2097152,0xcaa0720,32768,0x7ffc3fd2dde0,0x7f5b041f3810,64) 298ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079fec10,2097152,0xcaa0730,32768,0x7ffc3fd2dde0,0x7f5b041f3c10,64) 2.18us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079ff010,2097152,0xcaa0740,32768,0x7ffc3fd2dde0,0x7f5b041f4010,64) 540ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079ff410,2097152,0xcaa0750,32768,0x7ffc3fd2dde0,0x7f5b041f4410,64) 510ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079ff810,2097152,0xcaa0760,32768,0x7ffc3fd2dde0,0x7f5b041f4810,64) 481ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b079ffc10,2097152,0xcaa0770,32768,0x7ffc3fd2dde0,0x7f5b041f4c10,64) 2.45us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a00010,2097152,0xcaa0780,32768,0x7ffc3fd2dde0,0x7f5b041f5010,64) 419ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a00410,2097152,0xcaa0790,32768,0x7ffc3fd2dde0,0x7f5b041f5410,64) 581ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a00810,2097152,0xcaa07a0,32768,0x7ffc3fd2dde0,0x7f5b041f5810,64) 276ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a00c10,2097152,0xcaa07b0,32768,0x7ffc3fd2dde0,0x7f5b041f5c10,64) 2.13us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a01010,2097152,0xcaa07c0,32768,0x7ffc3fd2dde0,0x7f5b041f6010,64) 443ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a01410,2097152,0xcaa07d0,32768,0x7ffc3fd2dde0,0x7f5b041f6410,64) 399ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a01810,2097152,0xcaa07e0,32768,0x7ffc3fd2dde0,0x7f5b041f6810,64) 315ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a01c10,2097152,0xcaa07f0,32768,0x7ffc3fd2dde0,0x7f5b041f6c10,64) 2.30us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a02010,2097152,0xcaa0800,32768,0x7ffc3fd2dde0,0x7f5b041f7010,64) 434ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a02410,2097152,0xcaa0810,32768,0x7ffc3fd2dde0,0x7f5b041f7410,64) 643ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a02810,2097152,0xcaa0820,32768,0x7ffc3fd2dde0,0x7f5b041f7810,64) 307ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a02c10,2097152,0xcaa0830,32768,0x7ffc3fd2dde0,0x7f5b041f7c10,64) 2.12us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a03010,2097152,0xcaa0840,32768,0x7ffc3fd2dde0,0x7f5b041f8010,64) 449ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a03410,2097152,0xcaa0850,32768,0x7ffc3fd2dde0,0x7f5b041f8410,64) 389ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a03810,2097152,0xcaa0860,32768,0x7ffc3fd2dde0,0x7f5b041f8810,64) 300ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a03c10,2097152,0xcaa0870,32768,0x7ffc3fd2dde0,0x7f5b041f8c10,64) 2.85us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a04010,2097152,0xcaa0880,32768,0x7ffc3fd2dde0,0x7f5b041f9010,64) 441ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a04410,2097152,0xcaa0890,32768,0x7ffc3fd2dde0,0x7f5b041f9410,64) 374ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a04810,2097152,0xcaa08a0,32768,0x7ffc3fd2dde0,0x7f5b041f9810,64) 298ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a04c10,2097152,0xcaa08b0,32768,0x7ffc3fd2dde0,0x7f5b041f9c10,64) 2.23us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a05010,2097152,0xcaa08c0,32768,0x7ffc3fd2dde0,0x7f5b041fa010,64) 471ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a05410,2097152,0xcaa08d0,32768,0x7ffc3fd2dde0,0x7f5b041fa410,64) 529ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a05810,2097152,0xcaa08e0,32768,0x7ffc3fd2dde0,0x7f5b041fa810,64) 453ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a05c10,2097152,0xcaa08f0,32768,0x7ffc3fd2dde0,0x7f5b041fac10,64) 2.20us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a06010,2097152,0xcaa0900,32768,0x7ffc3fd2dde0,0x7f5b041fb010,64) 555ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a06410,2097152,0xcaa0910,32768,0x7ffc3fd2dde0,0x7f5b041fb410,64) 440ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a06810,2097152,0xcaa0920,32768,0x7ffc3fd2dde0,0x7f5b041fb810,64) 266ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a06c10,2097152,0xcaa0930,32768,0x7ffc3fd2dde0,0x7f5b041fbc10,64) 2.07us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a07010,2097152,0xcaa0940,32768,0x7ffc3fd2dde0,0x7f5b041fc010,64) 460ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a07410,2097152,0xcaa0950,32768,0x7ffc3fd2dde0,0x7f5b041fc410,64) 412ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a07810,2097152,0xcaa0960,32768,0x7ffc3fd2dde0,0x7f5b041fc810,64) 298ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a07c10,2097152,0xcaa0970,32768,0x7ffc3fd2dde0,0x7f5b041fcc10,64) 2.12us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a08010,2097152,0xcaa0980,32768,0x7ffc3fd2dde0,0x7f5b041fd010,64) 549ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a08410,2097152,0xcaa0990,32768,0x7ffc3fd2dde0,0x7f5b041fd410,64) 453ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a08810,2097152,0xcaa09a0,32768,0x7ffc3fd2dde0,0x7f5b041fd810,64) 505ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a08c10,2097152,0xcaa09b0,32768,0x7ffc3fd2dde0,0x7f5b041fdc10,64) 2.30us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a09010,2097152,0xcaa09c0,32768,0x7ffc3fd2dde0,0x7f5b041fe010,64) 527ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a09410,2097152,0xcaa09d0,32768,0x7ffc3fd2dde0,0x7f5b041fe410,64) 391ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a09810,2097152,0xcaa09e0,32768,0x7ffc3fd2dde0,0x7f5b041fe810,64) 283ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a09c10,2097152,0xcaa09f0,32768,0x7ffc3fd2dde0,0x7f5b041fec10,64) 2.10us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a0a010,2097152,0xcaa0a00,32768,0x7ffc3fd2dde0,0x7f5b041ff010,64) 454ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a0a410,2097152,0xcaa0a10,32768,0x7ffc3fd2dde0,0x7f5b041ff410,64) 380ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a0a810,2097152,0xcaa0a20,32768,0x7ffc3fd2dde0,0x7f5b041ff810,64) 449ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a0ac10,2097152,0xcaa0a30,32768,0x7ffc3fd2dde0,0x7f5b041ffc10,64) 393.11us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a0b010,2097152,0xcaa0a40,32768,0x7ffc3fd2dde0,0x7f5b04200010,64) 840ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a0b410,2097152,0xcaa0a50,32768,0x7ffc3fd2dde0,0x7f5b04200410,64) 421ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a0b810,2097152,0xcaa0a60,32768,0x7ffc3fd2dde0,0x7f5b04200810,64) 324ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a0bc10,2097152,0xcaa0a70,32768,0x7ffc3fd2dde0,0x7f5b04200c10,64) 430ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a0c010,2097152,0xcaa0a80,32768,0x7ffc3fd2dde0,0x7f5b04201010,64) 538ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a0c410,2097152,0xcaa0a90,32768,0x7ffc3fd2dde0,0x7f5b04201410,64) 427ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a0c810,2097152,0xcaa0aa0,32768,0x7ffc3fd2dde0,0x7f5b04201810,64) 296ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ [... Some 500 similar lines with occasional spikes ...]
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a89c10,2097152,0xcaa29f0,32768,0x7ffc3fd2dde0,0x7f5b0427ec10,64) 685ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a8a010,2097152,0xcaa2a00,32768,0x7ffc3fd2dde0,0x7f5b0427f010,64) 522ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a8a410,2097152,0xcaa2a10,32768,0x7ffc3fd2dde0,0x7f5b0427f410,64) 641ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a8a810,2097152,0xcaa2a20,32768,0x7ffc3fd2dde0,0x7f5b0427f810,64) 520ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a8ac10,2097152,0xcaa2a30,32768,0x7ffc3fd2dde0,0x7f5b0427fc10,64) 404ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a8b010,2097152,0xcaa2a40,32768,0x7ffc3fd2dde0,0x7f5b04280010,64) 484ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a8b410,2097152,0xcaa2a50,32768,0x7ffc3fd2dde0,0x7f5b04280410,64) 626ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a8b810,2097152,0xcaa2a60,32768,0x7ffc3fd2dde0,0x7f5b04280810,64) 365ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a8bc10,2097152,0xcaa2a70,32768,0x7ffc3fd2dde0,0x7f5b04280c10,64) 475ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a8c010,2097152,0xcaa2a80,32768,0x7ffc3fd2dde0,0x7f5b04281010,64) 615ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a8c410,2097152,0xcaa2a90,32768,0x7ffc3fd2dde0,0x7f5b04281410,64) 507ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a8c810,2097152,0xcaa2aa0,32768,0x7ffc3fd2dde0,0x7f5b04281810,64) 356ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a8cc10,2097152,0xcaa2ab0,32768,0x7ffc3fd2dde0,0x7f5b04281c10,64) 523ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a8d010,2097152,0xcaa2ac0,32768,0x7ffc3fd2dde0,0x7f5b04282010,64) 959ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a8d410,2097152,0xcaa2ad0,32768,0x7ffc3fd2dde0,0x7f5b04282410,64) 451ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a8d810,2097152,0xcaa2ae0,32768,0x7ffc3fd2dde0,0x7f5b04282810,64) 319ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a8dc10,2097152,0xcaa2af0,32768,0x7ffc3fd2dde0,0x7f5b04282c10,64) 466ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a8e010,2097152,0xcaa2b00,32768,0x7ffc3fd2dde0,0x7f5b04283010,64) 1.04us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a8e410,2097152,0xcaa2b10,32768,0x7ffc3fd2dde0,0x7f5b04283410,64) 456ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a8e810,2097152,0xcaa2b20,32768,0x7ffc3fd2dde0,0x7f5b04283810,64) 337ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a8ec10,2097152,0xcaa2b30,32768,0x7ffc3fd2dde0,0x7f5b04283c10,64) 462ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a8f010,2097152,0xcaa2b40,32768,0x7ffc3fd2dde0,0x7f5b04284010,64) 782ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a8f410,2097152,0xcaa2b50,32768,0x7ffc3fd2dde0,0x7f5b04284410,64) 684ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a8f810,2097152,0xcaa2b60,32768,0x7ffc3fd2dde0,0x7f5b04284810,64) 587ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a8fc10,2097152,0xcaa2b70,32768,0x7ffc3fd2dde0,0x7f5b04284c10,64) 458ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a90010,2097152,0xcaa2b80,32768,0x7ffc3fd2dde0,0x7f5b04285010,64) 482ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a90410,2097152,0xcaa2b90,32768,0x7ffc3fd2dde0,0x7f5b04285410,64) 434ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a90810,2097152,0xcaa2ba0,32768,0x7ffc3fd2dde0,0x7f5b04285810,64) 322ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a90c10,2097152,0xcaa2bb0,32768,0x7ffc3fd2dde0,0x7f5b04285c10,64) 466ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a91010,2097152,0xcaa2bc0,32768,0x7ffc3fd2dde0,0x7f5b04286010,64) 654ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a91410,2097152,0xcaa2bd0,32768,0x7ffc3fd2dde0,0x7f5b04286410,64) 412ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a91810,2097152,0xcaa2be0,32768,0x7ffc3fd2dde0,0x7f5b04286810,64) 315ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a91c10,2097152,0xcaa2bf0,32768,0x7ffc3fd2dde0,0x7f5b04286c10,64) 466ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a92010,2097152,0xcaa2c00,32768,0x7ffc3fd2dde0,0x7f5b04287010,64) 538ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a92410,2097152,0xcaa2c10,32768,0x7ffc3fd2dde0,0x7f5b04287410,64) 451ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a92810,2097152,0xcaa2c20,32768,0x7ffc3fd2dde0,0x7f5b04287810,64) 359ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a92c10,2097152,0xcaa2c30,32768,0x7ffc3fd2dde0,0x7f5b04287c10,64) 454ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a93010,2097152,0xcaa2c40,32768,0x7ffc3fd2dde0,0x7f5b04288010,64) 939ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a93410,2097152,0xcaa2c50,32768,0x7ffc3fd2dde0,0x7f5b04288410,64) 484ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a93810,2097152,0xcaa2c60,32768,0x7ffc3fd2dde0,0x7f5b04288810,64) 309ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a93c10,2097152,0xcaa2c70,32768,0x7ffc3fd2dde0,0x7f5b04288c10,64) 440ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a94010,2097152,0xcaa2c80,32768,0x7ffc3fd2dde0,0x7f5b04289010,64) 691ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a94410,2097152,0xcaa2c90,32768,0x7ffc3fd2dde0,0x7f5b04289410,64) 419ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a94810,2097152,0xcaa2ca0,32768,0x7ffc3fd2dde0,0x7f5b04289810,64) 330ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a94c10,2097152,0xcaa2cb0,32768,0x7ffc3fd2dde0,0x7f5b04289c10,64) 404ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a95010,2097152,0xcaa2cc0,32768,0x7ffc3fd2dde0,0x7f5b0428a010,64) 747ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a95410,2097152,0xcaa2cd0,32768,0x7ffc3fd2dde0,0x7f5b0428a410,64) 738ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a95810,2097152,0xcaa2ce0,32768,0x7ffc3fd2dde0,0x7f5b0428a810,64) 317ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a95c10,2097152,0xcaa2cf0,32768,0x7ffc3fd2dde0,0x7f5b0428ac10,64) 509ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a96010,2097152,0xcaa2d00,32768,0x7ffc3fd2dde0,0x7f5b0428b010,64) 834ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a96410,2097152,0xcaa2d10,32768,0x7ffc3fd2dde0,0x7f5b0428b410,64) 417ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a96810,2097152,0xcaa2d20,32768,0x7ffc3fd2dde0,0x7f5b0428b810,64) 441ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a96c10,2097152,0xcaa2d30,32768,0x7ffc3fd2dde0,0x7f5b0428bc10,64) 453ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a97010,2097152,0xcaa2d40,32768,0x7ffc3fd2dde0,0x7f5b0428c010,64) 779ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a97410,2097152,0xcaa2d50,32768,0x7ffc3fd2dde0,0x7f5b0428c410,64) 514ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a97810,2097152,0xcaa2d60,32768,0x7ffc3fd2dde0,0x7f5b0428c810,64) 542ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a97c10,2097152,0xcaa2d70,32768,0x7ffc3fd2dde0,0x7f5b0428cc10,64) 462ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a98010,2097152,0xcaa2d80,32768,0x7ffc3fd2dde0,0x7f5b0428d010,64) 672ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a98410,2097152,0xcaa2d90,32768,0x7ffc3fd2dde0,0x7f5b0428d410,64) 458ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a98810,2097152,0xcaa2da0,32768,0x7ffc3fd2dde0,0x7f5b0428d810,64) 311ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a98c10,2097152,0xcaa2db0,32768,0x7ffc3fd2dde0,0x7f5b0428dc10,64) 462ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a99010,2097152,0xcaa2dc0,32768,0x7ffc3fd2dde0,0x7f5b0428e010,64) 667ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a99410,2097152,0xcaa2dd0,32768,0x7ffc3fd2dde0,0x7f5b0428e410,64) 2.99us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a99810,2097152,0xcaa2de0,32768,0x7ffc3fd2dde0,0x7f5b0428e810,64) 561ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a99c10,2097152,0xcaa2df0,32768,0x7ffc3fd2dde0,0x7f5b0428ec10,64) 563ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a9a010,2097152,0xcaa2e00,32768,0x7ffc3fd2dde0,0x7f5b0428f010,64) 551ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a9a410,2097152,0xcaa2e10,32768,0x7ffc3fd2dde0,0x7f5b0428f410,64) 469ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a9a810,2097152,0xcaa2e20,32768,0x7ffc3fd2dde0,0x7f5b0428f810,64) 456ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a9ac10,2097152,0xcaa2e30,32768,0x7ffc3fd2dde0,0x7f5b0428fc10,64) 400ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a9b010,2097152,0xcaa2e40,32768,0x7ffc3fd2dde0,0x7f5b04290010,64) 680ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a9b410,2097152,0xcaa2e50,32768,0x7ffc3fd2dde0,0x7f5b04290410,64) 477ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07a9b810,2097152,0xcaa2e60,32768,0x7ffc3fd2dde0,0x7f5b04290810,64) 292ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ [... another 100 lines with variations from 200ns to 1us ]
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ab4c10,2097152,0xcaa34b0,32768,0x7ffc3fd2dde0,0x7f5b042a9c10,64) 479ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ab5010,2097152,0xcaa34c0,32768,0x7ffc3fd2dde0,0x7f5b042aa010,64) 643ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ab5410,2097152,0xcaa34d0,32768,0x7ffc3fd2dde0,0x7f5b042aa410,64) 414ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ab5810,2097152,0xcaa34e0,32768,0x7ffc3fd2dde0,0x7f5b042aa810,64) 296ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ab5c10,2097152,0xcaa34f0,32768,0x7ffc3fd2dde0,0x7f5b042aac10,64) 404ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ab6010,2097152,0xcaa3500,32768,0x7ffc3fd2dde0,0x7f5b042ab010,64) 905ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ab6410,2097152,0xcaa3510,32768,0x7ffc3fd2dde0,0x7f5b042ab410,64) 635ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ab6810,2097152,0xcaa3520,32768,0x7ffc3fd2dde0,0x7f5b042ab810,64) 304ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ab6c10,2097152,0xcaa3530,32768,0x7ffc3fd2dde0,0x7f5b042abc10,64) 462ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ab7010,2097152,0xcaa3540,32768,0x7ffc3fd2dde0,0x7f5b042ac010,64) 590ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ab7410,2097152,0xcaa3550,32768,0x7ffc3fd2dde0,0x7f5b042ac410,64) 395ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ab7810,2097152,0xcaa3560,32768,0x7ffc3fd2dde0,0x7f5b042ac810,64) 320ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ab7c10,2097152,0xcaa3570,32768,0x7ffc3fd2dde0,0x7f5b042acc10,64) 471ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ab8010,2097152,0xcaa3580,32768,0x7ffc3fd2dde0,0x7f5b042ad010,64) 1.12us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ab8410,2097152,0xcaa3590,32768,0x7ffc3fd2dde0,0x7f5b042ad410,64) 777ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ab8810,2097152,0xcaa35a0,32768,0x7ffc3fd2dde0,0x7f5b042ad810,64) 307ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ab8c10,2097152,0xcaa35b0,32768,0x7ffc3fd2dde0,0x7f5b042adc10,64) 572ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ab9010,2097152,0xcaa35c0,32768,0x7ffc3fd2dde0,0x7f5b042ae010,64) 799ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ab9410,2097152,0xcaa35d0,32768,0x7ffc3fd2dde0,0x7f5b042ae410,64) 391ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ab9810,2097152,0xcaa35e0,32768,0x7ffc3fd2dde0,0x7f5b042ae810,64) 307ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ab9c10,2097152,0xcaa35f0,32768,0x7ffc3fd2dde0,0x7f5b042aec10,64) 669ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07aba010,2097152,0xcaa3600,32768,0x7ffc3fd2dde0,0x7f5b042af010,64) 492ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07aba410,2097152,0xcaa3610,32768,0x7ffc3fd2dde0,0x7f5b042af410,64) 404ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07aba810,2097152,0xcaa3620,32768,0x7ffc3fd2dde0,0x7f5b042af810,64) 315ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07abac10,2097152,0xcaa3630,32768,0x7ffc3fd2dde0,0x7f5b042afc10,64) 676ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07abb010,2097152,0xcaa3640,32768,0x7ffc3fd2dde0,0x7f5b042b0010,64) 495ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07abb410,2097152,0xcaa3650,32768,0x7ffc3fd2dde0,0x7f5b042b0410,64) 373ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07abb810,2097152,0xcaa3660,32768,0x7ffc3fd2dde0,0x7f5b042b0810,64) 354ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07abbc10,2097152,0xcaa3670,32768,0x7ffc3fd2dde0,0x7f5b042b0c10,64) 454ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07abc010,2097152,0xcaa3680,32768,0x7ffc3fd2dde0,0x7f5b042b1010,64) 769ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07abc410,2097152,0xcaa3690,32768,0x7ffc3fd2dde0,0x7f5b042b1410,64) 404ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07abc810,2097152,0xcaa36a0,32768,0x7ffc3fd2dde0,0x7f5b042b1810,64) 481ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07abcc10,2097152,0xcaa36b0,32768,0x7ffc3fd2dde0,0x7f5b042b1c10,64) 469ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07abd010,2097152,0xcaa36c0,32768,0x7ffc3fd2dde0,0x7f5b042b2010,64) 481ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07abd410,2097152,0xcaa36d0,32768,0x7ffc3fd2dde0,0x7f5b042b2410,64) 501ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07abd810,2097152,0xcaa36e0,32768,0x7ffc3fd2dde0,0x7f5b042b2810,64) 373ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07abdc10,2097152,0xcaa36f0,32768,0x7ffc3fd2dde0,0x7f5b042b2c10,64) 767ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07abe010,2097152,0xcaa3700,32768,0x7ffc3fd2dde0,0x7f5b042b3010,64) 471ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07abe410,2097152,0xcaa3710,32768,0x7ffc3fd2dde0,0x7f5b042b3410,64) 635ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07abe810,2097152,0xcaa3720,32768,0x7ffc3fd2dde0,0x7f5b042b3810,64) 507ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07abec10,2097152,0xcaa3730,32768,0x7ffc3fd2dde0,0x7f5b042b3c10,64) 4.44us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07abf010,2097152,0xcaa3740,32768,0x7ffc3fd2dde0,0x7f5b042b4010,64) 1.39us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07abf410,2097152,0xcaa3750,32768,0x7ffc3fd2dde0,0x7f5b042b4410,64) 944ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07abf810,2097152,0xcaa3760,32768,0x7ffc3fd2dde0,0x7f5b042b4810,64) 581ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07abfc10,2097152,0xcaa3770,32768,0x7ffc3fd2dde0,0x7f5b042b4c10,64) 417ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac0010,2097152,0xcaa3780,32768,0x7ffc3fd2dde0,0x7f5b042b5010,64) 654ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac0410,2097152,0xcaa3790,32768,0x7ffc3fd2dde0,0x7f5b042b5410,64) 423ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac0810,2097152,0xcaa37a0,32768,0x7ffc3fd2dde0,0x7f5b042b5810,64) 345ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac0c10,2097152,0xcaa37b0,32768,0x7ffc3fd2dde0,0x7f5b042b5c10,64) 486ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac1010,2097152,0xcaa37c0,32768,0x7ffc3fd2dde0,0x7f5b042b6010,64) 1.22us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac1410,2097152,0xcaa37d0,32768,0x7ffc3fd2dde0,0x7f5b042b6410,64) 447ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac1810,2097152,0xcaa37e0,32768,0x7ffc3fd2dde0,0x7f5b042b6810,64) 339ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac1c10,2097152,0xcaa37f0,32768,0x7ffc3fd2dde0,0x7f5b042b6c10,64) 497ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac2010,2097152,0xcaa3800,32768,0x7ffc3fd2dde0,0x7f5b042b7010,64) 566ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac2410,2097152,0xcaa3810,32768,0x7ffc3fd2dde0,0x7f5b042b7410,64) 445ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac2810,2097152,0xcaa3820,32768,0x7ffc3fd2dde0,0x7f5b042b7810,64) 549ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac2c10,2097152,0xcaa3830,32768,0x7ffc3fd2dde0,0x7f5b042b7c10,64) 468ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac3010,2097152,0xcaa3840,32768,0x7ffc3fd2dde0,0x7f5b042b8010,64) 585ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac3410,2097152,0xcaa3850,32768,0x7ffc3fd2dde0,0x7f5b042b8410,64) 434ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac3810,2097152,0xcaa3860,32768,0x7ffc3fd2dde0,0x7f5b042b8810,64) 594ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac3c10,2097152,0xcaa3870,32768,0x7ffc3fd2dde0,0x7f5b042b8c10,64) 488ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac4010,2097152,0xcaa3880,32768,0x7ffc3fd2dde0,0x7f5b042b9010,64) 514ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac4410,2097152,0xcaa3890,32768,0x7ffc3fd2dde0,0x7f5b042b9410,64) 404ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac4810,2097152,0xcaa38a0,32768,0x7ffc3fd2dde0,0x7f5b042b9810,64) 400ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac4c10,2097152,0xcaa38b0,32768,0x7ffc3fd2dde0,0x7f5b042b9c10,64) 760ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac5010,2097152,0xcaa38c0,32768,0x7ffc3fd2dde0,0x7f5b042ba010,64) 572ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac5410,2097152,0xcaa38d0,32768,0x7ffc3fd2dde0,0x7f5b042ba410,64) 818ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac5810,2097152,0xcaa38e0,32768,0x7ffc3fd2dde0,0x7f5b042ba810,64) 607ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac5c10,2097152,0xcaa38f0,32768,0x7ffc3fd2dde0,0x7f5b042bac10,64) 931ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac6010,2097152,0xcaa3900,32768,0x7ffc3fd2dde0,0x7f5b042bb010,64) 648ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac6410,2097152,0xcaa3910,32768,0x7ffc3fd2dde0,0x7f5b042bb410,64) 414ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac6810,2097152,0xcaa3920,32768,0x7ffc3fd2dde0,0x7f5b042bb810,64) 488ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac6c10,2097152,0xcaa3930,32768,0x7ffc3fd2dde0,0x7f5b042bbc10,64) 732ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac7010,2097152,0xcaa3940,32768,0x7ffc3fd2dde0,0x7f5b042bc010,64) 684ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac7410,2097152,0xcaa3950,32768,0x7ffc3fd2dde0,0x7f5b042bc410,64) 471ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac7810,2097152,0xcaa3960,32768,0x7ffc3fd2dde0,0x7f5b042bc810,64) 302ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac7c10,2097152,0xcaa3970,32768,0x7ffc3fd2dde0,0x7f5b042bcc10,64) 466ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac8010,2097152,0xcaa3980,32768,0x7ffc3fd2dde0,0x7f5b042bd010,64) 698ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac8410,2097152,0xcaa3990,32768,0x7ffc3fd2dde0,0x7f5b042bd410,64) 732ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac8810,2097152,0xcaa39a0,32768,0x7ffc3fd2dde0,0x7f5b042bd810,64) 462ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac8c10,2097152,0xcaa39b0,32768,0x7ffc3fd2dde0,0x7f5b042bdc10,64) 386ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac9010,2097152,0xcaa39c0,32768,0x7ffc3fd2dde0,0x7f5b042be010,64) 818ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac9410,2097152,0xcaa39d0,32768,0x7ffc3fd2dde0,0x7f5b042be410,64) 732ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac9810,2097152,0xcaa39e0,32768,0x7ffc3fd2dde0,0x7f5b042be810,64) 305ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ac9c10,2097152,0xcaa39f0,32768,0x7ffc3fd2dde0,0x7f5b042bec10,64) 479ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07aca010,2097152,0xcaa3a00,32768,0x7ffc3fd2dde0,0x7f5b042bf010,64) 885ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07aca410,2097152,0xcaa3a10,32768,0x7ffc3fd2dde0,0x7f5b042bf410,64) 706ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07aca810,2097152,0xcaa3a20,32768,0x7ffc3fd2dde0,0x7f5b042bf810,64) 307ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07acac10,2097152,0xcaa3a30,32768,0x7ffc3fd2dde0,0x7f5b042bfc10,64) 395ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07acb010,2097152,0xcaa3a40,32768,0x7ffc3fd2dde0,0x7f5b042c0010,64) 870ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07acb410,2097152,0xcaa3a50,32768,0x7ffc3fd2dde0,0x7f5b042c0410,64) 352ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07acb810,2097152,0xcaa3a60,32768,0x7ffc3fd2dde0,0x7f5b042c0810,64) 792ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07acbc10,2097152,0xcaa3a70,32768,0x7ffc3fd2dde0,0x7f5b042c0c10,64) 449ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07acc010,2097152,0xcaa3a80,32768,0x7ffc3fd2dde0,0x7f5b042c1010,64) 821ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07acc410,2097152,0xcaa3a90,32768,0x7ffc3fd2dde0,0x7f5b042c1410,64) 382ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07acc810,2097152,0xcaa3aa0,32768,0x7ffc3fd2dde0,0x7f5b042c1810,64) 292ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07accc10,2097152,0xcaa3ab0,32768,0x7ffc3fd2dde0,0x7f5b042c1c10,64) 454ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07acd010,2097152,0xcaa3ac0,32768,0x7ffc3fd2dde0,0x7f5b042c2010,64) 564ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07acd410,2097152,0xcaa3ad0,32768,0x7ffc3fd2dde0,0x7f5b042c2410,64) 373ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07acd810,2097152,0xcaa3ae0,32768,0x7ffc3fd2dde0,0x7f5b042c2810,64) 292ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07acdc10,2097152,0xcaa3af0,32768,0x7ffc3fd2dde0,0x7f5b042c2c10,64) 458ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ace010,2097152,0xcaa3b00,32768,0x7ffc3fd2dde0,0x7f5b042c3010,64) 581ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ace410,2097152,0xcaa3b10,32768,0x7ffc3fd2dde0,0x7f5b042c3410,64) 412ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ace810,2097152,0xcaa3b20,32768,0x7ffc3fd2dde0,0x7f5b042c3810,64) 302ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07acec10,2097152,0xcaa3b30,32768,0x7ffc3fd2dde0,0x7f5b042c3c10,64) 453ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07acf010,2097152,0xcaa3b40,32768,0x7ffc3fd2dde0,0x7f5b042c4010,64) 715ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07acf410,2097152,0xcaa3b50,32768,0x7ffc3fd2dde0,0x7f5b042c4410,64) 399ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07acf810,2097152,0xcaa3b60,32768,0x7ffc3fd2dde0,0x7f5b042c4810,64) 486ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07acfc10,2097152,0xcaa3b70,32768,0x7ffc3fd2dde0,0x7f5b042c4c10,64) 458ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad0010,2097152,0xcaa3b80,32768,0x7ffc3fd2dde0,0x7f5b042c5010,64) 719ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad0410,2097152,0xcaa3b90,32768,0x7ffc3fd2dde0,0x7f5b042c5410,64) 427ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad0810,2097152,0xcaa3ba0,32768,0x7ffc3fd2dde0,0x7f5b042c5810,64) 520ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad0c10,2097152,0xcaa3bb0,32768,0x7ffc3fd2dde0,0x7f5b042c5c10,64) 456ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad1010,2097152,0xcaa3bc0,32768,0x7ffc3fd2dde0,0x7f5b042c6010,64) 812ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad1410,2097152,0xcaa3bd0,32768,0x7ffc3fd2dde0,0x7f5b042c6410,64) 387ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad1810,2097152,0xcaa3be0,32768,0x7ffc3fd2dde0,0x7f5b042c6810,64) 311ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad1c10,2097152,0xcaa3bf0,32768,0x7ffc3fd2dde0,0x7f5b042c6c10,64) 453ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad2010,2097152,0xcaa3c00,32768,0x7ffc3fd2dde0,0x7f5b042c7010,64) 494ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad2410,2097152,0xcaa3c10,32768,0x7ffc3fd2dde0,0x7f5b042c7410,64) 373ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad2810,2097152,0xcaa3c20,32768,0x7ffc3fd2dde0,0x7f5b042c7810,64) 291ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad2c10,2097152,0xcaa3c30,32768,0x7ffc3fd2dde0,0x7f5b042c7c10,64) 719ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad3010,2097152,0xcaa3c40,32768,0x7ffc3fd2dde0,0x7f5b042c8010,64) 490ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad3410,2097152,0xcaa3c50,32768,0x7ffc3fd2dde0,0x7f5b042c8410,64) 622ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad3810,2097152,0xcaa3c60,32768,0x7ffc3fd2dde0,0x7f5b042c8810,64) 298ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad3c10,2097152,0xcaa3c70,32768,0x7ffc3fd2dde0,0x7f5b042c8c10,64) 475ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad4010,2097152,0xcaa3c80,32768,0x7ffc3fd2dde0,0x7f5b042c9010,64) 490ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad4410,2097152,0xcaa3c90,32768,0x7ffc3fd2dde0,0x7f5b042c9410,64) 557ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad4810,2097152,0xcaa3ca0,32768,0x7ffc3fd2dde0,0x7f5b042c9810,64) 311ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad4c10,2097152,0xcaa3cb0,32768,0x7ffc3fd2dde0,0x7f5b042c9c10,64) 475ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad5010,2097152,0xcaa3cc0,32768,0x7ffc3fd2dde0,0x7f5b042ca010,64) 827ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad5410,2097152,0xcaa3cd0,32768,0x7ffc3fd2dde0,0x7f5b042ca410,64) 384ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad5810,2097152,0xcaa3ce0,32768,0x7ffc3fd2dde0,0x7f5b042ca810,64) 548ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad5c10,2097152,0xcaa3cf0,32768,0x7ffc3fd2dde0,0x7f5b042cac10,64) 456ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad6010,2097152,0xcaa3d00,32768,0x7ffc3fd2dde0,0x7f5b042cb010,64) 630ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad6410,2097152,0xcaa3d10,32768,0x7ffc3fd2dde0,0x7f5b042cb410,64) 387ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad6810,2097152,0xcaa3d20,32768,0x7ffc3fd2dde0,0x7f5b042cb810,64) 305ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad6c10,2097152,0xcaa3d30,32768,0x7ffc3fd2dde0,0x7f5b042cbc10,64) 458ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad7010,2097152,0xcaa3d40,32768,0x7ffc3fd2dde0,0x7f5b042cc010,64) 700ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad7410,2097152,0xcaa3d50,32768,0x7ffc3fd2dde0,0x7f5b042cc410,64) 747ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad7810,2097152,0xcaa3d60,32768,0x7ffc3fd2dde0,0x7f5b042cc810,64) 350ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad7c10,2097152,0xcaa3d70,32768,0x7ffc3fd2dde0,0x7f5b042ccc10,64) 4.41us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad8010,2097152,0xcaa3d80,32768,0x7ffc3fd2dde0,0x7f5b042cd010,64) 1.27us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad8410,2097152,0xcaa3d90,32768,0x7ffc3fd2dde0,0x7f5b042cd410,64) 1.02us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad8810,2097152,0xcaa3da0,32768,0x7ffc3fd2dde0,0x7f5b042cd810,64) 991ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad8c10,2097152,0xcaa3db0,32768,0x7ffc3fd2dde0,0x7f5b042cdc10,64) 1.07us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad9010,2097152,0xcaa3dc0,32768,0x7ffc3fd2dde0,0x7f5b042ce010,64) 1.27us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad9410,2097152,0xcaa3dd0,32768,0x7ffc3fd2dde0,0x7f5b042ce410,64) 1.01us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad9810,2097152,0xcaa3de0,32768,0x7ffc3fd2dde0,0x7f5b042ce810,64) 952ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ad9c10,2097152,0xcaa3df0,32768,0x7ffc3fd2dde0,0x7f5b042cec10,64) 1.04us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ada010,2097152,0xcaa3e00,32768,0x7ffc3fd2dde0,0x7f5b042cf010,64) 1.26us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ada410,2097152,0xcaa3e10,32768,0x7ffc3fd2dde0,0x7f5b042cf410,64) 1.14us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ada810,2097152,0xcaa3e20,32768,0x7ffc3fd2dde0,0x7f5b042cf810,64) 827ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07adac10,2097152,0xcaa3e30,32768,0x7ffc3fd2dde0,0x7f5b042cfc10,64) 939ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07adb010,2097152,0xcaa3e40,32768,0x7ffc3fd2dde0,0x7f5b042d0010,64) 1.46us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07adb410,2097152,0xcaa3e50,32768,0x7ffc3fd2dde0,0x7f5b042d0410,64) 957ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07adb810,2097152,0xcaa3e60,32768,0x7ffc3fd2dde0,0x7f5b042d0810,64) 827ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07adbc10,2097152,0xcaa3e70,32768,0x7ffc3fd2dde0,0x7f5b042d0c10,64) 1.02us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07adc010,2097152,0xcaa3e80,32768,0x7ffc3fd2dde0,0x7f5b042d1010,64) 1.34us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07adc410,2097152,0xcaa3e90,32768,0x7ffc3fd2dde0,0x7f5b042d1410,64) 888ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07adc810,2097152,0xcaa3ea0,32768,0x7ffc3fd2dde0,0x7f5b042d1810,64) 814ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07adcc10,2097152,0xcaa3eb0,32768,0x7ffc3fd2dde0,0x7f5b042d1c10,64) 1.21us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07add010,2097152,0xcaa3ec0,32768,0x7ffc3fd2dde0,0x7f5b042d2010,64) 1.29us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07add410,2097152,0xcaa3ed0,32768,0x7ffc3fd2dde0,0x7f5b042d2410,64) 888ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07add810,2097152,0xcaa3ee0,32768,0x7ffc3fd2dde0,0x7f5b042d2810,64) 831ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07addc10,2097152,0xcaa3ef0,32768,0x7ffc3fd2dde0,0x7f5b042d2c10,64) 1.03us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ade010,2097152,0xcaa3f00,32768,0x7ffc3fd2dde0,0x7f5b042d3010,64) 1.14us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ade410,2097152,0xcaa3f10,32768,0x7ffc3fd2dde0,0x7f5b042d3410,64) 1.25us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ade810,2097152,0xcaa3f20,32768,0x7ffc3fd2dde0,0x7f5b042d3810,64) 956ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07adec10,2097152,0xcaa3f30,32768,0x7ffc3fd2dde0,0x7f5b042d3c10,64) 1.11us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07adf010,2097152,0xcaa3f40,32768,0x7ffc3fd2dde0,0x7f5b042d4010,64) 1.29us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07adf410,2097152,0xcaa3f50,32768,0x7ffc3fd2dde0,0x7f5b042d4410,64) 902ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07adf810,2097152,0xcaa3f60,32768,0x7ffc3fd2dde0,0x7f5b042d4810,64) 885ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07adfc10,2097152,0xcaa3f70,32768,0x7ffc3fd2dde0,0x7f5b042d4c10,64) 1.02us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae0010,2097152,0xcaa3f80,32768,0x7ffc3fd2dde0,0x7f5b042d5010,64) 1.17us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae0410,2097152,0xcaa3f90,32768,0x7ffc3fd2dde0,0x7f5b042d5410,64) 1.13us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae0810,2097152,0xcaa3fa0,32768,0x7ffc3fd2dde0,0x7f5b042d5810,64) 844ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae0c10,2097152,0xcaa3fb0,32768,0x7ffc3fd2dde0,0x7f5b042d5c10,64) 1.05us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae1010,2097152,0xcaa3fc0,32768,0x7ffc3fd2dde0,0x7f5b042d6010,64) 1.52us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae1410,2097152,0xcaa3fd0,32768,0x7ffc3fd2dde0,0x7f5b042d6410,64) 1.06us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae1810,2097152,0xcaa3fe0,32768,0x7ffc3fd2dde0,0x7f5b042d6810,64) 833ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae1c10,2097152,0xcaa3ff0,32768,0x7ffc3fd2dde0,0x7f5b042d6c10,64) 1.47us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae2010,2097152,0xcaa4000,32768,0x7ffc3fd2dde0,0x7f5b042d7010,64) 1.34us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae2410,2097152,0xcaa4010,32768,0x7ffc3fd2dde0,0x7f5b042d7410,64) 834ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae2810,2097152,0xcaa4020,32768,0x7ffc3fd2dde0,0x7f5b042d7810,64) 834ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae2c10,2097152,0xcaa4030,32768,0x7ffc3fd2dde0,0x7f5b042d7c10,64) 1.02us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae3010,2097152,0xcaa4040,32768,0x7ffc3fd2dde0,0x7f5b042d8010,64) 900ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae3410,2097152,0xcaa4050,32768,0x7ffc3fd2dde0,0x7f5b042d8410,64) 557ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae3810,2097152,0xcaa4060,32768,0x7ffc3fd2dde0,0x7f5b042d8810,64) 298ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae3c10,2097152,0xcaa4070,32768,0x7ffc3fd2dde0,0x7f5b042d8c10,64) 766ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae4010,2097152,0xcaa4080,32768,0x7ffc3fd2dde0,0x7f5b042d9010,64) 719ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae4410,2097152,0xcaa4090,32768,0x7ffc3fd2dde0,0x7f5b042d9410,64) 4.42us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae4810,2097152,0xcaa40a0,32768,0x7ffc3fd2dde0,0x7f5b042d9810,64) 1.54us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae4c10,2097152,0xcaa40b0,32768,0x7ffc3fd2dde0,0x7f5b042d9c10,64) 1.08us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae5010,2097152,0xcaa40c0,32768,0x7ffc3fd2dde0,0x7f5b042da010,64) 1.22us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae5410,2097152,0xcaa40d0,32768,0x7ffc3fd2dde0,0x7f5b042da410,64) 1.14us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae5810,2097152,0xcaa40e0,32768,0x7ffc3fd2dde0,0x7f5b042da810,64) 1.02us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae5c10,2097152,0xcaa40f0,32768,0x7ffc3fd2dde0,0x7f5b042dac10,64) 1.06us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae6010,2097152,0xcaa4100,32768,0x7ffc3fd2dde0,0x7f5b042db010,64) 1.09us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae6410,2097152,0xcaa4110,32768,0x7ffc3fd2dde0,0x7f5b042db410,64) 1.02us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae6810,2097152,0xcaa4120,32768,0x7ffc3fd2dde0,0x7f5b042db810,64) 838ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae6c10,2097152,0xcaa4130,32768,0x7ffc3fd2dde0,0x7f5b042dbc10,64) 1.08us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae7010,2097152,0xcaa4140,32768,0x7ffc3fd2dde0,0x7f5b042dc010,64) 1.36us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae7410,2097152,0xcaa4150,32768,0x7ffc3fd2dde0,0x7f5b042dc410,64) 1.00us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae7810,2097152,0xcaa4160,32768,0x7ffc3fd2dde0,0x7f5b042dc810,64) 846ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae7c10,2097152,0xcaa4170,32768,0x7ffc3fd2dde0,0x7f5b042dcc10,64) 985ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae8010,2097152,0xcaa4180,32768,0x7ffc3fd2dde0,0x7f5b042dd010,64) 911ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae8410,2097152,0xcaa4190,32768,0x7ffc3fd2dde0,0x7f5b042dd410,64) 836ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae8810,2097152,0xcaa41a0,32768,0x7ffc3fd2dde0,0x7f5b042dd810,64) 836ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae8c10,2097152,0xcaa41b0,32768,0x7ffc3fd2dde0,0x7f5b042ddc10,64) 1.49us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae9010,2097152,0xcaa41c0,32768,0x7ffc3fd2dde0,0x7f5b042de010,64) 1.06us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae9410,2097152,0xcaa41d0,32768,0x7ffc3fd2dde0,0x7f5b042de410,64) 933ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae9810,2097152,0xcaa41e0,32768,0x7ffc3fd2dde0,0x7f5b042de810,64) 840ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ae9c10,2097152,0xcaa41f0,32768,0x7ffc3fd2dde0,0x7f5b042dec10,64) 1.05us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07aea010,2097152,0xcaa4200,32768,0x7ffc3fd2dde0,0x7f5b042df010,64) 933ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07aea410,2097152,0xcaa4210,32768,0x7ffc3fd2dde0,0x7f5b042df410,64) 851ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07aea810,2097152,0xcaa4220,32768,0x7ffc3fd2dde0,0x7f5b042df810,64) 356ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07aeac10,2097152,0xcaa4230,32768,0x7ffc3fd2dde0,0x7f5b042dfc10,64) 535ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07aeb010,2097152,0xcaa4240,32768,0x7ffc3fd2dde0,0x7f5b042e0010,64) 702ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07aeb410,2097152,0xcaa4250,32768,0x7ffc3fd2dde0,0x7f5b042e0410,64) 443ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b04810,2097152,0xcaa48a0,32768,0x7ffc3fd2dde0,0x7f5b042f9810,64) 324ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ [... some 100 stable lines... ]
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b04c10,2097152,0xcaa48b0,32768,0x7ffc3fd2dde0,0x7f5b042f9c10,64) 559ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b05010,2097152,0xcaa48c0,32768,0x7ffc3fd2dde0,0x7f5b042fa010,64) 510ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b05410,2097152,0xcaa48d0,32768,0x7ffc3fd2dde0,0x7f5b042fa410,64) 421ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b05810,2097152,0xcaa48e0,32768,0x7ffc3fd2dde0,0x7f5b042fa810,64) 568ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b05c10,2097152,0xcaa48f0,32768,0x7ffc3fd2dde0,0x7f5b042fac10,64) 799ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b06010,2097152,0xcaa4900,32768,0x7ffc3fd2dde0,0x7f5b042fb010,64) 885ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b06410,2097152,0xcaa4910,32768,0x7ffc3fd2dde0,0x7f5b042fb410,64) 400ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b06810,2097152,0xcaa4920,32768,0x7ffc3fd2dde0,0x7f5b042fb810,64) 328ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b06c10,2097152,0xcaa4930,32768,0x7ffc3fd2dde0,0x7f5b042fbc10,64) 479ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b07010,2097152,0xcaa4940,32768,0x7ffc3fd2dde0,0x7f5b042fc010,64) 497ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b07410,2097152,0xcaa4950,32768,0x7ffc3fd2dde0,0x7f5b042fc410,64) 561ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b07810,2097152,0xcaa4960,32768,0x7ffc3fd2dde0,0x7f5b042fc810,64) 339ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b07c10,2097152,0xcaa4970,32768,0x7ffc3fd2dde0,0x7f5b042fcc10,64) 481ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b08010,2097152,0xcaa4980,32768,0x7ffc3fd2dde0,0x7f5b042fd010,64) 454ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b08410,2097152,0xcaa4990,32768,0x7ffc3fd2dde0,0x7f5b042fd410,64) 425ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b08810,2097152,0xcaa49a0,32768,0x7ffc3fd2dde0,0x7f5b042fd810,64) 462ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b08c10,2097152,0xcaa49b0,32768,0x7ffc3fd2dde0,0x7f5b042fdc10,64) 460ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b09010,2097152,0xcaa49c0,32768,0x7ffc3fd2dde0,0x7f5b042fe010,64) 697ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b09410,2097152,0xcaa49d0,32768,0x7ffc3fd2dde0,0x7f5b042fe410,64) 423ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b09810,2097152,0xcaa49e0,32768,0x7ffc3fd2dde0,0x7f5b042fe810,64) 330ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b09c10,2097152,0xcaa49f0,32768,0x7ffc3fd2dde0,0x7f5b042fec10,64) 4.36us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b0a010,2097152,0xcaa4a00,32768,0x7ffc3fd2dde0,0x7f5b042ff010,64) 1.66us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b0a410,2097152,0xcaa4a10,32768,0x7ffc3fd2dde0,0x7f5b042ff410,64) 1.19us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b0a810,2097152,0xcaa4a20,32768,0x7ffc3fd2dde0,0x7f5b042ff810,64) 883ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b0ac10,2097152,0xcaa4a30,32768,0x7ffc3fd2dde0,0x7f5b042ffc10,64) 1.18us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b0b010,2097152,0xcaa4a40,32768,0x7ffc3fd2dde0,0x7f5b04300010,64) 1.02us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b0b410,2097152,0xcaa4a50,32768,0x7ffc3fd2dde0,0x7f5b04300410,64) 874ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b0b810,2097152,0xcaa4a60,32768,0x7ffc3fd2dde0,0x7f5b04300810,64) 825ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b0bc10,2097152,0xcaa4a70,32768,0x7ffc3fd2dde0,0x7f5b04300c10,64) 995ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b0c010,2097152,0xcaa4a80,32768,0x7ffc3fd2dde0,0x7f5b04301010,64) 1.09us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b0c410,2097152,0xcaa4a90,32768,0x7ffc3fd2dde0,0x7f5b04301410,64) 844ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b0c810,2097152,0xcaa4aa0,32768,0x7ffc3fd2dde0,0x7f5b04301810,64) 810ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b0cc10,2097152,0xcaa4ab0,32768,0x7ffc3fd2dde0,0x7f5b04301c10,64) 987ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b0d010,2097152,0xcaa4ac0,32768,0x7ffc3fd2dde0,0x7f5b04302010,64) 950ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b0d410,2097152,0xcaa4ad0,32768,0x7ffc3fd2dde0,0x7f5b04302410,64) 894ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b0d810,2097152,0xcaa4ae0,32768,0x7ffc3fd2dde0,0x7f5b04302810,64) 857ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b0dc10,2097152,0xcaa4af0,32768,0x7ffc3fd2dde0,0x7f5b04302c10,64) 1.02us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b0e010,2097152,0xcaa4b00,32768,0x7ffc3fd2dde0,0x7f5b04303010,64) 1.00us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b0e410,2097152,0xcaa4b10,32768,0x7ffc3fd2dde0,0x7f5b04303410,64) 844ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b0e810,2097152,0xcaa4b20,32768,0x7ffc3fd2dde0,0x7f5b04303810,64) 792ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b0ec10,2097152,0xcaa4b30,32768,0x7ffc3fd2dde0,0x7f5b04303c10,64) 1.01us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b0f010,2097152,0xcaa4b40,32768,0x7ffc3fd2dde0,0x7f5b04304010,64) 1.10us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b0f410,2097152,0xcaa4b50,32768,0x7ffc3fd2dde0,0x7f5b04304410,64) 672ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b0f810,2097152,0xcaa4b60,32768,0x7ffc3fd2dde0,0x7f5b04304810,64) 387ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b0fc10,2097152,0xcaa4b70,32768,0x7ffc3fd2dde0,0x7f5b04304c10,64) 473ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b10010,2097152,0xcaa4b80,32768,0x7ffc3fd2dde0,0x7f5b04305010,64) 594ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b10410,2097152,0xcaa4b90,32768,0x7ffc3fd2dde0,0x7f5b04305410,64) 631ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b10810,2097152,0xcaa4ba0,32768,0x7ffc3fd2dde0,0x7f5b04305810,64) 363ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b10c10,2097152,0xcaa4bb0,32768,0x7ffc3fd2dde0,0x7f5b04305c10,64) 687ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b11010,2097152,0xcaa4bc0,32768,0x7ffc3fd2dde0,0x7f5b04306010,64) 773ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b11410,2097152,0xcaa4bd0,32768,0x7ffc3fd2dde0,0x7f5b04306410,64) 617ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b11810,2097152,0xcaa4be0,32768,0x7ffc3fd2dde0,0x7f5b04306810,64) 346ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b11c10,2097152,0xcaa4bf0,32768,0x7ffc3fd2dde0,0x7f5b04306c10,64) 481ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b12010,2097152,0xcaa4c00,32768,0x7ffc3fd2dde0,0x7f5b04307010,64) 527ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b12410,2097152,0xcaa4c10,32768,0x7ffc3fd2dde0,0x7f5b04307410,64) 400ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b12810,2097152,0xcaa4c20,32768,0x7ffc3fd2dde0,0x7f5b04307810,64) 333ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b12c10,2097152,0xcaa4c30,32768,0x7ffc3fd2dde0,0x7f5b04307c10,64) 510ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b13010,2097152,0xcaa4c40,32768,0x7ffc3fd2dde0,0x7f5b04308010,64) 754ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b13410,2097152,0xcaa4c50,32768,0x7ffc3fd2dde0,0x7f5b04308410,64) 609ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b13810,2097152,0xcaa4c60,32768,0x7ffc3fd2dde0,0x7f5b04308810,64) 369ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b13c10,2097152,0xcaa4c70,32768,0x7ffc3fd2dde0,0x7f5b04308c10,64) 468ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b14010,2097152,0xcaa4c80,32768,0x7ffc3fd2dde0,0x7f5b04309010,64) 924ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b14410,2097152,0xcaa4c90,32768,0x7ffc3fd2dde0,0x7f5b04309410,64) 412ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b14810,2097152,0xcaa4ca0,32768,0x7ffc3fd2dde0,0x7f5b04309810,64) 503ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b14c10,2097152,0xcaa4cb0,32768,0x7ffc3fd2dde0,0x7f5b04309c10,64) 505ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b15010,2097152,0xcaa4cc0,32768,0x7ffc3fd2dde0,0x7f5b0430a010,64) 760ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b15410,2097152,0xcaa4cd0,32768,0x7ffc3fd2dde0,0x7f5b0430a410,64) 400ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b15810,2097152,0xcaa4ce0,32768,0x7ffc3fd2dde0,0x7f5b0430a810,64) 693ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b15c10,2097152,0xcaa4cf0,32768,0x7ffc3fd2dde0,0x7f5b0430ac10,64) 482ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b16010,2097152,0xcaa4d00,32768,0x7ffc3fd2dde0,0x7f5b0430b010,64) 825ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b16410,2097152,0xcaa4d10,32768,0x7ffc3fd2dde0,0x7f5b0430b410,64) 466ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b16810,2097152,0xcaa4d20,32768,0x7ffc3fd2dde0,0x7f5b0430b810,64) 304ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b16c10,2097152,0xcaa4d30,32768,0x7ffc3fd2dde0,0x7f5b0430bc10,64) 525ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b17010,2097152,0xcaa4d40,32768,0x7ffc3fd2dde0,0x7f5b0430c010,64) 769ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b17410,2097152,0xcaa4d50,32768,0x7ffc3fd2dde0,0x7f5b0430c410,64) 389ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b17810,2097152,0xcaa4d60,32768,0x7ffc3fd2dde0,0x7f5b0430c810,64) 382ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b17c10,2097152,0xcaa4d70,32768,0x7ffc3fd2dde0,0x7f5b0430cc10,64) 747ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b18010,2097152,0xcaa4d80,32768,0x7ffc3fd2dde0,0x7f5b0430d010,64) 406ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b18410,2097152,0xcaa4d90,32768,0x7ffc3fd2dde0,0x7f5b0430d410,64) 371ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b18810,2097152,0xcaa4da0,32768,0x7ffc3fd2dde0,0x7f5b0430d810,64) 363ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b18c10,2097152,0xcaa4db0,32768,0x7ffc3fd2dde0,0x7f5b0430dc10,64) 821ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b19010,2097152,0xcaa4dc0,32768,0x7ffc3fd2dde0,0x7f5b0430e010,64) 481ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b19410,2097152,0xcaa4dd0,32768,0x7ffc3fd2dde0,0x7f5b0430e410,64) 624ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b19810,2097152,0xcaa4de0,32768,0x7ffc3fd2dde0,0x7f5b0430e810,64) 391ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b19c10,2097152,0xcaa4df0,32768,0x7ffc3fd2dde0,0x7f5b0430ec10,64) 481ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b1a010,2097152,0xcaa4e00,32768,0x7ffc3fd2dde0,0x7f5b0430f010,64) 529ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b1a410,2097152,0xcaa4e10,32768,0x7ffc3fd2dde0,0x7f5b0430f410,64) 715ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b1a810,2097152,0xcaa4e20,32768,0x7ffc3fd2dde0,0x7f5b0430f810,64) 307ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b1ac10,2097152,0xcaa4e30,32768,0x7ffc3fd2dde0,0x7f5b0430fc10,64) 382ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b1b010,2097152,0xcaa4e40,32768,0x7ffc3fd2dde0,0x7f5b04310010,64) 641ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b1b410,2097152,0xcaa4e50,32768,0x7ffc3fd2dde0,0x7f5b04310410,64) 378ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b1b810,2097152,0xcaa4e60,32768,0x7ffc3fd2dde0,0x7f5b04310810,64) 296ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b1bc10,2097152,0xcaa4e70,32768,0x7ffc3fd2dde0,0x7f5b04310c10,64) 404ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b1c010,2097152,0xcaa4e80,32768,0x7ffc3fd2dde0,0x7f5b04311010,64) 471ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b1c410,2097152,0xcaa4e90,32768,0x7ffc3fd2dde0,0x7f5b04311410,64) 387ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b1c810,2097152,0xcaa4ea0,32768,0x7ffc3fd2dde0,0x7f5b04311810,64) 544ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b1cc10,2097152,0xcaa4eb0,32768,0x7ffc3fd2dde0,0x7f5b04311c10,64) 397ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b1d010,2097152,0xcaa4ec0,32768,0x7ffc3fd2dde0,0x7f5b04312010,64) 674ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b1d410,2097152,0xcaa4ed0,32768,0x7ffc3fd2dde0,0x7f5b04312410,64) 415ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b1d810,2097152,0xcaa4ee0,32768,0x7ffc3fd2dde0,0x7f5b04312810,64) 369ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b1dc10,2097152,0xcaa4ef0,32768,0x7ffc3fd2dde0,0x7f5b04312c10,64) 469ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b1e010,2097152,0xcaa4f00,32768,0x7ffc3fd2dde0,0x7f5b04313010,64) 1.13us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b1e410,2097152,0xcaa4f10,32768,0x7ffc3fd2dde0,0x7f5b04313410,64) 466ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b1e810,2097152,0xcaa4f20,32768,0x7ffc3fd2dde0,0x7f5b04313810,64) 352ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b1ec10,2097152,0xcaa4f30,32768,0x7ffc3fd2dde0,0x7f5b04313c10,64) 466ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b1f010,2097152,0xcaa4f40,32768,0x7ffc3fd2dde0,0x7f5b04314010,64) 592ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b1f410,2097152,0xcaa4f50,32768,0x7ffc3fd2dde0,0x7f5b04314410,64) 469ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b1f810,2097152,0xcaa4f60,32768,0x7ffc3fd2dde0,0x7f5b04314810,64) 494ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b1fc10,2097152,0xcaa4f70,32768,0x7ffc3fd2dde0,0x7f5b04314c10,64) 397ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b20010,2097152,0xcaa4f80,32768,0x7ffc3fd2dde0,0x7f5b04315010,64) 741ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b20410,2097152,0xcaa4f90,32768,0x7ffc3fd2dde0,0x7f5b04315410,64) 423ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b20810,2097152,0xcaa4fa0,32768,0x7ffc3fd2dde0,0x7f5b04315810,64) 417ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b20c10,2097152,0xcaa4fb0,32768,0x7ffc3fd2dde0,0x7f5b04315c10,64) 464ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b21010,2097152,0xcaa4fc0,32768,0x7ffc3fd2dde0,0x7f5b04316010,64) 825ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b21410,2097152,0xcaa4fd0,32768,0x7ffc3fd2dde0,0x7f5b04316410,64) 393ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b21810,2097152,0xcaa4fe0,32768,0x7ffc3fd2dde0,0x7f5b04316810,64) 333ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b21c10,2097152,0xcaa4ff0,32768,0x7ffc3fd2dde0,0x7f5b04316c10,64) 479ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b22010,2097152,0xcaa5000,32768,0x7ffc3fd2dde0,0x7f5b04317010,64) 631ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ [... Some 500 lines of stuff...]
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b9f410,2097152,0xcaa6f50,32768,0x7ffc3fd2dde0,0x7f5b04394410,64) 352ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b9f810,2097152,0xcaa6f60,32768,0x7ffc3fd2dde0,0x7f5b04394810,64) 523ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07b9fc10,2097152,0xcaa6f70,32768,0x7ffc3fd2dde0,0x7f5b04394c10,64) 4.37us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ba0010,2097152,0xcaa6f80,32768,0x7ffc3fd2dde0,0x7f5b04395010,64) 1.48us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ba0410,2097152,0xcaa6f90,32768,0x7ffc3fd2dde0,0x7f5b04395410,64) 924ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ba0810,2097152,0xcaa6fa0,32768,0x7ffc3fd2dde0,0x7f5b04395810,64) 1.11us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ba0c10,2097152,0xcaa6fb0,32768,0x7ffc3fd2dde0,0x7f5b04395c10,64) 1.02us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ba1010,2097152,0xcaa6fc0,32768,0x7ffc3fd2dde0,0x7f5b04396010,64) 1.36us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ba1410,2097152,0xcaa6fd0,32768,0x7ffc3fd2dde0,0x7f5b04396410,64) 1.07us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ba1810,2097152,0xcaa6fe0,32768,0x7ffc3fd2dde0,0x7f5b04396810,64) 846ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ba1c10,2097152,0xcaa6ff0,32768,0x7ffc3fd2dde0,0x7f5b04396c10,64) 1.04us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07ba2010,2097152,0xcaa7000,32768,0x7ffc3fd2dde0,0x7f5b04397010,64) 1.20us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ [... Some 900 more lines of stuff...]
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c83010,2097152,0xcaaa840,32768,0x7ffc3fd2dde0,0x7f5b04478010,64) 1.07us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c83410,2097152,0xcaaa850,32768,0x7ffc3fd2dde0,0x7f5b04478410,64) 469ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c83810,2097152,0xcaaa860,32768,0x7ffc3fd2dde0,0x7f5b04478810,64) 520ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c83c10,2097152,0xcaaa870,32768,0x7ffc3fd2dde0,0x7f5b04478c10,64) 417ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c84010,2097152,0xcaaa880,32768,0x7ffc3fd2dde0,0x7f5b04479010,64) 563ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c84410,2097152,0xcaaa890,32768,0x7ffc3fd2dde0,0x7f5b04479410,64) 359ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c84810,2097152,0xcaaa8a0,32768,0x7ffc3fd2dde0,0x7f5b04479810,64) 328ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c84c10,2097152,0xcaaa8b0,32768,0x7ffc3fd2dde0,0x7f5b04479c10,64) 432ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c85010,2097152,0xcaaa8c0,32768,0x7ffc3fd2dde0,0x7f5b0447a010,64) 728ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c85410,2097152,0xcaaa8d0,32768,0x7ffc3fd2dde0,0x7f5b0447a410,64) 399ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c85810,2097152,0xcaaa8e0,32768,0x7ffc3fd2dde0,0x7f5b0447a810,64) 488ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c85c10,2097152,0xcaaa8f0,32768,0x7ffc3fd2dde0,0x7f5b0447ac10,64) 427ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c86010,2097152,0xcaaa900,32768,0x7ffc3fd2dde0,0x7f5b0447b010,64) 548ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c86410,2097152,0xcaaa910,32768,0x7ffc3fd2dde0,0x7f5b0447b410,64) 341ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c86810,2097152,0xcaaa920,32768,0x7ffc3fd2dde0,0x7f5b0447b810,64) 436ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c86c10,2097152,0xcaaa930,32768,0x7ffc3fd2dde0,0x7f5b0447bc10,64) 421ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c87010,2097152,0xcaaa940,32768,0x7ffc3fd2dde0,0x7f5b0447c010,64) 4.49us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c87410,2097152,0xcaaa950,32768,0x7ffc3fd2dde0,0x7f5b0447c410,64) 1.16us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c87810,2097152,0xcaaa960,32768,0x7ffc3fd2dde0,0x7f5b0447c810,64) 985ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c87c10,2097152,0xcaaa970,32768,0x7ffc3fd2dde0,0x7f5b0447cc10,64) 1.12us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c88010,2097152,0xcaaa980,32768,0x7ffc3fd2dde0,0x7f5b0447d010,64) 1.10us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c88410,2097152,0xcaaa990,32768,0x7ffc3fd2dde0,0x7f5b0447d410,64) 836ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c88810,2097152,0xcaaa9a0,32768,0x7ffc3fd2dde0,0x7f5b0447d810,64) 842ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c88c10,2097152,0xcaaa9b0,32768,0x7ffc3fd2dde0,0x7f5b0447dc10,64) 1.11us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c89010,2097152,0xcaaa9c0,32768,0x7ffc3fd2dde0,0x7f5b0447e010,64) 1.07us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c89410,2097152,0xcaaa9d0,32768,0x7ffc3fd2dde0,0x7f5b0447e410,64) 866ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c89810,2097152,0xcaaa9e0,32768,0x7ffc3fd2dde0,0x7f5b0447e810,64) 818ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c89c10,2097152,0xcaaa9f0,32768,0x7ffc3fd2dde0,0x7f5b0447ec10,64) 1.05us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c8a010,2097152,0xcaaaa00,32768,0x7ffc3fd2dde0,0x7f5b0447f010,64) 946ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c8a410,2097152,0xcaaaa10,32768,0x7ffc3fd2dde0,0x7f5b0447f410,64) 851ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c8a810,2097152,0xcaaaa20,32768,0x7ffc3fd2dde0,0x7f5b0447f810,64) 1.03us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c8ac10,2097152,0xcaaaa30,32768,0x7ffc3fd2dde0,0x7f5b0447fc10,64) 991ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c8b010,2097152,0xcaaaa40,32768,0x7ffc3fd2dde0,0x7f5b04480010,64) 1.13us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c8b410,2097152,0xcaaaa50,32768,0x7ffc3fd2dde0,0x7f5b04480410,64) 942ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c8b810,2097152,0xcaaaa60,32768,0x7ffc3fd2dde0,0x7f5b04480810,64) 831ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c8bc10,2097152,0xcaaaa70,32768,0x7ffc3fd2dde0,0x7f5b04480c10,64) 1.01us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c8c010,2097152,0xcaaaa80,32768,0x7ffc3fd2dde0,0x7f5b04481010,64) 993ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c8c410,2097152,0xcaaaa90,32768,0x7ffc3fd2dde0,0x7f5b04481410,64) 885ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c8c810,2097152,0xcaaaaa0,32768,0x7ffc3fd2dde0,0x7f5b04481810,64) 827ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c8cc10,2097152,0xcaaaab0,32768,0x7ffc3fd2dde0,0x7f5b04481c10,64) 1.24us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c8d010,2097152,0xcaaaac0,32768,0x7ffc3fd2dde0,0x7f5b04482010,64) 1.15us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c8d410,2097152,0xcaaaad0,32768,0x7ffc3fd2dde0,0x7f5b04482410,64) 937ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c8d810,2097152,0xcaaaae0,32768,0x7ffc3fd2dde0,0x7f5b04482810,64) 862ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c8dc10,2097152,0xcaaaaf0,32768,0x7ffc3fd2dde0,0x7f5b04482c10,64) 1.06us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c8e010,2097152,0xcaaab00,32768,0x7ffc3fd2dde0,0x7f5b04483010,64) 1.18us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c8e410,2097152,0xcaaab10,32768,0x7ffc3fd2dde0,0x7f5b04483410,64) 853ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c8e810,2097152,0xcaaab20,32768,0x7ffc3fd2dde0,0x7f5b04483810,64) 844ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c8ec10,2097152,0xcaaab30,32768,0x7ffc3fd2dde0,0x7f5b04483c10,64) 1.01us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c8f010,2097152,0xcaaab40,32768,0x7ffc3fd2dde0,0x7f5b04484010,64) 982ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c8f410,2097152,0xcaaab50,32768,0x7ffc3fd2dde0,0x7f5b04484410,64) 924ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c8f810,2097152,0xcaaab60,32768,0x7ffc3fd2dde0,0x7f5b04484810,64) 911ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c8fc10,2097152,0xcaaab70,32768,0x7ffc3fd2dde0,0x7f5b04484c10,64) 1.31us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c90010,2097152,0xcaaab80,32768,0x7ffc3fd2dde0,0x7f5b04485010,64) 1.31us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c90410,2097152,0xcaaab90,32768,0x7ffc3fd2dde0,0x7f5b04485410,64) 946ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c90810,2097152,0xcaaaba0,32768,0x7ffc3fd2dde0,0x7f5b04485810,64) 834ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c90c10,2097152,0xcaaabb0,32768,0x7ffc3fd2dde0,0x7f5b04485c10,64) 430ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c91010,2097152,0xcaaabc0,32768,0x7ffc3fd2dde0,0x7f5b04486010,64) 821ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c91410,2097152,0xcaaabd0,32768,0x7ffc3fd2dde0,0x7f5b04486410,64) 574ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c91810,2097152,0xcaaabe0,32768,0x7ffc3fd2dde0,0x7f5b04486810,64) 248ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c91c10,2097152,0xcaaabf0,32768,0x7ffc3fd2dde0,0x7f5b04486c10,64) 708ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c92010,2097152,0xcaaac00,32768,0x7ffc3fd2dde0,0x7f5b04487010,64) 706ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c92410,2097152,0xcaaac10,32768,0x7ffc3fd2dde0,0x7f5b04487410,64) 535ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c92810,2097152,0xcaaac20,32768,0x7ffc3fd2dde0,0x7f5b04487810,64) 261ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c92c10,2097152,0xcaaac30,32768,0x7ffc3fd2dde0,0x7f5b04487c10,64) 389ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c93010,2097152,0xcaaac40,32768,0x7ffc3fd2dde0,0x7f5b04488010,64) 848ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c93410,2097152,0xcaaac50,32768,0x7ffc3fd2dde0,0x7f5b04488410,64) 641ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c93810,2097152,0xcaaac60,32768,0x7ffc3fd2dde0,0x7f5b04488810,64) 257ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c93c10,2097152,0xcaaac70,32768,0x7ffc3fd2dde0,0x7f5b04488c10,64) 408ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c94010,2097152,0xcaaac80,32768,0x7ffc3fd2dde0,0x7f5b04489010,64) 421ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c94410,2097152,0xcaaac90,32768,0x7ffc3fd2dde0,0x7f5b04489410,64) 674ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c94810,2097152,0xcaaaca0,32768,0x7ffc3fd2dde0,0x7f5b04489810,64) 270ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c94c10,2097152,0xcaaacb0,32768,0x7ffc3fd2dde0,0x7f5b04489c10,64) 423ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c95010,2097152,0xcaaacc0,32768,0x7ffc3fd2dde0,0x7f5b0448a010,64) 698ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c95410,2097152,0xcaaacd0,32768,0x7ffc3fd2dde0,0x7f5b0448a410,64) 330ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c95810,2097152,0xcaaace0,32768,0x7ffc3fd2dde0,0x7f5b0448a810,64) 574ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b07c95c10,2097152,0xcaaacf0,32768,0x7ffc3fd2dde0,0x7f5b0448ac10,64) 400ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ [... Some 30 000 lines of mess...]
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099e2410,2097152,0xcb20010,32768,0x7ffc3fd2dde0,0x7f5b061d7410,64) 374ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099e2810,2097152,0xcb20020,32768,0x7ffc3fd2dde0,0x7f5b061d7810,64) 577ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099e2c10,2097152,0xcb20030,32768,0x7ffc3fd2dde0,0x7f5b061d7c10,64) 2.08us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099e3010,2097152,0xcb20040,32768,0x7ffc3fd2dde0,0x7f5b061d8010,64) 587ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099e3410,2097152,0xcb20050,32768,0x7ffc3fd2dde0,0x7f5b061d8410,64) 386ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099e3810,2097152,0xcb20060,32768,0x7ffc3fd2dde0,0x7f5b061d8810,64) 557ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099e3c10,2097152,0xcb20070,32768,0x7ffc3fd2dde0,0x7f5b061d8c10,64) 2.14us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099e4010,2097152,0xcb20080,32768,0x7ffc3fd2dde0,0x7f5b061d9010,64) 475ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099e4410,2097152,0xcb20090,32768,0x7ffc3fd2dde0,0x7f5b061d9410,64) 745ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099e4810,2097152,0xcb200a0,32768,0x7ffc3fd2dde0,0x7f5b061d9810,64) 272ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099e4c10,2097152,0xcb200b0,32768,0x7ffc3fd2dde0,0x7f5b061d9c10,64) 2.31us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099e5010,2097152,0xcb200c0,32768,0x7ffc3fd2dde0,0x7f5b061da010,64) 419ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099e5410,2097152,0xcb200d0,32768,0x7ffc3fd2dde0,0x7f5b061da410,64) 410ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099e5810,2097152,0xcb200e0,32768,0x7ffc3fd2dde0,0x7f5b061da810,64) 276ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099e5c10,2097152,0xcb200f0,32768,0x7ffc3fd2dde0,0x7f5b061dac10,64) 3.16us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099e6010,2097152,0xcb20100,32768,0x7ffc3fd2dde0,0x7f5b061db010,64) 698ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099e6410,2097152,0xcb20110,32768,0x7ffc3fd2dde0,0x7f5b061db410,64) 378ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099e6810,2097152,0xcb20120,32768,0x7ffc3fd2dde0,0x7f5b061db810,64) 264ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099e6c10,2097152,0xcb20130,32768,0x7ffc3fd2dde0,0x7f5b061dbc10,64) 2.11us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099e7010,2097152,0xcb20140,32768,0x7ffc3fd2dde0,0x7f5b061dc010,64) 667ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099e7410,2097152,0xcb20150,32768,0x7ffc3fd2dde0,0x7f5b061dc410,64) 514ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099e7810,2097152,0xcb20160,32768,0x7ffc3fd2dde0,0x7f5b061dc810,64) 285ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099e7c10,2097152,0xcb20170,32768,0x7ffc3fd2dde0,0x7f5b061dcc10,64) 2.16us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099e8010,2097152,0xcb20180,32768,0x7ffc3fd2dde0,0x7f5b061dd010,64) 617ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099e8410,2097152,0xcb20190,32768,0x7ffc3fd2dde0,0x7f5b061dd410,64) 434ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099e8810,2097152,0xcb201a0,32768,0x7ffc3fd2dde0,0x7f5b061dd810,64) 279ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099e8c10,2097152,0xcb201b0,32768,0x7ffc3fd2dde0,0x7f5b061ddc10,64) 6.21us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099e9010,2097152,0xcb201c0,32768,0x7ffc3fd2dde0,0x7f5b061de010,64) 702ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099e9410,2097152,0xcb201d0,32768,0x7ffc3fd2dde0,0x7f5b061de410,64) 590ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099e9810,2097152,0xcb201e0,32768,0x7ffc3fd2dde0,0x7f5b061de810,64) 302ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099e9c10,2097152,0xcb201f0,32768,0x7ffc3fd2dde0,0x7f5b061dec10,64) 2.08us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099ea010,2097152,0xcb20200,32768,0x7ffc3fd2dde0,0x7f5b061df010,64) 510ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099ea410,2097152,0xcb20210,32768,0x7ffc3fd2dde0,0x7f5b061df410,64) 652ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099ea810,2097152,0xcb20220,32768,0x7ffc3fd2dde0,0x7f5b061df810,64) 266ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099eac10,2097152,0xcb20230,32768,0x7ffc3fd2dde0,0x7f5b061dfc10,64) 2.21us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099eb010,2097152,0xcb20240,32768,0x7ffc3fd2dde0,0x7f5b061e0010,64) 482ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099eb410,2097152,0xcb20250,32768,0x7ffc3fd2dde0,0x7f5b061e0410,64) 587ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099eb810,2097152,0xcb20260,32768,0x7ffc3fd2dde0,0x7f5b061e0810,64) 274ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099ebc10,2097152,0xcb20270,32768,0x7ffc3fd2dde0,0x7f5b061e0c10,64) 2.09us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099ec010,2097152,0xcb20280,32768,0x7ffc3fd2dde0,0x7f5b061e1010,64) 652ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099ec410,2097152,0xcb20290,32768,0x7ffc3fd2dde0,0x7f5b061e1410,64) 417ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099ec810,2097152,0xcb202a0,32768,0x7ffc3fd2dde0,0x7f5b061e1810,64) 311ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099ecc10,2097152,0xcb202b0,32768,0x7ffc3fd2dde0,0x7f5b061e1c10,64) 2.21us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099ed010,2097152,0xcb202c0,32768,0x7ffc3fd2dde0,0x7f5b061e2010,64) 644ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099ed410,2097152,0xcb202d0,32768,0x7ffc3fd2dde0,0x7f5b061e2410,64) 451ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099ed810,2097152,0xcb202e0,32768,0x7ffc3fd2dde0,0x7f5b061e2810,64) 315ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099edc10,2097152,0xcb202f0,32768,0x7ffc3fd2dde0,0x7f5b061e2c10,64) 2.05us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099ee010,2097152,0xcb20300,32768,0x7ffc3fd2dde0,0x7f5b061e3010,64) 680ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099ee410,2097152,0xcb20310,32768,0x7ffc3fd2dde0,0x7f5b061e3410,64) 525ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099ee810,2097152,0xcb20320,32768,0x7ffc3fd2dde0,0x7f5b061e3810,64) 661ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099eec10,2097152,0xcb20330,32768,0x7ffc3fd2dde0,0x7f5b061e3c10,64) 2.04us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099ef010,2097152,0xcb20340,32768,0x7ffc3fd2dde0,0x7f5b061e4010,64) 704ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099ef410,2097152,0xcb20350,32768,0x7ffc3fd2dde0,0x7f5b061e4410,64) 650ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099ef810,2097152,0xcb20360,32768,0x7ffc3fd2dde0,0x7f5b061e4810,64) 281ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099efc10,2097152,0xcb20370,32768,0x7ffc3fd2dde0,0x7f5b061e4c10,64) 2.21us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099f0010,2097152,0xcb20380,32768,0x7ffc3fd2dde0,0x7f5b061e5010,64) 490ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099f0410,2097152,0xcb20390,32768,0x7ffc3fd2dde0,0x7f5b061e5410,64) 471ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099f0810,2097152,0xcb203a0,32768,0x7ffc3fd2dde0,0x7f5b061e5810,64) 268ns CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,64,1,2,0x7ffc3fd2ddd0,0x7f5b099f0c10,2097152,0xcb203b0,32768,0x7ffc3fd2dde0,0x7f5b061e5c10,64) 2.11us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ Duration: 585 milliseconds
+ [... 585000 / 32768 = 17.85 us , but most of data in logs are below 3us ??...]
+ *
+ After debug_mkl_contract_sum, duration: 0.5853049755096436
+PROF:: perf data process bucket time: 0.6231610774993896
+==
+
+PROF:: Bucket contains: [E460(v_1846,v_1854), E1845(v_1846,v_1847,v_1848,v_1849,v_1850,v_1851,v_1852,v_1853,v_1854,v_1855,v_1856,v_1857,v_1858,v_1859,v_1860,v_1861,v_1862,v_1863,v_1864,v_1865,v_1866)]
+ Starting debug_mkl_contract_sum, input sizes: 4 2097152 output: 1048576
+ Dimensions: f:2 k:2 n:524288 m:1
+ MKL_VERBOSE ZGEMM(N,T,524288,1,2,0x7ffc3fd2ddd0,0x7f5b099f1010,1048576,0x4dfacf0,2,0x7ffc3fd2dde0,0xd2a03e0,524288) 5.36ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,524288,1,2,0x7ffc3fd2ddd0,0x7f5b0a1f1010,1048576,0x4dfad00,2,0x7ffc3fd2dde0,0xdaa03e0,524288) 1.16ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ Duration: 6 milliseconds
+ After debug_mkl_contract_sum, duration: 0.00663447380065918
+PROF:: perf data process bucket time: 0.028242111206054688
+==
+
+PROF:: Bucket contains: [E1846(v_1847,v_1848,v_1849,v_1850,v_1851,v_1852,v_1853,v_1854,v_1855,v_1856,v_1857,v_1858,v_1859,v_1860,v_1861,v_1862,v_1863,v_1864,v_1865,v_1866)]
+PROF:: perf data process bucket time: 0.007658958435058594
+==
+
+PROF:: Bucket contains: [E467(v_1848,v_1852), E1847(v_1848,v_1849,v_1850,v_1851,v_1852,v_1853,v_1854,v_1855,v_1856,v_1857,v_1858,v_1859,v_1860,v_1861,v_1862,v_1863,v_1864,v_1865,v_1866)]
+ Starting debug_mkl_contract_sum, input sizes: 4 524288 output: 262144
+ Dimensions: f:2 k:2 n:131072 m:1
+ MKL_VERBOSE ZGEMM(N,T,131072,1,2,0x7ffc3fd2ddd0,0xeaa0400,262144,0x4d322e0,2,0x7ffc3fd2dde0,0xcaa03c0,131072) 123.42us CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ MKL_VERBOSE ZGEMM(N,T,131072,1,2,0x7ffc3fd2ddd0,0xeca0400,262144,0x4d322f0,2,0x7ffc3fd2dde0,0xcca03c0,131072) 2.38ms CNR:OFF Dyn:1 FastMM:1 TID:0 NThr:56
+ Duration: 2 milliseconds
+ After debug_mkl_contract_sum, duration: 0.002573728561401367
+PROF:: perf data process bucket time: 0.005625009536743164
+==
+
+PROF:: Bucket contains: [E480(v_1849,v_1856), E1848(v_1849,v_1850,v_1851,v_1852,v_1853,v_1854,v_1855,v_1856,v_1857,v_1858,v_1859,v_1860,v_1861,v_1862,v_1863,v_1864,v_1865,v_1866)]
+ Starting debug_mkl_contract_sum, input sizes: 4 262144 output: 131072
+ After debug_mkl_contract_sum, duration: 0.00018668174743652344
+PROF:: perf data process bucket time: 0.0014035701751708984
+PROF:: Bucket contains: [E1849(v_1850,v_1851,v_1852,v_1853,v_1854,v_1855,v_1856,v_1857,v_1858,v_1859,v_1860,v_1861,v_1862,v_1863,v_1864,v_1865,v_1866)]
+PROF:: perf data process bucket time: 0.0005922317504882812
+PROF:: Bucket contains: [E497(v_1851,v_1855), E1850(v_1851,v_1852,v_1853,v_1854,v_1855,v_1856,v_1857,v_1858,v_1859,v_1860,v_1861,v_1862,v_1863,v_1864,v_1865,v_1866)]
+ Starting debug_mkl_contract_sum, input sizes: 4 65536 output: 32768
+ After debug_mkl_contract_sum, duration: 0.00012922286987304688
+PROF:: perf data process bucket time: 0.0007731914520263672
+PROF:: Bucket contains: [E1851(v_1852,v_1853,v_1854,v_1855,v_1856,v_1857,v_1858,v_1859,v_1860,v_1861,v_1862,v_1863,v_1864,v_1865,v_1866)]
+PROF:: perf data process bucket time: 0.0008180141448974609
+PROF:: Bucket contains: [XPhase(v_1853,v_1858), E1852(v_1853,v_1854,v_1855,v_1856,v_1857,v_1858,v_1859,v_1860,v_1861,v_1862,v_1863,v_1864,v_1865,v_1866)]
+ Starting debug_mkl_contract_sum, input sizes: 4 16384 output: 8192
+ After debug_mkl_contract_sum, duration: 0.0001068115234375
+PROF:: perf data process bucket time: 0.0003962516784667969
+PROF:: Bucket contains: [XPhase(v_1854,v_1857), E1853(v_1854,v_1855,v_1856,v_1857,v_1858,v_1859,v_1860,v_1861,v_1862,v_1863,v_1864,v_1865,v_1866)]
+ Starting debug_mkl_contract_sum, input sizes: 4 8192 output: 4096
+ After debug_mkl_contract_sum, duration: 5.7697296142578125e-05
+
+[... And some boring mostly summation operations while we eliminate the final clique ...]
+
+
83%|████████▎ | 5/6 [00:23<00:06, 6.31s/it]PROF:: Bucket contains: [M(v_0,v_277)]
diff --git a/qtensor/DebugFrameworks.py b/qtensor/DebugFrameworks.py
new file mode 100644
index 00000000..c15f2655
--- /dev/null
+++ b/qtensor/DebugFrameworks.py
@@ -0,0 +1,146 @@
+""" Farmeworks that print a lot of info.
+This file is meant to be temporary and will not be updated
+"""
+import sys
+import time
+from functools import reduce
+import numpy as np
+from qtree import np_framework
+from qtree import optimizer as opt
+from qtensor.ProcessingFrameworks import BucketBackend, PerfBackend
+
+class MockModule:
+ def __getattribute__(self, attr):
+ # Fail spectacularly
+ raise ImportError(f'Module tcontract is not imported! Please install it and try again.')
+
+tcontract = MockModule()
+try:
+ import tcontract
+except ImportError:
+ pass
+
+class _CMKLExtendedBackend(BucketBackend):
+ def get_sliced_buckets(self, buckets, data_dict, slice_dict):
+ return np_framework.get_sliced_np_buckets(buckets, data_dict, slice_dict)
+
+ def process_bucket(self, bucket, no_sum=False):
+ result_indices = bucket[0].indices
+ result_data = bucket[0].data
+
+ # -- Contract first n-1 bucketns
+ def merge_with_result(result_data, result_indices, tensor):
+ # ---- Prepare inputs: transpose + reshape
+ ixa, ixb = result_indices, tensor.indices
+ common_ids = sorted(list(set.intersection(set(ixa), set(ixb))), key=int)
+ distinct_a = [x for x in ixa if x not in common_ids]
+ distinct_b = [x for x in ixb if x not in common_ids]
+ transp_a = [ixa.index(x) for x in common_ids+distinct_a]
+ transp_b = [ixb.index(x) for x in common_ids+distinct_b]
+ a = result_data.transpose(transp_a)
+ b = tensor.data.transpose(transp_b)
+ n, m, k = 2**len(common_ids), 2**len(distinct_a), 2**len(distinct_b)
+ a = a.reshape(n, m)
+ b = b.reshape(n, k)
+ # ----
+
+ c = np.empty((n, m, k), dtype=np.complex128)
+ start = time.time()
+ print(f'Starting debug_mkl_contract, input sizes: {a.size} {b.size} output: {c.size}', file=sys.stderr)
+ tcontract.debug_mkl_contract_complex(a, b, c)
+ end = time.time()
+ print(f'After debug_mkl_contract, duration: {end - start}', file=sys.stderr)
+
+ # ---- Post-process output
+ result_indices = tuple(sorted(
+ set(result_indices + tensor.indices),
+ key=int)
+ )
+ ixc = common_ids + distinct_a + distinct_b
+ assert len(result_indices) == len(ixc), 'Wrong transposition, please submit an issue'
+ transp_c = [ixc.index(x) for x in result_indices]
+ result_data = c.reshape(*[2 for _ in result_indices])
+ result_data = result_data.transpose(transp_c)
+ return result_data, result_indices
+ # ----
+
+ for tensor in bucket[1:-1]:
+ result_data, result_indices = merge_with_result(result_data, result_indices, tensor)
+ # --
+
+
+ if len(result_indices) > 0:
+ tag = result_indices[0].identity
+ else:
+ tag = 'f'
+
+ if no_sum:
+ if len(bucket)>1:
+ last_tensor = bucket[-1]
+ result_data, result_indices = merge_with_result(result_data, result_indices, last_tensor)
+
+ result = opt.Tensor(f'E{tag}', result_indices,
+ data=result_data)
+ return result
+
+ if len(bucket)<2:
+ result = opt.Tensor(f'E{tag}', result_indices[1:],
+ data=np.sum(result_data, axis=0))
+ return result
+ last_tensor = bucket[-1]
+
+ # -- Contract with summation
+ ixa, ixb = result_indices, last_tensor.indices
+ # ---- Prepare inputs: transpose + reshape
+ k, fm = result_indices[:1], result_indices[1:]
+ fn = last_tensor.indices[1:]
+
+ f = tuple(sorted(list(set.intersection(set(fm), set(fn))), key=int))
+ # Sets don't store order, so use lists. Do we need order here?
+ m = tuple([x for x in fm if x not in f])
+ n = tuple([x for x in fn if x not in f])
+ transp_a = [ixa.index(x) for x in k+f+m]
+ transp_b = [ixb.index(x) for x in k+f+n]
+ a = result_data.transpose(transp_a)
+ b = last_tensor.data.transpose(transp_b)
+ shapes_a = {i:s for i,s in zip(k+f+m, a.shape)}
+ shapes_b = {i:s for i,s in zip(k+f+n, b.shape)}
+ shapes = {**shapes_b, **shapes_a}
+ K, F, M, N = [reduce(np.multiply, (shapes[i] for i in x), 1) for x in (k, f, m, n)]
+ a = a.reshape(K, F, M)
+ b = b.reshape(K, F, N)
+ # ----
+
+ # \sum_k A_{kfm} * B_{kfn} = C_{fmn}
+ c = np.empty((F, M, N), dtype=np.complex128)
+ start = time.time()
+ print(f'Starting debug_mkl_contract_sum, input sizes: {a.size} {b.size} output: {c.size}', file=sys.stderr)
+ tcontract.debug_mkl_contract_sum(a, b, c)
+ end = time.time()
+ print(f'After debug_mkl_contract_sum, duration: {end - start}', file=sys.stderr)
+
+ # ---- Post-process output
+ result_indices = tuple(sorted(
+ set(result_indices + last_tensor.indices),
+ key=int)
+ )
+ assert result_indices[0] == k[0], 'Broken ordering, please report'
+ result_indices = result_indices[1:]
+ ixc = f + m + n
+ assert len(result_indices) == len(ixc), 'Wrong transposition, please submit an issue'
+ result_data = c.reshape([shapes[i] for i in ixc])
+ transp_c = [ixc.index(x) for x in result_indices]
+ result_data = result_data.transpose(transp_c)
+ # ----
+ # --
+ result = opt.Tensor(f'E{tag}', result_indices, data=result_data)
+ return result
+
+ def get_result_data(self, result):
+ return result.data
+
+class DebugMKLBackend(PerfBackend):
+ Backend = _CMKLExtendedBackend
+ # Just use print by default
+ def __init__(self, *args, print=True, num_lines=20, **kwargs):
+ super().__init__(*args, print=print, num_lines=num_lines, **kwargs)
diff --git a/qtensor/ProcessingFrameworks.py b/qtensor/ProcessingFrameworks.py
index 272d7db4..2e14cdda 100644
--- a/qtensor/ProcessingFrameworks.py
+++ b/qtensor/ProcessingFrameworks.py
@@ -1,8 +1,28 @@
+import sys
+import numpy as np
+from functools import reduce
+import time
+import lazy_import
from qtree import np_framework
+from qtree import optimizer as opt
from pyrofiler import timing
-from qtensor.utils import ReportTable
from tqdm import tqdm
+class MockModule:
+ def __getattribute__(self, attr):
+ # Fail spectacularly
+ raise ImportError(f'Module tcontract is not imported! Please install it and try again.')
+
+tcontract = MockModule()
+try:
+ import tcontract
+except ImportError:
+ pass
+
+
+from qtensor.utils import ReportTable
+from . import exatn_framework
+
class BucketBackend:
def process_bucket(self, bucket, no_sum=False):
raise NotImplementedError
@@ -13,6 +33,7 @@ def get_sliced_buckets(self, buckets, data_dict, slice_dict):
def get_result_data(self, result):
raise NotImplementedError
+
class NumpyBackend(BucketBackend):
def __init__(self):
super().__init__()
@@ -20,15 +41,140 @@ def __init__(self):
#self.status_bar = tqdm(desc='Current status', position=3, bar_format='{desc}')
def process_bucket(self, bucket, no_sum=False):
+ return np_framework.process_bucket_np(bucket, no_sum=no_sum)
+
+ def get_sliced_buckets(self, buckets, data_dict, slice_dict):
+ return np_framework.get_sliced_np_buckets(buckets, data_dict, slice_dict)
+
+ def get_result_data(self, result):
+ return result.data
+
+
+class ExaTnBackend(BucketBackend):
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+ exatn_framework.import_exatn()
+
+ def process_bucket(self, bucket, no_sum=False):
+ res = exatn_framework.process_bucket_exatn(bucket, no_sum=no_sum)
total_indices = set.union(*[set(t.indices) for t in bucket])
#self.status_bar.set_description_str(f'Current bucker result size: {len(total_indices)}')
res = np_framework.process_bucket_np(bucket, no_sum=no_sum)
#self.pbar.update(1)
return res
+ def get_sliced_buckets(self, buckets, data_dict, slice_dict):
+ return exatn_framework.get_sliced_exatn_buckets(buckets, data_dict, slice_dict)
+
+
+class CMKLExtendedBackend(BucketBackend):
def get_sliced_buckets(self, buckets, data_dict, slice_dict):
return np_framework.get_sliced_np_buckets(buckets, data_dict, slice_dict)
+ def process_bucket(self, bucket, no_sum=False):
+ result_indices = bucket[0].indices
+ result_data = bucket[0].data
+
+ # -- Contract first n-1 bucketns
+ def merge_with_result(result_data, result_indices, tensor):
+ # ---- Prepare inputs: transpose + reshape
+ ixa, ixb = result_indices, tensor.indices
+ common_ids = sorted(list(set.intersection(set(ixa), set(ixb))), key=int)
+ distinct_a = [x for x in ixa if x not in common_ids]
+ distinct_b = [x for x in ixb if x not in common_ids]
+ transp_a = [ixa.index(x) for x in common_ids+distinct_a]
+ transp_b = [ixb.index(x) for x in common_ids+distinct_b]
+ a = result_data.transpose(transp_a)
+ b = tensor.data.transpose(transp_b)
+ n, m, k = 2**len(common_ids), 2**len(distinct_a), 2**len(distinct_b)
+ a = a.reshape(n, m)
+ b = b.reshape(n, k)
+ # ----
+
+ c = np.empty((n, m, k), dtype=np.complex128)
+ tcontract.mkl_contract_complex(a, b, c)
+
+ # ---- Post-process output
+ result_indices = tuple(sorted(
+ set(result_indices + tensor.indices),
+ key=int)
+ )
+ ixc = common_ids + distinct_a + distinct_b
+ assert len(result_indices) == len(ixc), 'Wrong transposition, please submit an issue'
+ transp_c = [ixc.index(x) for x in result_indices]
+ result_data = c.reshape(*[2 for _ in result_indices])
+ result_data = result_data.transpose(transp_c)
+ return result_data, result_indices
+ # ----
+
+ for tensor in bucket[1:-1]:
+ result_data, result_indices = merge_with_result(result_data, result_indices, tensor)
+ # --
+
+
+ if len(result_indices) > 0:
+ tag = result_indices[0].identity
+ else:
+ tag = 'f'
+
+ if no_sum:
+ if len(bucket)>1:
+ last_tensor = bucket[-1]
+ result_data, result_indices = merge_with_result(result_data, result_indices, last_tensor)
+
+ result = opt.Tensor(f'E{tag}', result_indices,
+ data=result_data)
+ return result
+
+ if len(bucket)<2:
+ result = opt.Tensor(f'E{tag}', result_indices[1:],
+ data=np.sum(result_data, axis=0))
+ return result
+ last_tensor = bucket[-1]
+
+ # -- Contract with summation
+ ixa, ixb = result_indices, last_tensor.indices
+ # ---- Prepare inputs: transpose + reshape
+ k, fm = result_indices[:1], result_indices[1:]
+ fn = last_tensor.indices[1:]
+
+ f = tuple(sorted(list(set.intersection(set(fm), set(fn))), key=int))
+ # Sets don't store order, so use lists. Do we need order here?
+ m = tuple([x for x in fm if x not in f])
+ n = tuple([x for x in fn if x not in f])
+ transp_a = [ixa.index(x) for x in k+f+m]
+ transp_b = [ixb.index(x) for x in k+f+n]
+ a = result_data.transpose(transp_a)
+ b = last_tensor.data.transpose(transp_b)
+ shapes_a = {i:s for i,s in zip(k+f+m, a.shape)}
+ shapes_b = {i:s for i,s in zip(k+f+n, b.shape)}
+ shapes = {**shapes_b, **shapes_a}
+ K, F, M, N = [reduce(np.multiply, (shapes[i] for i in x), 1) for x in (k, f, m, n)]
+ a = a.reshape(K, F, M)
+ b = b.reshape(K, F, N)
+ # ----
+
+ # \sum_k A_{kfm} * B_{kfn} = C_{fmn}
+ c = np.empty((F, M, N), dtype=np.complex128)
+ tcontract.mkl_contract_sum(a, b, c)
+
+ # ---- Post-process output
+ result_indices = tuple(sorted(
+ set(result_indices + last_tensor.indices),
+ key=int)
+ )
+ assert result_indices[0] == k[0], 'Broken ordering, please report'
+ result_indices = result_indices[1:]
+ ixc = f + m + n
+ assert len(result_indices) == len(ixc), 'Wrong transposition, please submit an issue'
+ result_data = c.reshape([shapes[i] for i in ixc])
+ transp_c = [ixc.index(x) for x in result_indices]
+ result_data = result_data.transpose(transp_c)
+ # ----
+ # --
+ result = opt.Tensor(f'E{tag}', result_indices, data=result_data)
+ return result
+
def get_result_data(self, result):
return result.data
@@ -47,13 +193,36 @@ def _profile_callback(self, time, label, indices):
print(f"PROF:: perf data {label}: {time}")
self._profile_results[str(indices)] = indices, time
+ @classmethod
+ def from_backend(cls, backend, *args, **kwargs):
+ """ Dynamically create and instantiate a class with a given backend. """
+ class CustomGeneratedBackend(cls):
+ Backend = backend
+ return CustomGeneratedBackend(*args, **kwargs)
- def process_bucket(self, bucket, no_sum=False):
+ def process_bucket_pyrofiler(self, bucket, no_sum=False):
+ """ This method was original, but let's try what is with vanilia time.time()
+ Using pyrofiler allows to easily add more profilers like memory or cpu,
+ but adds a couple of function calls.
+ """
indices = [tensor.indices for tensor in bucket]
with timing('process bucket time', indices
, callback=self._profile_callback):
return self.backend.process_bucket(bucket, no_sum=no_sum)
+ def process_bucket(self, bucket, no_sum=False):
+ indices = [tensor.indices for tensor in bucket]
+ start = time.time()
+ if self._print:
+ print(f"PROF:: Bucket contains: {bucket}", file=sys.stderr)
+ result = self.backend.process_bucket(bucket, no_sum=no_sum)
+ end = time.time()
+ duration = end - start
+ if self._print:
+ print(f"PROF:: perf data process bucket time: {duration}", file=sys.stderr)
+ self._profile_results[str(indices)] = indices, duration
+ return result
+
def get_sliced_buckets(self, buckets, data_dict, slice_dict):
return self.backend.get_sliced_buckets(buckets, data_dict, slice_dict)
@@ -87,7 +256,7 @@ def gen_report(self):
# -- report on totals
for indices, time in data[:max_lines]:
- self.report_table.record(
+ kwargs= dict(
bucket_len = len(indices)
, time = time
, flop = self._perfect_bucket_flop(indices)
@@ -96,6 +265,7 @@ def gen_report(self):
, min_size = min([len(ixs) for ixs in indices])
, result_size = len(set.union(*[set(i) for i in indices])) - 1
)
+ self.report_table.record( **kwargs)
print(self.report_table.markdown())
diff --git a/qtensor/QAOASimulator.py b/qtensor/QAOASimulator.py
index 0a27af82..6a74e6b4 100644
--- a/qtensor/QAOASimulator.py
+++ b/qtensor/QAOASimulator.py
@@ -1,16 +1,18 @@
-from qtensor.Simulate import Simulator, QtreeSimulator, CirqSimulator
-from qtensor.utils import get_edge_subgraph
import numpy as np
-import networkx as nx
from tqdm.auto import tqdm
from multiprocessing import Pool
from loguru import logger as log
+from qtensor.Simulate import Simulator, QtreeSimulator, CirqSimulator
+from qtensor.utils import get_edge_subgraph
+from qtensor.lib import graph_hash
+
class QAOASimulator(Simulator):
def __init__(self, composer, profile=False, *args, **kwargs):
super().__init__(*args, **kwargs)
self.composer = composer
self.profile = profile
+ self._subgraph_energy_cache = {}
def _get_edge_energy(self, G, gamma, beta, edge):
circuit = self._edge_energy_circuit(G, gamma, beta, edge)
@@ -86,6 +88,21 @@ def energy_expectation_parallel(self, G, gamma, beta, n_processes=4):
return C
+class CachedQAOASimulator(QAOASimulator):
+ def __init__(self, composer, profile=False, *args, **kwargs):
+ super().__init__(composer, profile=profile, *args, **kwargs)
+ self._subgraph_energy_cache = {}
+
+ def _get_edge_energy(self, G, gamma, beta, edge):
+ graph = get_edge_subgraph(G, edge, len(gamma))
+ ghash = graph_hash(graph)
+ cached_value = self._subgraph_energy_cache.get(ghash)
+ if cached_value is None:
+ E = super()._get_edge_energy(G, gamma, beta, edge)
+ self._subgraph_energy_cache[ghash] = E
+ return E
+ else:
+ return cached_value
class QAOAQtreeSimulator(QAOASimulator, QtreeSimulator):
pass
diff --git a/qtensor/Simulate.py b/qtensor/Simulate.py
index 83724f3b..2638a55d 100644
--- a/qtensor/Simulate.py
+++ b/qtensor/Simulate.py
@@ -6,10 +6,21 @@
from qtensor.optimisation.Optimizer import DefaultOptimizer
from tqdm.auto import tqdm
+
+
from loguru import logger as log
from qtensor import utils
+def int_slice(value, vars_to_slice):
+ """
+ Creates a slice dict with integers an values.
+ """
+ dimensions = [var.size for var in vars_to_slice]
+ multiindex = qtree.utils.unravel_index(value, dimensions)
+
+ return {idx: val for idx, val in zip(vars_to_slice, multiindex)}
+
class Simulator:
def __init__(self):
pass
diff --git a/qtensor/__init__.py b/qtensor/__init__.py
index 15922cc3..f23c0a79 100644
--- a/qtensor/__init__.py
+++ b/qtensor/__init__.py
@@ -14,6 +14,8 @@
from qtensor.QAOASimulator import QAOACirqSimulator
from qtensor.FeynmanSimulator import FeynmanSimulator
from qtensor.ProcessingFrameworks import PerfNumpyBackend, NumpyBackend
+from qtensor import DebugFrameworks
+from qtensor import lib
class CirqQAOAComposer(QAOAComposer):
def _get_builder_class(self):
diff --git a/qtensor/cli.py b/qtensor/cli.py
index 180dcb70..0e89c92d 100644
--- a/qtensor/cli.py
+++ b/qtensor/cli.py
@@ -10,17 +10,28 @@
import qtensor.optimisation as qop
from qtensor.FeynmanSimulator import FeynmanSimulator
+from qtensor.ProcessingFrameworks import CMKLExtendedBackend, PerfBackend, ExaTnBackend
from qtensor.ProcessingFrameworks import PerfNumpyBackend
from qtensor.toolbox import qaoa_energy_tw_from_graph
from qtensor.optimisation.TensorNet import QtreeTensorNet
from qtensor.optimisation.Optimizer import OrderingOptimizer, TamakiOptimizer, WithoutOptimizer
from qtensor.optimisation.Optimizer import TamakiTrimSlicing, SlicesOptimizer
-from qtensor import QtreeQAOAComposer
+from qtensor import QtreeQAOAComposer, QAOAQtreeSimulator
+import qtensor.ProcessingFrameworks as backends
+import qtensor.optimisation.Optimizer as optimizers
@click.group()
def cli():
pass
+def choose_backend(backend_str):
+ if backend_str=='numpy':
+ return backends.NumpyBackend
+ elif backend_str=='mkl':
+ return backends.CMKLExtendedBackend
+ elif backend_str=='exatn':
+ return backends.ExaTnBackend
+
@cli.command()
@click.argument('filename', nargs=-1)
@click.option('-p','--num-processes', default=1)
@@ -40,18 +51,22 @@ def sim_file(filename, profile=False, num_processes=1, max_tw=25, backend='numpy
,max_tw=max_tw
, pool_type='thread'
)
+ Backend = choose_backend(backend)
if profile:
- if backend == 'numpy':
- backend_obj = PerfNumpyBackend(print=False)
+ class DynamicallyGeneratedBackend(PerfBackend):
+ Backend = Backend
+ backend_obj = DynamicallyGeneratedBackend(print=False)
kwargs['bucket_backend'] = backend_obj
+ else:
+ kwargs['bucket_backend'] = Backend()
+
if optimizer=='tamaki':
- kwargs['optimizer'] = TamakiTrimSlicing(wait_time=23)
+ kwargs['optimizer'] = TamakiTrimSlicing(max_tw=max_tw, wait_time=23)
else:
- kwargs['optimizer'] = SlicesOptimizer()
+ kwargs['optimizer'] = SlicesOptimizer(max_tw=max_tw, tw_bias=0)
kwargs['optimizer'].max_tw = max_tw
-
sim = FeynmanSimulator(**kwargs)
circuit = sum(circuit, [])
result = sim.simulate(circuit, batch_vars=0, tw_bias=0)
@@ -177,7 +192,9 @@ def generate_qaoa_energy_circuit(seed, degree, nodes, p, graph_type, edge_index)
@click.option('-T','--max-time', default=0, help='Max time for every evaluation')
@click.option('--max-tw', default=0, help='Max tw after wich no point to calculate')
@click.option('-O','--ordering-algo', default='greedy', help='Algorithm for elimination order')
-def qaoa_energy_tw(nodes, seed, degree, p, graph_type, max_time, max_tw, ordering_algo):
+@click.option('--tamaki_time', default=20, help='Algorithm for elimination order')
+@click.option('--n_processes', default=1, help='Number of processes.')
+def qaoa_energy_tw(nodes, seed, degree, p, graph_type, max_time, max_tw, ordering_algo, tamaki_time, n_processes):
np.random.seed(seed)
if graph_type=='random_regular':
G = nx.random_regular_graph(degree, nodes)
@@ -186,7 +203,61 @@ def qaoa_energy_tw(nodes, seed, degree, p, graph_type, max_time, max_tw, orderin
else:
raise Exception('Unsupported graph type')
- qaoa_energy_tw_from_graph(G, p, max_time, max_tw, ordering_algo, print_stats=True)
+ qaoa_energy_tw_from_graph(G, p, max_time, max_tw, ordering_algo, print_stats=True, tamaki_time=tamaki_time, n_processes=n_processes)
+
+
+@cli.command()
+@click.option('-s','--seed', default=42)
+@click.option('-d','--degree', default=3)
+@click.option('-n','--nodes', default=10)
+@click.option('-p','--p', default=1)
+@click.option('-G','--graph-type', default='random_regular')
+@click.option('-T','--max-time', default=0, help='Max time for every evaluation')
+@click.option('--max-tw', default=0, help='Max tw after wich no point to calculate')
+@click.option('-O','--ordering-algo', default='greedy', help='Algorithm for elimination order')
+@click.option('--tamaki_time', default=20, help='Algorithm for elimination order')
+@click.option('-B','--backend', default='numpy')
+@click.option('--n_processes', default=1)
+@click.option('-P','--profile', default=False, is_flag=True)
+def qaoa_energy_sim(nodes, seed,
+ degree, p, graph_type,
+ max_time, max_tw, ordering_algo, tamaki_time,
+ backend, n_processes, profile):
+ np.random.seed(seed)
+ if graph_type=='random_regular':
+ G = nx.random_regular_graph(degree, nodes, seed=seed)
+ elif graph_type=='erdos_renyi':
+ G = nx.erdos_renyi_graph(nodes, degree/(nodes-1), seed=seed)
+ else:
+ raise Exception('Unsupported graph type')
+ gamma, beta = [np.pi/3]*p, [np.pi/2]*p
+
+
+ if ordering_algo=='tamaki_slice':
+ optimizer = TamakiTrimSlicing(max_tw=max_tw, wait_time=tamaki_time)
+ elif ordering_algo=='tamaki':
+ optimizer = optimizers.TamakiOptimizer(wait_time=tamaki_time)
+ else:
+ optimizer = optimizers.DefaultOptimizer()
+
+ Backend = choose_backend(backend)
+ backend_obj = Backend()
+ if profile:
+ backend_obj = PerfBackend(print=False)
+ backend_obj.backend = Backend()
+
+ sim = QAOAQtreeSimulator(QtreeQAOAComposer, bucket_backend=backend_obj, optimizer=optimizer)
+ start = time.time()
+ if n_processes==1:
+ result = sim.energy_expectation(G, gamma, beta)
+ if profile:
+ print('Profiling results')
+ backend_obj.gen_report()
+ else:
+ result = sim.energy_expectation_parallel(G, gamma, beta, n_processes=n_processes)
+ end = time.time()
+ print(f"Simutation time: {end - start}")
+ print(result)
cli()
diff --git a/qtensor/exatn_framework.py b/qtensor/exatn_framework.py
new file mode 100644
index 00000000..5d46d3bb
--- /dev/null
+++ b/qtensor/exatn_framework.py
@@ -0,0 +1,156 @@
+"""
+This file implements Numpy framework of the
+simulator. It's main use is in conjunction with the :py:mod:`optimizer`
+module, and example programs are listed in :py:mod:`simulator` module.
+"""
+
+import lazy_import
+import numpy as np
+
+import qtree.utils as utils
+
+exatn = lazy_import.lazy_module('exatn')
+
+from collections import namedtuple
+
+TensorInfo = namedtuple("TensorInfo", "name indices")
+
+def get_sliced_exatn_buckets(buckets, data_dict, slice_dict):
+ """
+ Takes placeholder buckets and populates them with
+ actual sliced values. This function is a sum of
+ :func:`get_np_buckets` and :func:`slice_np_buckets`
+
+ Parameters
+ ----------
+ buckets : list of list
+ buckets as returned by :py:meth:`circ2buckets`
+ and :py:meth:`reorder_buckets`.
+ data_dict : dict
+ dictionary containing values for the placeholder Tensors
+ slice_dict : dict
+ Current subtensor along the sliced variables
+ in the form {variable: slice}
+ Returns
+ -------
+ sliced_buckets : list of lists
+ buckets with sliced Numpy tensors
+ """
+ # import pdb
+ # pdb.set_trace()
+
+ # Create np buckets from buckets
+ sliced_buckets = []
+ for bucket in buckets:
+ sliced_bucket = []
+ for tensor in bucket:
+ # get data
+ # sort tensor dimensions
+ transpose_order = np.argsort(list(map(int, tensor.indices)))
+ data = np.transpose(data_dict[tensor.data_key],
+ transpose_order)
+ # transpose indices
+ indices_sorted = [tensor.indices[pp]
+ for pp in transpose_order]
+
+ # slice data
+ slice_bounds = []
+ for idx in indices_sorted:
+ try:
+ slice_bounds.append(slice_dict[idx])
+ except KeyError:
+ slice_bounds.append(slice(None))
+
+ data = data[tuple(slice_bounds)]
+
+ # update indices
+ indices_sliced = [idx.copy(size=size) for idx, size in
+ zip(indices_sorted, data.shape)]
+ indices_sliced = [i for sl, i in zip(slice_bounds, indices_sliced) if not isinstance(sl, int)]
+ assert len(data.shape) == len(indices_sliced)
+
+ print(f"creating {tensor.name}")
+ exatn.createTensor(tensor.name, data)
+
+ sliced_bucket.append(TensorInfo(tensor.name, indices_sliced))
+ sliced_buckets.append(sliced_bucket)
+
+ return sliced_buckets
+
+def idx_to_string(idx):
+ idx = map(int, idx)
+ letters = list(map(utils.num_to_alpha, idx))
+ return ",".join(letters)
+
+def tensor_to_string(tensor):
+ print(tensor.indices)
+ idx = idx_to_string(tensor.indices)
+ return tensor.name + "(" + idx + ")"
+
+def get_exatn_expr(tensor1, tensor2, result_name, result_idx):
+ # remap indices to reduce their order, as einsum does not like
+ # large numbers
+ all_indices = set.union(set(tensor1.indices), set(tensor2.indices))
+ idx_to_least_idx = {old_idx: new_idx for new_idx, old_idx
+ in enumerate(all_indices)}
+ tensor1 = TensorInfo(name=tensor1.name, indices=[idx_to_least_idx[idx] for idx in tensor1.indices])
+ tensor2 = TensorInfo(name=tensor2.name, indices=[idx_to_least_idx[idx] for idx in tensor2.indices])
+ result_idx = [idx_to_least_idx[idx] for idx in result_idx]
+
+ # T(a,b,c) = A(a,b) * B(b,c)
+ str1 = tensor_to_string(tensor1)
+ str2 = tensor_to_string(tensor2)
+ str3 = f"{result_name}({idx_to_string(result_idx)})"
+
+ return f"{str3} = {str2} * {str1}"
+
+def get_result_indices(idx1, idx2, contract=True):
+ result_indices = tuple(sorted(set(idx1 + idx2), key=int))
+ if contract:
+ result_indices = result_indices[1:]
+ return result_indices
+
+
+def process_bucket_exatn(bucket, no_sum=False, result_id=0):
+ """
+ Process bucket in the bucket elimination algorithm.
+ We multiply all tensors in the bucket and sum over the
+ variable which the bucket corresponds to. This way the
+ variable of the bucket is removed from the expression.
+
+ Parameters
+ ----------
+ bucket : list
+ List containing tuples of tensors (gates) with their indices.
+
+ no_sum : bool
+ If no summation should be done over the buckets's variable
+
+ Returns
+ -------
+ tensor : optimizer.Tensor
+ wrapper tensor object holding the result
+ """
+
+ pr_info = bucket[0]
+ n = len(bucket)
+
+ tmp_id = 0
+
+ for i, t_info in enumerate(bucket[1:]):
+ no_hcon = n == 2 or i == n - 1 # TODO better check if hypercontraction is required
+ result_indices = get_result_indices(pr_info.indices, t_info.indices, contract=no_hcon)
+ if no_hcon:
+ no_sum = True
+ else:
+ # raise Exception('QTensorError: Exatn Hyper-contractions are not supported at the moment')
+ no_sum = False
+
+ new_name = f"C{np.random.randint(0, 1000000000)}"
+ exatn.createTensor(new_name, np.empty([2]*len(result_indices), dtype=complex))
+ expr = get_exatn_expr(pr_info, t_info, new_name, result_indices)
+
+ pr_info = TensorInfo(new_name, result_indices)
+ exatn.contractTensors(expr)
+
+ return pr_info
diff --git a/qtensor/lib/__init__.py b/qtensor/lib/__init__.py
new file mode 100644
index 00000000..391650d5
--- /dev/null
+++ b/qtensor/lib/__init__.py
@@ -0,0 +1,2 @@
+from .graph_hashing import weisfeiler_lehman_graph_hash
+graph_hash = weisfeiler_lehman_graph_hash
diff --git a/qtensor/lib/graph_hashing.py b/qtensor/lib/graph_hashing.py
new file mode 100644
index 00000000..b0d6df1b
--- /dev/null
+++ b/qtensor/lib/graph_hashing.py
@@ -0,0 +1,158 @@
+
+"""
+Functions for hashing graphs to strings.
+Isomorphic graphs should be assigned identical hashes.
+For now, only Weisfeiler-Lehman hashing is implemented.
+"""
+
+"""
+DL:
+ Ripped off from networkx 2.5. There's no reason to ask for a newer version just
+ because of a single small function
+"""
+
+from collections import Counter
+from hashlib import blake2b
+
+__all__ = ["weisfeiler_lehman_graph_hash"]
+
+
+def weisfeiler_lehman_graph_hash(
+ G, edge_attr=None, node_attr=None, iterations=3, digest_size=16
+):
+ """Return Weisfeiler Lehman (WL) graph hash.
+
+ The function iteratively aggregates and hashes neighbourhoods of each node.
+ After each node's neighbors are hashed to obtain updated node labels,
+ a hashed histogram of resulting labels is returned as the final hash.
+
+ Hashes are identical for isomorphic graphs and strong guarantees that
+ non-isomorphic graphs will get different hashes. See [1] for details.
+
+ Note: Similarity between hashes does not imply similarity between graphs.
+
+ If no node or edge attributes are provided, the degree of each node
+ is used as its initial label.
+ Otherwise, node and/or edge labels are used to compute the hash.
+
+ Parameters
+ ----------
+ G: graph
+ The graph to be hashed.
+ Can have node and/or edge attributes. Can also have no attributes.
+ edge_attr: string
+ The key in edge attribute dictionary to be used for hashing.
+ If None, edge labels are ignored.
+ node_attr: string
+ The key in node attribute dictionary to be used for hashing.
+ If None, and no edge_attr given, use
+ degree of node as label.
+ iterations: int
+ Number of neighbor aggregations to perform.
+ Should be larger for larger graphs.
+ digest_size: int
+ Size of blake2b hash digest to use for hashing node labels.
+
+ Returns
+ -------
+ h : string
+ Hexadecimal string corresponding to hash of the input graph.
+
+ Examples
+ --------
+ Two graphs with edge attributes that are isomorphic, except for
+ differences in the edge labels.
+
+ >>> G1 = nx.Graph()
+ >>> G1.add_edges_from(
+ ... [
+ ... (1, 2, {"label": "A"}),
+ ... (2, 3, {"label": "A"}),
+ ... (3, 1, {"label": "A"}),
+ ... (1, 4, {"label": "B"}),
+ ... ]
+ ... )
+ >>> G2 = nx.Graph()
+ >>> G2.add_edges_from(
+ ... [
+ ... (5, 6, {"label": "B"}),
+ ... (6, 7, {"label": "A"}),
+ ... (7, 5, {"label": "A"}),
+ ... (7, 8, {"label": "A"}),
+ ... ]
+ ... )
+
+ Omitting the `edge_attr` option, results in identical hashes.
+
+ >>> weisfeiler_lehman_graph_hash(G1)
+ '0db442538bb6dc81d675bd94e6ebb7ca'
+ >>> weisfeiler_lehman_graph_hash(G2)
+ '0db442538bb6dc81d675bd94e6ebb7ca'
+
+ With edge labels, the graphs are no longer assigned
+ the same hash digest.
+
+ >>> weisfeiler_lehman_graph_hash(G1, edge_attr="label")
+ '408c18537e67d3e56eb7dc92c72cb79e'
+ >>> weisfeiler_lehman_graph_hash(G2, edge_attr="label")
+ 'f9e9cb01c6d2f3b17f83ffeaa24e5986'
+
+ References
+ -------
+ .. [1] Shervashidze, Nino, Pascal Schweitzer, Erik Jan Van Leeuwen,
+ Kurt Mehlhorn, and Karsten M. Borgwardt. Weisfeiler Lehman
+ Graph Kernels. Journal of Machine Learning Research. 2011.
+ http://www.jmlr.org/papers/volume12/shervashidze11a/shervashidze11a.pdf
+ """
+
+ def neighborhood_aggregate(G, node, node_labels, edge_attr=None):
+ """
+ Compute new labels for given node by aggregating
+ the labels of each node's neighbors.
+ """
+ label_list = [node_labels[node]]
+ for nei in G.neighbors(node):
+ prefix = "" if not edge_attr else G[node][nei][edge_attr]
+ label_list.append(prefix + node_labels[nei])
+ return "".join(sorted(label_list))
+
+ def weisfeiler_lehman_step(G, labels, edge_attr=None, node_attr=None):
+ """
+ Apply neighborhood aggregation to each node
+ in the graph.
+ Computes a dictionary with labels for each node.
+ """
+ new_labels = dict()
+ for node in G.nodes():
+ new_labels[node] = neighborhood_aggregate(
+ G, node, labels, edge_attr=edge_attr
+ )
+ return new_labels
+
+ items = []
+ node_labels = dict()
+ # set initial node labels
+ for node in G.nodes():
+ if (not node_attr) and (not edge_attr):
+ node_labels[node] = str(G.degree(node))
+ elif node_attr:
+ node_labels[node] = str(G.nodes[node][node_attr])
+ else:
+ node_labels[node] = ""
+
+ for k in range(iterations):
+ node_labels = weisfeiler_lehman_step(G, node_labels, edge_attr=edge_attr)
+ counter = Counter()
+ # count node labels
+ for node, d in node_labels.items():
+ h = blake2b(digest_size=digest_size)
+ h.update(d.encode("ascii"))
+ counter.update([h.hexdigest()])
+ # sort the counter, extend total counts
+ items.extend(sorted(counter.items(), key=lambda x: x[0]))
+
+ # hash the final counter
+ h = blake2b(digest_size=digest_size)
+ h.update(str(tuple(items)).encode("ascii"))
+ h = h.hexdigest()
+ return h
diff --git a/qtensor/tests/test_bucket_backends.py b/qtensor/tests/test_bucket_backends.py
index b139c057..f0d5aeb9 100644
--- a/qtensor/tests/test_bucket_backends.py
+++ b/qtensor/tests/test_bucket_backends.py
@@ -1,27 +1,42 @@
+import numpy as np
+import networkx as nx
+import pytest
+
from qtensor import QtreeQAOAComposer
+from qtensor.Simulate import CirqSimulator, QtreeSimulator
+
+from qtensor.ProcessingFrameworks import PerfBackend
from qtensor.ProcessingFrameworks import PerfNumpyBackend
-from qtensor.Simulate import CirqSimulator, QtreeSimulator
-import numpy as np
-import networkx as nx
+from qtensor.ProcessingFrameworks import CMKLExtendedBackend
-def get_test_problem():
+@pytest.fixture(scope="module")
+def test_problem():
w = np.array([[0,1,1,0],[1,0,1,1],[1,1,0,1],[0,1,1,0]])
G = nx.from_numpy_matrix(w)
- G = nx.random_regular_graph(5, 14)
- gamma, beta = [np.pi/3], [np.pi/2]
- return G, gamma, beta
+ G = nx.random_regular_graph(3, 18)
+ gamma, beta = [np.pi/3]*2, [np.pi/2]*2
+ yield G, gamma, beta
+
+@pytest.fixture(scope='module')
+def ground_truth_energy(test_problem):
+ G, gamma, beta = test_problem
+ composer = QtreeQAOAComposer(graph=G, gamma=gamma, beta=beta)
+ composer.ansatz_state()
+
+ sim = QtreeSimulator()
-def test_profiled(capsys):
- G, gamma, beta = get_test_problem()
+ result = sim.simulate(composer.circuit)
+ yield result
- composer = QtreeQAOAComposer(
- graph=G, gamma=[np.pi/3], beta=[np.pi/4])
+
+def test_profiled(capsys, ground_truth_energy, test_problem):
+ G, gamma, beta = test_problem
+ composer = QtreeQAOAComposer(graph=G, gamma=gamma, beta=beta)
composer.ansatz_state()
- print(composer.circuit)
backend = PerfNumpyBackend()
sim = QtreeSimulator(bucket_backend=backend)
@@ -29,6 +44,22 @@ def test_profiled(capsys):
print("Profile results")
print(backend.gen_report())
- qtree_amp = result
+ assert np.allclose(result, ground_truth_energy)
+
+def test_mkl(capsys, test_problem, ground_truth_energy):
+ G, gamma, beta = test_problem
+ composer = QtreeQAOAComposer(graph=G, gamma=gamma, beta=beta)
+ composer.ansatz_state()
+
+ backend = PerfBackend.from_backend(CMKLExtendedBackend, print=False)
+ sim = QtreeSimulator(bucket_backend=backend)
+
+ result = sim.simulate(composer.circuit)
+ print("Profile results")
+ print(backend.gen_report())
+
+ assert np.allclose(result, ground_truth_energy)
+
- assert qtree_amp
+if __name__=='__main__':
+ test_profiled(None)
diff --git a/qtensor/toolbox.py b/qtensor/toolbox.py
index f7015488..342021b8 100644
--- a/qtensor/toolbox.py
+++ b/qtensor/toolbox.py
@@ -1,7 +1,9 @@
import networkx as nx
import numpy as np
+from itertools import repeat
from tqdm.auto import tqdm
import time
+from multiprocessing.dummy import Pool
from qtensor.optimisation.TensorNet import QtreeTensorNet
from qtensor.optimisation.Optimizer import OrderingOptimizer, TamakiOptimizer, WithoutOptimizer
@@ -34,12 +36,14 @@ def random_graph(nodes, type='random', **kwargs):
-def optimize_circuit(circ, algo='greedy'):
+def optimize_circuit(circ, algo='greedy', tamaki_time=15):
+ # Should I somomehow generalize the tamaki-time argument? provide something like
+ # Optimizer-params argument? How would cli parse this?
if algo=='greedy':
opt = OrderingOptimizer()
elif algo=='tamaki':
- opt = TamakiOptimizer(wait_time=45)
+ opt = TamakiOptimizer(wait_time=tamaki_time)
elif algo=='without':
opt = WithoutOptimizer()
else:
@@ -49,8 +53,8 @@ def optimize_circuit(circ, algo='greedy'):
peo, tn = opt.optimize(tn)
return peo, tn, opt
-def get_tw(circ, ordering_algo='greedy'):
- peo, tn, opt = optimize_circuit(circ, algo=ordering_algo)
+def get_tw(circ, ordering_algo='greedy', tamaki_time=15):
+ peo, tn, opt = optimize_circuit(circ, algo=ordering_algo, tamaki_time=tamaki_time)
treewidth = opt.treewidth
return treewidth
@@ -95,25 +99,43 @@ def qaoa_energy_cost_params_stats_from_graph(G, p, max_time=0, max_tw=None,
return tw, mem, flop
+def _twidth_parallel_unit(args):
+ circ_graph, ordering_algo, tamaki_time, max_tw = args
+ circuit, subgraph = circ_graph
+ tw = get_tw(circuit, ordering_algo=ordering_algo, tamaki_time=tamaki_time)
+ if max_tw:
+ if tw>max_tw:
+ print(f'Encountered treewidth of {tw}, which is larger {max_tw}')
+ raise ValueError(f'Encountered treewidth of {tw}, which is larger {max_tw}')
+ return tw
+
def qaoa_energy_tw_from_graph(G, p, max_time=0, max_tw=0,
- ordering_algo='greedy', print_stats=False):
- twidths = []
- with tqdm(total=G.number_of_edges(), desc='Edge iteration') as pbar:
- for circuit, subgraph in qaoa_energy_lightcone_iterator(G, p, max_time=max_time):
- tw = get_tw(circuit, ordering_algo=ordering_algo)
- pbar.update()
- pbar.set_postfix(current_tw=tw, subgraph_nodes=subgraph.number_of_nodes())
- if max_tw:
- if tw>max_tw:
- print(f'Encountered treewidth of {tw}, which is larger {max_tw}')
- break
- twidths.append(tw)
+ ordering_algo='greedy', print_stats=False,
+ tamaki_time=15, n_processes=1):
+
+ lightcone_gen = qaoa_energy_lightcone_iterator(G, p, max_time=max_time)
+ arggen = zip(lightcone_gen, repeat(ordering_algo), repeat(tamaki_time), repeat(max_tw))
+ if n_processes > 1:
+ print('n_processes', n_processes)
+ with Pool(n_processes) as p:
+ twidths = list(tqdm(p.imap(_twidth_parallel_unit, arggen), total=G.number_of_edges()))
+ else:
+ twidths = []
+ with tqdm(total=G.number_of_edges(), desc='Edge iteration') as pbar:
+ for args in arggen:
+ circ_graph, ordering_algo, tamaki_time, max_tw = args
+ circuit, subgraph = circ_graph
+ tw = _twidth_parallel_unit(args)
+ pbar.update()
+ pbar.set_postfix(current_tw=tw, subgraph_nodes=subgraph.number_of_nodes())
+ twidths.append(tw)
if print_stats:
print(f'med={np.median(twidths)} mean={round(np.mean(twidths), 2)} max={np.max(twidths)}')
return twidths
+
def qaoa_energy_cost_params_from_graph(G, p, max_time=0, max_tw=0,
ordering_algo='greedy', print_stats=False):
costs = []
diff --git a/qtensor/utils.py b/qtensor/utils.py
index a54ce915..1d3e1a9b 100644
--- a/qtensor/utils.py
+++ b/qtensor/utils.py
@@ -174,7 +174,7 @@ def record(self, **kwargs):
if set(self.columns) != set(kwargs.keys()):
raise ValueError(f"columns doesn't match: {kwargs.keys()}, expect: {self.columns}")
else:
- self.columns = set(kwargs.keys())
+ self.columns = list(kwargs.keys())
self.records += [[kwargs[key] for key in self.columns]]
def _title_row(self):
diff --git a/run/automake/publish.sh b/run/automake/publish.sh
index 6614f1e7..b2f2bae1 100755
--- a/run/automake/publish.sh
+++ b/run/automake/publish.sh
@@ -3,11 +3,11 @@
echo "## Automake run result" >> results/result.md
echo "### Performance summary:" >> results/result.md
-tail -n 4 time_vs_flops.log >> results/result.md
+tail -n 5 results/time_vs_flops.txt >> results/result.md
echo "\n" >> results/result.md
echo "\n" >> results/result.md
-echo "Backend used: numpy.einsum" >> results/result.md
+echo "Backend used: mkl (full)" >> results/result.md
echo "\n" >> results/result.md
echo "### Performance plot:" >> results/result.md
diff --git a/run/automake/qsub_entry.sh b/run/automake/qsub_entry.sh
index 1a3d368a..423383a8 100755
--- a/run/automake/qsub_entry.sh
+++ b/run/automake/qsub_entry.sh
@@ -10,4 +10,4 @@ lscpu
echo $PYTHONPATH
echo $PATH
echo $SHELL
-qtensor-specs-time-flop-plot time-vs-flops-plot results/time_vs_flops.png > time_vs_flops.log
+qtensor-specs-time-flop-plot time-vs-flops-plot results/time_vs_flops.png --backend=mkl --max-memory=5e10 --min-memory=1e6 --seed=111 --ordering_algo=tamaki_10 > results/time_vs_flops.txt
diff --git a/run/automake/results/result.md b/run/automake/results/result.md
index 6734b893..9eb71a29 100644
--- a/run/automake/results/result.md
+++ b/run/automake/results/result.md
@@ -1,14 +1,10 @@
## Automake run result
### Performance summary:
-===Results===
-Simulator fitted flops: 0.32148 G
-Matmul flops: 416.78 G
-Simulator optimality: 0.0007713454853975739
\n
\n
-Backend used: numpy.einsum
+Backend used: mkl (full)
\n
### Performance plot:
-
+
\n
-Run date: Wed Oct 7 11:39:25 UTC 2020
+Run date: Sun Oct 11 03:45:15 UTC 2020
diff --git a/run/automake/results/time_vs_flops.png b/run/automake/results/time_vs_flops.png
index 6b538b8d..60e38482 100644
Binary files a/run/automake/results/time_vs_flops.png and b/run/automake/results/time_vs_flops.png differ
diff --git a/run/automake/results/time_vs_flops.txt b/run/automake/results/time_vs_flops.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/scratchpad/cpp_connections/vanilia/README.md b/scratchpad/cpp_connections/vanilia/README.md
new file mode 100644
index 00000000..1c7e9761
--- /dev/null
+++ b/scratchpad/cpp_connections/vanilia/README.md
@@ -0,0 +1,6 @@
+
+## Tutorial
+
+- Python C++ API https://docs.python.org/3/extending/extending.html
+
+- Using C++ API to extend Numpy https://numpy.org/doc/1.19/user/c-info.how-to-extend.html
diff --git a/scratchpad/cpp_connections/vanilia/nparray/README.md b/scratchpad/cpp_connections/vanilia/nparray/README.md
new file mode 100644
index 00000000..2e2f91bb
--- /dev/null
+++ b/scratchpad/cpp_connections/vanilia/nparray/README.md
@@ -0,0 +1,7 @@
+https://stackoverflow.com/a/52958940
+
+## Running stats
+
+```bash
+ seq 10 100 700 | xargs -L1 python contract.py
+```
diff --git a/scratchpad/cpp_connections/vanilia/nparray/cli-command.sh b/scratchpad/cpp_connections/vanilia/nparray/cli-command.sh
new file mode 100644
index 00000000..38580ae3
--- /dev/null
+++ b/scratchpad/cpp_connections/vanilia/nparray/cli-command.sh
@@ -0,0 +1 @@
+seq 23 25 | xargs -L1 python transposes.py | grep duration --line-buffered | cut -d'=' -f2
diff --git a/scratchpad/cpp_connections/vanilia/nparray/contract.py b/scratchpad/cpp_connections/vanilia/nparray/contract.py
new file mode 100644
index 00000000..4eaeb5d7
--- /dev/null
+++ b/scratchpad/cpp_connections/vanilia/nparray/contract.py
@@ -0,0 +1,81 @@
+import tcontract
+import sys
+import torch as t
+import numpy as np
+try:
+ from opt_einsum import contract as opt_einsum
+except ImportError:
+ opt_einsum = None
+
+import time
+from pyrofiler import Profiler
+
+def random_complex(*shape):
+ return np.random.randn(*shape) + 1j*np.random.randn(*shape)
+
+def stats_callback(elapsed_time, description, cop, flop):
+ print(f'{description}: Elapsed time={round(elapsed_time,3)} COPS={cop/elapsed_time:e} FLOPS={flop/elapsed_time:e}')
+
+def contract():
+ try:
+ N = int(sys.argv[1])
+ except LookupError:
+ N = 0
+ prof = Profiler(callback=stats_callback)
+
+ n, m, k = 2+N, 3+N, 4+N
+ A, B = np.random.randn(n, m), np.random.randn(n, k)
+
+ C = np.empty((n, m, k))
+ cop = C.size
+ flop = 6*C.size
+ size = sys.getsizeof(C)
+ print('Result size = {C_size:e} bytes'.format(C_size=size))
+
+ with prof.timing('Einsum', cop=cop, flop=flop):
+ C_einsum =np.einsum('ij,ik -> ijk', A, B)
+
+
+ with prof.timing('MKL', cop=cop, flop=flop):
+ tcontract.mkl_contract(A, B, C)
+
+ if opt_einsum:
+ with prof.timing('Opt Einsum', cop=cop, flop=flop):
+ _ = opt_einsum('ij,ik -> ijk', t.Tensor(A), t.Tensor(B), backend='torch')
+
+ assert np.array_equal(C_einsum, C)
+
+
+def contract_sum():
+ try:
+ N = int(sys.argv[1])
+ except LookupError:
+ N = 100
+ prof = Profiler(callback=stats_callback)
+
+ n, m, k, f = N, 1+N, 2+N, 3+N
+ #k = 2
+ print('Summation size:', k)
+ A, B = random_complex(k, f, m), random_complex(k, f, n)
+
+ C = np.empty((f, m, n), dtype=np.complex128)
+ flop = 6*C.size * (2*k - 1)
+ cop = C.size * (k - 1)
+ size = sys.getsizeof(C)
+ print('Result size = {C_size:e} bytes'.format(C_size=size))
+
+ with prof.timing('Einsum', cop=cop, flop=flop):
+ C_einsum =np.einsum('kfm,kfn -> fmn', A, B)
+
+ with prof.timing('MKL contract_summ', cop=cop, flop=flop):
+ tcontract.mkl_contract_sum(A, B, C)
+
+ assert np.allclose(C_einsum, C)
+
+if __name__=="__main__":
+ print('**With summ**')
+ contract_sum()
+ print()
+ print('**Just multiply**')
+ contract()
+ print()
diff --git a/scratchpad/cpp_connections/vanilia/nparray/jlse_setup.py b/scratchpad/cpp_connections/vanilia/nparray/jlse_setup.py
new file mode 100644
index 00000000..197527ac
--- /dev/null
+++ b/scratchpad/cpp_connections/vanilia/nparray/jlse_setup.py
@@ -0,0 +1,18 @@
+from setuptools import setup, Extension # use setuptools instead of distutils from tutorial
+import numpy as np
+
+extra_link_args = ['-I', '/soft/compilers/intel-2019/compilers_and_libraries/linux/mkl/include', '-l', 'mkl_intel_lp64', '-l', 'mkl_intel_thread', '-l', 'mkl_core', '-l', 'iomp5', '-l', 'pthread', '-l', 'm', '-l', 'dl', '-L', '/soft/compilers/intel-2019/compilers_and_libraries/linux/mkl/lib/intel64', '-L', '/soft/compilers/intel-2019/compilers_and_libraries/linux/mkl/../compiler/lib/intel64']
+
+module = Extension('tcontract'
+ , sources=['tcontract.cpp']
+ , include_dirs=[np.get_include(), '/soft/compilers/intel-2019/compilers_and_libraries/linux/mkl/include']
+ , extra_link_args=extra_link_args
+ , extra_compile_args=extra_link_args
+ )
+
+setup(
+ name='tcontract',
+ version='0.0.0',
+ description='Contract two tensors',
+ ext_modules=[module]
+)
diff --git a/scratchpad/cpp_connections/vanilia/nparray/setup.py b/scratchpad/cpp_connections/vanilia/nparray/setup.py
new file mode 100644
index 00000000..4626f9cf
--- /dev/null
+++ b/scratchpad/cpp_connections/vanilia/nparray/setup.py
@@ -0,0 +1,48 @@
+from setuptools import setup, Extension # use setuptools instead of distutils from tutorial
+import numpy as np
+import os
+
+"""
+Use this before:
+
+export LD_PRELOAD=$MKLROOT/lib/intel64/libmkl_def.so:$MKLROOT/lib/intel64/libmkl_avx2.so:$MKLROOT/lib/intel64/libmkl_core.so:$MKLROOT/lib/intel64/libmkl_intel_lp64.so:$MKLROOT/lib/intel64/libmkl_intel_thread.so
+"""
+
+# :/usr/lib/libomp.so
+
+mklroot = os.environ['MKLROOT']
+mklinclude = mklroot + '/include'
+mkllib = mklroot + '/lib/intel64'
+
+extra_link_args = ['-I', mklinclude
+ , '-L', mkllib
+ , '-Wl,--no-as-needed'
+ , '-lmkl_intel_lp64'
+ , '-lmkl_gnu_thread'
+ , '-lmkl_core'
+ , '-lpthread'
+ , '-lgomp'
+ , '-lm'
+ , '-ldl'
+ ]
+
+extra_compile_args = ['-I', mklinclude
+ ,'-std=c++11'
+ ,'-m64'
+ ,'-fopenmp'
+ ]
+
+module = Extension('tcontract'
+ , sources=['tcontract.cpp']
+ , include_dirs=[np.get_include()]
+ , extra_compile_args=extra_compile_args
+ , extra_link_args=extra_link_args
+ )
+
+setup(
+ name='tcontract',
+ version='0.0.0',
+ description='Contract two tensors',
+ ext_modules=[module]
+)
+
diff --git a/scratchpad/cpp_connections/vanilia/nparray/tcontract.cpp b/scratchpad/cpp_connections/vanilia/nparray/tcontract.cpp
new file mode 100644
index 00000000..810bb213
--- /dev/null
+++ b/scratchpad/cpp_connections/vanilia/nparray/tcontract.cpp
@@ -0,0 +1,691 @@
+#include "Python.h"
+#include
+#include "numpy/arrayobject.h"
+#include
+#include
+#include
+
+#include "mkl.h"
+
+using namespace std::chrono;
+using namespace std;
+
+
+// Helper function to parse numpy arguments complex-valued matrices A, B and C
+//
+int python_abc_complex_args(PyObject *dummy, PyObject *args, PyObject **Obj, std::complex **Data) {
+ PyObject *argA, *argB, *argC;
+ int fail = 0;
+
+ if (!PyArg_ParseTuple(args, "OOO!", &argA, &argB,
+ &PyArray_Type, &argC)) return 1;
+
+ Obj[0]= PyArray_FROM_OTF(argA, NPY_COMPLEX128, NPY_ARRAY_IN_ARRAY);
+ if (Obj[0] == NULL) fail = 1;
+ Obj[1] = PyArray_FROM_OTF(argB, NPY_COMPLEX128, NPY_ARRAY_IN_ARRAY);
+ if (Obj[1] == NULL) fail = 1;
+#if NPY_API_VERSION >= 0x0000000c
+ Obj[2] = PyArray_FROM_OTF(argC, NPY_COMPLEX128, NPY_ARRAY_INOUT_ARRAY2);
+#else
+ Obj[2] = PyArray_FROM_OTF(argC, NPY_COMPLEX128, NPY_ARRAY_INOUT_ARRAY);
+#endif
+ if (Obj[2] == NULL) fail = 1;
+
+ if (fail != 0) {
+ for (int i=0; i<3; i++) {
+ Py_XDECREF(Obj[i]);
+ }
+ return fail;
+ }else{
+
+ for (int i=0; i<3; i++) {
+ Data[i] = (std::complex *)PyArray_DATA( Obj[i] );
+ }
+ return 0;
+ }
+}
+//
+
+// DEBUG
+static PyObject *
+debug_mkl_contract_sum(PyObject *dummy, PyObject *args)
+{
+ std::complex alpha(1, 0);
+ std::complex beta(0, 0);
+ // -- Parse Python arguments
+ PyObject *Obj[3];
+ std::complex *Data[3];
+ int parse_fail;
+ parse_fail = python_abc_complex_args(dummy, args, Obj, Data);
+
+ if (parse_fail != 0) {
+ std::cerr << "Failed to parse arguments" << std::endl;
+ return NULL;
+ }
+ // --
+ PyObject *A, *B, *C;
+ A = Obj[0]; B = Obj[1]; C = Obj[2];
+
+ std::complex *Aptr, *Bptr, *Cptr;
+ Aptr = Data[0]; Bptr = Data[1]; Cptr = Data[2];
+ npy_intp *dimC = PyArray_DIMS(C);
+ npy_intp *dimA = PyArray_DIMS(A);
+
+ int m = dimC[1]; // Row length of A, third index
+ int n = dimC[2]; // Row length of B, third index
+ int k = dimA[0]; // Summation length, first index of A and B
+ int f = dimA[1]; // Multiplication-only index, second index of A and B
+
+ std::cerr << "Dimensions: f:" << f << " k:" << k << " n:" << n << " m:" << m << std::endl;
+ auto start = high_resolution_clock::now();
+ /*
+ * Performs opearation
+ * \sum_k A_{kfm} * B_{kfn} = C_{fmn}
+ */
+
+ for (int i=0; i(stop - start).count();
+ std::cerr << "Duration: " << millis << " milliseconds" << std::endl;
+
+ /*
+ * Works as well:
+ cblas_zgemm(CblasColMajor,
+ CblasNoTrans,
+ CblasTrans,
+ n, m, k, &alpha,
+ Bptr + i*n, f*n,
+ Aptr + i*m, f*m,
+ &beta,
+ Cptr + i*n*m, n);
+ */
+ // -- Clean up python pointers
+ Py_DECREF(A);
+ Py_DECREF(B);
+ Py_DECREF(C);
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+
+static PyObject *
+mkl_contract_sum(PyObject *dummy, PyObject *args)
+{
+ std::complex alpha(1, 0);
+ std::complex beta(0, 0);
+
+ // -- Parse Python arguments
+ PyObject *Obj[3];
+ std::complex *Data[3];
+ int parse_fail;
+ parse_fail = python_abc_complex_args(dummy, args, Obj, Data);
+
+ if (parse_fail != 0) {
+ std::cerr << "Failed to parse arguments" << std::endl;
+ return NULL;
+ }
+ // --
+ PyObject *A, *B, *C;
+ A = Obj[0]; B = Obj[1]; C = Obj[2];
+ std::complex *Aptr, *Bptr, *Cptr;
+ Aptr = Data[0]; Bptr = Data[1]; Cptr = Data[2];
+ npy_intp *dimC = PyArray_DIMS(C);
+ npy_intp *dimA = PyArray_DIMS(A);
+
+ int m = dimC[1]; // Row length of A, third index
+ int n = dimC[2]; // Row length of B, third index
+ int k = dimA[0]; // Summation length, first index of A and B
+ int f = dimA[1]; // Multiplication-only index, second index of A and B
+
+
+ /*
+ * Performs opearation
+ * \sum_k A_{kfm} * B_{kfn} = C_{fmn}
+ */
+
+ for (int i=0; i alpha(1, 0);
+ std::complex beta(0, 0);
+
+ // -- Parse Python arguments
+ PyObject *Obj[3];
+ std::complex *Data[3];
+ int parse_fail;
+ parse_fail = python_abc_complex_args(dummy, args, Obj, Data);
+
+ if (parse_fail != 0) {
+ std::cerr << "Failed to parse arguments" << std::endl;
+ return NULL;
+ }
+ // --
+
+ PyObject *A, *B, *C;
+ A = Obj[0]; B = Obj[1]; C = Obj[2];
+
+ std::complex *Aptr, *Bptr, *Cptr;
+ Aptr = Data[0]; Bptr = Data[1]; Cptr = Data[2];
+
+ //auto now = high_resolution_clock::now();
+ //auto millis = duration_cast(now - epoch).count();
+ //std::cout << "after convert. duration (μs) = " << millis << std::endl;
+
+ npy_intp *dimC = PyArray_DIMS(C);
+
+ std::cerr << "Dimensions: C[0]:" << dimC[0] << " C[1]:" << dimC[1] << " C[2]:" << dimC[2] << std::endl;
+ auto start = high_resolution_clock::now();
+
+ for (int i=0; i(stop - start).count();
+ std::cerr << "Duration: " << millis << " milliseconds" << std::endl;
+
+ Py_DECREF(A);
+ Py_DECREF(B);
+ Py_DECREF(C);
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+
+static PyObject *
+mkl_contract_complex(PyObject *dummy, PyObject *args)
+{
+ std::complex alpha(1, 0);
+ std::complex beta(0, 0);
+
+ // -- Parse Python arguments
+ PyObject *Obj[3];
+ std::complex *Data[3];
+ int parse_fail;
+ parse_fail = python_abc_complex_args(dummy, args, Obj, Data);
+
+ if (parse_fail != 0) {
+ std::cerr << "Failed to parse arguments" << std::endl;
+ return NULL;
+ }
+ // --
+
+ PyObject *A, *B, *C;
+ A = Obj[0]; B = Obj[1]; C = Obj[2];
+
+ std::complex *Aptr, *Bptr, *Cptr;
+ Aptr = Data[0]; Bptr = Data[1]; Cptr = Data[2];
+
+ //auto now = high_resolution_clock::now();
+ //auto millis = duration_cast(now - epoch).count();
+ //std::cout << "after convert. duration (μs) = " << millis << std::endl;
+
+ npy_intp *dimC = PyArray_DIMS(C);
+
+ for (int i=0; i *Aptr, *Bptr, *Cptr;
+ std::complex alpha(1, 0);
+ std::complex beta(0, 0);
+
+ int nd;
+ npy_intp * dimC;
+ npy_intp * dimA;
+
+ if (!PyArg_ParseTuple(args, "OOO!", &argA, &argB,
+ &PyArray_Type, &argC)) return NULL;
+
+ A = PyArray_FROM_OTF(argA, NPY_COMPLEX128, NPY_ARRAY_IN_ARRAY);
+ if (A == NULL) return NULL;
+ B = PyArray_FROM_OTF(argB, NPY_COMPLEX128, NPY_ARRAY_IN_ARRAY);
+ if (B == NULL) goto fail;
+#if NPY_API_VERSION >= 0x0000000c
+ C = PyArray_FROM_OTF(argC, NPY_COMPLEX128, NPY_ARRAY_INOUT_ARRAY2);
+#else
+ C = PyArray_FROM_OTF(argC, NPY_COMPLEX128, NPY_ARRAY_INOUT_ARRAY);
+#endif
+ if (C == NULL) goto fail;
+
+
+
+ //auto now = high_resolution_clock::now();
+ //auto millis = duration_cast(now - epoch).count();
+
+ nd = PyArray_NDIM(C);
+ if (nd!=2) goto fail;
+ dimC = PyArray_DIMS(C);
+ dimA = PyArray_DIMS(A);
+ Aptr = (std::complex *)PyArray_DATA(A);
+ Bptr = (std::complex *)PyArray_DATA(B);
+ Cptr = (std::complex *)PyArray_DATA(C);
+ std::cout << "A[0][1]" << Aptr[1] << std::endl;
+ std::cout << "dimC" << dimC[0] << "," <= 0x0000000c
+ C = PyArray_FROM_OTF(argC, NPY_DOUBLE, NPY_ARRAY_INOUT_ARRAY2);
+#else
+ C = PyArray_FROM_OTF(argC, NPY_DOUBLE, NPY_ARRAY_INOUT_ARRAY);
+#endif
+ if (C == NULL) goto fail;
+
+
+
+ //auto now = high_resolution_clock::now();
+ //auto millis = duration_cast(now - epoch).count();
+ //std::cout << "after convert. duration (μs) = " << millis << std::endl;
+
+ nd = PyArray_NDIM(C);
+ if (nd!=3) goto fail;
+ dimC = PyArray_DIMS(C);
+ Aptr = (double *)PyArray_DATA(A);
+ Bptr = (double *)PyArray_DATA(B);
+ Cptr = (double *)PyArray_DATA(C);
+
+ for (int i=0; i) -- number of dimensions
+ dims = PyArray_DIMS(<..>) -- npy_intp array of length nd
+ showing length in each dim.
+ dptr = (double *)PyArray_DATA(<..>) -- pointer to data.
+
+ If an error occurs goto fail.
+ */
+
+ Py_DECREF(A);
+ Py_DECREF(B);
+ Py_DECREF(C);
+ Py_INCREF(Py_None);
+ return Py_None;
+
+ fail:
+ Py_XDECREF(A);
+ Py_XDECREF(B);
+ Py_XDECREF(C);
+ return NULL;
+
+}
+
+static PyObject *
+triple_loop_contract(PyObject *dummy, PyObject *args)
+{
+ PyObject *argA=NULL, *argB, *argC;
+ PyObject *A=NULL, *B, *C;
+ double *Aptr, *Bptr, *Cptr;
+
+ auto epoch = high_resolution_clock::now();
+ int nd;
+ npy_intp * dimC;
+
+ if (!PyArg_ParseTuple(args, "OOO!", &argA, &argB,
+ &PyArray_Type, &argC)) return NULL;
+
+ A = PyArray_FROM_OTF(argA, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
+ if (A == NULL) return NULL;
+ B = PyArray_FROM_OTF(argB, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
+ if (B == NULL) goto fail;
+#if NPY_API_VERSION >= 0x0000000c
+ C = PyArray_FROM_OTF(argC, NPY_DOUBLE, NPY_ARRAY_INOUT_ARRAY2);
+#else
+ C = PyArray_FROM_OTF(argC, NPY_DOUBLE, NPY_ARRAY_INOUT_ARRAY);
+#endif
+ if (C == NULL) goto fail;
+
+
+
+ //auto now = high_resolution_clock::now();
+ //auto millis = duration_cast(now - epoch).count();
+ //std::cout << "after convert. duration (μs) = " << millis << std::endl;
+
+ nd = PyArray_NDIM(C);
+ if (nd!=3) goto fail;
+ dimC = PyArray_DIMS(C);
+ Aptr = (double *)PyArray_DATA(A);
+ Bptr = (double *)PyArray_DATA(B);
+ Cptr = (double *)PyArray_DATA(C);
+
+ for (int i=0; i(now - epoch).count();
+ std::cout << "after convert. duration (μs) = " << millis << std::endl;
+
+
+ dptr = (double *)PyArray_DATA(arr);
+ std::cout << "arr[0] = " << *dptr << std::endl;
+ std::cout << "arr[1] = " << *(dptr+1) << std::endl;
+ std::cout << "arr[2] = " << *(dptr+2) << std::endl;
+ std::cout << "arr[3] = " << *(dptr+3) << std::endl;
+
+
+ Py_DECREF(arr);
+ Py_INCREF(Py_None);
+ return Py_None;
+
+}
+
+// -- Examples
+
+static PyObject * integrate3(PyObject * module, PyObject * args)
+{
+ PyObject * argy=NULL; // Regular Python/C API
+ PyArrayObject * yarr=NULL; // Extended Numpy/C API
+ double dx,dy,dz;
+
+ std::cout << "in func" < read argument as a PyObject type into argy (Python/C API)
+ if (!PyArg_ParseTuple(args, "Oddd", &argy,&dx,&dy,&dz))
+ {
+ PyErr_SetString(PyExc_ValueError, "Error parsing arguments.");
+ return NULL;
+ }
+
+ std::cout << "parsed" << std::endl;
+ // Determine if it's a complex number array (Numpy/C API)
+ int DTYPE = PyArray_ObjectType(argy, NPY_FLOAT);
+ int iscomplex = PyTypeNum_ISCOMPLEX(DTYPE);
+ std::cout << "Is complex" << iscomplex << std::endl;
+
+ // parse python object into numpy array (Numpy/C API)
+ yarr = (PyArrayObject *)PyArray_FROM_OTF(argy, DTYPE, NPY_ARRAY_IN_ARRAY);
+ if (yarr==NULL) {
+ Py_INCREF(Py_None);
+ return Py_None;
+ }
+
+ //just assume this for 3 dimensional array...you can generalize to N dims
+ if (PyArray_NDIM(yarr) != 3) {
+ Py_CLEAR(yarr);
+ PyErr_SetString(PyExc_ValueError, "Expected 3 dimensional integrand");
+ return NULL;
+ }
+
+ npy_intp * dims = PyArray_DIMS(yarr);
+ npy_intp i,j,k,m;
+ double * p;
+
+ //initialize variable to hold result
+ Py_complex result = {.real = 0, .imag = 0};
+ std::cout << "Is complex" << iscomplex << std::endl;
+
+ if (iscomplex) {
+ for (i=0;i= 0x0000000c
+ oarr = PyArray_FROM_OTF(out, NPY_DOUBLE, NPY_ARRAY_INOUT_ARRAY2);
+#else
+ oarr = PyArray_FROM_OTF(out, NPY_DOUBLE, NPY_ARRAY_INOUT_ARRAY);
+#endif
+ if (oarr == NULL) goto fail;
+
+
+ std::cout << "arr1" << std::endl;
+ dptr = (double *)PyArray_DATA(arr1);
+ std::cout << "arrval = " << *dptr << std::endl;
+ std::cout << "arrval = " << *(dptr+1) << std::endl;
+ std::cout << "arrval = " << *(dptr+2) << std::endl;
+ std::cout << "arrval = " << *dptr+3 << std::endl;
+ std::cout << "arrval = " << *dptr+4 << std::endl;
+
+
+ /* code that makes use of arguments */
+ /* You will probably need at least
+ nd = PyArray_NDIM(<..>) -- number of dimensions
+ dims = PyArray_DIMS(<..>) -- npy_intp array of length nd
+ showing length in each dim.
+ dptr = (double *)PyArray_DATA(<..>) -- pointer to data.
+
+ If an error occurs goto fail.
+ */
+
+ Py_DECREF(arr1);
+ Py_DECREF(arr2);
+ Py_DECREF(oarr);
+ Py_INCREF(Py_None);
+ return Py_None;
+
+ fail:
+ Py_XDECREF(arr1);
+ Py_XDECREF(arr2);
+ Py_XDECREF(oarr);
+ return NULL;
+}
+
+// --
+
+static PyMethodDef tcontract_Methods[] = {
+ {"integrate3", integrate3, METH_VARARGS,
+ "Pass 3D numpy array (double or complex) and dx,dy,dz step size. Returns Reimman integral"},
+ {"example", example_wrapper, METH_VARARGS,
+ "Example from https://numpy.org/doc/stable/user/c-info.how-to-extend.html"},
+ {"print_4", print_4, METH_VARARGS,
+ "Prints first 4 values of numpy array"},
+ {"mkl_dotmul", mkl_dotmul, METH_VARARGS,
+ "Matrix multiplication"},
+
+ {"triple_loop_contract", triple_loop_contract, METH_VARARGS,
+ "Contracts two arrays with first common index"},
+ {"mkl_contract", mkl_contract, METH_VARARGS,
+ "Contracts two arrays with first common index using MKL"},
+ {"mkl_contract_complex", mkl_contract_complex, METH_VARARGS,
+ "Contracts two arrays with first common index using MKL"},
+ {"mkl_contract_sum", mkl_contract_sum, METH_VARARGS,
+ "Performs opearation:\
+ \\sum_k A_{kfm} * B_{kfn} = C_{fmn}"},
+
+ {"debug_mkl_contract_sum", debug_mkl_contract_sum, METH_VARARGS,
+ "DEBUG Performs opearation:\
+ \\sum_k A_{kfm} * B_{kfn} = C_{fmn}"},
+ {"debug_mkl_contract_complex", debug_mkl_contract_complex, METH_VARARGS,
+ "DEBUG Contracts two arrays with first common index using MKL"},
+ {NULL, NULL, 0, NULL} /* Sentinel */
+};
+
+
+static struct PyModuleDef module = {
+ PyModuleDef_HEAD_INIT,
+ "tcontract", /* name of module */
+ NULL, /* module documentation, may be NULL */
+ -1, /* size of per-interpreter state of the module,
+ or -1 if the module keeps state in global variables. */
+ tcontract_Methods
+};
+
+PyMODINIT_FUNC
+PyInit_tcontract(void)
+{
+ // Called on import
+ // Returns a pointer to module, which is insected into `sys.modules`
+ import_array(); // needed for numpy to work
+ return PyModule_Create(&module);
+}
diff --git a/scratchpad/cpp_connections/vanilia/nparray/test.py b/scratchpad/cpp_connections/vanilia/nparray/test.py
new file mode 100644
index 00000000..d4b1d67a
--- /dev/null
+++ b/scratchpad/cpp_connections/vanilia/nparray/test.py
@@ -0,0 +1,40 @@
+import tcontract
+import sys
+import numpy as np
+
+def test(func):
+ def wraped():
+ print('Testing', func.__name__)
+ func()
+ return wraped
+
+@test
+def test_transpose():
+ arr = np.array([[0,1],[2,3]])
+ arr = np.array(arr, dtype=np.double)
+ print('in python:\n', arr)
+ _ = tcontract.print_4(arr)
+
+ arr = arr.T
+ print('in python:\n', arr)
+ _ = tcontract.print_4(arr)
+
+test_transpose()
+
+@test
+def test_transpose_large():
+ N = 25
+ arr = np.random.randn(*[2]*N)
+ tcontract.print_4(arr)
+ print('transposed')
+ arr = arr.transpose(*reversed(range(N)))
+ tcontract.print_4(arr)
+
+test_transpose_large()
+
+arr = np.random.randn(4,8,16) + 1j*np.random.randn(4,8,16)
+print(np.sum(arr))
+
+# arbitrary step size dx = 1., y=0.5, dz = 0.25
+ans = tcontract.integrate3(arr, 1.0, 1.0, 1.0)
+print(ans)
diff --git a/scratchpad/cpp_connections/vanilia/nparray/transposes.py b/scratchpad/cpp_connections/vanilia/nparray/transposes.py
new file mode 100644
index 00000000..3974d544
--- /dev/null
+++ b/scratchpad/cpp_connections/vanilia/nparray/transposes.py
@@ -0,0 +1,29 @@
+import tcontract
+import sys
+import numpy as np
+
+def large_transpose():
+ try:
+ N = int(sys.argv[1])
+ except LookupError:
+ N = 24
+ print('Numel = ', 2**N)
+ arr = np.random.randn(*[2]*N)
+ size = sys.getsizeof(arr)
+ print('Array size = {C_size:e} bytes'.format(C_size=size))
+ tcontract.print_4(arr)
+ print('\n== transposed: reverse (worst case) ==')
+ arr = arr.transpose(*reversed(range(N)))
+ tcontract.print_4(arr)
+
+ arr = np.random.randn(*[2]*N)
+ print('\n== transposed: start (good cache efficiency) ==')
+ arr = arr.swapaxes(1,0)
+ tcontract.print_4(arr)
+
+ arr = np.random.randn(*[2]*N)
+ print('\n== transposed: end (low cache efficiency) ==')
+ arr = arr.swapaxes(N-1,N-2)
+ tcontract.print_4(arr)
+
+large_transpose()
diff --git a/scratchpad/cpp_connections/vanilia/tutorial/setup.py b/scratchpad/cpp_connections/vanilia/tutorial/setup.py
new file mode 100644
index 00000000..84452d31
--- /dev/null
+++ b/scratchpad/cpp_connections/vanilia/tutorial/setup.py
@@ -0,0 +1,10 @@
+from setuptools import setup, Extension # use setuptools instead of distutils from tutorial
+
+module = Extension('spam', sources=['spammodule.c'])
+
+setup(
+ name='spam',
+ version='0.0.0',
+ description='Binding python to cpp',
+ ext_modules=[module]
+)
diff --git a/scratchpad/cpp_connections/vanilia/tutorial/spammodule.c b/scratchpad/cpp_connections/vanilia/tutorial/spammodule.c
new file mode 100644
index 00000000..01ea3379
--- /dev/null
+++ b/scratchpad/cpp_connections/vanilia/tutorial/spammodule.c
@@ -0,0 +1,48 @@
+//-- Pull the Python API
+#define PY_SSIZE_T_CLEAN // What this does? https://docs.python.org/3/extending/extending.html#parsetuple
+#include
+//--
+
+// The self argument points to the module object for module-level functions
+static PyObject *
+spam_system(PyObject *self, PyObject *args) {
+ const char * command;
+ int sts;
+
+ // int PyArg_ParseTuple(PyObject *args, const char *format, ...)
+ if (!PyArg_ParseTuple(args, "s", &command))
+ return NULL;
+ // Python.h above includes stdlib.h and other libraries
+ sts = system(command);
+ // Will return an integer object. (Yes, even integers are objects on the heap in Python!)
+ return PyLong_FromLong(sts);
+}
+
+// "Method table"
+static PyMethodDef SpamMethods[] = {
+ {"system", spam_system, METH_VARARGS, "Execute a shell command."},
+ {NULL, NULL, 0, NULL} /* Sentinel */
+};
+
+// Module definition struct
+static struct PyModuleDef spammodule = {
+ PyModuleDef_HEAD_INIT,
+ "spam", /* name of module */
+ NULL, /* module documentation, may be NULL */
+ -1, /* size of per-interpreter state of the module,
+ or -1 if the module keeps state in global variables. */
+ SpamMethods
+};
+
+/*
+ PyMODINIT_FUNC declares the function as PyObject * return type,
+ declares any special linkage declarations required by the platform, and for
+ C++ declares the function as extern "C". PyMODINIT_FUNC
+*/
+PyMODINIT_FUNC
+PyInit_spam(void)
+{
+ // Called on import
+ // Returns a pointer to module, which is insected into `sys.modules`
+ return PyModule_Create(&spammodule);
+}
diff --git a/scratchpad/cpp_connections/vanilia/tutorial/test_spam.py b/scratchpad/cpp_connections/vanilia/tutorial/test_spam.py
new file mode 100644
index 00000000..1dc80a17
--- /dev/null
+++ b/scratchpad/cpp_connections/vanilia/tutorial/test_spam.py
@@ -0,0 +1,6 @@
+import spam
+"""
+-a all except session-leaders and non-terminal
+-l long format
+"""
+spam.system('ps -al')
diff --git a/setup.py b/setup.py
index c410413b..feacc9f7 100644
--- a/setup.py
+++ b/setup.py
@@ -12,6 +12,7 @@
,'loguru'
,'tqdm'
,'click'
+ ,'lazy-import'
,'qtensor-qtree'
]