Psi Lambda LLC ψ(λκ) Kappa Library User Guide

Kappa Process Language Extension

The Kappa library is meant to be extended to meet the needs of the organizations and subject areas utilizing it. The primary goal of Kappa is to allow for the creation of sophisticated, powerful, and complex processing that retain simple and easy-to-use interfaces.

The Kappa Process language statements and instructions can have new Keyword commands defined and can aggregate increasingly complex processing using C and CUDA kernels into subroutines and functions that are loadable and callable as libraries.

Rather than have inputs and outputs to the the Kappa processing only available at the start and end as is traditional with functions and libraries, Kappa uses the callback mechanism using IOCallback functions and developer defined keywords to allow input and output to be called throughout processing. This makes it so that it can dynamically effect the sizing, scheduling, and behavior of the processing. This is especially important with modern parallel processing such as CUDA and OpenMP where the “start” and “end” of certain processing might only be deterministic by severely limiting the power of the processing.

kappa::Command::Keyword

A new keyword command can be added to Kappa by sub-classing the kappa::command::Keyword class. The kappa::command::Keyword class is in turn a sub-class of the kappa::Command class. The kappa::command::Keyword class and the kappa::Command class are setup to not allow copy or assignment.

In the shared library implementing the new keyword, there must be a factory function that instantiates the new kappa::command::Keyword sub-class and returns a pointer to it cast to a (void *) pointer. This factory function must be declared as 'extern “C”'.

A Kappa Process uses the program thread it is invoked on to parse, prepare for execution, and determine dependencies. It creates a separate, background process thread for scheduling and execution. This background process thread is the thread associated to a CUDA context—not the original program thread.

When creating a new keyword as a sub-class of kappa::command::Keyword, new implementations of the Prepare and Execute methods must be defined. These two methods reflect the dual execution nature of the Kappa library. The Prepare methods is called and executed on the program thread while the Execute method is called and executed on the background process thread. The Prepare method should initialize and validate its static data and access to data and determine dependencies. The Execute method then performs the actions that need access to the CUDA context and resources or current runtime execution Value objects or other runtime current values. It is worth stating very explicitly: there may be a significant difference in time between when the Prepare and the Execute methods are called, they are called on different threads, and the program values will be significantly different at the different times that they are called. The Prepare method is always called prior to the Execute method and it is possible the Execute method is never called if the command is canceled.

From its constructor or Prepare method, the kappa::command::Keyword sub-class is responsible for either initializing the Command parent class with the name or calling the kappa::Command.SetName method to set the name of the command. From its Execute method, it is responsible for calling the appropriate kappa::Command::SetCanceled, kappa::Command::SetFailed, kappa::Command::SetFinished and kappa::Command::Notification methods. It may override the kappa::Command::UpdateStatus method to check for and update its status if it is running in some asynchronous mode and it is then responsible for calling the appropriate kappa::Command::SetCanceled, kappa::Command::SetFailed, kappa::Command::SetFinished and kappa::Command::Notification methods.

The kappa::Process.RegisterKeywordCommandData method may be used to set the data to be passed to the Prepare method. A common use for this would be to pass a data structure or class object instance which contains everything the new keyword would need to access what it needs to function properly.

kappa::command::KeywordCSV example

The KeywordCSV.h and KeywordCSV.cpp create a new CSV keyword and are an example that illustrates the previous discussion and provides a commented example. It provides examples and has comments discussing:

IOCallback

The kappa::Process.RegisterIOCallback method may be used to register an IOCallback of a given name with a callback function and user data pointer. The name must match the name given in the Kappa Process statement:

!IO -> name(argument) [ map ];

The argument is the name of a Variable and the map is the appropriate map to specify the input and output dependencies:

The callback function is called on the background process thread that is associated with a CUDA context. The developer must ensure proper thread-safe locking occurs around access to the user_data (Hint: the kappa::Lock class may be used as a base class for thread-safe locking.) It may, via the ProcessControlBlock pointer, access all Kappa library CUDA functionality.

The callback function is passed:

completion status: "*cancel = true;"

The callback function returns false to set a FAILED completion status or returns true and does not set the cancel pointer variable to set a FINISHED completion status.





Appendixes

