Issues
Solved
ToBeSolved
Document to share issues, ideas, and possible solutions for the RAMP-UA and EcoTwins project (as of beginning of March 2021).
Please feel free to edit/suggest/delete content
Current assumptions that underline the model
Assumption | Solvable | How |
---|---|---|
No weekends | Maybe | |
No seasonality | Maybe | Could use the google mobility data, there is definitely a summer holiday effect. Fewer people were at work in August 2020 than in the November lockdown |
Same mobility for all individuals during lockdown | Jamil is keen to work on this - I think he has time-use by occupation pre-covid, and for a few points during 2020. Certainly would be good to account for key-workers which we have a flag for. | |
Once generalized the model for studying the Covid spread to a national scale, we might want to apply to further case studies
Final agreed folders structure
Taking into account the results of the poll and some deeper understanding of the data, we arrived to the following conclusive figure for the folders structure:
Folders structure poll
Which folders structure you think is best to use for redesigning the model to run on a national scale?
Your name | One | Two | Three | A fourth one |
---|---|---|---|---|
Anna | X | X | X | |
Nick M | X | |||
Alex | X | |||
Hadrien | X | |||
Fiona | X | |||
Jesse | X |
In case you choose a fourth one, please add your suggestions heareafter.
At the moment the edited version of the model runs following the diagram in figure one.
Try to describe as detailed as possible the issue and steps undertaken to face it
Description of the problem
The issue arised when changed the path to the OpenCL kernel within opencl/ramp/simulator.py
in the class Simulator
(the class is called by opencl/ramp/run.py
and eventually by the main
through the function run_opencl
).
The original version Ramp-UA defines the path for the kernel_dir
like this:
kernel_dir = os.path.join(opencl_dir, "ramp/kernels/")
# Load the OpenCL kernel programs
with open(os.path.join(kernel_dir, "ramp_ua.cl")) as f:
program = cl.Program(ctx, f.read())
program.build(options=[f"-I {kernel_dir}"])
In AZ's version, with the need to generalise the code, the path was initially rewritten taking the full path AND missed a "/" at the end (because the name is created automatically using os.path.join
):
kernel_dir = os.path.join(Constants.Paths.PROJECT_FOLDER_ABSOLUTE_PATH,
Constants.Paths.SOURCE_FOLDER,
Constants.Paths.OPENCL.OPENCL_FOLDER,
Constants.Paths.OPENCL.OPENCL_SOURCE_FOLDER,
Constants.Paths.OPENCL.SOURCE.OPENCL_KERNELS_FOLDER)
print(f"Checking the kernel_dir \t{kernel_dir}\n")
# Load the OpenCL kernel programs
with open(os.path.join(kernel_dir,
Constants.Paths.OPENCL.SOURCE.KERNEL_FILE)) as f:
program = cl.Program(ctx, f.read())
program.build(options=[f"-I {kernel_dir}"])
The AZ edited model would run smoothly the opencl version without errors (even with the absolute path and a missing "/" at the end) until the files where moved to a specific folder, in order to use the Turing syncing service (ask AZ if you want details, she doesn't like white spaces in the naming!). Then the model would give error at the line 77 (AZ), so at the build
function.
The error called is similar to this:
pyopencl.RuntimeError: clBuildProgram failed: invalid build options ...
(see Useful links) where it is easy to identify the issue because invalid build options
lists only the of the part of the path that comes after the white space.
After a few investigations, noticed that this doesn't happen for the RAMP-UA original code, once moved to the same white-spaced-path folder.
The issue could be easily solved by not using folders whose paths has white spaces in the name (which is anyways a good habit), but we can't control what final users have on their computers, therefore it would be better to solve the problem throuroughly so to avoid running errors.
Actions undertaken to solve the issue
Created copies of both projects (UA and AZversion) in different ad-hoc folders, with spaces, no spaces, very loong names etc.
Debugged within the pyopencl
code to understand where exactly the error was coming from.
Conclusions/Solution
Apparently the error comes from within OpenCL inner code (pyopencl works smoothly and accepts the path until the OpenCL build
function is called).
Apparently OpenCL wants the kernel_dir
with a final '/', so we need to declare it like that (this was not creating a problem when reading the kernel file at line , because there it was added by the os.path.join
) though OpenCL builds wants as input variable kernel_dir
and not the kernel file).
The final version of the code uses the relative path (not absolute) and a final "/". The relative path is declared within the model, where we can control the folders naming. Eventual white spaces in the user's folders naming are not entering the OpenCL core code, so they don't affect the model running.
Final version (current):
kernel_dir = os.path.join(Constants.Paths.SOURCE_FOLDER,
Constants.Paths.OPENCL.OPENCL_FOLDER,
Constants.Paths.OPENCL.OPENCL_SOURCE_FOLDER,
Constants.Paths.OPENCL.SOURCE.OPENCL_KERNELS_FOLDER)
kernel_dir = kernel_dir + "/"
print(f"Checking kernel_dir \t{kernel_dir}\n")
# Load the OpenCL kernel programs
with open(os.path.join(kernel_dir,
Constants.Paths.OPENCL.SOURCE.KERNEL_FILE)) as f:
program = cl.Program(ctx, f.read())
program.build(options=[f"-I {kernel_dir}"])
Useful links
https://stackoverflow.com/questions/22366517/pyopencl-runtimeerror-clbuildprogram-failed-invalid-build-options
Screenshots
None
Description of the problem
Actions undertaken to solve the issue
Conclusions/Solution
Screenshots
Leave in-line comments…