     /* Where we accumulate our errors, layer by layer.  The size is that of
        the largest dimension. */
     extern __shared__ float errors[];
+
+    const float * input = feature_vectors + example_num * feature_vector_width;
+
+    int label = labels[example_num];
+
+    float example_weight = example_weights[example_num];
 
     
     /*************************************************************************/

    }
}

/** This function will be called with ONE block of threads, with the number
    of threads equal to the widest layer that there is. */
__global__ void
train_example_kernel(const float * input,  // feature vector [ni]
                     int label,            // correct label
                     int num_layers,
                     const float * const * w,  // weights for each layer
                     const float * const * biases, // for each layer
                     const int * architecture,
                     const int * w_strides,
                     float * const * w_updates, // updates for each layer
                     int activation,
                     const int * topology,
                     float fire,   // target value for firing neuron
                     float inhibit // target value for inhibited neuron)
{
    // access thread id
    const unsigned tid = threadIdx.x;

    // access number of threads in this block
    const unsigned num_threads = blockDim.x;

    /* The layer outputs (activation of the neurons).  This is where the
       shared memory goes to.  Note that we store only the activated outputs,

#include "arch/cuda/device_data.h"
#include "math/xdiv.h"
#include "perceptron_defs.h"
#include <vector>

using namespace std;

