Как выполнять аппаратно-независимое параллельное программирование?

В наши дни существуют две основные аппаратные среды для параллельного программирования, одна - это многопоточные процессоры, а другая - графические карты, которые могут выполнять параллельные операции с массивами данных.

Вопрос в том, учитывая, что что есть две разные аппаратные среды, как я могу написать программу, которая является параллельной, но независимой от этих двух разных аппаратных сред. Я имею в виду, что я хотел бы написать программу, и независимо от того, есть ли у меня видеокарта или многопоточный процессор, или и то, и другое, система должна автоматически выбирать, на чем ее выполнять, на любой или обеих видеокартах и ​​/ или многопоточном процессоре. .

Существуют ли какие-либо программные библиотеки / языковые конструкции, которые позволяют это?

Я знаю, что есть способы напрямую настроить видеокарту для запуска кода, но мой вопрос в том, как мы, программисты, можем писать параллельный код, не зная, все, что касается аппаратного обеспечения и программного обеспечения, должно планироваться либо на видеокарте, либо на процессоре.

Если вы хотите, чтобы я был более конкретным в отношении платформы / языка, я хотел бы, чтобы ответ был о C ++, Scala или Java.

Спасибо

11
задан Phil 17 June 2011 в 06:46
поделиться