0

I have a question about a code that I use. If we look at the line:

fixed (byte* fixedInput = &array2D[5, 0])

Here I assign the 5th index in the array2D to the pointer fixedInput.

Complete code:

 public unsafe static void testFunction()
    {
        //Create dummy values
        byte[,] array2D = new byte[16, 1000]; byte num = 0;
        for (int i = 0; i < 16; i++)
        {
            for (int i2 = 0; i2 < 1000; i2++)
            {
                array2D[i, i2] = num;
                num++; if (num > 3) { num = 0; }
            }
        }

        /*----------------------------------------------------------------------------------------*/
        unsafe
        {
            //Below starts the SIMD calculations!
            fixed (byte* fixedInput = &array2D[5, 0]) //index 5 with start at 0!
            {


            }
        }
    }

The problem that I have now, is that I would need to be able to assign up to 16 indexes from the array2D into fixedInput somehow. But I am not sure how to do this.

I will give a code example to show what I mean(but the code below is ofcourse wrong but perheps gives an idéa of what I am trying to achieve:

1. Somehow I would need an array for the fixedInputs?

2. Then somehow, how it would be possible to assign array2D[0, 0] into fixedInputs[0] and array2D[1, 0] into fixedInputs[1] but here I would need a dynamic solution as I could assign up to 16 different indexes from array2D (0-15)?

byte*[] fixedInputs = new byte*[2];

        //The below needs to have a dynamic solution as I could have 
        //up to 16 different "fixedInputs[0-15]. How do do that also?

        fixed (fixedInputs[0] = &array2D[0, 0] && //Assign 0,0 to fixedInputs[0]
               fixedInputs[1] = &array2D[1, 0]) //Assign 1,0 to fixedInputs[1]
Andreas
  • 1,121
  • 4
  • 17
  • 34

1 Answers1

0

I think I found out that it would be possible to do it like this as an example:

    public unsafe static void testFunction()
    {
        //Create dummy values
        int[,] array2D = new int[16, 1000]; int num = 0;
        for (int i = 0; i < 16; i++)
        {
            for (int i2 = 0; i2 < 1000; i2++)
            {
                array2D[i, i2] = num;
                num++; //if (num > 3) { num = 0; }
            }
        }
        /*-----------------------------------------------------------------*/
    
        fixed (int* ptr = array2D)
        {
            int* dim1 = &*((int*)(ptr + 1 * 1000)); //This gives the first dimension with start: 0
            int* dim2 = &*((int*)(ptr + 2 * 1000)); //This gives the second dimension with start: 0
        }
    }
Andreas
  • 1,121
  • 4
  • 17
  • 34