Third-Party Materials

Apache

Apache License, Version 2.0, January 2004, http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.

"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.

"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.

"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.

"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.

"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.

"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).

"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.

"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."

"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:

  1. You must give any other recipients of the Work or Derivative Works a copy of this License; and

  2. You must cause any modified files to carry prominent notices stating that You changed the files; and

  3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and

  4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.

You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

NOTICE

Apache Portable Runtime

Copyright (c) 2009 The Apache Software Foundation.



This product includes software developed by The Apache Software Foundation (http://www.apache.org/).



Portions of this software were developed at the National Center for Supercomputing Applications (NCSA) at the University of Illinois at Urbana-Champaign.

This software contains code derived from the RSA Data Security Inc. MD5 Message-Digest Algorithm.

This software contains code derived from UNIX V7, Copyright(C) Caldera International Inc.

libffi

libffi - Copyright (c) 1996-2009 Anthony Green, Red Hat, Inc and others.

See source files for details.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ``Software''), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

MuParser



__________

_____ __ __\______ \_____ _______ ______ ____ _______

/ \ | | \| ___/\__ \ \_ __ \/ ___/_/ __ \\_ __ \

| Y Y \| | /| | / __ \_| | \/\___ \ \ ___/ | | \/

|__|_| /|____/ |____| (____ /|__| /____ > \___ >|__|

\/ \/ \/ \/

Version 1.27

Copyright (C) 2004-2006 Ingo Berg (ingo_berg{at}gmx.de)



Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. OR OTHER DEALINGS IN THE SOFTWARE.

NVIDIA CUDA Toolkit

License Agreement for NVIDIA CUDA Toolkit

IMPORTANT NOTICE -- READ CAREFULLY: This License Agreement ("License") for NVIDIA CUDA Toolkit, including computer software and associated documentation ("Software"), is the LICENSE which governs use of the SOFTWARE of NVIDIA Corporation and its subsidiaries ("NVIDIA") downloadable herefrom. By downloading, installing, copying, or otherwise using the SOFTWARE, You (as defined below) agree to be bound by the terms of this LICENSE. If You do not agree to the terms of this LICENSE, do not download the SOFTWARE.

RECITALS

Use of NVIDIA's products requires three elements: the SOFTWARE, the NVIDIA GPU, and a computer system. The SOFTWARE is protected by copyright laws and international copyright treaties, as well as other intellectual property laws and treaties. The SOFTWARE is not sold, and instead is only licensed for Your use, strictly in accordance with this document. The hardware is protected by various patents, and is sold, but this LICENSE does not cover that sale, since it may not necessarily be sold as a package with the SOFTWARE. This LICENSE sets forth the terms and conditions of the SOFTWARE LICENSE only.

1. DEFINITIONS

1.1 Licensee. "Licensee," "You," or "Your" shall mean the entity or individual that downloads and uses the SOFTWARE.

2. GRANT OF LICENSE

2.1 Rights and Limitations of Grant. NVIDIA hereby grants Licensee the following non-exclusive, non-transferable, non-sublicensable (except as stated otherwise below) right to use the SOFTWARE, with the following limitations:

2.1.1 Usage Rights. Licensee may install and use multiple copies of the SOFTWARE on a shared computer or concurrently on different computers, and make multiple back-up copies of the SOFTWARE, solely for Licensee's use within Licensee's Enterprise. "Enterprise" shall mean individual use by Licensee or any legal entity (such as a corporation or university) and the subsidiaries it owns by more than 50 percent.

2.1.2. Redistribution Rights. Licensee may, transfer, redistribute and sublicense certain files of the SOFTWARE, as referenced in Attachment A of this Agreement; provided, however Licensee shall only install such files into a private (non-shared) directory location that is used only by Licensee's product.

2.1.3 Linux/FreeBSD Exception. Notwithstanding the foregoing terms of Section 2.1.1, SOFTWARE designed exclusively for use on the Linux or FreeBSD operating systems, or other operating systems derived from the source code to these operating systems, may be copied and redistributed, provided that the binary files thereof are not modified in any way (except for unzipping of compressed files).

2.1.4 Limitations.

No Reverse Engineering. Licensee may not reverse engineer, decompile, or disassemble the SOFTWARE, nor attempt in any other manner to obtain the source code.

No Separation of Components. The SOFTWARE is licensed as a single product. Except as authorized in this Agreement, Software component parts of the Software may not be separated for use on more than one computer, nor otherwise used separately from the other parts.

No Rental. Licensee may not rent or lease the SOFTWARE to someone else.

3. TERMINATION

This LICENSE will automatically terminate if Licensee fails to comply with any of the terms and conditions hereof. In such event, Licensee must destroy all copies of the SOFTWARE and all of its component parts.

Defensive Suspension. If Licensee commences or participates in any legal proceeding against NVIDIA, then NVIDIA may, in its sole discretion, suspend or terminate all license grants and any other rights provided under this LICENSE during the pendency of such legal proceedings.

4. COPYRIGHT

All rights, title, interest and copyrights in and to the SOFTWARE (including but not limited to all images, photographs, animations, video, audio, music, text, and other information incorporated into the SOFTWARE), the accompanying printed materials, and any copies of the SOFTWARE, are owned by NVIDIA, or its suppliers. The SOFTWARE is protected by copyright laws and international treaty provisions. Accordingly, Licensee is required to treat the SOFTWARE like any other copyrighted material, except as otherwise allowed pursuant to this LICENSE and that it may make one copy of the SOFTWARE solely for backup or archive purposes.

RESTRICTED RIGHTS NOTICE. Software has been developed entirely at private expense and is commercial computer software provided with RESTRICTED RIGHTS. Use, duplication or disclosure by the U.S. Government or a U.S. Government subcontractor is subject to the restrictions set forth

in the license agreement under which Software was obtained pursuant to DFARS 227.7202-3(a) or as set forth in subparagraphs (c)(1) and (2) of the Commercial Computer Software - Restricted Rights clause at FAR 52.227-19, as applicable. Contractor/manufacturer is NVIDIA, 2701 San Tomas Expressway, Santa Clara, CA 95050

5. APPLICABLE LAW

This LICENSE shall be deemed to have been made in, and shall be construed pursuant to, the laws of the State of Delaware. The United Nations Convention on Contracts for the International Sale of Goods is specifically disclaimed.

6. DISCLAIMER OF WARRANTIES AND LIMITATION ON LIABILITY

6.1 No Warranties. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE SOFTWARE IS PROVIDED "AS IS" AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.

6.2 No Liability for Consequential Damages. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE THE SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

6.3 No Support. NVIDIA has no obligation to support or to provide any updates of the Software.

7. MISCELLANEOUS

7.1 Feedback. In the event Licensee contacts NVIDIA to request Feedback (as defined below) on how to design, implement, or optimize Licensee's product for use with the SOFTWARE, the following terms and conditions apply the Feedback:

1. Exchange of Feedback. Both parties agree that neither party has an obligation to give the other party any suggestions, comments or other feedback, whether verbally or in code form ("Feedback"), relating to (i) the SOFTWARE; (ii) Licensee's products; (iii) Licensee's use of the SOFTWARE; or (iv) optimization of Licensee's product with the SOFTWARE. In the event either party provides Feedback to the other party, the party receiving the Feedback may use and include any Feedback that the other

party voluntarily provides to improve the (i) SOFTWARE or other related NVIDIA technologies, respectively for the benefit of NVIDIA; or (ii) Licensee's product or other related Licensee technologies, respectively for the benefit of Licensee. Accordingly, if either party provides Feedback to the other party, both parties agree that the other party and its respective licensees may freely use, reproduce, license, distribute, and otherwise commercialize the Feedback in the (i) SOFTWARE or other related technologies; or (ii) Licensee's products or other related technologies, respectively, without the payment of any royalties or fees.

2. Residual Rights. Licensee agrees that NVIDIA shall be free to use any general knowledge, skills and experience, (including, but not limited to, ideas, concepts, know-how, or techniques) ("Residuals"), contained in the (i) Feedback provided by Licensee to NVIDIA; (ii) Licensee's products shared or disclosed to NVIDIA in connection with the Feedback; or (c) Licensee's confidential information voluntarily provided to NVIDIA in connection with the Feedback, which are retained in the memories of NVIDIA's employees, agents, or contractors who have had access to such (i) Feedback provided by Licensee to NVIDIA; (ii) Licensee's products; or (c) Licensee's confidential information voluntarily provided to NVIDIA, in connection with the Feedback. Subject to the terms and conditions of this Agreement, NVIDIA's employees, agents, or contractors shall not be prevented from using Residuals as part of such employee's, agent's or contractor's general knowledge, skills, experience, talent, and/or expertise. NVIDIA shall not have any obligation to limit or restrict the assignment of such employees, agents or contractors or to pay royalties for any work resulting from the use of Residuals.

3. Disclaimer of Warranty. FEEDBACK FROM EITHER PARTY IS PROVIDED FOR THE OTHER PARTY'S USE "AS IS" AND BOTH PARTIES DISCLAIM ALL WARRANTIES, EXPRESS, IMPLIED AND STATUTORY INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. BOTH PARTIES DO NOT REPRESENT OR WARRANT THAT THE FEEDBACK WILL MEET THE OTHER PARTY'S REQUIREMENTS OR THAT THE OPERATION OR IMPLEMENTATION OF THE FEEDBACK WILL BE UNINTERRUPTED OR ERROR-FREE.

4. No Liability for Consequential Damages. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL EITHER PARTY OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE THE FEEDBACK, EVEN IF THE OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

5. Freedom of Action. Licensee agrees that this Agreement is nonexclusive and NVIDIA may currently or in the future be developing software, other technology or confidential information internally, or receiving confidential information from other parties that maybe similar to the Feedback and Licensee's confidential information (as provided in Section 7.1.2 above), which may be provided to NVIDIA in connection with Feedback by Licensee. Accordingly, Licensee agrees that nothing in this Agreement will be construed as a representation or inference that NVIDIA will not develop, design, manufacture, acquire, market products, or have products developed, designed, manufactured, acquired, or marketed for NVIDIA, that compete with the Licensee's products or confidential information.

6. No Implied Licenses. Under no circumstances should anything in this Agreement be construed as NVIDIA granting by implication, estoppel or otherwise, (i) a license to any NVIDIA product or technology other than the SOFTWARE; or (ii) any additional license rights for the SOFTWARE other than the licenses expressly granted in this Agreement.

7.2 If any provision of this LICENSE is inconsistent with, or cannot be fully enforced under, the law, such provision will be construed as limited to the extent necessary to be consistent with and fully enforceable under the law. This LICENSE is the final, complete and exclusive agreement between the parties relating to the subject matter hereof, and supersedes all prior or contemporaneous understandings and agreements relating to such subject matter, whether oral or written. This LICENSE may only be modified in writing signed by an authorized officer of NVIDIA. Licensee agrees that it will not ship, transfer or export the SOFTWARE into any country, or use the SOFTWARE in any manner, prohibited by the United States Bureau of Export Administration or any export laws, restrictions or regulations.

ATTACHMENT A

Redistributable Components

The following files may be redistributed with software applications developed by Licensee.

* Windows

- CUDA Runtime: cudart32_*.dll cudart64_*.dll

- CUDA FFT Library: cufft32_*.dll cufft64_*.dll

- CUDA BLAS Library: cublas32_*.dll cublas64_*.dll

* MacOS

- CUDA Runtime: libcudart.dylib

- CUDA FFT Library: libcufft.dylib

- CUDA BLAS Library: libcublas.dylib

* Linux

- CUDA Runtime: libcudart.so

- CUDA FFT Library: libcufft.so

- CUDA BLAS Library: libcublas.so

The following terms and conditions apply to Licensee's use of the components listed above ("Redistributable Components") of the SOFTWARE:

1. Customer may transfer, redistribute or sublicense, the license rights pursuant to Section 2.1.1 of this Agreement in connection with the Redistributable Components to end users of Licensee's products.



OpenSSL

The OpenSSL toolkit stays under a dual license, i.e. both the conditions of the OpenSSL License and the original SSLeay license apply to the toolkit. See below for the actual license texts. Actually both licenses are BSD-style Open Source licenses. In case of any license issues related to OpenSSL please contact openssl-core@openssl.org.

OpenSSL License

Copyright (c) 1998-2008 The OpenSSL Project. 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.

3. All advertising materials mentioning features or use of this software must display the following acknowledgment:

"This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit. (http://www.openssl.org/)”

4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to endorse or promote products derived from this software without prior written permission. For written permission, please contact openssl-core@openssl.org.

5. Products derived from this software may not be called "OpenSSL" nor may "OpenSSL" appear in their names without prior written permission of the OpenSSL Project.

6. Redistributions of any form whatsoever must retain the following acknowledgment:

"This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/)"

THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY EXPRESSED 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 THE OpenSSL PROJECT OR ITS 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.



This product includes cryptographic software written by Eric Young (eay@cryptsoft.com). This product includes software written by Tim Hudson (tjh@cryptsoft.com).



Original SSLeay License

Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) All rights reserved.

