From 6abc546645788bc01a22d26e58bdda228465dbe6 Mon Sep 17 00:00:00 2001
From: Oliver Bock <oliver.bock@aei.mpg.de>
Date: Wed, 16 Mar 2011 17:12:16 +0100
Subject: [PATCH] Added crude feature to pass device ID as second command line
 argument (replaying 3987009c)

---
 example/main.cpp | 76 +++++++++++++++++++++++++++++++-----------------
 1 file changed, 49 insertions(+), 27 deletions(-)

diff --git a/example/main.cpp b/example/main.cpp
index 5217fbb..026a2ea 100644
--- a/example/main.cpp
+++ b/example/main.cpp
@@ -740,51 +740,73 @@ int main (int argc, char * const argv[]) {
 	}
 	
 	device_id = NULL;
+	unsigned int i = 0;
 
-	unsigned int i;
-	for(i = 0; i < num_devices; i++)
-	{
+	if (argc == 3) {
 	    cl_bool available;
-	    err = clGetDeviceInfo(device_ids[i], CL_DEVICE_AVAILABLE, sizeof(cl_bool), &available, NULL);
-	    if(err)
-	    {
-	         log_error("Cannot check device availability of device # %d\n", i);
+	    err = clGetDeviceInfo(device_ids[atoi(argv[2])], CL_DEVICE_AVAILABLE, sizeof(cl_bool), &available, NULL);
+	    if(err) {
+	        printf("ERROR: Cannot check device availability of device # %d\n", atoi(argv[2]));
+                return -1;
 	    }
-	    
-	    if(available)
-	    {
-	        device_id = device_ids[i];
+
+	    if(available) {
+	        device_id = device_ids[atoi(argv[2])];
+	    }
+	    else {
 	        char name[200];
 	        err = clGetDeviceInfo(device_ids[i], CL_DEVICE_NAME, sizeof(name), name, NULL);
 	        if(err == CL_SUCCESS) {
-	            printf("INFO: Using device %s...\n", name);
+	            printf("ERROR: Device %s not available for compute\n", name);
 	        }
 	        else {
-	            printf("INFO: Using device # %d...\n", i);
+	            printf("ERROR: Device # %d not available for compute\n", atoi(argv[2]));
 	        }
-	        break;
-	    }
-	    else
+	        return -1;
+            }
+	}
+	else {
+	    for(i = 0; i < num_devices; i++)
 	    {
-	        char name[200];
-	        err = clGetDeviceInfo(device_ids[i], CL_DEVICE_NAME, sizeof(name), name, NULL);
-	        if(err == CL_SUCCESS)
-	        {
-	             log_info("Device %s not available for compute\n", name);
+	        cl_bool available;
+	        err = clGetDeviceInfo(device_ids[i], CL_DEVICE_AVAILABLE, sizeof(cl_bool), &available, NULL);
+	        if(err) {
+	            log_error("Cannot check device availability of device # %d. Continuing with next available device...\n", i);
+	            continue;
 	        }
-	        else
-	        {
-	             log_info("Device # %d not available for compute\n", i);
+
+	        if(available) {
+	            device_id = device_ids[i];
+	            break;
+	        }
+	        else {
+	            char name[200];
+	            err = clGetDeviceInfo(device_ids[i], CL_DEVICE_NAME, sizeof(name), name, NULL);
+	            if(err == CL_SUCCESS) {
+	                log_info("Device %s not available for compute\n", name);
+	            }
+	            else {
+	                log_info("Device # %d not available for compute\n", i);
+	            }
 	        }
 	    }
 	}
 	
-	if(!device_id)
-	{
+	if(!device_id) {
 	    log_error("None of the devices available for compute ... aborting test\n");
 	    test_finish();
 	    return -1;
 	}
+	else {
+	    char name[200];
+	    err = clGetDeviceInfo(device_id, CL_DEVICE_NAME, sizeof(name), name, NULL);
+	    if(err == CL_SUCCESS) {
+	        printf("INFO: Using device %s...\n", name);
+	    }
+	    else {
+	        printf("INFO: Using device # %d...\n", i);
+	    }
+	}
 
 	context = clCreateContext(0, 1, &device_id, NULL, NULL, &err);
 	if(!context || err) 
@@ -826,7 +848,7 @@ int main (int argc, char * const argv[]) {
 		return -1;
 	}
 	
-	if(argc == 2) {	// arguments are supplied in a file with arguments for a single run are all on the same line
+	if(argc >= 2) {	// arguments are supplied in a file with arguments for a single run are all on the same line
 		paramFile = fopen(argv[1], "r");
 		if(!paramFile) {
 			log_error("Cannot open the parameter file\n");
-- 
GitLab