IO with the File Device (Groovy) - Gleethos/neureka GitHub Wiki

The abstraction provided by the Device interface does not necessitate that concrete implementations represent accelerator hardware. Generally speaking a device is a thing that stores tensors and optionally also handles ExecutionCall instances. Therefore, an implementation might also represent a simple storage device like your local SSD or HDD...

Consequently there is a useful Device implementation which will fulfill this requirement. The FileDevice class can be instantiated via a factory method by passing a String expression containing a path :

    def device = FileDevice.at('my/relative/path/to/a/directory')

File devices manage directories, meaning that one FileDevice instance uniquely handles tensors stored in this directory (excluding subdirectories). The following code shows how to store tensors on a file device :

    // Creating a device which manages the directory targeted by a given path :
    def device = FileDevice.at( 'my/relative/path/to/directory' )

    // ... and a tensor which we want to persist :
    Tsr a = Tsr.of([2, 4, 3], 4)

    // Initially the device does not know about the tensor "a" :
    assert !device.contains(a)

    // But when we store it on the file device...
    device.store( a, 'tensor-name.idx' ) // 'device.store( a )' if the name should be generated...

    // ... then the tensor exists as an "idx" file :
    assert new File( 'my/relative/path/to/directory/' + 'tensor-name.idx' ).exists()

    // ... and the data of the tensor will be freed ...
    assert a.unsafe.data == null

    // If we want to delete the tensor from the device then we call the following :
    device.free( a )

    // ... and the file is gone :
    assert !new File( 'my/relative/path/to/directory/' + 'tensor-name.idx' ).exists()

Tensors stored on a file device or any other device for that matter can be restored by calling the restore method. On the other hand the free method will delete the underlying file of a given tensor.

    device.restore( myTensor ) // Loads the tensor but does not delete the file.

    device.free( myOtherTensor ) // Deletes the provided tensor (if stored on the file device).

Contrary to other device implementations however, the FileDevice instance will not delete the underlying data source (in this case a file) which stores the recently restored tensor. This is because contrary to let's say an OpenCLDevice the whole purpose of the FileDevice