This package is an SSL implementation written by Eric Young (eay@cryptsoft.com).

The implementation was written so as to conform with Netscapes SSL.

This library is free for commercial and non-commercial use as long as the following conditions are aheared to. The following conditions apply to all code found in this distribution, be it the RC4, RSA, lhash, DES, etc., code; not just the SSL code. The SSL documentation included with this distribution is covered by the same copyright terms except that the holder is Tim Hudson (tjh@cryptsoft.com).

Copyright remains Eric Young's, and as such any Copyright notices in the code are not to be removed. If this package is used in a product, Eric Young should be given attribution as the author of the parts of the library used.

This can be in the form of a textual message at program startup or in documentation (online or textual) provided with the package.

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 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.

3. All advertising materials mentioning features or use of this software must display the following acknowledgement:

"This product includes cryptographic software written by Eric Young (eay@cryptsoft.com)"

The word 'cryptographic' can be left out if the rouines from the library being used are not cryptographic related :-).

4. If you include any Windows specific code (or a derivative thereof) from the apps directory (application code) you must include an acknowledgement:

"This product includes software written by Tim Hudson (tjh@cryptsoft.com)"

THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 THE AUTHOR 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 licence and distribution terms for any publically available version or derivative of this code cannot be changed. i.e. this code cannot simply be copied and put under another distribution licence * [including the GNU Public Licence.]

