starpu_fxt_data_trace.c 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #include <stdio.h>
  2. #include <config.h>
  3. #include <starpu.h>
  4. #include <string.h>
  5. #define PROGNAME "starpu_fxt_data_trace"
  6. #define MAX_LINE_SIZE 100
  7. static void usage(char *progname)
  8. {
  9. fprintf(stderr, "Usage : %s <filename> [codelet...]\n", progname);
  10. exit(77);
  11. }
  12. static void write_plt(int argc, char **argv){
  13. FILE *codelet_list = fopen("codelet_list", "r");
  14. if(!codelet_list)
  15. {
  16. perror("Error while opening codelet list:");
  17. exit(-1);
  18. }
  19. char codelet_name[MAX_LINE_SIZE];
  20. FILE *plt = fopen("data_trace.gp", "w+");
  21. if(!plt){
  22. perror("Error while creating data_trace.plt:");
  23. exit(-1);
  24. }
  25. fprintf(plt, "#!/usr/bin/gnuplot -persist\n\n");
  26. fprintf(plt, "set term postscript eps enhanced color\n");
  27. fprintf(plt, "set output \"data_trace.eps\"\n");
  28. fprintf(plt, "set title \"Data trace\"\n");
  29. fprintf(plt, "set logscale x\n");
  30. fprintf(plt, "set logscale y\n");
  31. fprintf(plt, "set xlabel \"tasks size (ms)\"\n");
  32. fprintf(plt, "set ylabel \"data size (B)\"\n");
  33. fprintf(plt, "plot ");
  34. int c_iter;
  35. char *v_iter;
  36. int begin = 1;
  37. while(fgets(codelet_name, MAX_LINE_SIZE, codelet_list) != NULL)
  38. {
  39. if(argc == 0)
  40. {
  41. if(begin)
  42. begin = 0;
  43. else
  44. fprintf(plt, ", ");
  45. }
  46. int size = strlen(codelet_name);
  47. if(size > 0)
  48. codelet_name[size-1] = '\0';
  49. if(argc != 0)
  50. {
  51. for(c_iter = 0, v_iter = argv[c_iter];
  52. c_iter < argc;
  53. c_iter++, v_iter = argv[c_iter])
  54. {
  55. if(!strcmp(v_iter, codelet_name))
  56. {
  57. if(begin)
  58. begin = 0;
  59. else
  60. fprintf(plt, ", ");
  61. fprintf(plt, "\"%s\" using 1:2 with dots lw 1 title \"%s\"", codelet_name, codelet_name);
  62. }
  63. }
  64. }
  65. else
  66. {
  67. fprintf(plt, "\"%s\" using 1:2 with dots lw 1 title \"%s\"", codelet_name, codelet_name);
  68. }
  69. }
  70. fprintf(plt, "\n");
  71. if(fclose(codelet_list))
  72. {
  73. perror("close failed :");
  74. exit(-1);
  75. }
  76. if(fclose(plt))
  77. {
  78. perror("close failed :");
  79. exit(-1);
  80. }
  81. }
  82. int main(int argc, char **argv)
  83. {
  84. if(argc < 2)
  85. {
  86. usage(argv[0]);
  87. }
  88. starpu_fxt_write_data_trace(argv[1]);
  89. write_plt(argc - 2, argv + 2);
  90. return 0;
  91. }