이전에 C#에서 포인터를 사용할 필요가 없었습니다. 그러나 사용하고있는 라이브러리에 메서드 매개 변수가 포인터로 전달되어야합니다. 라이브러리는 SIMD 명령어 세트의 사용을 허용합니다.포인터 작동 시도 중
라이브러리 사용 방법을 테스트하기 위해 SIMD를 사용하여 한 번에 배열의 모든 요소에 대한 코사인 값을 계산하는 방법을 작성했습니다.
이 내가있어 무엇 :
double[] ValuesToCalculate = new double[MAX_SIZE];
double[] CalculatedCosines = new double[MAX_SIZE];
long Result;
Result = CalculateCosineArray(ValuesToCalculate, CalculatedCosines);
public static long CalculateCosineArraySIMD(double[] array, double[] result)
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
for (int i = 0; i < array.Length; i++)
{
Yeppp.Math.Cos_V64f_V64f(*array, result, MAX_SIZE);
}
stopwatch.Stop();
return stopwatch.ElapsedMilliseconds;
}
그러나, 나는 이러한 오류를 얻을 :
The best overloaded method match for 'Yeppp.Math.Cos_V64f_V64f(double*, double*, int)' has some invalid arguments
Argument 1: cannot convert from 'double[]' to 'double*'
The * or -> operator must be applied to a pointer
Argument 2: cannot convert from 'double[]' to 'double*'
가 어떻게 포인터가이 코드에서 일을합니까를? 다시 말하지만, C#을 사용하면서 처음으로 포인터가 나타납니다.
두 번째 매개 변수로 double 포인터를 사용하지만 double 배열을 전달하는 것으로 보입니다. –