Можно ли реализовать GPU и SIMD в виртуальных машинах .NET / Java? - PullRequest
16 голосов
/ 06 сентября 2011

В течение некоторого времени основное вычислительное оборудование имело инструкции SIMD (MMX, SSE, 3D-Now и т. Д.), И совсем недавно мы видим, как AMD вводит 480-потоковые графические процессоры в тот же кристалл, что и ЦП.

Функциональные языки, такие как F #, Scala и Clojure, также набирают обороты, и одна общая привлекательность заключается в том, насколько проще параллельное программирование в этих языках.

Существуют ли какие-либо планы относительно того, чтобы Java VM или .NET CLR начали предоставлять доступ к аппаратным ресурсам параллельных вычислений, чтобы функциональные языки могли развиваться для использования аппаратного обеспечения?

Это кажется , как будто виртуальные машины в настоящее время являются узким местом для высокопроизводительных вычислений, поскольку доступ к SIMD и GPU делегирован сторонним библиотекам и посткомпиляторам (tidepowered.net, OpenTK, ScalaCL, Brahma, и т. д.)

Кто-нибудь знает о каких-либо планах / планах со стороны сообщества Microsoft / Oracle / Open-Source по обновлению своих виртуальных машин с новыми аппаратными и программными парадигмами?

Есть ли веская причина, почему поставщики так вяло относятся к поглощению?

Edit:

Что касается обратной связи, правда, что программирование на GPU является сложным и, если оно сделано неправильно, ухудшает производительность. Но хорошо известно, что параллелизм - это будущее вычислительной техники, поэтому суть этого вопроса заключается в том, что для аппаратных средств и языков программирования не помогает охватить параллельную парадигму, если среды выполнения между приложениями и аппаратными средствами не поддерживают ее. ... почему мы не видим этого на радарах / дорожных картах производителя виртуальных машин?

Ответы [ 4 ]

4 голосов
/ 06 сентября 2011

ты имеешь ввиду JavaCL и ScalaCL? они оба пытаются перенести программирование CUDA / GPU на javavm

4 голосов
/ 06 сентября 2011

Моно среда выполнения уже включает поддержку некоторых инструкций SIMD - см. http://docs.go -mono.com / index.aspx? Link = N% 3aMono.Simd

Для реализации Microsoftв CLR вы можете использовать XNA, которая позволяет запускать шейдеры и т. д., или библиотеку ускорителей https://research.microsoft.com/en-us/projects/accelerator/, которая обеспечивает интерфейс для выполнения вычислений GPGPU

2 голосов
/ 07 сентября 2011

Java уже давно добилась значительных успехов на арене параллелизма, сначала с пакетом java.util.concurrent, а теперь с инфраструктурой fork / join. Надеемся, что в будущем такие языки, как Clojure и Scala, обеспечат отличные высокоуровневые абстракции для использования fork-join.

Программирование GPGPU обеспечивает значительный прирост производительности только для очень специализированных задач. .Net и Java являются языками программирования общего назначения. Кроме того, кто хочет заниматься программированием в стиле CUDA на таком языке, как Java?

0 голосов
/ 07 сентября 2011

Платформа Zach Tellman Penumbra позволяет программировать на GPU в Clojure (как для графики, так и для программирования общего назначения).

Это несколько экспериментально, но я думаю, что теоретическая мотивация очень здравая:

  • Использование инструкций GPU / специализированных SIMD для обработки серьезных чисел на больших наборах данных
  • Используйте язык очень высокого уровня, который силен при метапрограммировании / определении DSL (например, Clojure), чтобы организовать операции на общем уровне и сгенерировать соответствующий код нижнего уровня, где это необходимо (например, при щедром использовании макросов)
...