Какая функция cublas позволит мне выполнить добавление матрицы? [Дубликат]

Предположим, что у вас есть JSON, подобный этому

[
    {
        "type": "qrcode",
        "symbol": [
            {
                "seq": 0,
                "data": "HelloWorld9887725216",
                "error": null
            }
        ]
    }
]

Чтобы разобрать вышеупомянутый JSON в единстве, вы можете создать такую ​​модель JSON.

[System.Serializable]
public class QrCodeResult
{
    public QRCodeData[] result;
}

[System.Serializable]
public class Symbol
{
    public int seq;
    public string data;
    public string error;
}

[System.Serializable]
public class QRCodeData
{
    public string type;
    public Symbol[] symbol;
}

И затем просто проанализировать следующим образом ...

var myObject = JsonUtility.FromJson("{\"result\":" + jsonString.ToString() + "}");

Теперь вы можете изменить JSON / CODE в соответствии с вашими потребностями. https://docs.unity3d.com/Manual/JSONSerialization.html

3
задан talonmies 11 September 2012 в 13:48
поделиться

2 ответа

Если вы просто добавляете матрицы, это на самом деле не имеет значения. Вы даете ему альфа, Aij, бета и Cij. Он думает, что вы даете ему альфа, аджи, бета и Cji, и дает вам то, что, по его мнению, Cji = beta Cji + alpha Aji. Но это правильный Cij, насколько вы обеспокоены. Мое беспокойство - это когда вы начинаете переходить к вещам, которые имеют значение - как матричные продукты. Там, вероятно, не обойтись.

Но, к тому же, вы не хотите использовать GEMM для добавления матрицы - вы делаете совершенно бессмысленное умножение матрицы (что принимает ~ 20 0003 операций и много проходов через память) для operatinon, который должен требовать только 20 0002 операций и один проход! Относитесь к матрицам как к векторам в 20 000 ^ 2-long и используйте саксофон.

Матричное умножение - интенсивность полосы пропускания памяти, поэтому существует огромная (коэффициент 10x или 100x) разница в производительности между ее кодированием и настроенной версией. В идеале вы бы изменили структуры вашего кода, чтобы они соответствовали библиотеке. Если вы не можете, в этом случае вы можете управлять только с помощью тождеств линейной алгебры. Порядок C-vs-Fortran означает, что, когда вы проходите в A, CUBLAS «видит» AT (A транспонирование). Что хорошо, мы можем обойти это. Если вам нужно C = A.B, переходите в матрицы в обратном порядке, B.A. Затем библиотека видит (BT. AT) и вычисляет CT = (A.B) T; а затем, когда он пройдет обратно CT, вы получите (в своем заказе) C. Протестируйте его и посмотрите.

5
ответ дан Jonathan Dursi 21 August 2018 в 17:59
поделиться

cublasgeam добавлен в CUBLAS5.0. Он вычисляет взвешенную сумму 2 необязательно транспонированных матриц

5
ответ дан Philippe Vandermersch 21 August 2018 в 17:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: