type dMatrix with
member t.Item
with get(a: int, b: int) = t.dArray.[b+a*t.num_cols |> SizeT]
and set(a: int, b: int) (value: floatType) = t.dArray.[b+a*t.num_cols |> SizeT] <- value
member t.setItem(a: int, b: int) (value: floatType) = t.dArray.[b+a*t.num_cols |> SizeT] <- value
let a = dMatrix.createRandomUniformMatrix n m 50.f 50.0f
a.[1,1] <- 654.0f // Gives 'A value must be mutable in order to mutate the contents or take the address of a value type, e.g. 'let mutable x = ...''
a.setItem(1,1) 654.0f // Works fine.
Je ne suis pas sûr de ce qui se passe dans ce qui précède. dArray
est de type CudaDeviceVariable<float32>
depuis la bibliothèque ManagedCuda si cela peut vous aider.Pourquoi l'ensemble d'éléments ne fonctionne-t-il pas comme prévu?
Edit:
type dMatrix =
struct
val num_rows:int
val num_cols:int
val dArray: CudaDeviceVariable<floatType>
Voici comment l'struct ci-dessus ressemble. Même si je rend dArray mutable, cela ne fonctionne toujours pas, mais écrit quelque chose comme a.dArray.[SizeT 0] <- 2.5f
fait. Y at-il une solution de contournement pour cela? Edit2: Transformer ce qui précède en un enregistrement ou une classe résout le problème.
Voir les modifications ci-dessus. Aussi, avant que j'écrive l'édition, j'ai supposé que faire le mutable ferait fonctionner l'exemple, mais ce n'est pas le cas. Je vais essayer avec un cours et un disque. –
@MarkoGrdinic Est-ce que 'dArray' peut aussi être mutable? – TheInnerLight
Non. La dMatrix n'a pas besoin d'être une structure non plus. Je l'ai juste essayé pour des raisons de performance et une fois que j'ai vu qu'il n'y avait pas de différence, je l'ai laissé tel quel. –