PCRE

PCRE LICENCE

PCRE is a library of functions to support regular expressions whose syntax and semantics are as close as possible to those of the Perl 5 language.

Release 8 of PCRE is distributed under the terms of the "BSD" licence, as specified below. The documentation for PCRE, supplied in the "doc" directory, is distributed under the same terms as the software itself.

The basic library functions are written in C and are freestanding. Also included in the distribution is a set of C++ wrapper functions.

THE BASIC LIBRARY FUNCTIONS

Written by: Philip Hazel

Email local part: ph10

Email domain: cam.ac.uk

University of Cambridge Computing Service, Cambridge, England.

Copyright (c) 1997-2010 University of Cambridge All rights reserved.



THE C++ WRAPPER FUNCTIONS

Contributed by: Google Inc.

Copyright (c) 2007-2010, Google Inc. All rights reserved.



THE "BSD" LICENCE

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

* 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.

* Neither the name of the University of Cambridge nor the name of Google Inc. nor the names of their contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 THE COPYRIGHT OWNER 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.

End



Legal Notices

Psi Lambda LLC makes no representations or warranties with respect to the contents or use of this documentation, and specifically disclaims any express or implied warranties of merchantability or fitness for any particular purpose. Further, Psi Lambda LLC reserves the right to revise this publication and to make changes to its content, at any time, without obligation to notify any person or entity of such revisions or changes.

