LLVM and TLS

Jonathan Marler via digitalmars-d-ldc digitalmars-d-ldc at puremagic.com
Tue Feb 17 17:41:56 PST 2015


I've created a simple program to demonstrate the issue.  The 
performance cost of TLS vs __gshared is over one and a half 
orders of magnitude!

import std.stdio;
import std.datetime;

size_t tlsGlobal;
__gshared size_t sharedGlobal;

void main(string[] args)
{
   runTest(3, 10_000_000);
}

void runTest(size_t runCount, size_t loopCount)
{
   writeln("--------------------------------------------------");
   StopWatch sw;
   for(auto runIndex = 0; runIndex < runCount; runIndex++) {

     writefln("run %s (loopcount %s)", runIndex + 1, loopCount);

     sw.reset();
     sw.start();
     for(size_t i = 0; i < loopCount; i++) {
       tlsGlobal = i;
     }
     sw.stop();
     writefln("  TLS   : %s milliseconds", sw.peek.msecs);

     sw.reset();
     sw.start();
     for(size_t i = 0; i < loopCount; i++) {
       sharedGlobal = i;
     }
     sw.stop();
     writefln("  Shared: %s milliseconds", sw.peek.msecs);
   }
}

--------------------------------------------------
Output:
--------------------------------------------------
run 1 (loopcount 10000000)
   TLS   : 104 milliseconds
   Shared: 3 milliseconds
run 2 (loopcount 10000000)
   TLS   : 97 milliseconds
   Shared: 4 milliseconds
run 3 (loopcount 10000000)
   TLS   : 99 milliseconds
   Shared: 3 milliseconds


More information about the digitalmars-d-ldc mailing list