MaxGraey
Вообще это задача ОС или драйверов, компилятор вообще в таких вещах никаким боком касать не должен
В массовых-бытовых решениях усилия разработчиков аппаратуры направлены на то, чтобы скрыть от программиста факт нерегулярности/распределенности/гетерогенности/... архитектуры. Отсюда — сложные планировщики и сложная иерархия памяти с поддержкой кэш-когерентности на всех уровнях. Но кое-где удобная для программиста модель разделяемой памяти слишком оказывается накладной, если нам нужны повышенная производительность/энергоэффективность. И здесь ни ОС, ни драйверы не помогут. На выбор: 1) ручное размещение программы и данных по множеству разнородных, слабосвязанных блоков, программирование DMA/маршрутизаторов и проч. или 2) использование компилятора. Между прочим, использование компилятора не подразумевает обязательно статического размещения/планирования. Это как раз высший пилотаж JIT — JIT для распараллеливания, включая (re-)place & (re-)route :)