#include "daal.h"
#include "service.h"
using namespace std;
using namespace daal;
using namespace daal::algorithms;
string datasetFileName = "../data/batch/kmeans_dense.csv";
const size_t nClusters = 20;
const size_t nIterations = 5;
const size_t nThreads = 2;
size_t nThreadsInit;
size_t nThreadsNew;
int main(int argc, char *argv[])
{
checkArguments(argc, argv, 1, &datasetFileName);
nThreadsInit = services::Environment::getInstance()->getNumberOfThreads();
services::Environment::getInstance()->setNumberOfThreads(nThreads);
nThreadsNew = services::Environment::getInstance()->getNumberOfThreads();
FileDataSource<CSVFeatureManager> dataSource(datasetFileName, DataSource::doAllocateNumericTable,
DataSource::doDictionaryFromContext);
dataSource.loadDataBlock();
kmeans::init::Batch<float, kmeans::init::randomDense> init(nClusters);
init.input.set(kmeans::init::data, dataSource.getNumericTable());
init.compute();
NumericTablePtr centroids = init.getResult()->get(kmeans::init::centroids);
kmeans::Batch<> algorithm(nClusters, nIterations);
algorithm.input.set(kmeans::data, dataSource.getNumericTable());
algorithm.input.set(kmeans::inputCentroids, centroids);
algorithm.compute();
cout << "Initial number of threads: " << nThreadsInit << endl;
cout << "Number of threads to set: " << nThreads << endl;
cout << "Number of threads after setting: " << nThreadsNew << endl;
return 0;
}