3 Example of FFI extension I started from:
5 https://github.com/pytorch/extension-ffi.git
9 https://github.com/pytorch/tutorials/blob/master/Creating%20Extensions%20using%20FFI.md
11 And TH's Tensor definition are here in my install:
13 anaconda3/lib/python3.5/site-packages/torch/lib/include/TH/generic/THTensor.h
19 #include "sequence_generator.h"
21 THByteTensor *generate_sequence(long nb_sequences,
23 long image_height, long image_width,
25 int random_shape_size, int random_colors) {
29 long s, c, k, i, j, st0, st1, st2, st3, st4;
31 THLongStorage *size = THLongStorage_newWithSize(5);
32 size->data[0] = nb_sequences;
33 size->data[1] = nb_images;
34 size->data[2] = nb_channels;
35 size->data[3] = image_height;
36 size->data[4] = image_width;
37 THByteTensor *result = THByteTensor_newWithSize(size, NULL);
38 THLongStorage_free(size);
40 st0 = THByteTensor_stride(result, 0);
41 st1 = THByteTensor_stride(result, 1);
42 st2 = THByteTensor_stride(result, 2);
43 st3 = THByteTensor_stride(result, 3);
44 st4 = THByteTensor_stride(result, 4);
46 unsigned char tmp_buffer[nb_images * nb_channels * image_width * image_height];
48 for(s = 0; s < nb_sequences; s++) {
49 a = THByteTensor_storage(result)->data + THByteTensor_storageOffset(result) + s * st0;
50 fl_generate_sequence(nb_images, image_width, image_height, nb_shapes,
51 random_shape_size, random_colors,
53 unsigned char *r = tmp_buffer;
54 for(k = 0; k < nb_images; k++) {
55 for(c = 0; c < nb_channels; c++) {
56 for(i = 0; i < image_height; i++) {
57 b = a + k * st1 + c * st2 + i * st3;
58 for(j = 0; j < image_width; j++) {
59 *b = (unsigned char) (*r);