home *** CD-ROM | disk | FTP | other *** search
/ ftp.parl.clemson.edu / 2015-02-07.ftp.parl.clemson.edu.tar / ftp.parl.clemson.edu / pub / pvfs2 / orangefs-2.8.3-20110323.tar.gz / orangefs-2.8.3-20110323.tar / orangefs / test / io / bmi / bench-mem.c < prev    next >
C/C++ Source or Header  |  2004-07-28  |  3KB  |  169 lines

  1. /*
  2.  * (C) 2001 Clemson University and The University of Chicago
  3.  *
  4.  * See COPYING in top-level directory.
  5.  */
  6.  
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <unistd.h>
  10. #include <errno.h>
  11. #include <math.h>
  12. #include <mpi.h>
  13. #include "bmi.h"
  14. #include "bench-mem.h"
  15.  
  16. int alloc_buffers(
  17.     struct mem_buffers *bufs,
  18.     int num_buffers,
  19.     int size)
  20. {
  21.     int i = 0;
  22.  
  23.     bufs->buffers = (void **) malloc(num_buffers * sizeof(void *));
  24.     if (!bufs->buffers)
  25.     {
  26.     return (-1);
  27.     }
  28.  
  29.     for (i = 0; i < num_buffers; i++)
  30.     {
  31.     bufs->buffers[i] = (void *) malloc(size);
  32.     if (!bufs->buffers[i])
  33.     {
  34.         return (-1);
  35.     }
  36.     }
  37.     bufs->num_buffers = num_buffers;
  38.     bufs->size = size;
  39.  
  40.     return (0);
  41. }
  42.  
  43. int BMI_alloc_buffers(
  44.     struct mem_buffers *bufs,
  45.     int num_buffers,
  46.     int size,
  47.     PVFS_BMI_addr_t addr,
  48.     enum bmi_op_type send_recv)
  49. {
  50.  
  51.     int i = 0;
  52.  
  53.     bufs->buffers = (void **) malloc(num_buffers * sizeof(void *));
  54.     if (!bufs->buffers)
  55.     {
  56.     return (-1);
  57.     }
  58.  
  59.     for (i = 0; i < num_buffers; i++)
  60.     {
  61.     bufs->buffers[i] = (void *) BMI_memalloc(addr, size, send_recv);
  62.     if (!bufs->buffers[i])
  63.     {
  64.         return (-1);
  65.     }
  66.     }
  67.     bufs->num_buffers = num_buffers;
  68.     bufs->size = size;
  69.  
  70.     return (0);
  71. }
  72.  
  73. int free_buffers(
  74.     struct mem_buffers *bufs)
  75. {
  76.     int i = 0;
  77.  
  78.     for (i = 0; i < bufs->num_buffers; i++)
  79.     {
  80.     free(bufs->buffers[i]);
  81.     }
  82.     free(bufs->buffers);
  83.     bufs->num_buffers = 0;
  84.     bufs->size = 0;
  85.  
  86.     return (0);
  87. }
  88.  
  89. int BMI_free_buffers(
  90.     struct mem_buffers *bufs,
  91.     PVFS_BMI_addr_t addr,
  92.     enum bmi_op_type send_recv)
  93. {
  94.     int i = 0;
  95.  
  96.     for (i = 0; i < bufs->num_buffers; i++)
  97.     {
  98.     BMI_memfree(addr, bufs->buffers[i], bufs->size, send_recv);
  99.     }
  100.     free(bufs->buffers);
  101.     bufs->num_buffers = 0;
  102.     bufs->size = 0;
  103.  
  104.     return (0);
  105. }
  106.  
  107. int mark_buffers(
  108.     struct mem_buffers *bufs)
  109. {
  110.     long i = 0;
  111.     int buf_index = 0;
  112.     int buf_offset = 0;
  113.     int longs_per_buf = 0;
  114.  
  115.     if ((bufs->size % (sizeof(long))) != 0)
  116.     {
  117.     fprintf(stderr, "Could not mark, odd size.\n");
  118.     return (-1);
  119.     }
  120.  
  121.     longs_per_buf = bufs->size / sizeof(long);
  122.  
  123.     for (i = 0; i < (bufs->num_buffers * longs_per_buf); i++)
  124.     {
  125.     buf_index = i / longs_per_buf;
  126.     buf_offset = i % longs_per_buf;
  127.     ((long *) (bufs->buffers[buf_index]))[buf_offset] = i;
  128.     }
  129.  
  130.     return (0);
  131. }
  132.  
  133. int check_buffers(
  134.     struct mem_buffers *bufs)
  135. {
  136.  
  137.     long i = 0;
  138.     int buf_index = 0;
  139.     int buf_offset = 0;
  140.     int longs_per_buf = 0;
  141.  
  142.     longs_per_buf = bufs->size / sizeof(long);
  143.  
  144.     for (i = 0; i < (bufs->num_buffers * longs_per_buf); i++)
  145.     {
  146.     buf_index = i / longs_per_buf;
  147.     buf_offset = i % longs_per_buf;
  148.     if (((long *) (bufs->buffers[buf_index]))[buf_offset] != i)
  149.     {
  150.         fprintf(stderr, "check_buffers() failure.\n");
  151.         fprintf(stderr, "buffer: %d, offset: %d\n", buf_index, buf_offset);
  152.         fprintf(stderr, "expected: %ld, got: %ld\n", i,
  153.             ((long *) (bufs->buffers[buf_index]))[buf_offset]);
  154.         return (-1);
  155.     }
  156.     }
  157.  
  158.     return (0);
  159. }
  160.  
  161. /*
  162.  * Local variables:
  163.  *  c-indent-level: 4
  164.  *  c-basic-offset: 4
  165.  * End:
  166.  *
  167.  * vim: ts=8 sts=4 sw=4 expandtab
  168.  */
  169.