anchor.diff:                  n, i, j
               Array.init (matricesSize * actualColCount) (fun x -> calculateCell <| getNIJ x)
   
  -
  -        let ceilToPowerOf2 x = 
  -            let exp = (log (double x)) / (log 2.) |> ceil |> int
  -            1 <<< exp
           let floorToPowerOf2 x = 
               let exp = (log (double x)) / (log 2.) |> floor |> int
               1 <<< exp
  
positive.code:             let maxAllocationBits_ = getInfo OpenCL.Net.DeviceInfo.MaxMemAllocSize
  
              // todo: type size
              let maxAllocatedBitsForVar = maxMatrixSize * maxMatrixSize * 32 * ntsCount
  
              let maxAllocationBits = 
                  match maxAllocationBits_ with
  
negative.code:             let localLinesRestriction = 
                  match localMem with
                      // todo:
                      | Some size -> size / (32 * realMaxMatrixSize)
                      | None -> 32 * (1 <<< 20) / (32 * realMaxMatrixSize)
                                                  
              // todo: sizes
              let gridSize = maxMatrixSize
              let wgSize = min (floorToPowerOf2 wgSizeRestriction) (min (floorToPowerOf2 localLinesRestriction) <| min 128 (floorToPowerOf2 gridSize))
              let grid = new _1D(gridSize, wgSize)
  
              let mult1 = Array.create bufferSize <| Probability.InnerType.zero
  