1 Reply Latest reply on Jun 10, 2015 6:56 AM by dipak

    Beginner asking some basic questions


      Hey guys.  I'm doing research on complex systems for a physics PhD project and am wondering if OpenCL is worthwhile for me to learn for that purpose.  My time is somewhat limited and I know the topic is challenging, so I don't want to commit a lot of time if it's not particularly well suited.  For those not familiar, "complex systems" are characterized by many simple things interacting with one another locally to form emergent complicated behavior globally.  A simple example:  ants finding food or a school of fish swimming together, all without central coordination/synchrony; or a brain of many neurons interacting to form the mind.  These are highly parallel processes.  However, it sounds like GPUs or OpenCL are good at the parallel part, but not so good at the interaction part.  So imagine you have your fake ants wiggling around looking for food and each-other.  Unless there's a more clever way I haven't thought of, each ant has to be checking if it's colliding with every other ant after each step.  Could this be parallelized appropriately to get benefits of GPUs/OpenCL?  Or will the problem of having to check and then potentially interact with other ants make this a case where the CPU and GPU would perform comparably?  Thanks!

        • Re: Beginner asking some basic questions

          Sorry for this late reply.

          As you know, due to the constant improvement of hardware and software, today,  GPGPU programming has become much more richer, powerful and easier. A number of applications, from simple embarrassingly parallel to complex one having lot of interactions and dependency, have been implemented for GPUs. So, it has the capability to supports various types of application from different domains. However, the efficiency may vary depending on the particular application type.

          Another point is, direct porting of an algorithm/application from CPU to GPU may not improve the efficiency as expected, or, may even degrade the overall performance. The algorithm/application needs to be adapted such a way that it suits GPU hardware model and corresponding programming language. That why, you'll find a lot of parallel version of well known algorithms more suitable of particular targeted GPU and programming model.

          Before implementing/porting, a deep study of your existing application is very important. All the portions of an application may not be suitable to port on GPU. You've to analyse and identify the areas which are more suitable for GPU and which are not. Accordingly, you need to distribute your work on particular sub-system say GPU, CPU etc.


          Below are few links which may be useful for you.

          The 13 application areas where OpenCL can be used - Blog - StreamComputing

          How GPU came to be used for general computation




          1 of 1 people found this helpful