Further, Psi Lambda LLC. makes no representations or warranties with respect to any software, and specifically disclaims any express or implied warranties of merchantability or fitness for any particular purpose. Further, Psi Lambda LLC reserves the right to make changes to any and all parts of Psi Lambda LLC software, at any time, without any obligation to notify any person or entity of such changes.

Any products or technical information provided under this Agreement may be subject to U.S. export controls and the trade laws of other countries. You agree to comply with all export control regulations and to obtain any required licenses or classification to export, re-export, or import deliverables. You agree not to export or re-export to entities on the current U.S. export exclusion lists or to any embargoed or terrorist countries as specified in the U.S. export laws. You agree to not use deliverables for prohibited nuclear, missile, or chemical biological weaponry end uses. Psi Lambda LLC assumes no responsibility for your failure to obtain any necessary export approvals.

Copyright © 2009-2010 Psi Lambda LLC All rights reserved. No part of this publication may be reproduced, photocopied, stored on a retrieval system, or transmitted without the express written consent of the publisher.



Alphabetical Index

32 bit 32, 37
64 bit 37
AddressMode0 35
AddressMode1 35
aligntest 55
Aligntest 55
ANY_MODULE 37
Apache Portable Runtime 51p.,
APIVersion 15
APR 51, 56
ArgumentDirection 70
Arguments 21
Array 16, 33pp.
ARRAY_FORMAT 33p.
ASYNC 58pp., 63p.
asynchronous 8, 30p., 34, 69
Attributes 14p., 19, 21, 50
background process thread 5, 68
background process 5, 41p., 68, 70
begin 50, 57
BinaryVersion 14, 50
block shape 6, 44p.
BLOCKSHAPE 4, 29, 44p.
BLOCKSHAPEX 44p.
BLOCKSHAPEY 44p.
BLOCKSHAPEZ 44p.
built-in keyword 25
C 1
C::Kernel 16
C::Module 16
C/Kernel 10, 18, 42p.
C/Module 36, 41, 43
C/ModuleUnload 41
C++ 1, 5, 9, 19pp., 36, 67
cache 26, 45
Cache 45
CACHE 26, 45
CacheConfig 15
callback functionality 5
Callback functionality 48
cancel 47
CANCELED 18, 24, 40pp., 48, 70
CanMapHostMemory 14
ClockRate 13
COLUMNS 31
Command 16, 22, 68p.
commit 50, 57
ComputeMode 14
ConcurrentCopyExecute 13
ConcurrentKernels 14
configuration file 7p., 10p., 39
configuration value 6, 8, 11, 24, 27, 48
connect 50, 56, 64p.
ConstantMemory 13p., 50
Context 8, 10, 16p., 25, 41p., 49p.
CONTEXT_FLAGS 21, 23, 26
ContextReset 40
CopyVariable 48
CU_AD_FORMAT_FLOAT 33p.
CU_AD_FORMAT_HALF 34
CU_AD_FORMAT_SIGNED_INT16 34
CU_AD_FORMAT_SIGNED_INT32 34
CU_AD_FORMAT_SIGNED_INT8 34
CU_AD_FORMAT_UNSIGNED_INT16 33
CU_AD_FORMAT_UNSIGNED_INT32 33
CU_AD_FORMAT_UNSIGNED_INT8 33
CU_CTX_MAP_HOST 26
CU_CTX_SCHED 21, 26
CU_CTX_SCHED_YIELD 21, 23
CU_JIT_TARGET_FROM_CUCONTEXT 38
CU_JIT_WALL_TIME 37
CU_MODULE 37
CU_PREFER_PTX 37
CU_TARGET_COMPUTE_13 37
CU_TR_ADDRESS_MODE_CLAMP 35
CU_TR_ADDRESS_MODE_MIRROR 35
CU_TR_ADDRESS_MODE_WRAP 35
CU_TR_FILTER_MODE_LINEAR 35
CU_TR_FILTER_MODE_POINT 35
CU_TRSF_NORMALIZED_COORDINATES 35
CU_TRSF_READ_AS_INTEGER 35
CUBLAS 5
cuCtxGetApiVersion 15
cuCtxGetCacheConfig 15
cuCtxGetDevice 15
cuCtxGetLimit 15
cuCtxSetCacheConfig 26
cuCtxSetLimit 26
CUDA context 1, 5, 8, 16, 25, 39, 68pp.
CUDA driver 1, 5, 7p.
CUDA module 16, 34pp., 43p.
CUDA Reference Manual 14, 26, 37p., 44p., 50
CUDA_CONTEXT 21, 25
CUDA_CONTEXT_TYPE 21, 25p.
CUDA_PATH 36
cuda_translation 8, 33
CUDA::Kernel 16
CUDA::Module 16
cuda.h 8
CUDA/Kernel 10, 14, 29, 31, 34p., 43p., 50
CUDA/Module 36p., 41, 43p.
CUDA/ModuleUnload 41
CUDA/Variable/Module 38
CUDAConfig 40
cudaGPU 13, 16
cuDriverGetVersion 15
CUFFT 5
cuFuncSetBlockShape 44p.
cuFuncSetCacheConfig 45
cuFuncSetSharedSize 45
cuLaunchGrid 44
cuMemAllocPitch 31
cuMemcpy2D 33
cuMemcpy2DAsync 33
cuMemcpy2DUnaligned 33
cuMemcpy3D 33
cuMemcpy3DAsync 33
cuMemGetInfo 15
cuModuleLoadDataEx 37p.
database drivers 51
decision statement 24, 42, 48
DEPTH 33p.
Device 13, 16p., 31
device memory 4, 7, 9, 16pp., 26, 31p., 49
DeviceID 15
DEVICEMEMSET 31p.
DeviceOnly 31
DevicePitch 31
Direct3D 5, 7p.
DIRECT3D 26
disconnect 50, 57, 64
DisplayAll 50
DriverVersion 15
dynamic scheduling 1
dynamic sizing 1, 6, 13
ECCSupported 14
Event 16
execute 51, 59
Execute 13, 68p.
expand 61pp.
Expand 60pp., 65
expression 24, 27, 48
expressions 24p., 48
extern “C” 5, 39, 43, 68
factory function 68p.
factory_function 39
FAILED 24, 48, 70
FAST 59, 64
FAT_MODULE 37
Fermi 8
FilterMode 35
Finish 41p., 68
FINISHED 18, 24, 48, 70
FLAGS 33
float2 34
float4 34
Free 41
freetds 56
FreeTDS 56
FROM_FLOAT 27p.
function 7pp., 19pp., 42pp., 46p., 67p.
Function 10, 20, 46p.
FUNCTION 43p.
GetNullMask 47
GlobalMemory 13
graphics resource 7p., 26
grid 6, 13, 44
Grid 13
GRID 4, 29, 44
GRIDX 44
GRIDY 44
HEAP_SIZE 26
HeapSize 15
HEIGHT 33
host memory 7, 30p.
Host Memory 14
Indices 7, 27pp., 48
Input 20, 49, 70
Input and Output 49, 70
Instruction 19, 21
integrated 30
Integrated 13
IO 5pp., 30, 43, 48p., 67pp.
IOCallback 5pp., 30, 48, 67pp.
JIT 1, 8, 37p.
JITFallback 37p.
JITMaxRegisters 37
JITOptimizationLevel 37p.
JITRecordCompileTime 37
JITTarget 37p.
JITTargetFromContext 37p.
JITThreadsPerBlock 37
Kappa 16
Kappa process 1, 3, 5, 68
Kappa Process 5, 7, 17pp., 23, 25, 29p., 39p., 42, 46p., 49, 67pp.
Kappa Reference Manual 16p., 20
KAPPA_CONFIG_PATH 10
kappa_project.conf 11
KAPPA_TRACE 18
kappa::command::Keyword 16, 25, 30, 39, 68p.
kappa::command::keywordCSV 12
kappa::Command::Notification 69
kappa::Command::SetCanceled 69
kappa::Command::SetFailed 69
kappa::Command::SetFinished 69
kappa::Command.SetName 69
kappa::DBD 51
kappa::ExceptionHandler 18
kappa::Lock 70
kappa::Process 12p., 16, 18pp., 39
kappa::Process:GetResult 18
kappa::Process.DoNotExecute 19
kappa::Process.ExecuteRoutine 21
kappa::Process.LoadRoutine 20p.
kappa::Process.OutputRoutine 20
kappa::Process.OutputRoutines 20
kappa::Process.RegisterIOCallback 69
kappa::Process.RegisterKeywordCommandData 69
kappa::Process.SetExceptionHandler 18
kappa::Process.SetQueueResults 18
kappa::ProcessRememberAnonymous 19
kappa.conf 36p.
kappa/DBD.h 51
Kappa/Routine 40
KappaConfig 10p.
KappaConfigFile 10p.
KernelTimeout 13
keyword.conf 12
labelset 61p., 64
LABELSET 62, 64p.
linear memory 28p.
LoadRoutine 20
Local 16, 30p.
LocalAndDevice 30
LocalOnly 30p.
LocalToDevice 31
LOOP 46, 60p., 64
Macintosh OS/X 36
Major 13
malloc 7, 30
map 7, 10, 20pp., 40, 43p., 49, 70
mapped 7, 30
MaxGridSize 13
MaximumArrayHeight 14
MaximumArraySlices 14
MaximumArrayWidth 14
MaximumTexture1DWidth 14
MaximumTexture2DHeight 14
MaximumTexture2DWidth 14
MaximumTexture3DDepth 14
MaximumTexture3DHeight 14
MaximumTexture3DWidth 14
MaxThreads 13
MaxThreadsPerBlock 13p., 50
MemoryFree 15
MemoryPitch 13
MemoryTotal 15
MemoryUsed 15
Microsoft Windows 11, 36
Minor 13
MODULE 14, 24, 35p., 38, 43
MultiProcessorCount 13
mysql 56
MySQL 56
namespace 1, 7p., 10, 18, 21, 40, 46
Namespace 7, 10, 27, 40, 46
non-paged 30p.
NULL_BLOCK_WIDTH 31
NUMBER_CHANNELS 34
nvcc 1, 36p.
NVCC_OPTIONS 38
NVCC_PTX 36p.
OBJ_PATHS 36
ODBC 56
one-dimensional 29p., 33pp.
OpenGL 5, 7p.
OPENGL 25
OpenMP 1, 5, 68
Oracle 57
Output 20, 49, 67, 70
OutputRoutine 20
OutputRoutines 20
packed components 34
pinned 30p.
pitch 13, 31
Pitch 13
PopContexts 42
PostgreSQL 56p.
Prepare 68p.
Print 10, 17, 49, 67
PRINTF_FIFO_SIZE 26
PrintfFIFOSize 15
ProcessControlBlock 16, 70
program thread 5, 68
Psi Lambda LLC 1, 20, 39
ptx 8, 36p.
PTX 36p.
PTX_MODULE 37
PTXVersion 14, 50
RANDOM 58
read 13, 51, 58, 63pp., 70
RECOMPILE 38
RegistersPerBlock 13
RegistersPerThread 14, 50
REPORT_MEMORY 21, 26
REQUIRES_CUDA 39
Resolve 69
rollback 51, 57
select 51, 57p., 63pp.
SetNullMask 47
shared library 9, 12, 20, 36, 39, 41, 67p.
shared memory 6, 13, 45
SHARED_OBJECT_EXTENSION 36
SHAREDMEMORY 4, 45
SharedMemoryPerBlock 13
slice_arguments 27p.
SQL 50p., 56pp., 63pp.
sqlite 56p.
SQLite 56p.
STACK_SIZE 26
standard error 11, 17, 26, 49
STAR 53p., 58, 63p.
StaticSharedMemory 14, 50
Stop 41p., 68
stream 8, 16p., 30p., 34, 45
Stream 16, 31, 34, 45
STREAM 31, 34, 45
subroutine 1, 8pp., 19pp., 23, 42, 46p., 67p.
Subroutine 20, 46p.
surface 35
Surface 33, 35
SurfaceAlignment 14
Synchronize 60p., 64p.
texture 7, 16, 34pp.
Texture 13, 16, 33pp.
TextureAlignment 13
TextureFlags 35
ThreadLocalMemory 14, 50
ThreadStackSize 15
three-dimensional 29, 33pp.
Timer 16p., 49
two-dimensional 33pp.
UNIQUE_NAME 39p.
UNROLL 46, 60, 64
USE_CURRENT 8, 25
Value 6p., 10, 13, 20p., 27pp., 40, 46, 49, 69
Variable 6p., 10, 16, 18, 20p., 27pp., 38, 42, 46, 48, 69p.
VARIABLE_TYPE 30p.
vector 13, 21, 27, 34
WarpSize 13
WIDTH 33
write 51, 58p.
WriteCombined 31
KappaAPRDBD 51
.cu 8, 36p.
.dll 36
.dylib 36
.ptx 8, 36p.
.so 36
%sizeof 4, 45
<kappa> 19



Page