very fast etaT pairing for Core 2 Duo

Abstruct
This is an efficient implementation of ηT pairing on Core 2 Duo. The processing speed achieves 92 μsec over F397 and 553 μsec over F3193 on Windows Xp SP3 + Core 2 Duo 2.66GHz. It is the fastest speed at 2008 Dec 21 as far as I know.
Keywords
Tate pairing, ηT pairing, efficient implementation
Download
The latest version : source of etaT pairing for F397 and F3193.
See Multi-core Implementation of the Tate Pairing over Supersingular Elliptic Curves to get the source code for Tate pairing in F21223 and F3509.
ePrint
Requirements
CPU
Intel Core 2 Duo (ESSE3 is required)
OS
Windows Xp/Vista, Linux and Intel Mac OS X
32-bit version for m = 97, 32/64-bit version for m = 193
Remark:The current version for multi thread supports only Windows.
C++ compiler
Visual Studio 2008 or gcc 4.3.0 or later
Build on Windows
Open etat/etat.sln and compile test_etat with Release mode, then you can get the binary in etat/test/Release/test{97,193}.exe
Build on Linux
Type
>cd etat && make
then you can get the test binary in etat/test
Benchmark
The following values are at 2.6GHz Intel Core 2 Duo processor on 32-bit Windows Xp SP3.
The implemented algorithm of ηT pairing is old, then these values will be faster if newer algorithms are implemented.
Running times (usec)
modem = 97m = 193
pairing(single)149975
pairing(multi)92553
Running times for m = 97(clks)
Core2Duo 2.6GHz(my results)Opteron 2.2GHz/x86-64 with SSE(ref)
mul4821100
cube8386
pairing(single)436K1053K
pairing(multi)239K-
Running times for m = 193(clks)
Core2Duo 2.6GHz(my results)Opteron 2.2GHz/x86-64(ref)
mul16624009
cube164268
pairing(single)2535K5744K
pairing(multi)1438K-
If "This program can't run because this cpu doesn't support SSSE3." is printed, then your PC may not have Core 2 Duo.
Directory
./include.mie/mie_common.h ; for some macro definitions
./xbyak/                   ; JIT assembler (used only for m = 97)
./etat/src/*.h             ; source of etat pairing
      /test/test97.cpp     ; test and benchmark for m = 97
      /test/test193.cpp    ; test and benchmark for m = 193
Sample
int main()
{
    using namespace MIE_ETAT;
    ECgeneral<F3_97> P, Q;
    P.x.setByString("2 00200100011220200021200102211201 00021000200212122020102112002120 00202212022000011201110000200010");
    P.y.setByString("0 12010202211110211201221022002022 10221102221011211002020221200102 02111110012020102100200102011202");
    Q.x.setByString("0 01222010102100210221200200220020 12011112220212201011100200100122 20010221110121202101112001221101");
    Q.y.setByString("0 22121101111020122212220210010210 01200220002000010011211212111210 20012221111010101211110121220001");
    int count = 5000;
    int begin = clock();
    F3_97_6 t;
    for (int i = 0; i < count; i++) {
        t = CalcEtatPairing(P, Q);
    }
    int end = clock();
    printf("%.3fmsec\n", 1000.0 * (end - begin) / CLOCKS_PER_SEC / count);
}
License
The BSD 3-Clause License
If you have any questions or problems, just let me know, then I'm happy.
Reference
Xbyak
Xbyak is an x86/x64 JIT assembler for C++. I made this library for developping pairing functions efficiently.
History
2010/Apr/26 support gcc 4.5.0
2009/Nov/4 add the link to Multi-core Implementation of the Tate Pairing over Supersingular Elliptic Curves
2008/Dec/21 add etat pairing for m = 193(553usec@Core2Duo 2.6GHz)
2008/Jun/28 6ops add(K. Aoki, Y. Kawahara, T. Takagi) for m = 97, 92usec@Core2Duo 2.6GHz
2008/Jun/26 fix pdf
2008/Jun/6 optimized(98usec@Core2Duo 2.6GHz with multi-thread, 161usec with single-thread)
2008/May/24 optimized(225usec@Core2Duo 1.8GHz with single-thread)
2008/Apr/4 optimized(238usec@Core2Duo 1.8GHz, 175usec@Core2Duo 2.6GHz)
2008/Mar/31 optimized(256usec@Core2Duo 1.8GHz, 184usec@Core2Duo 2.6GHz)
2008/Mar/27 first release(288usec@Core2Duo 1.8GHz, 209usec@Core 2 Duo 2.6GHz)
Author
MITSUNARI Shigeo
1st:2008/3/27, last update:2016/08/29

mailto:MITSUNARI Shigeo<herumi@nifty.com>