All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.jogamp.opencl.JoclVersion Maven / Gradle / Ivy

The newest version!
/**
 * Copyright 2014 JogAmp Community. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 *    1. Redistributions of source code must retain the above copyright notice, this list of
 *       conditions and the following disclaimer.
 *
 *    2. Redistributions in binary form must reproduce the above copyright notice, this list
 *       of conditions and the following disclaimer in the documentation and/or other materials
 *       provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * The views and conclusions contained in the software and documentation are those of the
 * authors and should not be interpreted as representing official policies, either expressed
 * or implied, of JogAmp Community.
 */

package com.jogamp.opencl;

import static com.jogamp.common.util.VersionUtil.getPlatformInfo;

import com.jogamp.common.GlueGenVersion;
import com.jogamp.common.os.Platform;
import com.jogamp.common.util.VersionUtil;
import com.jogamp.common.util.JogampVersion;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.jar.Manifest;

public class JoclVersion extends JogampVersion {

    protected static volatile JoclVersion jogampCommonVersionInfo;

    protected JoclVersion(final String packageName, final Manifest mf) {
        super(packageName, mf);
    }

    public static JoclVersion getInstance() {
        if(null == jogampCommonVersionInfo) { // volatile: ok
            synchronized(JoclVersion.class) {
                if( null == jogampCommonVersionInfo ) {
                    final String packageName = "com.jogamp.opencl";
                    final Manifest mf = VersionUtil.getManifest(JoclVersion.class.getClassLoader(), packageName);
                    jogampCommonVersionInfo = new JoclVersion(packageName, mf);
                }
            }
        }
        return jogampCommonVersionInfo;
    }

    public StringBuilder getAllVersions(StringBuilder sb) {
        if(null==sb) {
            sb = new StringBuilder();
        }

        try{
            getPlatformInfo(sb);
            sb.append(Platform.getNewline());
            GlueGenVersion.getInstance().toString(sb);
            sb.append(Platform.getNewline());
            toString(sb);
            sb.append(Platform.getNewline());
        } catch (final Exception e) {
            sb.append(e.getMessage());
            e.printStackTrace();
        }

        return sb;
    }

    private volatile int maxKeyStrlen = -1;

    public StringBuilder getOpenCLTextInfo(StringBuilder sb) {
        if(null==sb) {
            sb = new StringBuilder();
        }

        final CLPlatform[] platforms;
        try {
            platforms = CLPlatform.listCLPlatforms();
        } catch (final Throwable t) {
            final Throwable cause;
            {
                Throwable pre = null;
                Throwable next = t;
                while( null != next ) {
                    pre = next;
                    next = next.getCause();
                }
                cause = pre;
            }
            System.err.println("CLPlatform.listCLPlatforms() failed, exception: "+cause.getMessage());
            t.printStackTrace();
            sb.append("CLPlatform.listCLPlatforms() failed, exception: "+cause.getMessage());
            final StringWriter stackTrace = new StringWriter();
            cause.printStackTrace(new PrintWriter(stackTrace));
            sb.append(stackTrace.toString());
            return sb;
        }

        // platforms
        final List> platProps = new ArrayList>();
        if( 0 > maxKeyStrlen ) {
            synchronized(this) {
                if( 0 > maxKeyStrlen ) {
                    for (final CLPlatform p : platforms) {
                        platProps.add(p.getProperties());
                        final CLDevice[] devices = p.listCLDevices();
                        for (final CLDevice d : devices) {
                            final Map props = d.getProperties();
                            final Set> entries =  props.entrySet();
                            for(final Map.Entry e : entries) {
                                maxKeyStrlen = Math.max(maxKeyStrlen, e.getKey().length());
                            }
                        }
                    }
                }
            }
        }
        sb.append(String.format("PP:DD:EE  -  Platform (PP), Device (DD), Entry (EE)%n"));
        int pI = 0;
        for (final CLPlatform p : platforms) {
            pI++;
            platProps.add(p.getProperties());
            final CLDevice[] devices = p.listCLDevices();
            int dI = 0;
            for (final CLDevice d : devices) {
                dI++;
                final Map props = d.getProperties();
                final Set> entries =  props.entrySet();
                int eI = 0;
                for(final Map.Entry e : entries) {
                    eI++;
                    sb.append(String.format("%02d:%02d:%02d %"+maxKeyStrlen+"s: %s%n", pI, dI, eI, e.getKey(), e.getValue()));
                }
            }
        }
        return sb;
    }

    public StringBuilder getOpenCLHtmlInfo(StringBuilder sb) {
        if(null==sb) {
            sb = new StringBuilder();
        }

        final CLPlatform[] platforms;
        try {
            platforms = CLPlatform.listCLPlatforms();
        } catch (final Throwable t) {
            final Throwable cause;
            {
                Throwable pre = null;
                Throwable next = t;
                while( null != next ) {
                    pre = next;
                    next = next.getCause();
                }
                cause = pre;
            }
            System.err.println("CLPlatform.listCLPlatforms() failed, exception: "+cause.getMessage());
            t.printStackTrace();
            sb.append("
CLPlatform.listCLPlatforms() failed, exception: "+cause.getMessage());
            final StringWriter stackTrace = new StringWriter();
            cause.printStackTrace(new PrintWriter(stackTrace));
            sb.append(stackTrace.toString()).append("
"); return sb; } sb.append(""); // platforms final List> platProps = new ArrayList>(); final List spans = new ArrayList(); for (final CLPlatform p : platforms) { platProps.add(p.getProperties()); spans.add(p.listCLDevices().length); } fillHtmlTable(platProps, spans, sb); // devices final ArrayList> devProps = new ArrayList>(); for (final CLPlatform p : platforms) { final CLDevice[] devices = p.listCLDevices(); for (final CLDevice d : devices) { devProps.add(d.getProperties()); } } fillHtmlTable(devProps, sb); sb.append("
"); return sb; } private static void fillHtmlTable(final List> properties, final StringBuilder sb) { final ArrayList spans = new ArrayList(properties.size()); for (int i = 0; i < properties.size(); i++) { spans.add(1); } fillHtmlTable(properties, spans, sb); } private static void fillHtmlTable(final List> properties, final List spans, final StringBuilder sb) { boolean header = true; for (final String key : properties.get(0).keySet()) { sb.append(""); htmlCell(sb, key); int i = 0; for (final Map map : properties) { htmlCell(sb, spans.get(i), map.get(key), header); i++; } sb.append(""); header = false; } } private static void htmlCell(final StringBuilder sb, final String value) { sb.append("").append(value).append(""); } private static void htmlCell(final StringBuilder sb, final int span, final String value, final boolean header) { if(header) { sb.append("").append(value).append(""); }else{ sb.append("").append(value).append(""); } } public static void main(final String args[]) { System.err.println(VersionUtil.getPlatformInfo()); System.err.println(GlueGenVersion.getInstance()); // System.err.println(NativeWindowVersion.getInstance()); final JoclVersion v = JoclVersion.getInstance(); System.err.println(v.toString()); if( CLPlatform.isAvailable() ) { System.err.println(v.getOpenCLTextInfo(null).toString()); // System.err.println(v.getOpenCLHtmlInfo(null).toString()); } else { System.err.println("JOCL/OpenCL not available"); } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy