|
View:
New views
8 Messages
—
Rating Filter:
Alert me
|
|
|
[PATCH] add iterations option in gtod_latency.Regards,
Peppe [PATCH] add iterations option in gtod_latency. This patch adds a new option for tuning the number of iterations into the gtod_latency realtime test. Running gtod_latency on a target with limited resources it fails (ENOMEM) as soon as it try to allocate the memory for the two buffers start_data and stop_data. Tested on i386 and sh4 architectures. Signed-off-by: Giuseppe Cavallaro <peppe.cavallaro@...> --- ltp/testcases/realtime.orig/func/gtod_latency/gtod_latency.c 2009-11-04 15:55:58.000000000 +0100 +++ ltp/testcases/realtime/func/gtod_latency/gtod_latency.c 2009-11-06 08:37:14.000000000 +0100 @@ -81,13 +81,14 @@ char *labels[] = {"scatter plot x-axis", "histogram y-axis"}; static unsigned long long latency_threshold = 0; +static unsigned int iterations = ITERATIONS; void stats_cmdline_help(void) { printf("Usage: ./gtod_latency {-[so|scatter-output] -[ho|hist-output]" " -[st|scatter-title] -[ht|hist-title] -[sxl|scatter-xlabel]" " -[syl|scatter-ylabel] -[hxl|hist-xlabel] -[hyl|hist-ylabel]" - " -[lt|latency-trace]}" + " -[lt|latency-trace] -[i|iterations]}" " -[help] \n"); printf("**command-line options are not supported yet for this testcase\n"); } @@ -194,6 +195,15 @@ int stats_cmdline(int argc, char *argv[] continue; } + if (!strcmp(flag, "i") || !strcmp(flag, "iterations")) { + if (i + 1 == argc) { + printf("flag has missing argument\n"); + return -1; + } + iterations = strtoull(argv[++i], NULL, 0); + continue; + } + printf("unknown flag given\n"); return -1; } @@ -210,9 +220,6 @@ long long timespec_subtract(struct times return ns; } -struct timespec start_data[ITERATIONS]; -struct timespec stop_data[ITERATIONS]; - int main(int argc, char *argv[]) { int i, j, k, err; @@ -222,16 +229,38 @@ int main(int argc, char *argv[]) stats_container_t dat; stats_container_t hist; stats_quantiles_t quantiles; + struct timespec *start_data; + struct timespec *stop_data; - stats_container_init(&dat, ITERATIONS); + if (stats_cmdline(argc, argv) < 0) { + printf("usage: %s help\n", argv[0]); + exit(1); + } + + if (iterations < 10000) { + iterations = 10000; + printf("user \"iterations\" value is too small, try with %d", + iterations); + } + + stats_container_init(&dat, iterations); stats_container_init(&hist, HIST_BUCKETS); - stats_quantiles_init(&quantiles, (int)log10(ITERATIONS)); + stats_quantiles_init(&quantiles, (int)log10(iterations)); setup(); mlockall(MCL_CURRENT|MCL_FUTURE); - if (stats_cmdline(argc, argv) < 0) { - printf("usage: %s help\n", argv[0]); + start_data = calloc(iterations, sizeof(struct timespec)); + if (start_data == NULL) { + printf("Memory allocation Failed (too many Iteration: %d)\n", + iterations); + exit(1); + } + stop_data = calloc(iterations, sizeof(struct timespec)); + if (stop_data == NULL) { + printf("Memory allocation Failed (too many Iteration: %d)\n", + iterations); + free(start_data); exit(1); } @@ -253,9 +282,9 @@ int main(int argc, char *argv[]) printf("\n----------------------\n"); printf("Gettimeofday() Latency\n"); printf("----------------------\n"); - printf("Iterations: %d\n\n", ITERATIONS); + printf("Iterations: %d\n\n", iterations); - /* collect ITERATIONS pairs of gtod calls */ + /* collect iterations pairs of gtod calls */ max = min = 0; if (latency_threshold) { latency_trace_enable(); @@ -263,7 +292,7 @@ int main(int argc, char *argv[]) } /* This loop runs for a long time, hence can cause soft lockups. Calling sleep periodically avoids this. */ - for (i=0; i<(ITERATIONS/10000); i++) { + for (i = 0; i < (iterations/10000); i++) { for (j=0; j < 10000; j++) { k = (i * 10000) + j; clock_gettime(CLOCK_MONOTONIC,&start_data[k]); @@ -271,7 +300,7 @@ int main(int argc, char *argv[]) } usleep(1000); } - for (i = 0; i < ITERATIONS; i++) { + for (i = 0; i < iterations; i++) { delta = timespec_subtract(&start_data[i], &stop_data[i]); dat.records[i].x = i; dat.records[i].y = delta; @@ -282,7 +311,7 @@ int main(int argc, char *argv[]) } if (latency_threshold) { latency_trace_stop(); - if (i != ITERATIONS) { + if (i != iterations) { printf("Latency threshold (%lluus) exceeded at iteration %d\n", latency_threshold, i); latency_trace_print(); ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ Ltp-list mailing list Ltp-list@... https://lists.sourceforge.net/lists/listinfo/ltp-list |
|
|
Re: [PATCH] add iterations option in gtod_latency.Giuseppe CAVALLARO wrote:
> Regards, > Peppe > Can you please add freeing resources at the end of main. stats_container_free(&dat); stats_container_free(&hist); stats_quantiles_free(&quantiles); Also, you could set MIN_ITERATION to 10000 instead of hard coding inside main. Just a suggestion. Thanks, Gowri > > ------------------------------------------------------------------------ > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day > trial. Simplify your report design, integration and deployment - and focus on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > > > ------------------------------------------------------------------------ > > _______________________________________________ > Ltp-list mailing list > Ltp-list@... > https://lists.sourceforge.net/lists/listinfo/ltp-list ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ Ltp-list mailing list Ltp-list@... https://lists.sourceforge.net/lists/listinfo/ltp-list |
|
|
Re: [PATCH] add iterations option in gtod_latency.gowrishankar wrote: > Giuseppe CAVALLARO wrote: >> Regards, >> Peppe >> > > Can you please add freeing resources at the end of main. > > stats_container_free(&dat); > stats_container_free(&hist); > stats_quantiles_free(&quantiles); > > Also, you could set MIN_ITERATION to 10000 instead of hard coding inside > main. > Just a suggestion. Peppe > > Thanks, > Gowri > >> >> ------------------------------------------------------------------------ >> >> ------------------------------------------------------------------------------ >> >> Let Crystal Reports handle the reporting - Free Crystal Reports 2008 >> 30-Day trial. Simplify your report design, integration and deployment >> - and focus on what you do best, core application coding. Discover >> what's new with >> Crystal Reports now. http://p.sf.net/sfu/bobj-july >> >> >> ------------------------------------------------------------------------ >> >> _______________________________________________ >> Ltp-list mailing list >> Ltp-list@... >> https://lists.sourceforge.net/lists/listinfo/ltp-list > > [PATCH (RESEND)] add iterations option in gtod_latency. This patch adds a new option for tuning the number of iterations into the gtod_latency realtime test. Running gtod_latency on a target with limited resources it fails (ENOMEM) as soon as it try to allocate the memory for the two buffers start_data and stop_data. Tested on i386 and sh4 architectures. Signed-off-by: Giuseppe Cavallaro <peppe.cavallaro@...> --- ltp/testcases/realtime.orig/func/gtod_latency/gtod_latency.c 2009-11-04 15:55:58.000000000 +0100 +++ ltp/testcases/realtime/func/gtod_latency/gtod_latency.c 2009-11-06 13:54:39.000000000 +0100 @@ -56,6 +56,7 @@ #include <sys/mman.h> #define ITERATIONS 10000000 +#define MIN_ITERATION 10000 #define HIST_BUCKETS 20 #define SCATTER_FILENAME 0 @@ -81,13 +82,14 @@ char *labels[] = {"scatter plot x-axis", "histogram y-axis"}; static unsigned long long latency_threshold = 0; +static unsigned int iterations = ITERATIONS; void stats_cmdline_help(void) { printf("Usage: ./gtod_latency {-[so|scatter-output] -[ho|hist-output]" " -[st|scatter-title] -[ht|hist-title] -[sxl|scatter-xlabel]" " -[syl|scatter-ylabel] -[hxl|hist-xlabel] -[hyl|hist-ylabel]" - " -[lt|latency-trace]}" + " -[lt|latency-trace] -[i|iterations]}" " -[help] \n"); printf("**command-line options are not supported yet for this testcase\n"); } @@ -194,6 +196,15 @@ int stats_cmdline(int argc, char *argv[] continue; } + if (!strcmp(flag, "i") || !strcmp(flag, "iterations")) { + if (i + 1 == argc) { + printf("flag has missing argument\n"); + return -1; + } + iterations = strtoull(argv[++i], NULL, 0); + continue; + } + printf("unknown flag given\n"); return -1; } @@ -210,9 +221,6 @@ long long timespec_subtract(struct times return ns; } -struct timespec start_data[ITERATIONS]; -struct timespec stop_data[ITERATIONS]; - int main(int argc, char *argv[]) { int i, j, k, err; @@ -222,16 +230,38 @@ int main(int argc, char *argv[]) stats_container_t dat; stats_container_t hist; stats_quantiles_t quantiles; + struct timespec *start_data; + struct timespec *stop_data; + + if (stats_cmdline(argc, argv) < 0) { + printf("usage: %s help\n", argv[0]); + exit(1); + } + + if (iterations < MIN_ITERATION) { + iterations = MIN_ITERATION ; + printf("user \"iterations\" value is too small (use: %d)\n", + iterations); + } - stats_container_init(&dat, ITERATIONS); + stats_container_init(&dat, iterations); stats_container_init(&hist, HIST_BUCKETS); - stats_quantiles_init(&quantiles, (int)log10(ITERATIONS)); + stats_quantiles_init(&quantiles, (int)log10(iterations)); setup(); mlockall(MCL_CURRENT|MCL_FUTURE); - if (stats_cmdline(argc, argv) < 0) { - printf("usage: %s help\n", argv[0]); + start_data = calloc(iterations, sizeof(struct timespec)); + if (start_data == NULL) { + printf("Memory allocation Failed (too many Iteration: %d)\n", + iterations); + exit(1); + } + stop_data = calloc(iterations, sizeof(struct timespec)); + if (stop_data == NULL) { + printf("Memory allocation Failed (too many Iteration: %d)\n", + iterations); + free(start_data); exit(1); } @@ -253,9 +283,9 @@ int main(int argc, char *argv[]) printf("\n----------------------\n"); printf("Gettimeofday() Latency\n"); printf("----------------------\n"); - printf("Iterations: %d\n\n", ITERATIONS); + printf("Iterations: %d\n\n", iterations); - /* collect ITERATIONS pairs of gtod calls */ + /* collect iterations pairs of gtod calls */ max = min = 0; if (latency_threshold) { latency_trace_enable(); @@ -263,7 +293,7 @@ int main(int argc, char *argv[]) } /* This loop runs for a long time, hence can cause soft lockups. Calling sleep periodically avoids this. */ - for (i=0; i<(ITERATIONS/10000); i++) { + for (i = 0; i < (iterations/10000); i++) { for (j=0; j < 10000; j++) { k = (i * 10000) + j; clock_gettime(CLOCK_MONOTONIC,&start_data[k]); @@ -271,7 +301,7 @@ int main(int argc, char *argv[]) } usleep(1000); } - for (i = 0; i < ITERATIONS; i++) { + for (i = 0; i < iterations; i++) { delta = timespec_subtract(&start_data[i], &stop_data[i]); dat.records[i].x = i; dat.records[i].y = delta; @@ -282,7 +312,7 @@ int main(int argc, char *argv[]) } if (latency_threshold) { latency_trace_stop(); - if (i != ITERATIONS) { + if (i != iterations) { printf("Latency threshold (%lluus) exceeded at iteration %d\n", latency_threshold, i); latency_trace_print(); @@ -305,5 +335,9 @@ int main(int argc, char *argv[]) stats_quantiles_calc(&dat, &quantiles); stats_quantiles_print(&quantiles); + stats_container_free(&dat); + stats_container_free(&hist); + stats_quantiles_free(&quantiles); + return 0; } ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ Ltp-list mailing list Ltp-list@... https://lists.sourceforge.net/lists/listinfo/ltp-list |
|
|
Re: [PATCH] add iterations option in gtod_latency.Giuseppe CAVALLARO wrote:
> gowrishankar wrote: >> Giuseppe CAVALLARO wrote: >>> Regards, >>> Peppe >>> >> Can you please add freeing resources at the end of main. >> >> stats_container_free(&dat); >> stats_container_free(&hist); >> stats_quantiles_free(&quantiles); >> >> Also, you could set MIN_ITERATION to 10000 instead of hard coding inside >> main. >> Just a suggestion. > > patch reattached! > Peppe > Patch looks neat! I just recollected now that I had sent more or less same patch very long back, but maintainer missed it some how. http://www.opensource-archive.org/showthread.php?t=82487 Subrata ?? :) Thanks, Gowri >> Thanks, >> Gowri >> >>> ------------------------------------------------------------------------ >>> >>> ------------------------------------------------------------------------------ >>> >>> Let Crystal Reports handle the reporting - Free Crystal Reports 2008 >>> 30-Day trial. Simplify your report design, integration and deployment >>> - and focus on what you do best, core application coding. Discover >>> what's new with >>> Crystal Reports now. http://p.sf.net/sfu/bobj-july >>> >>> >>> ------------------------------------------------------------------------ >>> >>> _______________________________________________ >>> Ltp-list mailing list >>> Ltp-list@... >>> https://lists.sourceforge.net/lists/listinfo/ltp-list >> > ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ Ltp-list mailing list Ltp-list@... https://lists.sourceforge.net/lists/listinfo/ltp-list |
|
|
Re: [PATCH] add iterations option in gtod_latency.On Fri, 2009-11-06 at 19:33 +0530, gowrishankar wrote:
> Giuseppe CAVALLARO wrote: > > gowrishankar wrote: > >> Giuseppe CAVALLARO wrote: > >>> Regards, > >>> Peppe > >>> > >> Can you please add freeing resources at the end of main. > >> > >> stats_container_free(&dat); > >> stats_container_free(&hist); > >> stats_quantiles_free(&quantiles); > >> > >> Also, you could set MIN_ITERATION to 10000 instead of hard coding inside > >> main. > >> Just a suggestion. > > > > patch reattached! Thanks. But it fails to apply: patching file testcases/realtime/func/gtod_latency/gtod_latency.c Hunk #1 succeeded at 57 (offset 1 line). Hunk #3 succeeded at 197 (offset 1 line). Hunk #5 FAILED at 230. Hunk #6 succeeded at 285 (offset 2 lines). Hunk #8 succeeded at 303 with fuzz 2 (offset 2 lines). Hunk #9 succeeded at 313 (offset 1 line). Hunk #10 succeeded at 337 (offset 2 lines). > > Peppe > > > > Patch looks neat! > > I just recollected now that I had sent more or less same patch > very long back, but maintainer missed it some how. > > http://www.opensource-archive.org/showthread.php?t=82487 > > Subrata ?? :) I apolozise to have missed to see your patches. It is rare that i miss any patches. But, i can see that some other patch changing the same file was ack-ed by you. You could have reminded me during that time that it does not include changes sent by you: http://ltp.cvs.sourceforge.net/viewvc/ltp/ltp/testcases/realtime/func/gtod_latency/gtod_latency.c?view=log, Revision 1.10 - (view) (download) (annotate) - [select for diffs] Mon Aug 3 10:37:50 2009 UTC (3 months ago) by subrata_modak Branch: MAIN Changes since 1.9: +4 -2 lines Diff to previous 1.9 This set of 3 patches adds a new API stats_container_append to libstats. This function adds new stats_record_t to the record list in stats_container_t. It also replaces the occurrences of data->size with data->index and modifies the test-cases to call the append function. Changelog --------- - Added index to stats_container_t struct - Added Append function to add new stats_record_t to records list of stats_container_t - Replaced the occurrences of data->size by data->index in libstats.c - Modified the realtime testcases to include call to the append function. [PATCH 3/3] libstats: Modify testcases to call the append function: This patch modifies the testcases to call the stats_container_append function. Signed-off-by: Kiran Prakash <kiran@...>, Acked-by: Gowrishankar <gowrishankar.m@...>, Acked-by: Darren Hart <dvhltc@...>, Acked-by: Sripathi Kodi <sripathik@...>, Regards-- Subrata > > Thanks, > Gowri > > > > >> Thanks, > >> Gowri > >> > >>> ------------------------------------------------------------------------ > >>> > >>> ------------------------------------------------------------------------------ > >>> > >>> Let Crystal Reports handle the reporting - Free Crystal Reports 2008 > >>> 30-Day trial. Simplify your report design, integration and deployment > >>> - and focus on what you do best, core application coding. Discover > >>> what's new with > >>> Crystal Reports now. http://p.sf.net/sfu/bobj-july > >>> > >>> > >>> ------------------------------------------------------------------------ > >>> > >>> _______________________________________________ > >>> Ltp-list mailing list > >>> Ltp-list@... > >>> https://lists.sourceforge.net/lists/listinfo/ltp-list > >> > > > ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ Ltp-list mailing list Ltp-list@... https://lists.sourceforge.net/lists/listinfo/ltp-list |
|
|
Re: [PATCH] add iterations option in gtod_latency.-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1 Hi Subrata, Subrata Modak wrote: > On Fri, 2009-11-06 at 19:33 +0530, gowrishankar wrote: >> Giuseppe CAVALLARO wrote: >>> gowrishankar wrote: >>>> Giuseppe CAVALLARO wrote: >>>>> Regards, >>>>> Peppe >>>>> >>>> Can you please add freeing resources at the end of main. >>>> >>>> stats_container_free(&dat); >>>> stats_container_free(&hist); >>>> stats_quantiles_free(&quantiles); >>>> >>>> Also, you could set MIN_ITERATION to 10000 instead of hard coding inside >>>> main. >>>> Just a suggestion. >>> patch reattached! > > Thanks. But it fails to apply: > > patching file testcases/realtime/func/gtod_latency/gtod_latency.c > Hunk #1 succeeded at 57 (offset 1 line). > Hunk #3 succeeded at 197 (offset 1 line). > Hunk #5 FAILED at 230. > Hunk #6 succeeded at 285 (offset 2 lines). > Hunk #8 succeeded at 303 with fuzz 2 (offset 2 lines). > Hunk #9 succeeded at 313 (offset 1 line). > Hunk #10 succeeded at 337 (offset 2 lines). you are right, the ltp-full-20090731-gtod_latency_iterations.patch has to be applied patch after the two patches below: - - ltp-full-20090731-SH-atomic_add.patch - - ltp-full-20090731-tsc_splitted.patch Peppe >>> Peppe >>> >> Patch looks neat! >> >> I just recollected now that I had sent more or less same patch >> very long back, but maintainer missed it some how. >> >> http://www.opensource-archive.org/showthread.php?t=82487 >> >> Subrata ?? :) > > I apolozise to have missed to see your patches. It is rare that i miss > any patches. But, i can see that some other patch changing the same file > was ack-ed by you. You could have reminded me during that time that it > does not include changes sent by you: > > http://ltp.cvs.sourceforge.net/viewvc/ltp/ltp/testcases/realtime/func/gtod_latency/gtod_latency.c?view=log, > > Revision 1.10 - (view) (download) (annotate) - [select for diffs] > Mon Aug 3 10:37:50 2009 UTC (3 months ago) by subrata_modak > Branch: MAIN > Changes since 1.9: +4 -2 lines > Diff to previous 1.9 > This set of 3 patches adds a new API stats_container_append to libstats. This function adds new stats_record_t to the record list in stats_container_t. It also replaces the occurrences of data->size with data->index and modifies the test-cases to call the append function. Changelog > --------- > - Added index to stats_container_t struct > - Added Append function to add new stats_record_t to records list of stats_container_t > - Replaced the occurrences of data->size by data->index in libstats.c > - Modified the realtime testcases to include call to the append function. > [PATCH 3/3] libstats: Modify testcases to call the append function: This patch modifies the testcases to call the stats_container_append function. > Signed-off-by: Kiran Prakash <kiran@...>, > Acked-by: Gowrishankar <gowrishankar.m@...>, > Acked-by: Darren Hart <dvhltc@...>, > Acked-by: Sripathi Kodi <sripathik@...>, > > Regards-- > Subrata > >> Thanks, >> Gowri >> >> >> >>>> Thanks, >>>> Gowri >>>> >>>>> ------------------------------------------------------------------------ >>>>> >>>>> ------------------------------------------------------------------------------ >>>>> >>>>> Let Crystal Reports handle the reporting - Free Crystal Reports 2008 >>>>> 30-Day trial. Simplify your report design, integration and deployment >>>>> - and focus on what you do best, core application coding. Discover >>>>> what's new with >>>>> Crystal Reports now. http://p.sf.net/sfu/bobj-july >>>>> >>>>> >>>>> ------------------------------------------------------------------------ >>>>> >>>>> _______________________________________________ >>>>> Ltp-list mailing list >>>>> Ltp-list@... >>>>> https://lists.sourceforge.net/lists/listinfo/ltp-list > > -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAksBaCwACgkQ2Xo3j31MSSLMswCff+LA4xYE/h9b37cMRCcjz1J2 J2wAnjwGwpggk4+H58l3/XZ5e0gQRvb4 =ZOT0 -----END PGP SIGNATURE----- ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ Ltp-list mailing list Ltp-list@... https://lists.sourceforge.net/lists/listinfo/ltp-list |
|
|
|
|
|
Re: [PATCH] add iterations option in gtod_latency.On Fri, 2009-11-20 at 13:01 +0100, Giuseppe CAVALLARO wrote:
> -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Hi Subrata, > > this is the patch reworked to be applied against the ltp cvs. Great. Thanks. Added. Regards-- Subrata > > Regards > Peppe > > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.4.9 (GNU/Linux) > Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org > > iEYEARECAAYFAksGhQcACgkQ2Xo3j31MSSINMACfdqZU48hhlPJETmqJkAKppYdo > HawAoLc0yJ8JB2iQ4JU+ffNXmSaZW+9z > =s7E+ > -----END PGP SIGNATURE----- ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ Ltp-list mailing list Ltp-list@... https://lists.sourceforge.net/lists/listinfo/ltp-list |
| Free embeddable forum powered by Nabble | Forum Help |