Как стать автором
Обновить

Комментарии 10

Ну наконец-то. А то в Mono эта штука уже лет 6 как сделана была (см. Mono.Simd).
Ну так LLVM поддерживает SIMD инструкции из коробки и плюс к тому сама умеет векторизовать циклы, причем довольно сложные. Разработчики утверждают, что здесь они превосходят возможности GCC. Начиная с версии 3.2 LLVM научилась даже работать с условиями в циклах.

Например, LLVM может векторизовать вот такой код не смотря на то, что в цикле есть зависимая переменная и условие:

int foo(int *A, int *B, int n) {
    unsigned sum = 0;

    for (int i = 0; i < n; ++i)
        if (A[i] > B[i])
            sum += A[i] + 5;

    return sum;
}


P.S.: Жду не дождусь, когда можно будет это применить в llst ;)
Требуется 64-битная платформа — это ладно. Но Windows 8.1 то зачем?
Нольшой коммент про графические приложения и 4-вектора, четвёртая координата имеет название и обычно обозначается w, это гомогенная координата, без такого представления сложно разделить понятие точки и вектора в трехмерных координатах и реализовать многие трансформации, например разные типы перспектив и перенос.
Это все здорово, но мне кажется тем кому нужны high-performance вычисления все могут и на С++ написать. Более того, популярные .NET математические библиотеки (например NMath), если на них посмотреть, являются всего лишь обертками вокруг C++ либ.

Более того, у .NET пока нет встроенной поддержки GPU или Xeon Phi, не говоря уже о более экзотичных механизмах.
Весьма полезная штука для игроделов, где саму игру пишут на удобном и современном С#, а Pathfinding на С/С++.
Так никто не мешает игру писать на C#, но когда нужно посчитать что-то data-parallel, никто не мешает залочить массив и кинуть указатель в C++ную либу через P/Invoke. Я по крайней мере именно так делаю когда например нужно Bitmap какой-нть обработать. И в С++ уже все это «на ура» делается с SIMD, OpenMP и другими плюшками.
Смешивать языки в одном проекте вообще дело неблагодарное. К примеру .NET проект не может иметь «референс» на проект С++, а только на скомпилированную сборку, значит надо руками настраивать процесс билда(на билд сервере к примеру). Проект на С++ не может быть собран на машине без Windows SDK, а чисто .NET проект может быть собран на любой машине с .NET Framework нужной версии. Ну и наконец у проекта на .NET есть шанс запуститься под Mono, а с нативными библиотеками такого шанса нет(там даже xbuild не будет собирать проект С++).
Ну а про выполнение такого «гибридного» кода я молчу. Access violation и прощай весь процесс.

При этом всё что я выше описал взято из опыта.
Тут еще надо разделить Managed C++ и просто С++. Managed — это отдельная песня, я бы его не трогал т.к. непонятно зачем. Механизм P/Invoke нормально работает (при условии что не нужно ООП, а оно обычно не нужно для вычислений). Да, никаких «ссылок на проект», то есть в dependencies указать можно, но дальше, все что нужно — это чтобы нативная DLLка копировалась в ту же папку что и приложение и все, дальше P/Invoke ее сам найдет.

Касательно переносимости кода, С++ намного лучше .NET. Не знаю как поднять Mono на Xeon Phi, да и на обычном Linux'е как-то пока не тянет.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории