05 December 2014

Corona’s iOS 64-bit Transition Plan

Corona is a fast cross-platform SDK:
Corona Blog: Corona’s iOS 64-bit Transition Plan


27 November 2014

DragonFly BSD 4.0 - released (now 64-bit only)

DragonFly BSD 4.0 has been released and goes 64-bit only.

DragonFly BSD 4.0

Isn't it time that all OSs ditch 32-bit? :-)

02 September 2014

MIPS Strikes Back: 64-bit Warrior I6400 Arrives

MIPS Strikes Back: 64-bit Warrior I6400 Arrives

http://www.anandtech.com/show/8457/mips-strikes-back-64bit-warrior-i6400-architecture-arrives

12 August 2014

A couple of ARM 64-bit links

AMD Details “Seattle” ARM Server Chip

http://www.enterprisetech.com/2014/08/11/amd-details-seattle-arm-server-chip/


Tegra K1 “Denver” Will Be First 64-bit ARM Processor for Android

http://blogs.nvidia.com/blog/2014/08/11/tegra-k1-denver-64-bit-for-android/

13 May 2014

Testing Chromium: ThreadSanitizer v2, a next-gen data race detector

ThreadSanitizer and AddressSanitizer are very interesting new tools for helping with locationing and squashing many classes of bugs. They are first class tools and are very fast.

Testing Chromium: ThreadSanitizer v2, a next-gen data race detector


See also:
Valgrind
GCC 4.8.x changes

26 March 2014

Solaris Studio 12.4 beta - refreshed

Really interesting update to the Solaris Studio compiler suite.
It looks like it might have lots of new C++11 support & upgrades to the performance analyser, code analyser and OpenMP 4.0 support, and updated debugger and IDE.

What's New in the Oracle Solaris Studio 12.4 Beta

Update:

A refreshed beta was released, update 14th July release.

http://www.oracle.com/technetwork/server-storage/solarisstudio/overview/index.html


20 February 2014

Using Linux perf for great CPU stats and seeing system performance


The perf command is a really good low-level Linux profiling tool.

You can use it to profile your programs ...


$ perf stat conv

 Performance counter stats for 'conv':

         18.600269 task-clock                #    0.970 CPUs utilized          
                13 context-switches          #    0.001 M/sec                  
                 8 CPU-migrations            #    0.000 M/sec                  
              1621 page-faults               #    0.087 M/sec                  
          34604515 cycles                    #    1.860 GHz                     [35.87%]
           3070113 stalled-cycles-frontend   #    8.87% frontend cycles idle    [28.97%]
           2557127 stalled-cycles-backend    #    7.39% backend  cycles idle   
          10234506 instructions              #    0.30  insns per cycle        
                                             #    0.30  stalled cycles per insn [96.18%]
           3765521 branches                  #  202.444 M/sec                   [75.68%]
            159957 branch-misses             #    4.25% of all branches         [54.80%]

       0.019182090 seconds time elapsed


But you can use it to profile the running system and then for example query who caused certain kernel lock events with the interaction "perf top" tool....




https://perf.wiki.kernel.org/index.php/Main_Page

https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Developer_Guide/perf-using.html


31 January 2014

AMD unveils 64-bit ARM-based Opteron A1100 processors

There are quite a few stories about how AMD have released a very interesting 64-bit ARM-based Opteron CPU.  Is this a good step towards 64-bit ARM processors becoming common place in data centres?

Hexus: AMD unveils 64-bit ARM-based Opteron A1100 processors

The Register: AMD tries to kickstart ARM-for-servers ecosystem

15 January 2014

How the HP-UX C/C++ compiler can help with 64-bit porting

I'm going to write up some notes about various modern UNIX compilers, first up is the HP-UX compiler.

The HP-UX C/C++ compiler  is currently at version A.06.27, last updated in 2012. Since the creation of version 6, it seems to only have had a few tweaks made to it. For example, it lacks many new C++ features.

Nevertheless, it has some useful warning options that can help with migrating code to 64-bit goodness.


Compiler versions


$ cc -V
cc: HP C/aC++ B3910B A.06.27 [May 22 2012]
$ aCC -V
aCC: HP C/aC++ B3910B A.06.27 [May 22 2012]


A very simple example:

#include stdio.h
#include stdlib.h
#include string.h

int main(int argc, char *argv[])
{
    int len;
    char str[] = "Hello world, is this string okay?";

    len = strlen(str);

    printf("strlen is %d\n", strlen(str));

    return 0;
}

Interesting options that could help us


+w64bit      - Enables warnings that help detection of potential problems in converting 32-bit applications to 64-bit
+wlint       - Enables several warnings in the compiler that provide lint like functionality
+wperfadvice - Enables performance advisory messages.
+wsecurity   - Enables compile-time diagnostics for potential security violations

+w           - Warns about all questionable constructs

Some of these options are lint-like, some are useful performance tips, others help with code porting issues.

A normal compile gives no warning in the above example, but if we add these warning flags we get extra output:



$ cc strlen_example.c -o strlen_example +w64bit

"strlen_example.c", line 11: warning #4229-D: 64 bit migration: conversion

         from "size_t" to "int" may truncate value

       len = strlen(str);

           ^



more:


$ cc strlen_example.c -o strlen_example +w        

"strlen_example.c", line 11: remark #4229-D: 64 bit migration: conversion from

         "size_t" to "int" may truncate value

       len = strlen(str);

           ^


"strlen_example.c", line 13: remark #2181-D: argument is incompatible with

         corresponding format string conversion
       printf("strlen is %d\n", strlen(str));
                                ^

"strlen_example.c", line 8: remark #2550-D: variable "len" was set but never
         used
       int len;
           ^

Larger example output from some code that deals with large files:




"MyLargeFile.c", line 231: warning #4298-D: addition result could be truncated before cast to bigger sized type

"MyLargeFile.c", line 321: warning #4229-D: 64 bit migration: conversion from "size_t" to "int" may truncate value

"MyLargeFile.c", line 723: warning #4298-D: multiply result could be truncated before cast to bigger sized type

"MyLargeFile.c", line 3263: warning #4229-D: 64 bit migration: conversion from "unsigned long" to "unsigned int" may truncate value

"MyLargeFile.c", line 2423: warning #4229-D: 64 bit migration: conversion from "size_t" to "int" may truncate value

"MyLargeFile.c", line 3478: warning #4229-D: 64 bit migration: conversion from "unsigned long" to "int" may truncate value
"MyLargeFile.c", line 5134: warning #4229-D: 64 bit migration: conversion from "long" to "int" may truncate value
"MyLargeFile.c", line 5692: warning #4231-D: 64 bit migration: conversion between types of different sizes has occurred (from "int" to "void *" )


As you can see, the compiler can spot quite a few issues with this code that you might want to consider carefully when making a real 64-bit pure aware application.


External links:

HP aC++/HP C Online Programmer's Guide

Command-Line Options