    unsigned int *tmp_best_buy_options = (unsigned int *) malloc( NUM_PRODUCTS * ELEMENTS_PER_BUY_OPTION * sizeof(unsigned int) );
 
    getBestBuyOptions(all_products_buy_options, tmp_best_buy_options);
+
+   if (DEBUG_LEVEL >= 1)
+   {
+       printBestBuyOptions(tmp_best_buy_options);
+   }
 
    for (unsigned int product_iteration = 0; product_iteration < NUM_PRODUCTS * ELEMENTS_PER_BUY_OPTION; product_iteration += ELEMENTS_PER_BUY_OPTION)
    {


    if (thread_id == 0)
    {
        best_buy_options[blockIdx.x + STORE_ID_OFFSET] = tmp_best_buy_options[STORE_ID_OFFSET];
        best_buy_options[blockIdx.x + PRICE_OFFSET] = tmp_best_buy_options[PRICE_OFFSET];
    }
}


int main(int argc, char** argv)
{


    cudaEventRecord(start, 0);

    // Ejecutar el kernel (número de bloques = número de productos). Un bloque por cada producto y todos los threads por cada bloque.
    KernelKnapsack<<<NUM_PRODUCTS, NUM_THREADS>>>(device_all_products_buy_options, device_best_buy_options);

    // Obtener el resultado parcial desde el host
