Showing posts with label GPU. Show all posts
Showing posts with label GPU. Show all posts

Monday, March 8, 2010

Command line options of clc.exe (ATI Stream SDK)

Save the following in a shell script

f=$TMP/ccc.txt
clf=$TMP/q2.cl

cat >$clf << EOF
__kernel void helloWorld() {
size_t i = get_global_id(0);
}

EOF


>$f
(for i in a b c d e f g h i j k l m n o p q r s t u v w z y z;do ./clc --$i $clf;done) >>$f 2>&1

grep "\-\-" $f |grep -vE "^Warning:|\""

So by running above script, here are the all possible command line options for clc.exe(ATI Stream OpenCL SDK 2.01)


--anachronisms
--auto_instantiation
--alternative_tokens
--array_new_and_delete
--arg_dep_lookup
--addrspace_cast
--brief_diagnostics
--building_runtime
--bool
--base_assign_op_is_default
--dependencies
--definition_list_file
--dollar
--define_macro
--db_ocl
--db_name
--diag_suppress
--diag_remark
--diag_warning
--diag_error
--diag_once
--display_error_number
--distinct_template_signatures
--designators
--dep_name
--defer_parse_function_templates
--default_calling_convention
--dump_configuration
--debuginfo
--exported_template_file
--exceptions
--error_limit
--error_output
--explicit
--extern_inline
--embedded_c++
--enum_overloading
--early_tiebreaker
--extended_designators
--extended_variadic_macros
--export
--edg_base_dir
--embedded_c
--emit
--force_vtbl
--far_data_pointers
--far_code_pointers
--for_init_diff_warning
--friend_injection
--guiding_decls
--gcc
--g++
--gnu_version
--instantiate
--ii_file
--implicit_include
--include_directory
--inlining
--implicit_typename
--implicit_extern_c_type_conversion
--import_dir
--incl_suffixes
--ignore_std
--list
--long_lifetime_temps
--long_preserving_rules
--late_tiebreaker
--long_long
--list_macros
--llvm_builtin
--module_init
--msvc_target_version
--microsoft
--microsoft_version
--microsoft_bugs
--microsoft_16
--multibyte_chars
--mmmx
--msse
--msse2
--msse3
--mssse3
--msse4.1
--msse4.2
--msse5
--march
--no_line_commands
--no_anachronisms
--no_code_gen
--no_auto_instantiation
--no_implicit_include
--no_warnings
--no_exceptions
--no_use_before_set_warnings
--no_display_error_number
--no_pch_messages
--no_pch_verbose
--no_restrict
--no_microsoft
--no_microsoft_bugs
--near_data_pointers
--near_code_pointers
--no_wchar_t_keyword
--no_alternative_tokens
--no_inlining
--no_svr4
--no_brief_diagnostics
--nonconst_ref_anachronism
--no_nonconst_ref_anachronism
--no_preproc_only
--no_rtti
--no_bool
--no_array_new_and_delete
--no_explicit
--namespaces
--no_namespaces
--no_using_std
--no_remove_unneeded_entities
--no_typename
--no_implicit_typename
--no_special_subscript_cost
--new_for_init
--no_for_init_diff_warning
--no_distinct_template_signatures
--no_guiding_decls
--no_old_specializations
--no_wrap_diagnostics
--no_implicit_extern_c_type_conversion
--no_long_preserving_rules
--no_extern_inline
--no_multibyte_chars
--no_vla
--no_enum_overloading
--nonstd_qualifier_deduction
--no_nonstd_qualifier_deduction
--no_const_string_literals
--no_class_name_injection
--no_arg_dep_lookup
--no_friend_injection
--nonstd_using_decl
--no_nonstd_using_decl
--no_designators
--no_extended_designators
--no_variadic_macros
--no_extended_variadic_macros
--no_compound_literals
--no_base_assign_op_is_default
--no_dep_name
--no_parse_templates
--no_c99
--no_export
--no_stdarg_builtin
--no_gcc
--no_g++
--named_address_spaces
--no_named_address_spaces
--no_embedded_c
--no_trigraphs
--nonstd_default_arg_deduction
--no_nonstd_default_arg_deduction
--no_stdc_zero_in_system_headers
--no_template_typedefs_in_diagnostics
--no_defer_parse_function_templates
--no_uliterals
--no_type_traits_helpers
--no_c++0x
--no_check_concatenations
--noopencl
--old_line_commands
--old_c
--output
--old_style_preprocessing
--old_for_init
--old_specializations
--preprocess
--pch
--pch_messages
--pch_verbose
--pch_dir
--pack_alignment
--preinclude
--preinclude_macros
--pending_instantiations
--parse_templates
--remarks
--restrict
--rtti
--remove_unneeded_entities
--report_gnu_extensions
--strict
--strict_warnings
--signed_chars
--suppress_instantiation_flags
--suppress_vtbl
--short_lifetime_temps
--svr4
--special_subscript_cost
--sys_include
--short_enums
--set_flag
--stdc_zero_in_system_headers
--signed_bit_fields
--single_precision_constant
--trace_includes
--template_info_file
--template_directory
--timing
--typename
--trigraphs
--template_typedefs_in_diagnostics
--type_traits_helpers
--unsigned_chars
--undefine_macro
--use_pch
--using_std
--uliterals
--unsigned_bit_fields
--unicode_source_kind
--version
--vla
--variadic_macros
--varsubscript
--wchar_t_keyword
--wrap_diagnostics
--werror

