1 hour ago, thecheeselover said:
SIMD is for executing an operation on multiple cores (CPU only?).
This is wrong. SIMD functionality on CPU means executing a single instruction on a single core, but on a wide register which contains multiple numbers, e.g. 4 or 8. This has nothing todo with multiple cores, which then of course can execute multiple independent programs, each eventually using different SIMD instructions.
1 hour ago, thecheeselover said:
OpenCL and CUDA are for GPU programming.
OpenCL works on CPU as well, CUDA does not. OpenCL on CPU will likely utilize SIMD instructions AND multiple cores. (But in practice you use it mainly for GPUs, because on CPU you can do this simply with regular programming, which is more comfortable.)
1 hour ago, thecheeselover said:
OpenMP is for CPU wise parallelism.
Yes, i use it for some speed ups with very little effort. Programming multithreading myself, e.g. using a job system, has much better performance but is more work.
Never heard of OpenACC or MIMD (the latter probably means multiple instruction, multiple data, so regular CPU multithreading, but GPUs can do this as well up to some degree.) It's clear you are interested in parallel programming, but you mix too much things so there is no short but good answer / advise i can give you.
1 hour ago, thecheeselover said:
Hopefully, I would like to use only one library to do both.
For CPU you don't need a library. For GPU, notice that OpenCL 1.x is the same as Compute Shaders in DirectX, OpenGL and Vulkan. OpenCL 2.0 has functionality not available there, but Nvidia does not support it on customer hardware. This makes Compute Shaders a good option if you do graphics as well. For me Vulkan is almost 2 times faster than OpenCL, but OpenCL is MUCH easier to use. For beginners, i would recommend OpenCL to learn GPGPU. For games Compute Shaders is the way to go, but no necessarily the best way to learn.