Введение
Итак, позвольте мне представить проблему. В настоящее время я пишу программу на C#, в которой много вычислений (точнее, это библиотека нейронной сети), и я использовал стандартные массивы для хранения матриц, но я подумал, что лучше создать 2d, 3d матричный класс для инкапсуляции всех необходимых мне операций с матрицами, а затем для очистки циклов в моем коде.
Как вы, возможно, знаете, это довольно просто сделать sh с базовыми c операторами, перегружающими , но я столкнулся с другой проблемой, это было бы медленнее, чем обычно для циклов над массивами Так как в случае большого уравнения промежуточные классы, создаваемые перегрузкой операторов, могут вызвать дополнительные затраты. Я гуглил его и нашел статью , которая оказалась очень полезной для меня. Короче говоря, писатель использует дополнительные классы, чтобы сначала создать дерево уравнений, а затем скомпилировать его в методе C# с использованием MSIL (Microsoft Intermediate Language), который решает уравнение сразу.
Но потом я подумал о возможности выполнения матричных вычислений на моем GPU, так как это будет еще быстрее. Я наткнулся на пакет NuGet Cloo, который использует OpenCL и оболочку для него (я хотел бы, чтобы он работал на любой видеокарте, не только NVidia с ее CUDA) для запуска кода C на вашем GPU, но он, как я только что сказал, использует код C, который должен быть записан в виде строки.
Вопрос
Наконец, мой вопрос. Является ли хорошей идеей динамически генерировать кодовую строку C из дерева уравнений, чтобы вычислить мои оптимизированные уравнения на графическом процессоре, или есть другие способы сделать это sh.