changeset 45:89a198fa6b23

add dfrTobin
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Mon, 18 May 2015 13:34:36 +0900
parents 62739627f8ec
children e13aac1cff0f
files c/dfaTobin/Makefile c/dfaTobin/README c/dfaTobin/main.cc c/dfaTobin/read.h
diffstat 4 files changed, 145 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/c/dfaTobin/Makefile	Mon May 18 13:34:36 2015 +0900
@@ -0,0 +1,10 @@
+TARGET=read_lseek
+OPTION= -Wall -O0 -g
+
+$(TARGET):main.cc
+	clang $(OPTION) -o $(TARGET) main.cc
+
+clean:
+	rm -f $(TARGET)
+	rm -r $(TARGET).dSYM
+	rm -f *~ \#*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/c/dfaTobin/README	Mon May 18 13:34:36 2015 +0900
@@ -0,0 +1,9 @@
+(2013.11.11)
+一括readと分割readの時間比較のためのプログラム
+
+"Usage : ./read_lseek [-file filename] [-b -d]"
+
+-b bulk read(一括read)
+-d divide read(分割read)
+
+ONE_TASK_READ_SIZE にて分割サイズを変更できる。
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/c/dfaTobin/main.cc	Mon May 18 13:34:36 2015 +0900
@@ -0,0 +1,120 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <string.h>
+#include <stdbool.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include "read.h"
+#include "test.h"
+
+static double st_time;
+static double ed_time;
+
+/*
+ * -b : bulk read 一括read
+ * -d : divide read 分割read (default)
+ */
+const char *usr_help_str = "Usage : ./read_lseek [-file filename] [-b -d]";
+const int ONE_TASK_READ_SIZE = 4096 * 1;
+bool bulk_flag = true;
+bool divide_flag = false;
+
+void result_printf(int,char *);
+void divide_read(int,char*,read_t);
+void bulk_read(int,char*,read_t);
+
+static double
+get_time(){
+    struct timeval tv;
+    gettimeofday(&tv,NULL);
+    return tv.tv_sec + (double)tv.tv_usec*1e-6;
+}
+
+int main(int argc, char *argv[]){
+
+    struct stat sb;
+    read_t r;
+
+    char *filename = 0;
+    for (int i = 1; argv[i]; ++i) {
+        if (strcmp(argv[i], "-file") == 0){
+            filename = argv[i+1];
+        }else if(strcmp(argv[i], "-b") == 0){
+            bulk_flag = true;
+            divide_flag = false;
+        }else if(strcmp(argv[i], "-d") == 0){
+            bulk_flag = false;
+            divide_flag = true;
+        }
+    }
+
+    if (filename == 0){
+        puts(usr_help_str);
+        exit(1);
+    }
+
+    st_time = get_time();
+
+    int fd = -1;
+    if ((fd=open(filename,O_RDONLY,0666))==0){
+        fprintf(stderr,"can't open %s\n",filename);
+    }
+
+    if (fstat(fd,&sb)){
+        fprintf(stderr,"can't open %s\n",filename);
+    }
+
+    r.text_size = sb.st_size;
+    char *text = (char *)malloc(sizeof(char)*r.text_size);
+
+    r.one_task_read_size = ONE_TASK_READ_SIZE;
+
+    r.task_num = r.text_size / r.one_task_read_size;
+    r.task_num += ((r.text_size % r.one_task_read_size) != 0);
+
+    if(bulk_flag == true){
+        bulk_read(fd,text,r);
+    }else if(divide_flag == true){
+        divide_read(fd,text,r);
+    }
+
+    free(text);
+    close(fd);
+
+    ed_time = get_time();
+    printf("Time: %0.6f\n",ed_time-st_time);
+
+    return 0;
+}
+
+/* lseekで読む場所を指定してあげないといけないと思ったが、
+ * readで読み込むだけでも読み込む場所が変わってくれるらしい。
+ */
+void divide_read(int _fd,char* _text,read_t _r){
+    for(int i = 0; i < _r.task_num; i++){
+        //lseek(_fd, i * _r.one_task_read_size,SEEK_SET);
+        read(_fd,_text,_r.one_task_read_size);
+        result_printf(i,_text);
+    }
+    puts("divide read");
+    printf("text size    :%lu\n",_r.text_size);
+    printf("one task size:%d\n",_r.one_task_read_size);
+    printf("task num     :%d\n",_r.task_num);
+}
+
+void bulk_read(int _fd,char* _text,read_t _r){
+    int i = 0;
+    read(_fd,_text,_r.text_size);
+    result_printf(i,_text);
+    puts("bulk read");
+    printf("text size    :%lu\n",_r.text_size);
+}
+
+void result_printf(int _i,char *_text){
+    //printf("-------%d--------\n",_i + 1);
+    printf("[task No. %d]%s\n",_i,_text);
+    //printf("-----------------\n\n");
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/c/dfaTobin/read.h	Mon May 18 13:34:36 2015 +0900
@@ -0,0 +1,6 @@
+typedef struct read{
+    int fd;
+    unsigned long int text_size;
+    int one_task_read_size;
+    int task_num;
+} read_t;