Running benchmark with main method from the generated jar
Luis IBANEZ
luis.ibanez at univ-nantes.fr
Wed Apr 2 12:44:14 UTC 2014
Oops, forgot the attachment.
> Hi Aleksey,
>
>>
>> I say like this:
> ....
>> Options baseOpts = new OptionsBuilder()
>> + .parent(new CommandLineOptions(args))
>> .include(".*" + JMHSample_25_API_GA.class.getName() +
>> ".*")
>
> When I add the "parent(new CommandLineOptions(args)" line, if i do
>
> java -cp microbenchmarks.jar mypackage/mysubpack/MyClass -i 5 -wi 5
>
> It does take in account the -i and -wi switches, but, it ignores that I
> want to execute "MyClass" and starts executing all benchmarks with these
> parameters, like if i were using the normal "java -jar microbenchmark.jar"
> call without filtering.
>
>>> 2/ I also tried to set other parameters (path to the data used), but
>>> I
>>> need to hardwire the location of the settings file as it seems that the
>>> method annotated as Trial is executed even before the main (I thought
>>> it
>>> was injected just after the call to Runner.run)
>>
>> @Setup-s should be executed after main(). Something wicked happens in
>> your code :)
>
> The thing is that I don't know how to pass arguments to the Setup methods,
> this means that I make the Properties a static class attribute, to be able
> to load it in the main and use it in the SetUp method... Maybe this is the
> problem, I'm attaching a code sample.
>
>
>> Hi Luis,
>>
>> On 04/02/2014 01:58 PM, Luis IBANEZ wrote:
>>> But that means I lose all the nice command line options provided with
>>> the
>>> jar.
>>
>> I assume you want the same CLI interface JMH offers for other
>> benchmarks?
>>
>>> I tried using a Properties file, but:
>>> 1/ The option parsing is up to me (I still have not checked how to
>>> reuse
>>> whatever option parsing jmh uses though)
>>
>> See below.
>>
>>> 2/ I also tried to set other parameters (path to the data used), but
>>> I
>>> need to hardwire the location of the settings file as it seems that the
>>> method annotated as Trial is executed even before the main (I thought
>>> it
>>> was injected just after the call to Runner.run)
>>
>> @Setup-s should be executed after main(). Something wicked happens in
>> your code :)
>>
>>> Short version of the question: How do I execute code sample [0] from
>>> the
>>> generated jar while maintaining the settings control?
>>
>> I say like this:
>>
>> diff -r 3b57fecd61bf
>> jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_25_API_GA.java
>> ---
>> a/jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_25_API_GA.java
>> Tue Apr 01 21:53:13 2014 +0400
>> +++
>> b/jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_25_API_GA.java
>> Wed Apr 02 14:07:30 2014 +0400
>> @@ -31,6 +31,8 @@
>> import org.openjdk.jmh.logic.results.RunResult;
>> import org.openjdk.jmh.runner.Runner;
>> import org.openjdk.jmh.runner.RunnerException;
>> +import org.openjdk.jmh.runner.options.CommandLineOptionException;
>> +import org.openjdk.jmh.runner.options.CommandLineOptions;
>> import org.openjdk.jmh.runner.options.Options;
>> import org.openjdk.jmh.runner.options.OptionsBuilder;
>> import org.openjdk.jmh.runner.options.VerboseMode;
>> @@ -82,11 +84,13 @@
>> * performance. Try to run the sample and see if it improves
>> performance.
>> */
>>
>> - public static void main(String[] args) throws RunnerException {
>> + public static void main(String[] args) throws RunnerException,
>> CommandLineOptionException {
>> // These are our base options. We will mix these options into
>> the
>> // measurement runs. That is, all measurement runs will inherit
>> these,
>> // see how it's done below.
>> +
>> Options baseOpts = new OptionsBuilder()
>> + .parent(new CommandLineOptions(args))
>> .include(".*" + JMHSample_25_API_GA.class.getName() +
>> ".*")
>> .warmupTime(TimeValue.milliseconds(200))
>> .measurementTime(TimeValue.milliseconds(200))
>>
>> -Aleksey
>>
>
More information about the jmh-dev
mailing list