GPU系统公司发布了Libra SDK,这是新的用于HPC/超算的技术和计算平台。Libra SDK是个高度整合的运行时刻,包括密集型加速软件计算要用的API、示范程序和文档。Libra  API在软件开发过程中能够便利地进行通用CPU/GPU计算,而不需要生成多个单独且优化的代码路径以支持X86、OpenCL、OpenGL或CUDA设备。 

Libra 的主要特性包括:

• 使用一个单一的标准编程API来访问计算资源,以获得CPU和GPU或者未来的计算加速器的万亿次浮点运算性能。

•Libra API可以通过高水平的编程语言,C/ C+ +和MATLAB 实现高性能计算

•只要开发一次代码,就可以在各种不同的 GPU/CPU 芯片上使用

•开发人员无需学习新的开发工具或编程语言,与硬件关联性高的低阶API比较起来, 可以很轻易开应用软件。Libra API 能用更少的代码,更轻易得到速度提升

举例:编写 "Hello World" Libra C++ 应用程序:

#include <stdio.h>
#include <iostream>
#include <math.h> // Standard math on x86/x64
#include <Libra.h> // Standard math on CUDA, OpenCL, OpenGL, x86/x64(multicore)
int main(int argc, char** argv)
{
    // Declare some local variables.
    const int N = 1024;
    double startTime, time, gflops;

    // Declare some more local variables
    // A gVar represents a vector, matrix or scalar
    // with elements of float, double, int or bool
    gVar A, B, C;

    //First we initialize Libra by calling libra_Init().
    if (libra_Init(argc, argv) != 0)
        return 1;
   
    // Then we set some initial compute states -
    // Set compute backend to CUDA_, OPENCL_, OPENGL_ or CPU_BACKEND.
    libra_SetCurrentBackend(CUDA_BACKEND);

    // Set current compute precision to 32bit float
    libra_SetDefaultDataType(GFLOAT32);

    // Create two N by N matrices and initialize all elements to 1.
    A = ones(N, N);
    B = A;

    // We then perform dense matrix multiplication (SGEMM) and time it.
    // For a DGEMM version, set compute precision to GFLOAT64.

    // initial driver warmups
    C = A * B * 1.23f + 3.15f;
    C = A * B * 1.23f + 3.15f;

    // Start timing
    startTime = libra_GetTime();

    // Perform matrix multiplication, then multiply and bias all elements.
    C = A * B * 1.23f + 3.15f;

    time = libra_GetTime() - startTime;
    printf("Total time : %g%s", time*1000, " milliseconds\n");

    // Compute a performance measurement. Gigaflop / s.
    flopCount = (2*N-1)*N*(long long)N;
    gflops = flopCount / time / 1e9;
    printf("%g%s", gflops, " GFlop/s.\n");

    //After printing measurements our program ends and calls libra_Shutdown()
    //to cleanup system resources.
    libra_Shutdown();

    return 0;
}

 


GPU系统公司是一个软件技术公司,专注开发下一代计算技术使用当前和未来的硬件架构API欲了解更多信息,请访问http://www.gpusystems.com