Возможно ли, что GPU и SIMD будут реализованы в .NET/Java VM?

В течение некоторого времени основное вычислительное оборудование имеет инструкции 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:

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

Ответы

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

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

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