Bitte überprüfen Sie den angegebenen Quellcode - Ich möchte diese Anweisung so vereinfachen, dass ich nicht so viele Typparameter übergeben muss, um einen Kernel zu laden: < /p>
var kernel = accelerator_.LoadAutoGroupedStreamKernel(RMatrixKernels.AdditionKernel);
< /code>
Ich habe versucht, eine Wrapper -Klasse wie diese zu verwenden: < /p>
public class KernelWrapper
{
public Delegate Kernel { get; private set; }
public KernelWrapper(Delegate kernel)
{
Kernel = kernel;
}
}
Bitte überprüfen Sie den angegebenen Quellcode - Ich möchte diese Anweisung so vereinfachen, dass ich nicht so viele Typparameter übergeben muss, um einen Kernel zu laden: < /p> [code]var kernel = accelerator_.LoadAutoGroupedStreamKernel(RMatrixKernels.AdditionKernel); < /code> Ich habe versucht, eine Wrapper -Klasse wie diese zu verwenden: < /p> public class KernelWrapper { public Delegate Kernel { get; private set; }
public KernelWrapper(Delegate kernel) { Kernel = kernel; } } [/code] Aber ich war erfolglos. Wie kann ich das tun? > [code]using ILGPU; using ILGPU.Runtime; using System; using System.Collections.Generic;
public class RMatrixKernels { public static void AdditionKernel(Index2D index, ArrayView2D matrixA, ArrayView2D matrixB, ArrayView2D result) { result[index] = matrixA[index] + matrixB[index]; }
public static void ScalarMultiplyKernel( Index2D index, ArrayView2D aView, int scalar, ArrayView2D cView) { cView[index] = aView[index] * scalar; } }
public class RMatrix { private int[,] matrix_; public int Rows { get; private set; } public int Cols { get; private set; }
public RMatrix(int rows, int cols) { Rows = rows; Cols = cols; matrix_ = new int[rows, cols]; }
public RMatrix(int[,] arr) { Rows = arr.GetLength(0); Cols = arr.GetLength(1); matrix_ = new int[Rows, Cols]; Array.Copy(arr, matrix_, arr.Length); }
public static RMatrix operator +(RMatrix a, RMatrix b) { if (a.Rows != b.Rows || a.Cols != b.Cols) throw new ArgumentException("Matrix dimensions must match for addition.");
var deviceMatrixA = accelerator_.Allocate2DDenseX(new Index2D(a.Rows, a.Cols)); var deviceMatrixB = accelerator_.Allocate2DDenseX(new Index2D(a.Rows, a.Cols)); var deviceResult = accelerator_.Allocate2DDenseX(new Index2D(a.Rows, a.Cols));
public static RMatrix operator *(RMatrix a, int scalar) { var deviceMatrixA = accelerator_.Allocate2DDenseX(new Index2D(a.Rows, a.Cols)); var deviceResult = accelerator_.Allocate2DDenseX(new Index2D(a.Rows, a.Cols));
deviceMatrixA.CopyFromCPU(a.matrix_);
//TODO: var kernel = accelerator_.LoadAutoGroupedStreamKernel(RMatrixKernels.ScalarMultiplyKernel);
vor generisches wurde der Java-Sprache hinzugefügt, es gab eine Klasse Super , die definiert wurde als:
class Super {
public Object transform(Object t) { ... }
public Object get() { ... }
}
Ich versuche, eine Funktion zu schreiben, die eine Klasse als Argument nimmt, eine Instanz dieser Klasse zurückgibt, die in einen anderen Typ eingewickelt ist, und verwendet den Typ der Klasse zum...
Ich habe dieses nervige Problem in der Sympy gefunden. Noch frustrierender.
import sympy as sp
a,b,c,d = sp.symbols('a, b, c, d', positive = True)
expr = (a*b*c+2*d*a*c+b*c*d)/(2*a+b)
correct_simpl...