Для моего проекта научной ярмарки я должен написать алгоритм с интенсивным вычислением, который хорошо подходит для распараллеливания. Я читал об OpenCL и CUDA, и кажется, что они в основном используются на C/C++. Хотя мне было бы нелегко забрать немного C, чтобы написать простой основной, мне было интересно, насколько большой был бы удар производительности, если бы я использовал привязки Java или Python для вычисления моего GPU? В частности, меня больше интересовала производительность, использующая CUDA, потому что это та структура, которую я планирую использовать.Производительность GPGPU на языках высокого уровня
ответ
В общем, каждый раз, когда вы добавляете слой абстракции, вы теряете производительность, но в случае CUDA это не совсем верно, потому что, используя Python или Java, вы в конечном итоге напишите свои ядра CUDA на C/Fortran, поэтому производительность на стороне GPU будет такой же, как при использовании C/Fortran (проверьте некоторые примеры pyCUDA here)
Плохая новость, что Java и Python никогда не достигнут производительности скомпилированных языков, таких как C на определенных задачи, см. this. Ответьте на более подробное обсуждение этой темы. Here - хорошая дискуссия о C в сравнении с Java, также на SO.
Существует много вопросов и дискуссий о сравнении производительности между интерпретируемыми и скомпилированными языками, поэтому я рекомендую вам прочитать некоторые из них.
Я думаю, что ваш научный проект должен отвечать на вопрос, который вы задали здесь :-) –
Его Java vs C++ на стороне хоста. На стороне устройства на рабочую частоту устройства (gpu) должно влиять наличие oop или аналогичного. –