Никакой язык программирования не берёт на себя большинство задач, освобождая программиста от работы. OpenCL и прочее берут на себя работу по распараллеливанию ряда задач, которые описаны программистом. Например, можно написать цикл с через итераторы и через индексы (говорю конкретно о С++). В первом случае цикл не может быть автоматически распараллелен, а во втором случае - может. Но при условии, что каждая итерация цикла не зависит от других итераций. Или некоторые фрагменты кода, которые могут выполняться одновременно, должны быть явно помечены программистом, что их можно выполнять одновременно.
Т.е. от выбора языка и способа распараллеливания будет зависеть лишь то, насколько просто распараллелить и придётся ли вручную управлять созданием, синхронизацией и удалением потоков.