Skip to content

Commit

Permalink
Update RDTSC benchmark
Browse files Browse the repository at this point in the history
  • Loading branch information
YaSuenag committed Apr 16, 2024
1 parent 19f3d76 commit 4694368
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 14 deletions.
2 changes: 1 addition & 1 deletion benchmarks/funccall/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
<dependency>
<groupId>com.yasuenag</groupId>
<artifactId>ffmasm</artifactId>
<version>0.2.2</version>
<version>0.4.0-SNAPSHOT</version>
</dependency>
</dependencies>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ public class FuncCallComparison{
private CodeSegment seg;

private MethodHandle ffmRDTSC;
private MethodHandle ffmRDTSCCritical;

@Setup
public void setup(){
Expand All @@ -39,18 +40,19 @@ public void setup(){
/* ret */ .ret()
.getMemorySegment();

ffmRDTSC = Linker.nativeLinker().downcallHandle(mem, desc, Linker.Option.critical(false));
ffmRDTSC = Linker.nativeLinker().downcallHandle(mem, desc);
ffmRDTSCCritical = Linker.nativeLinker().downcallHandle(mem, desc, Linker.Option.critical(false));

var register = NativeRegister.create(this.getClass());
register.registerNatives(Map.of(this.getClass().getMethod("rdtscFFMDirect"), mem));
register.registerNatives(Map.of(this.getClass().getMethod("invokeFFMRDTSCRegisterNatives"), mem));
}
catch(Throwable t){
throw new RuntimeException(t);
}
}

@Benchmark
public native long rdtsc();
public native long invokeJNI();

@Benchmark
public long invokeFFMRDTSC(){
Expand All @@ -63,7 +65,17 @@ public long invokeFFMRDTSC(){
}

@Benchmark
public native long rdtscFFMDirect();
public long invokeFFMRDTSCCritical(){
try{
return (long)ffmRDTSCCritical.invoke();
}
catch(Throwable t){
throw new RuntimeException(t);
}
}

@Benchmark
public native long invokeFFMRDTSCRegisterNatives();

@TearDown
public void tearDown(){
Expand All @@ -78,13 +90,15 @@ public void tearDown(){
public static void main(String[] args){
var inst = new FuncCallComparison();
inst.setup();
long nativeVal = inst.rdtsc();
long nativeVal = inst.invokeJNI();
long ffmVal = inst.invokeFFMRDTSC();
long ffmDirectVal = inst.rdtscFFMDirect();
long ffmCriticalVal = inst.invokeFFMRDTSCCritical();
long ffmRegisterNativesVal = inst.invokeFFMRDTSCRegisterNatives();

System.out.println(" native: " + nativeVal);
System.out.println(" FFM: " + ffmVal);
System.out.println("FFM (Direct): " + ffmDirectVal);
System.out.println(" JNI: " + nativeVal);
System.out.println(" FFM: " + ffmVal);
System.out.println(" FFM (Critical): " + ffmCriticalVal);
System.out.println("FFM (RegisterNatives): " + ffmRegisterNativesVal);
}

}
8 changes: 4 additions & 4 deletions benchmarks/funccall/src/main/native/rdtsc.S
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
.text

# jlong Java_com_yasuenag_ffmasm_benchmark_funccall.FuncCallComparison_rdtsc(JNIEnv *env)
.global Java_com_yasuenag_ffmasm_benchmark_funccall_FuncCallComparison_rdtsc
.type Java_com_yasuenag_ffmasm_benchmark_funccall_FuncCallComparison_rdtsc, @function
Java_com_yasuenag_ffmasm_benchmark_funccall_FuncCallComparison_rdtsc:
# jlong Java_com_yasuenag_ffmasm_benchmark_funccall.FuncCallComparison_invokeJNI(JNIEnv *env)
.global Java_com_yasuenag_ffmasm_benchmark_funccall_FuncCallComparison_invokeJNI
.type Java_com_yasuenag_ffmasm_benchmark_funccall_FuncCallComparison_invokeJNI, @function
Java_com_yasuenag_ffmasm_benchmark_funccall_FuncCallComparison_invokeJNI:
push %rbp
mov %rsp, %rbp
rdtsc
Expand Down

0 comments on commit 4694368

Please sign in to comment.