lud.c 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. /*
  2. * =====================================================================================
  3. *
  4. * Filename: suite.c
  5. *
  6. * Description: The main wrapper for the suite
  7. *
  8. * Version: 1.0
  9. * Created: 10/22/2009 08:40:34 PM
  10. * Revision: none
  11. * Compiler: gcc
  12. *
  13. * Author: Liang Wang (lw2aw), lw2aw@virginia.edu
  14. * Company: CS@UVa
  15. *
  16. * =====================================================================================
  17. */
  18. #include <stdio.h>
  19. #include <unistd.h>
  20. #include <getopt.h>
  21. #include <stdlib.h>
  22. #include <assert.h>
  23. #include "common.h"
  24. static int do_verify = 0;
  25. static struct option long_options[] = {
  26. /* name, has_arg, flag, val */
  27. {"input", 1, NULL, 'i'},
  28. {"size", 1, NULL, 's'},
  29. {"verify", 0, NULL, 'v'},
  30. {0,0,0,0}
  31. };
  32. extern void
  33. lud_base(float *m, int matrix_dim);
  34. int
  35. main ( int argc, char *argv[] )
  36. {
  37. int matrix_dim = 32; /* default matrix_dim */
  38. int opt, option_index=0;
  39. func_ret_t ret;
  40. const char *input_file = NULL;
  41. float *m, *mm;
  42. stopwatch sw;
  43. while ((opt = getopt_long(argc, argv, "::vs:i:",
  44. long_options, &option_index)) != -1 ) {
  45. switch(opt){
  46. case 'i':
  47. input_file = optarg;
  48. break;
  49. case 'v':
  50. do_verify = 1;
  51. break;
  52. case 's':
  53. matrix_dim = atoi(optarg);
  54. fprintf(stderr, "Currently not supported, use -i instead\n");
  55. fprintf(stderr, "Usage: %s [-v] [-s matrix_size|-i input_file]\n", argv[0]);
  56. exit(EXIT_FAILURE);
  57. case '?':
  58. fprintf(stderr, "invalid option\n");
  59. break;
  60. case ':':
  61. fprintf(stderr, "missing argument\n");
  62. break;
  63. default:
  64. fprintf(stderr, "Usage: %s [-v] [-s matrix_size|-i input_file]\n",
  65. argv[0]);
  66. exit(EXIT_FAILURE);
  67. }
  68. }
  69. if ( (optind < argc) || (optind == 1)) {
  70. fprintf(stderr, "Usage: %s [-v] [-s matrix_size|-i input_file]\n", argv[0]);
  71. exit(EXIT_FAILURE);
  72. }
  73. if (input_file) {
  74. printf("Reading matrix from file %s\n", input_file);
  75. ret = create_matrix_from_file(&m, input_file, &matrix_dim);
  76. if (ret != RET_SUCCESS) {
  77. m = NULL;
  78. fprintf(stderr, "error create matrix from file %s\n", input_file);
  79. exit(EXIT_FAILURE);
  80. }
  81. } else {
  82. printf("No input file specified!\n");
  83. exit(EXIT_FAILURE);
  84. }
  85. if (do_verify){
  86. printf("Before LUD\n");
  87. print_matrix(m, matrix_dim);
  88. matrix_duplicate(m, &mm, matrix_dim);
  89. }
  90. stopwatch_start(&sw);
  91. lud_base(m, matrix_dim);
  92. stopwatch_stop(&sw);
  93. printf("Time consumed(ms): %lf\n", 1000*get_interval_by_sec(&sw));
  94. if (do_verify){
  95. printf("After LUD\n");
  96. print_matrix(m, matrix_dim);
  97. printf(">>>Verify<<<<\n");
  98. lud_verify(mm, m, matrix_dim);
  99. free(mm);
  100. }
  101. free(m);
  102. return EXIT_SUCCESS;
  103. } /* ---------- end of function main ---------- */