Difference between revisions of "User:Rishabhsuthar32/GSoC20/Log"
|Line 71:||Line 71:|
=== Issue 2 ===
=== Issue 2 ===
Revision as of 06:55, 2 August 2020
Community Bonding Period
- Compiled working version of BRL-CAD with OpenCL on Ubuntu 18.04
- Got familiarised with the MGED commands and the sequence of code being called from the build
- Checked out other primitives which have been parallelized and their structure
- Week - 1 (June 1 - June 5)
- June 1: Working on getting ARBN primitive parallelized via OpenCL
- June 6: Submitted patch for review (June 6)
- Week - 2 (June 8 - June 12)
- June 8: Working on getting PIPE primitive parallelized via OpenCL
- June 9: Worked on discont_radius_shot() function
- June 10: Worked on bend_pipe_shot() function
- June 12: Worked on linear_pipe_shot() function
- Week - 3 (June 15 - June 19)
- June 15: Worked on pipe_start_shot() and pipe_end_shot() function
- June 17: Assembled all in pipe_shot() function
- June 19: Fixed a few bugs in pipe_shot() file
- Week - 4 (June 22 - June 26)
- June 22: Submitted the PIPE patch file in sourceforge
- June 23: Started working on Dispalcement Map primitive
- June 24: Worked on dsp_in_rpp() function
- June 26: Worked on recurse_dsp_bb() function
- Week - 5 (June 29 - July 03)
- June 29: Got stuck in recurse_dsp_bb() function
- July 1: First Evaluation Feedback
// Kept DSP primitive on hold owing to it's complex structure. Once I get used to the simple primitives, I'll be in a better position to work on DSP primitive. Hence, have kept it for the last month.
- July 3 : Started working on Volume primitive
- Week - 6 (July 6 - July 10)
- July 6: Completed rt_vol_shot() and rt_vol_norm() function
- July 8: Resolved few bugs
- July 9 - 10: Took a break for travelling to hometown owing to Covid-19
- Week - 7 (July 13 - July 17)
- July 13: Submitted patch for Volume primitive
- July 14: Started working on Metaball primitive
- July 15: Converted secondary function: rt_metaball_point_value_iso()
- July 16: Converted secondary function: rt_metaball_find_intersection()
- July 17: Implemented rt_metaball_shot() in metaball_shot.cl file
- Week - 8
- July 20: Completed rt_metaball_norm() function. Read about the inline functions being used here and it's possible counterpart and usage in OpenCL. I think I'll merge rt_metaball_norm_internal() into the norm method.
- July 21: Seems like there were two versions of the algorithm, only one of which was being used. Have removed the old version code from metaball_shot.cl file to remove redundancy.
- July 22: Submitted metaball primitive here: https://sourceforge.net/p/brlcad/patches/548/ . I made a typo mistake while developing a patch, I've resubmitted it. Use the latest patch in comments section. Onto EBM primitive now!
- July 23: The -z flag worked FINALLY! I though of giving it a try once again today and it worked. I'd to change the FindOpenCL.cmake file locally to ensure it catches the correct path of OpenCL directory. This has indeed solved a big problem of mine. I'll revisit the previous patches now and update them accordingly. Will also include a detailed documentation of the commands and resolution of the errors I faced for future reference soon.
- July 24: Submitted patch for FindOpenCL.cmake file here: https://sourceforge.net/p/brlcad/patches/549/ . Debugged the ARBN primitive patch files to remove the compile-time errors and typos! Moved on to VOL primitive, couldn't find relevant rendering command.
- Week - 9
- July 27: Debugging METABALL primitive. Looking into plausible ways of passing extra parameters r_min and r_max from metaball_shot() to its rt.cl declaration.
- July 28: While compiling previously converted primitives like ELL and ARB8, I got compilation error - "failed to set OpenCL kernel arguments". On running the code, I found a bug in master branch itself. There was a mismatch between uchar2 and uchar3 in clt_frame() function in primitve_util.c and all it's related functions. I've updated the code, will include a patch for this. All primitives are rendering successfully now! Yayyyy!
- July 29: Submitted patch for the above bug resovled here: https://sourceforge.net/p/brlcad/patches/551/ . Moving on to removing errors in PIPE primitive. Most of the compile time errors were related to Global-Private conversion, hence made all struct inside functions global as well. It is now compiling error-free but not rendering. Gotta deep dive more!
- July 30: Looking for possible options to print inside OpenCL kernel to see where it might be failing. Can't find any previously converted primitive with bu_log in it. Maybe, I'll import bu.h and give it a try!
- July 31: Worked out communication issues with Sean and came up with a measurable criteria going forward. Going to be chatting progress a lot more going forward in Zulip! Also, documented the details of issues I faced in Dev Logs for future reference.
Major Issues Faced
- Issue: -Z flag not working. Initially, I couldn't find proper documentation around -z flag and it's usage. I only found with command man rt that -z is used to compile with OpenCL function of that primitive. However, it always said printed "Raytrace Aborted" in the logs.
- Solution: I found that while doing the cmake compiling, it couldn't find the OpenCL library and it's version correctly. It detected library path as "/usr/" instead of the usual "/usr/lib/x86_64-linux-gnu/libopenCL.so" . So, I changed the cmake file where it detected OpenCL and submitted patch for FindOpenCL.cmake file here: https://sourceforge.net/p/brlcad/patches/549/ . The commands are now as follows:
While doing the cmake, add the DBRLCAD_ENABLE_OPENCL flag
cd brlcad-svn-trunk mkdir build cd build cmake .. -DBRLCAD_ENABLE_STRICT=NO -DBRLCAD_BUNDLED_LIBS=ON -DCMAKE_BUILD_TYPE=Release -DBRLCAD_ENABLE_OPENCL=ON
While compiling a primitive in mged window, use the following command:
rt -z 1 -o primitive_cl.png
If you pass 0 to the -z flag, it'll compile the C version of the primitive. So to say, passing 1 to -z flag defines the USE_OPENCL flag inside primitive function to 1. -o flag outputs the primitive rendering to an external file in the build folder.
- Issue: Primitives already present in the master branch of the repository were not rendering in their OpenCL version. It displayed error: "failed to set OpenCL kernel arguments".
- Solution: I found that the error was due to a mismatch between uchar2 and uchar3 variable type in clt_frame() functions in primitive_util.c file. I made the variable uniform to uchar3 in all the places where this function was being used and they're now rendering as usual. The patch was submitted at the link here: https://sourceforge.net/p/brlcad/patches/551/ .