Ich habe den folgenden Code-Schnipsel Testen der VexCL Funktion umformen:VexCL Reshape Behaving Seltsamer
std::vector<int> ints;
for (int i = 0; i < n; i++) ints.push_back(i);
vex::vector<int> vex_ints(ctx, ints);
vex_ints = vex::reshape(vex_ints, vex::extents[2][n/2], vex::extents[1][0]);
for(int i=0; i<n; i++) std::cout << vex_ints[i] << " "; std::cout << std::endl;
Alles, was es tut Druck ist die geraden Zahlen, die kleiner als n durch die ungeraden Zahlen gefolgt, die kleiner als n sind. Zum Beispiel, wenn n = 10, es druckt:
Aber Dinge verhalten sich merkwürdig, wenn n groß wird. Zum Beispiel, wenn n = 10000, die ersten 50 gedruckt ganze Zahlen sind:
0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 128 132 136 140 144 148 152 156 160 164 168 172 176 180 184 188 192 196
Welche es falsch zu bekommen beginnt nach 62. Es gibt noch andere Unterschiede weiter unten in der Ausgabe, und einige sogar Zahlen auftreten, nachdem ungerade Zahlen. Kann jemand erklären, warum das passiert? Wenn es darauf ankommt, verwendete ich den Kontext "GeForce GT 650M (Apple)".
Warum 'vex :: extents [1] [0]' auf einem 1D-Array? Sollte es nur 'vex :: extents [0]' sein? – DarkZeros
Nun definiere ich die Form mit den vex :: extents-Objekten. Also sage ich in diesem Fall, dass die Matrix n/2 Zeilen mal 2 Spalten ist. Ich folgte dem Matrix-Umsetzungsbeispiel aus den Dokumenten. –
Es ist unter dem Umformungsabschnitt [hier] (http://vexcl.readthedocs.io/en/latest/expressions.html#reshaping) –