Monday, December 28, 2009

My First GPU HelloWorld Program

Finally I got my OpenCL based java programs run on my AMD Phenom-II 965 BE with Radeon HD 5750.



package com.nativelibs4java.opencl.demos;

import static com.nativelibs4java.opencl.JavaCL.createBestContext;
import static com.nativelibs4java.util.NIOUtils.directFloats;

import java.io.IOException;
import java.nio.FloatBuffer;
import java.util.Random;

import com.nativelibs4java.opencl.CLBuildException;
import com.nativelibs4java.opencl.CLContext;
import com.nativelibs4java.opencl.CLEvent;
import com.nativelibs4java.opencl.CLFloatBuffer;
import com.nativelibs4java.opencl.CLKernel;
import com.nativelibs4java.opencl.CLMem;
import com.nativelibs4java.opencl.CLProgram;
import com.nativelibs4java.opencl.CLQueue;
import com.nativelibs4java.opencl.demos.SetupUtils;
import com.nativelibs4java.util.NIOUtils;

/* Derived from
* http://bbboblog.blogspot.com/2009/10/gpgpu-mandelbrot-with-opencl-and-java.html
* http://developer.apple.com/mac/library/samplecode/OpenCL_Hello_World_Example/index.html
*/
public class HelloWorld {
private static final String src = "__kernel void square( \n"
+ " __global float* input, \n"
+ " __global float* output, \n"
+ " const unsigned int count) \n"
+ "{ \n"
+ " int i = get_global_id(0); \n"
+ " if(i < count) \n"
+ " output[i] = input[i] * input[i]; \n"
+ "} \n"
+ "\n";
private static final int DATA_SIZE_ = 32;
private static final int DATA_SIZE = DATA_SIZE_ * DATA_SIZE_;

private static int correct; // number of correct results returned

private static FloatBuffer results_ = NIOUtils.directFloats(DATA_SIZE);
private static FloatBuffer data_ = NIOUtils.directFloats(DATA_SIZE);
private static FloatBuffer output = directFloats(DATA_SIZE);

public static void main(String[] args) {
try {
SetupUtils.failWithDownloadProposalsIfOpenCLNotAvailable();

Random ran = new Random();
for (int i = 0; i < DATA_SIZE; i++)
data_.put(i, ran.nextFloat());

long time = buildAndExecuteKernel(data_, results_, DATA_SIZE, src);
correct = 0;
for (int i = 0; i < DATA_SIZE; i++) {
float v = data_.get(i);
float r = output.get(i);
if (r == v * v) {
correct++;
} else {
System.err.println("ERROR: got:" + r + ", Required-Ans:"+ v);
}
}
System.out.println(DATA_SIZE + " entries are computed in "+ ((time / 1000)) + " microseconds, correct entries:" + correct);
} catch (Exception e) {
System.err.println(e);
e.printStackTrace();
}
}

private static long buildAndExecuteKernel(FloatBuffer data, FloatBuffer results, int dataSize, String src)
throws CLBuildException, IOException {
// Create a context and program using the devices discovered.
CLContext context = createBestContext();
CLQueue queue = context.createDefaultQueue();

long startTime = System.nanoTime();

CLProgram program = context.createProgram(src).build();

CLKernel kernel = program.createKernel("square");
CLFloatBuffer in1 = context.createFloatBuffer(CLMem.Usage.Input, data,false);
CLFloatBuffer out1 = context.createFloatBuffer(CLMem.Usage.Output,results, false);
kernel.setArgs(in1, out1, dataSize);

CLEvent kernelCompletion = kernel.enqueueNDRange(queue,
new int[] { DATA_SIZE }, new int[] { 1 });// null);
kernelCompletion.waitFor();
queue.finish();

// Copy the OpenCL-hosted array back to RAM
out1.read(queue, output, true);

long time = System.nanoTime() - startTime;
return time;
}
}