Advice on Switching between C, IDL and PyCUDA
by Mcgibbney, Lewis J (398M)
I have been working with PyCUDA for a while now and monitoring the lists. I think it is an excellent library and thank folks who are actively developing the library.
I’ve been tasked with porting some legacy C and IDL code to run within the CUDA environment and have been working on this for a while now with limited success! The job at hand is implement code which has the main task of spectral unmixing with the aim of generating fractional snow coverage products for use within snow hydrology and other snow related disciplines.
Basically, the existing code I inherited is as follows
1. Do some preprocessing of scientific input data where I calculate surface reflectance values from this data. I then tile each input file into 16 pieces. The output (which is consequently the input for the next stage) is surface reflectance and saturation masks which are used within the spectral unmixing.
2. Execute a C program in multithreaded mode which in turn calls IDL
3. IDL code that cleanses and puts together the various runs from the unmixing C code
4. Run post processing code which reads the final output, mosiacs the tiles, creates masks and saves files.
What I am currently working on is the determination of the correct integration point for using PyCUDA in the above workflow.
I DO NOT need to use PyCUDA in stages 1 or 4 e.g. Pre and post processing.
What I am looking for is advice on what is ‘common’ practice for NOT reimplementing an entire project (>13,000 C and IDL code) in PyCUDA but instead on using PyCUDA in conjunction with the C and IDL where PyCUDA would be leveraged to to the heavily lifting of the ‘many at once’ pixel classification task which is part of the spectral unmixing.
Is this kind of thing done often?
Is it common to be combining PyCUDA with code in other languages to achieve these types of tasks?
I realize that this thread has ended up being much longer than I wanted it to be but I hope that the context has provided some values as oppose to confusing the underlying picture.
Thanks for any responses.
Dr. Lewis John McGibbney B.Sc., PhD
Engineering Applications Software Engineer Level 2
Data Management Systems and Technology Group 398J
Jet Propulsion Laboratory
California Institute of Technology
4800 Oak Grove Drive
Pasadena, California 91109-8099
Mail Stop : 158-256C
Tel: (+1) (818)-393-7402
Cell: (+1) (626)-487-3476
Fax: (+1) (818)-393-1190
Dare Mighty Things