From 7e756cea5f94d0e775bb7b6476b100a03e24ae70 Mon Sep 17 00:00:00 2001 From: cxl Date: Mon, 31 Jan 2011 11:07:14 +0000 Subject: [PATCH] .uppdev git-svn-id: svn://ultimatepp.org/upp/trunk@3132 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppdev/ArrayCtrlCtrls/main.cpp | 2 +- uppdev/OpenCL/OpenCL.upp | 11 +++++ uppdev/OpenCL/example1_kernels.cl | 8 +++ uppdev/OpenCL/init | 4 ++ uppdev/OpenCL/main.cpp | 82 +++++++++++++++++++++++++++++++ uppdev/Urgent/Urgent.upp | 9 ++++ uppdev/Urgent/main.cpp | 14 ++++++ 7 files changed, 129 insertions(+), 1 deletion(-) create mode 100644 uppdev/OpenCL/OpenCL.upp create mode 100644 uppdev/OpenCL/example1_kernels.cl create mode 100644 uppdev/OpenCL/init create mode 100644 uppdev/OpenCL/main.cpp create mode 100644 uppdev/Urgent/Urgent.upp create mode 100644 uppdev/Urgent/main.cpp diff --git a/uppdev/ArrayCtrlCtrls/main.cpp b/uppdev/ArrayCtrlCtrls/main.cpp index 5bb86a48a..782597d83 100644 --- a/uppdev/ArrayCtrlCtrls/main.cpp +++ b/uppdev/ArrayCtrlCtrls/main.cpp @@ -16,7 +16,7 @@ GUI_APP_MAIN a.Appending().Removing(); a.AddColumn("Text").Ctrls(WidgetFactory); a.AddColumn("Text"); - for(int i = 0; i < 30; i++) + for(int i = 0; i < 10000; i++) a.Add(AsString(i)); // for(int i = 0; i < 300; i += 3) // a.GetCtrl(i, 0)->Disable(); diff --git a/uppdev/OpenCL/OpenCL.upp b/uppdev/OpenCL/OpenCL.upp new file mode 100644 index 000000000..a25ab860c --- /dev/null +++ b/uppdev/OpenCL/OpenCL.upp @@ -0,0 +1,11 @@ +uses + Core; + +library(MSC9) C:\CL\NVIDIA_GPU_Computing_SDK\OpenCL\common\lib\Win32\OpenCL.lib; + +options(MSC9) "/I C:\\CL\\NVIDIA_GPU_Computing_SDK\\OpenCL\\common\\inc\\"; + +file + main.cpp, + example1_kernels.cl; + diff --git a/uppdev/OpenCL/example1_kernels.cl b/uppdev/OpenCL/example1_kernels.cl new file mode 100644 index 000000000..fd096d582 --- /dev/null +++ b/uppdev/OpenCL/example1_kernels.cl @@ -0,0 +1,8 @@ +#pragma OPENCL EXTENSION cl_khr_byte_addressable_store : enable + +__constant char hw[] = "Hello World\n"; +__kernel void hello(__global char * out) +{ + size_t tid = get_global_id(0); + out[tid] = hw[tid]; +} \ No newline at end of file diff --git a/uppdev/OpenCL/init b/uppdev/OpenCL/init new file mode 100644 index 000000000..7179de644 --- /dev/null +++ b/uppdev/OpenCL/init @@ -0,0 +1,4 @@ +#ifndef _OpenCL_icpp_init_stub +#define _OpenCL_icpp_init_stub +#include "Core/init" +#endif diff --git a/uppdev/OpenCL/main.cpp b/uppdev/OpenCL/main.cpp new file mode 100644 index 000000000..b7459be48 --- /dev/null +++ b/uppdev/OpenCL/main.cpp @@ -0,0 +1,82 @@ +#include +#define __NO_STD_VECTOR // Use cl::vector instead of STL version +#include + +#include +#include +#include +#include +#include +#include + +const std::string hw("Hello World\n"); + +inline void checkErr(cl_int err, const char * name){ + if (err != CL_SUCCESS) { + std::cerr << "ERROR: " << name<< " (" << err << ")" << std::endl; + exit(EXIT_FAILURE); + } +} + +int main(void) +{ + cl_int err; + cl::vector< cl::Platform > platformList; + cl::Platform::get(&platformList); + checkErr(platformList.size()!=0 ? CL_SUCCESS : -1, "cl::Platform::get"); + std::cerr << "Platform number is: " << platformList.size() << std::endl; + + std::string platformVendor; + platformList[0].getInfo((cl_platform_info)CL_PLATFORM_VENDOR, &platformVendor); + std::cerr << "Platform is by: " << platformVendor << "\n"; + cl_context_properties cprops[3] = + {CL_CONTEXT_PLATFORM, (cl_context_properties)(platformList[0])(), 0}; + + cl::Context context( + CL_DEVICE_TYPE_GPU, + cprops, + NULL, + NULL, + &err); + checkErr(err, "Conext::Context()"); + + char * outH = new char[hw.length()+1]; + cl::Buffer outCL( + context, + CL_MEM_WRITE_ONLY | CL_MEM_USE_HOST_PTR, + hw.length()+1, + outH, + &err); + checkErr(err, "Buffer::Buffer()"); + + cl::vector devices; + devices = context.getInfo(); + checkErr( devices.size() > 0 ? CL_SUCCESS : -1, "devices.size() > 0"); + + std::ifstream file("C:/MyApps/OpenCL/example1_kernels.cl"); + checkErr(file.is_open() ? CL_SUCCESS:-1, "example1_kernel.cl"); + std::string prog(std::istreambuf_iterator(file),(std::istreambuf_iterator())); + cl::Program::Sources source(1,std::make_pair(prog.c_str(), prog.length()+1)); + cl::Program program(context, source); + err = program.build(devices,""); + checkErr(file.is_open() ? CL_SUCCESS : -1, "Program::build()"); + + cl::Kernel kernel(program, "hello", &err); + checkErr(err, "Kernel::Kernel()"); + err = kernel.setArg(0, outCL); + checkErr(err, "Kernel::setArg()"); + + cl::CommandQueue queue(context, devices[0], 0, &err); + checkErr(err, "CommandQueue::CommandQueue()"); + cl::Event event; + err = queue.enqueueNDRangeKernel(kernel,cl::NullRange,cl::NDRange(hw.length()+1),cl::NDRange(1, 1),NULL,&event); + checkErr(err, "ComamndQueue::enqueueNDRangeKernel()"); + event.wait(); + err = queue.enqueueReadBuffer(outCL,CL_TRUE,0,hw.length()+1,outH); + checkErr(err, "ComamndQueue::enqueueReadBuffer()"); + std::cout << outH; + + delete [] outH; + return EXIT_SUCCESS; +} + \ No newline at end of file diff --git a/uppdev/Urgent/Urgent.upp b/uppdev/Urgent/Urgent.upp new file mode 100644 index 000000000..5872304d3 --- /dev/null +++ b/uppdev/Urgent/Urgent.upp @@ -0,0 +1,9 @@ +uses + CtrlLib; + +file + main.cpp; + +mainconfig + "" = "GUI"; + diff --git a/uppdev/Urgent/main.cpp b/uppdev/Urgent/main.cpp new file mode 100644 index 000000000..c8ba65c81 --- /dev/null +++ b/uppdev/Urgent/main.cpp @@ -0,0 +1,14 @@ +#include + +using namespace Upp; + +GUI_APP_MAIN +{ + TopWindow win, win2; + win.Title("xxx"); + win.Open(); + win2.OpenMain(); + win2.Run(); + win.Urgent(); + win2.Run(); +}