fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <sys/time.h>
  4.  
  5. typedef struct pixel {
  6. unsigned char r, g, b, x;
  7. } pixel;
  8.  
  9. int main(void)
  10. {
  11. int width = 1920, height = 1080;
  12. int length = width * height;
  13. pixel *pixels = (pixel*)malloc(length * sizeof(pixel));
  14. for (int i = 0; i < length; i++) {
  15. int rnd = rand();
  16. pixels[i].r = rnd & 0xFF;
  17. pixels[i].g = rnd >> 8 & 0xFF;
  18. pixels[i].b = rnd >> 16 & 0xFF;
  19. pixels[i].x = 0;
  20. }
  21.  
  22. struct timeval tv0, tv1, tv2, tv3, tv4;
  23.  
  24. gettimeofday(&tv0, NULL);
  25.  
  26. for (int y = 0; y < height; ++y)
  27. for (int x = 0; x < width; ++x) {
  28. pixel *p = &pixels[x + y * width];
  29. p->r ^= 0xff;
  30. p->g ^= 0xff;
  31. p->b ^= 0xff;
  32. }
  33.  
  34. gettimeofday(&tv1, NULL);
  35.  
  36. for (int x = 0; x < width; x++)
  37. for (int y = 0; y < height; ++y) {
  38. pixel *p = &pixels[x + y * width];
  39. p->r ^= 0xff;
  40. p->g ^= 0xff;
  41. p->b ^= 0xff;
  42. }
  43.  
  44. gettimeofday(&tv2, NULL);
  45.  
  46. printf("Y-X pass: %d usec\n", 1000000 * (tv1.tv_sec - tv0.tv_sec) + tv1.tv_usec - tv0.tv_usec);
  47. printf("X-Y pass: %d usec\n", 1000000 * (tv2.tv_sec - tv1.tv_sec) + tv2.tv_usec - tv1.tv_usec);
  48.  
  49. return 0;
  50. }
  51.  
Success #stdin #stdout 0.05s 9592KB
stdin
Standard input is empty
stdout
Y-X pass: 3375 usec
X-Y pass: 18002 usec