Giter Club home page Giter Club logo

openclv's People

Contributors

amcelroy avatar cyberrsr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

openclv's Issues

Blew my mind - this is awesome

OpenCLV Demo and Documents\Event Example\Register and Use Events.vi

and

Program Manipulation\Register Kernel Event.vi

must. know. secret.

unwired errors

creating new ticket to capture all unwired errors

OpenCLV Demo and Documents\Anisotropic Filter\SRAD Filter Example.vi

image

performance comparison

is the LV code optimized? is it REALLY optimized? you dont want some myopic LV jerk coming behind you and saying "i optimized your LV comparison and your 80,000x claim is only like 2000x.

that would make you look very bad.

I am not saying your LV version is or isnt optimized. only saying you might want to be damn sure that is teh best LV can do before selling your tools ability next to what you can get out of LV nativley.

image

have you used the inplace element structure? i am not an expert with that structure. personally i dont waste time optimizing code unless there is a reall business need and I just havnt hit one yet. 12GB of ram costs $90.

you should find someone who loves to optomize code and get him to eek every little biut out of that native LV code you have there.

Laplacian VIs

Non-User VIs\Functions\Laplacian*

hanging ref in delete 64/32/16

no need to branch clusters in compute 64/32/16
non need to branch the cluster, just pull from the unbundle thats already there

Crash during memory overflow

If data is accessed outside of memory on an Intel processor, this causes Labview to crash. Try / Catch doesn't handle the overflow, as the error is occurring on memory in Labview. Doesn't seem to be an issue for NVIDIA and ATI OpenCL devices.

should return bogus data on error

These two outputs are in the case structure. Better if they are outside the main case and you return completely bogus data if there is an error. That way down stream code kicks and screams and does not erroniously use the default values of tese two controls. Can go into detail over the phone. This is a code smell

image

HUGE DEAL: error handling practice

just realized that you may be exposing your developer/customers to a huge API headache.

I could be wrong but...

It seems like the error handler always pops up a prompt if the dlls throw errors. This is very bad. In production code you want to minimize the points of user interaction. If your customers (developers) cannot control when their customer (users) get popups that puts a lot of pain and burden on your customer. there are ways to get past this. lets talk on the phone.

easy/ugly: put logic in the error handler and a global variable somewhere or use an API cfg file your customers can use to set the error reporting behavior: enum {popup, log to file, send txt msg, ... whatever}

I strongly recommend your default model be log to file and pass error back out of the VI.

it is your customer's responsibility and HIS decision how he wants to handle that error event.

this could be an easy fix but I want to make sure we get this one right before shipping

convolution

see issues 28 and 29 regarding forking and refs

these are better but the BD could use some tidying up

Wrong step size in ReadMemory functions

I am getting inconsistent results and sometimes LabVIEW crashes when using the ReadMemory VIs with a user defined "Dimensions" argument.
I think the problem is in clLabviewDevice.cpp in all the various ReadMemory_xx functions.

In the call to the OpenCL function
clEnqueueReadBufferRect(d->GetQueue(), DeviceMem, true, Origin, HostOrigin, Region, HostRowPitch, HostSlicePitch, DevRowPitch, DevSlicePitch, Data, NULL, NULL, d->GetEvent());

HostRowPitch and HostSlicePitch should be switched with DevRowPitch and DevSlicePitch, respectively.

That is, the arguments given to clEnqueueReadBufferRect in the body of ReadMemory_xx should be equal (with the same order) to the ones given to clEnqueueWriteBufferRect in the WriteMemory_xx functions (which are working correctly).

See in OpenCL API:
clEnqueueWriteBufferRect
clEnqueueReadBufferRect

that both functions have exactly the same parameters.

thanks,
Enrico

Gradient VIs

grad control is dead code

also same comments as issue regarding the laplacian vis

note LV creates a copy of memory at wire branches

huge wanring text in manual neds to change to something more benign

please let me review your final copy. please do edit it yourself and ask me for 2 more review before you go life with it. strive for concise, easy to read, and "OPENCLV is amazing, no I meant really amazing" take a tip from NI and use your documentation to market for benefits to your customers

Memory Leak in FFT computation

When computing an FFT repeatedly in certain situations, memory usage shoots up at a very fast rate until an FFT_FAILED message pops up. This only happens to me with 2D Complex_to_Complex or 2D Hermitian_to_Real (size is single prec 100 by 81 by 90 by the way). Exact same LabView code but with 3D instead of 2D produces no memory usage increase.

Looking in "clAmdFft.cpp" under "ComputeFFT()":
The issue appears to be with the temporary buffer used in the enqueueTransform function. The buffer is allocated every time the FFT is computed, but it is never deallocated.

Simplest solution is just to never allocate it and let the enqueueTransform allocate its own memory by passing a NULL instead of an allocated buffer. Otherwise it should be allocated only once during FFT plan creation, and it should be deallocated when destroying the plan.

warnings lost in Get Preferred Vector Size.vi

broken error wire in Get Preferred Vector Size.vi will result in lost warnings

not worth fixing now but worth refactoring in next rev. put in error input terminal on the Generate Error.vi and always wire into him. This preserves any warnings on the error line and you can even all logic to the error generator to always give precedence to the incoming error.

again not worth fixing now. I do see that you tend to call the error logic inside an error case structure so your code is safe and you only risk losing warnings not incoming errors (in most cases.)

image

Great use of icons.

Very professional API. Good icons are THE MOST important documentation you can give an API in LV and you have done a great job.

Non-User VIs\Edit Program.vi

a few things:

use a shifter to hold the Device Out and the Program Handel and just make sure there is valid data there at all times. i see the "use default if unwired" and it makes me nervious

UINT overflow potential

Not sure what the intent is. You know better than me. However I see potential for overflow issues in "Program Manipulation\Global Thread and Offset Quick.vi"

image

BDs too big, errors not wired

OpenCLV_x64_1.0\Device Manipulation\Create Device GUI.vi

The BD is very big. Strive to fit it on one page - this is a hard and fast rule if your code is visible to customers. I can deal with it. But for every VI you touch/commit to SVN going forward please refactor the BD to fit on a page. Goal is for reader (includes you) to be able to see at a glance with code is doing with out scrolling.

Also I see some error wires that do not go through. If this is intended I recommend explicitly calling this guy.
image

It tells everybody what your intent is. And it makes LV happy with dependencies, etc.

You can use VI analyzer toi find all instances of unwired error wires. takes some tweaking on the vi analyzer cfg but you can get it to tell you.

Unwired errors are a code smell. A few of them and you wont kill anyone. Lots and lots of them and bugs are inevitable.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.