I tried to google for how OpenCL on Cuda Architecture is different from straight OpenCL implementation, but I tend to get to websites that just get into a lot of details but not the overview.

I understand Macs with Snow leopard has support for OpenCL, and I get the impression that Cuda is needed to be able to run OpenCL on Windows or Linux platforms. I thought Cuda is a close cousin to OpenCL in what they do - both are APIs where we can write code using either implementation to obtain GPU hardware acceleration.

What I am missing is that why do we need Cuda architecture to be able to run OpenCL code on a Windows or Linux computer? Does it mean that if I have openCL code written on a mac, I need to make changes to the source code to be able to run it on Win/Linux with an Nvidia GPU (e.g., include Cuda header files, link against Cuda libraries in addition to OpenCL includes and libraries)?