source: experiments/DRMAA_tests/DRMAA_args/args.c @ 16

Revision 16, 5.3 KB checked in by mmatloka, 14 years ago (diff)

add experiments

RevLine 
[16]1#include <stdio.h>
2#include <unistd.h>
3#include <string.h>
4#include <drmaa.h>
5
6#define JOB_CHUNK 1
7#define NBULKS 1
8
9static drmaa_job_template_t *create_job_template(const char *job_path, int seconds,
10int as_bulk_job);
11
12int main(int argc, char *argv[])
13{
14        char diagnosis[DRMAA_ERROR_STRING_BUFFER];
15        const char *all_jobids[NBULKS*JOB_CHUNK + JOB_CHUNK+1];
16        char jobid[100];
17        int drmaa_errno, i, pos = 0;
18        const char *job_path = NULL;
19        drmaa_job_template_t *jt = NULL;
20       
21        job_path = strdup("args_helper");
22        if (drmaa_init(NULL, diagnosis, sizeof(diagnosis)-1) != DRMAA_ERRNO_SUCCESS)
23        {
24                fprintf(stderr, "drmaa_init() failed: %s\n", diagnosis);
25                return 1;
26        }
27
28        /*
29        * submit some bulk jobs
30        */
31/*      if (!(jt = create_job_template(job_path, 5, 1)))
32        {
33                fprintf(stderr, "create_job_template() failed\n");
34                return 1;
35        }
36        for (i=0; i<NBULKS; i++)
37        {
38                drmaa_job_ids_t *jobids = NULL;
39                int j;
40                while ((drmaa_errno=drmaa_run_bulk_jobs(&jobids, jt, 1, JOB_CHUNK, 1, diagnosis,
41                sizeof(diagnosis)-1)) == DRMAA_ERRNO_DRM_COMMUNICATION_FAILURE)
42                {
43                        fprintf(stderr, "drmaa_run_bulk_jobs() failed - retry: %s %s\n", diagnosis,
44                        drmaa_strerror(drmaa_errno));
45                        sleep(1);
46                }
47               
48                if (drmaa_errno != DRMAA_ERRNO_SUCCESS)
49                {
50                        fprintf(stderr, "drmaa_run_bulk_jobs() failed: %s %s\n", diagnosis,
51                        drmaa_strerror(drmaa_errno));
52                        return 1;
53                }
54                printf("submitted bulk job with jobids:\n");
55                for (j=0; j<JOB_CHUNK; j++)
56                {
57                        drmaa_get_next_job_id(jobids, jobid, sizeof(jobid)-1);
58                        all_jobids[pos++] = strdup(jobid);
59                        printf("\t \"%s\"\n", jobid);
60                }
61                drmaa_release_job_ids(jobids);
62        }
63        drmaa_delete_job_template(jt, NULL, 0); */
64        /*
65        * submit some sequential jobs
66        */
67        if (!(jt = create_job_template(job_path, 1, 0)))
68        {
69                fprintf(stderr, "create_sleeper_job_template() failed\n");
70                return 1;
71        }
72       
73        for (i=0; i<1; i++)
74        {
75                while ((drmaa_errno=drmaa_run_job(jobid, sizeof(jobid)-1, jt, diagnosis,
76                sizeof(diagnosis)-1)) ==
77                DRMAA_ERRNO_DRM_COMMUNICATION_FAILURE)
78                {
79                        fprintf(stderr, "drmaa_run_job() failed - retry: %s\n", diagnosis);
80                        sleep(1);
81                }
82               
83                if (drmaa_errno != DRMAA_ERRNO_SUCCESS)
84                {
85                        fprintf(stderr, "drmaa_run_job() failed: %s\n", diagnosis);
86                        return 1;
87                }
88               
89                printf("\t \"%s\"\n", jobid);
90                all_jobids[pos++] = strdup(jobid);
91        }
92        /* set string array end mark */
93        all_jobids[pos] = NULL;
94        drmaa_delete_job_template(jt, NULL, 0);
95        /*
96        * synchronize with all jobs
97        */
98        /*drmaa_errno = drmaa_synchronize(all_jobids, DRMAA_TIMEOUT_WAIT_FOREVER, 0, diagnosis,
99        sizeof(diagnosis)-1);
100        if (drmaa_errno != DRMAA_ERRNO_SUCCESS)
101        {
102                fprintf(stderr,         "drmaa_synchronize(DRMAA_JOB_IDS_SESSION_ALL, dispose) failed: %s\n",   diagnosis);
103                return 1;
104        }
105        printf("synchronized with all jobs\n");
106*/
107        /*
108        * wait all those jobs
109        */
110        for (pos=0; pos< 1; pos++)
111        {
112                int stat;
113                int aborted, exited, exit_status, signaled;
114                printf("\nDrmaa_wait\n");
115                drmaa_errno = drmaa_wait(all_jobids[pos], jobid, sizeof(jobid)-1, &stat,DRMAA_TIMEOUT_WAIT_FOREVER, NULL, diagnosis, sizeof(diagnosis)-1);
116                printf("\nAfter drmaa_wait\n");
117                if (drmaa_errno != DRMAA_ERRNO_SUCCESS)
118                {
119                        fprintf(stderr, "drmaa_wait(%s) failed: %s\n", all_jobids[pos], diagnosis);
120                        return 1;
121                }
122                /*
123                * report how job finished
124                */
125                drmaa_wifaborted(&aborted, stat, NULL, 0);
126                if (aborted)
127                {
128                        printf("job \"%s\" never ran\n", all_jobids[pos]);
129                }
130                else
131                {
132                        drmaa_wifexited(&exited, stat, NULL, 0);
133                        if (exited)
134                        {
135                                drmaa_wexitstatus(&exit_status, stat, NULL, 0);
136                                printf("job \"%s\" finished regularly with exit status %d\n",
137                                all_jobids[pos], exit_status);
138                        }
139                        else
140                        {
141                                drmaa_wifsignaled(&signaled, stat, NULL, 0);
142                                if (signaled)
143                                {
144                                        char termsig[DRMAA_SIGNAL_BUFFER+1];
145                                        drmaa_wtermsig(termsig, DRMAA_SIGNAL_BUFFER, stat, NULL, 0);
146                                        printf("job \"%s\" finished due to signal %s\n",
147                                        all_jobids[pos], termsig);
148                                }
149                                else
150                                {
151                                        printf("job \"%s\" finished with unclear conditions\n",
152                                        all_jobids[pos]);
153                                }
154                        }
155                }
156        }
157       
158        if (drmaa_exit(diagnosis, sizeof(diagnosis)-1) != DRMAA_ERRNO_SUCCESS)
159        {
160                fprintf(stderr, "drmaa_exit() failed: %s\n", diagnosis);
161                return 1;
162        }
163        return 0;
164}
165
166        static drmaa_job_template_t *create_job_template(const char *job_path, int seconds,     int as_bulk_job)
167        {
168                const char *job_argv[3];
169                drmaa_job_template_t *jt = NULL;
170                char buffer[100];
171                if (drmaa_allocate_job_template(&jt, NULL, 0)!=DRMAA_ERRNO_SUCCESS)
172                {
173                        return NULL;
174                }
175                /* run in users home directory */
176                drmaa_set_attribute(jt, DRMAA_WD, DRMAA_PLACEHOLDER_HD"/michal/experiments/DRMAA_tests/DRMAA_args", NULL, 0);
177                drmaa_set_attribute(jt, DRMAA_OUTPUT_PATH, ":"DRMAA_PLACEHOLDER_HD"/test_out", NULL , 0);
178               
179               
180                /* the job to be run */
181                drmaa_set_attribute(jt, DRMAA_REMOTE_COMMAND, job_path, NULL, 0);
182                /*drmaa_set_attribute(jt, DRMAA_JOB_CATEGORY, "default", NULL, 0); */
183                /* the job's arguments */
184                sprintf(buffer, "%d", seconds);
185                job_argv[0] = strdup("tabs dwaps trzyps");
186                job_argv[1] = strdup("jeden dwa");
187                job_argv[2] = NULL;
188                drmaa_set_vector_attribute(jt, DRMAA_V_ARGV, job_argv, NULL, 0);
189                /* join output/error file */
190                drmaa_set_attribute(jt, DRMAA_JOIN_FILES, "y", NULL, 0);
191                /* path for output */
192        /*      if (!as_bulk_job)
193                {
194                        drmaa_set_attribute(jt, DRMAA_OUTPUT_PATH, ":"DRMAA_PLACEHOLDER_HD"/DRMAA_JOB", NULL, 0);
195                }
196                else
197                {
198                        drmaa_set_attribute(jt, DRMAA_OUTPUT_PATH,":"DRMAA_PLACEHOLDER_HD"/DRMAA_JOB."DRMAA_PLACEHOLDER_INCR, NULL, 0);
199                }*/
200                return jt;
201        }
Note: See TracBrowser for help on using the repository browser.