Hello, I’ve been using PyFR on a windows laptop with Cygwin 64bit, and after upgrading pyfr to 1.3, I get an error which seems to persist even when I downgrade back to 1.2.
$ pyfr run -b openmp -p euler_vortex_2d.pyfrm euler_vortex_2d.ini
Traceback (most recent call last):
File "/home/User/PyFR/env/lib/python3.4/site-packages/pyfr-1.2.0-py3.4.egg/pyfr/util.py", line 32, in __call__
KeyError: (<function OpenMPKernelProvider._build_kernel at 0x6fffda28c80>, b'(X\x08\x00\x00\x00par_gemmq\x00X\x96\n\x00\x00\n\n#include <omp.h>\n#include <stdlib.h>\n#include <tgmath.h>\n\n#define PYFR_ALIGN_BYTES 32\n#define PYFR_NOINLINE __attribute__ ((noinline))\n\n#define min(a, b) ((a) < (b) ? (a) : (b))\n#define max(a, b) ((a) > (b) ? (a) : (b))\n\n// Typedefs\ntypedef double fpdtype_t;\n\n// OpenMP static loop scheduling functions\n\nstatic inline int\ngcd(int a, int b)\n{\n return (a == 0) ? b : gcd(b % a, a);\n}\n\nstatic inline void\nloop_sched_1d(int n, int align, int *b, int *e)\n{\n int tid = omp_get_thread_num();\n int nth = omp_get_num_threads();\n\n // Round up n to be a multiple of nth\n int rn = n + nth - 1 - (n - 1) % nth;\n\n // Nominal tile size\n int sz = rn / nth;\n\n // Handle alignment\n sz += align - 1 - (sz - 1) % align;\n\n // Assign the starting and ending index\n *b = sz * tid;\n *e = min(*b + sz, n);\n\n // Clamp\n if (*b >= n)\n *b = *e = 0;\n}\n\nstatic inline void\nloop_sched_2d(int nrow, int ncol, int colalign,\n int *rowb, int *rowe, int *colb, int *cole)\n{\n int tid = omp_get_thread_num();\n int nth = omp_get_num_threads();\n\n // Distribute threads\n int nrowth = gcd(nrow, nth);\n int ncolth = nth / nrowth;\n\n // Row and column indices for our thread\n int rowix = tid / ncolth;\n int colix = tid % ncolth;\n\n // Round up ncol to be a multiple of ncolth\n int rncol = ncol + ncolth - 1 - (ncol - 1) % ncolth;\n\n // Nominal tile size\n int ntilerow = nrow / nrowth;\n int ntilecol = rncol / ncolth;\n\n // Handle column alignment\n ntilecol += colalign - 1 - (ntilecol - 1) % colalign;\n\n // Assign the starting and ending row to each thread\n *rowb = ntilerow * rowix;\n *rowe = *rowb + ntilerow;\n\n // Assign the starting and ending column to each thread\n *colb = ntilecol * colix;\n *cole = min(*colb + ntilecol, ncol);\n\n // Clamp\n if (*colb >= ncol)\n *colb = *cole = 0;\n}\n\n\n\n\n// CBLAS GEMM constants\n#define ROW_MAJOR 101\n#define NO_TRANS 111\n\n// CBLAS GEMM prototype\ntypedef void (*cblas_gemm_t)(int, int, int,\n int, int, int,\n fpdtype_t, const fpdtype_t *, int,\n const fpdtype_t *, int,\n fpdtype_t, fpdtype_t *, int);\n\nvoid\npar_gemm(cblas_gemm_t gemm, int M, int N, int K,\n fpdtype_t alpha, const fpdtype_t *A, int lda,\n const fpdtype_t *B, int ldb,\n fpdtype_t beta, fpdtype_t *C, int ldc)\n{\n #pragma omp parallel\n {\n int begin, end;\n loop_sched_1d(N, PYFR_ALIGN_BYTES / sizeof(fpdtype_t), &begin, &end);\n\n gemm(ROW_MAJOR, NO_TRANS, NO_TRANS, M, end - begin, K,\n alpha, A, lda, B + begin, ldb, beta, C + begin, ldc);\n }\n}\n\nq\x01]q\x02(cnumpy\nint64\nq\x03cnumpy\nint32\nq\x04h\x04h\x04cnumpy\nfloat64\nq\x05h\x03h\x04h\x03h\x04h\x05h\x03h\x04etq\x06.', b'}q\x00.')
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/User/PyFR/env/bin/pyfr", line 9, in <module>
load_entry_point('pyfr==1.2.0', 'console_scripts', 'pyfr')()
File "/usr/lib/python3.4/site-packages/mpmath-0.19-py3.4.egg/mpmath/ctx_mp.py", line 1301, in g
return f(*args, **kwargs)
File "/home/User/PyFR/env/lib/python3.4/site-packages/pyfr-1.2.0-py3.4.egg/pyfr/scripts/main.py", line 112, in main
File "/home/User/PyFR/env/lib/python3.4/site-packages/pyfr-1.2.0-py3.4.egg/pyfr/scripts/main.py", line 233, in process_run
File "/home/User/PyFR/env/lib/python3.4/site-packages/pyfr-1.2.0-py3.4.egg/pyfr/scripts/main.py", line 217, in _process_common
File "/home/User/PyFR/env/lib/python3.4/site-packages/pyfr-1.2.0-py3.4.egg/pyfr/solvers/__init__.py", line 14, in get_solver
File "/home/User/PyFR/env/lib/python3.4/site-packages/pyfr-1.2.0-py3.4.egg/pyfr/integrators/__init__.py", line 26, in get_integrator
File "/home/User/PyFR/env/lib/python3.4/site-packages/pyfr-1.2.0-py3.4.egg/pyfr/integrators/controllers.py", line 14, in __init__
File "/home/User/PyFR/env/lib/python3.4/site-packages/pyfr-1.2.0-py3.4.egg/pyfr/integrators/steppers.py", line 9, in __init__
File "/home/User/PyFR/env/lib/python3.4/site-packages/pyfr-1.2.0-py3.4.egg/pyfr/integrators/base.py", line 41, in __init__
File "/home/User/PyFR/env/lib/python3.4/site-packages/pyfr-1.2.0-py3.4.egg/pyfr/solvers/base/system.py", line 59, in __init__
File "/home/User/PyFR/env/lib/python3.4/site-packages/pyfr-1.2.0-py3.4.egg/pyfr/solvers/base/system.py", line 167, in _gen_kernels
File "/home/User/PyFR/env/lib/python3.4/site-packages/pyfr-1.2.0-py3.4.egg/pyfr/solvers/baseadvec/elements.py", line 80, in <lambda>
File "/home/User/PyFR/env/lib/python3.4/site-packages/pyfr-1.2.0-py3.4.egg/pyfr/backends/base/backend.py", line 173, in kernel
File "/home/User/PyFR/env/lib/python3.4/site-packages/pyfr-1.2.0-py3.4.egg/pyfr/backends/openmp/cblas.py", line 94, in mul
File "/home/User/PyFR/env/lib/python3.4/site-packages/pyfr-1.2.0-py3.4.egg/pyfr/util.py", line 34, in __call__
File "/home/User/PyFR/env/lib/python3.4/site-packages/pyfr-1.2.0-py3.4.egg/pyfr/backends/openmp/provider.py", line 13, in _build_kernel
File "/home/User/PyFR/env/lib/python3.4/site-packages/pyfr-1.2.0-py3.4.egg/pyfr/backends/openmp/compiler.py", line 61, in __init__
File "/home/User/PyFR/env/lib/python3.4/site-packages/pyfr-1.2.0-py3.4.egg/pyfr/backends/openmp/compiler.py", line 30, in __init__
File "/home/User/PyFR/env/lib/python3.4/site-packages/pyfr-1.2.0-py3.4.egg/pyfr/backends/openmp/compiler.py", line 80, in _build
File "/home/User/PyFR/env/lib/python3.4/site-packages/pytools/prefork.py", line 197, in call_capture_output
return forker[0].call_capture_output(cmdline, cwd, error_on_nonzero)
File "/home/User/PyFR/env/lib/python3.4/site-packages/pytools/prefork.py", line 156, in call_capture_output
error_on_nonzero)
File "/home/User/PyFR/env/lib/python3.4/site-packages/pytools/prefork.py", line 136, in _remote_invoke
who="Prefork client", partner="prefork server")
File "/home/User/PyFR/env/lib/python3.4/site-packages/pytools/prefork.py", line 70, in _recv_packet
size_bytes = sock.recv(size_bytes_size)
ConnectionResetError: [Errno 104] Connection reset by peer
Error in atexit._run_exitfuncs:
Traceback (most recent call last):
File "/home/User/PyFR/env/lib/python3.4/site-packages/pytools/prefork.py", line 144, in _quit
self._remote_invoke("quit")
File "/home/User/PyFR/env/lib/python3.4/site-packages/pytools/prefork.py", line 134, in _remote_invoke
_send_packet(self.socket, (name, args, kwargs))
File "/home/User/PyFR/env/lib/python3.4/site-packages/pytools/prefork.py", line 64, in _send_packet
sock.sendall(pack("I", len(packet)))
ConnectionResetError: [Errno 104] Connection reset by peer
since it refers to prefork, I thought it would be an issue with pytools, but changing versions of that seemed to not have any affect.
It may be worth noting that for v1.1 and 1.2 I’ve downloaded the program and used setup.py install, but for 1.3 my mentor suggested using pip -e and then pip. after creating a few virtual environments, I’m not sure how to approach the problem.