StreamFMACpuCode.cpp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #include <cmath>
  2. #include <algorithm>
  3. #include <iostream>
  4. #include <vector>
  5. #include <random>
  6. #include "StreamFMA.h"
  7. #include "MaxSLiCInterface.h"
  8. int main()
  9. {
  10. const int size = 400;
  11. int sizeBytes = size * sizeof(int32_t);
  12. int32_t *a = (int32_t*) malloc(sizeBytes);
  13. int32_t *b = (int32_t*) malloc(sizeBytes);
  14. int32_t *c = (int32_t*) malloc(sizeBytes);
  15. // TODO Generate input data
  16. for(int i = 0; i < size; ++i)
  17. {
  18. a[i] = random() % 100;
  19. b[i] = random() % 100;
  20. }
  21. max_file_t *maxfile = StreamFMA_init();
  22. max_engine_t *engine = max_load(maxfile, "*");
  23. max_actions_t* act = max_actions_init(maxfile, NULL);
  24. max_set_ticks (act, "StreamFMAKernel", size);
  25. max_queue_input(act, "a", a, size * sizeof(int32_t));
  26. max_queue_input(act, "b", b, size * sizeof(int32_t));
  27. max_queue_output(act, "output", c, size * sizeof(int32_t));
  28. max_run(engine, act);
  29. max_actions_free(act);
  30. max_unload(engine);
  31. int ret = 0;
  32. // TODO Use result data
  33. for(std::size_t i = 0; i < size; ++i)
  34. {
  35. int32_t ref =a[i] + b[i];
  36. if (c[i] != ref)
  37. {
  38. std::cout << "Invalid Output at index " << i << ": " << std::endl;
  39. std::cout << " reference: " << ref << std::endl;
  40. std::cout << " value: " << c[i] << std::endl;
  41. ret = 1;
  42. break;
  43. }
  44. }
  45. if(0 == ret)
  46. {
  47. std::cout << "All " << size << " values calculated correctly on the DFE!" << std::endl;
  48. }
  49. std::cout << "Done." << std::endl;
  50. return ret;
  51. }