Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
586 changes: 372 additions & 214 deletions docs/doxygen.mk

Large diffs are not rendered by default.

68 changes: 14 additions & 54 deletions docs/footer.htm
Original file line number Diff line number Diff line change
@@ -1,57 +1,17 @@
<!-- HTML footer for doxygen 1.9.3-->
<!-- start footer part -->
<!--BEGIN GENERATE_TREEVIEW-->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
$navpath
<li class="footer">$generatedby <a href="https://www.doxygen.org/index.html"><img class="footer" src="$relpath^doxygen.svg" width="104" height="31" alt="doxygen"/></a> $doxygenversion </li>
</ul>
</div>
</div>
</div>
</div>
</div>

<!--Google Analytics-->
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-130950618-1']);
_gaq.push(['_setDomainName', '.arrayfire.com']);
_gaq.push(['_trackPageview']);

(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>

<!--Spectate-->
<script type="text/javascript">
sAId = "151";
sCId = "688";

(function() {
function async_load(){
var s = document.createElement('script'); s.type = 'text/javascript';
s.src = (('https:' == document.location.protocol) ? "https://ssl" : "https://cdn") + ".spectate.com/s.js";
var c = document.getElementsByTagName('script')[0]; c.parentNode.insertBefore(s, c);
}
if(window.attachEvent) { window.attachEvent('onload', async_load); }
else { window.addEventListener('load', async_load, false); }
})();
</script>

<!--Adroll-->
<script type="text/javascript">
adroll_adv_id = "ZRWI4W4RTRHENOWGXZY5JQ";
adroll_pix_id = "QLXGBK3MSFB6LOL6PES2MT";
(function () {
var oldonload = window.onload;
window.onload = function(){
__adroll_loaded=true;
var scr = document.createElement("script");
var host = (("https:" == document.location.protocol) ? "https://s.adroll.com" : "https://a.adroll.com");
scr.setAttribute('async', 'true');
scr.type = "text/javascript";
scr.src = host + "/j/roundtrip.js";
((document.getElementsByTagName('head') || [null])[0] ||
document.getElementsByTagName('script')[0].parentNode).appendChild(scr);
if(oldonload){oldonload()}};
}());
</script>

<!--END GENERATE_TREEVIEW-->
<!--BEGIN !GENERATE_TREEVIEW-->
<hr class="footer"/><address class="footer"><small>
$generatedby&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="$relpath^doxygen.svg" width="104" height="31" alt="doxygen"/></a> $doxygenversion
</small></address>
<!--END !GENERATE_TREEVIEW-->
</body>
</html>
66 changes: 43 additions & 23 deletions docs/header.htm
Original file line number Diff line number Diff line change
@@ -1,14 +1,28 @@
<!-- HTML header for doxygen 1.8.17-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="https://www.w3.org/1999/xhtml">
<!-- HTML header for doxygen 1.9.3-->
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-130950618-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());

gtag('config', 'UA-130950618-1');
</script>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen $doxygenversion"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
<link href="$relpath^tabs.css" rel="stylesheet" type="text/css"/>
<!--BEGIN DISABLE_INDEX-->
<!--BEGIN FULL_SIDEBAR-->
<script type="text/javascript">var page_layout=1;</script>
<!--END FULL_SIDEBAR-->
<!--END DISABLE_INDEX-->
<script type="text/javascript" src="$relpath^jquery.js"></script>
<script type="text/javascript" src="$relpath^dynsections.js"></script>
$treeview
Expand All @@ -18,47 +32,53 @@
$extrastylesheet
</head>
<body>
<!--BEGIN DISABLE_INDEX-->
<!--BEGIN FULL_SIDEBAR-->
<div id="side-nav" class="ui-resizable side-nav-resizable"><!-- do not remove this div, it is closed by doxygen! -->
<!--END FULL_SIDEBAR-->
<!--END DISABLE_INDEX-->

<div id="top"><!-- do not remove this div, it is closed by doxygen! -->

<!--BEGIN TITLEAREA-->
<div id="titlearea">
<table cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr style="height: 56px;">
<tr id="projectrow">
<!--BEGIN PROJECT_LOGO-->
<td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo"/></td>
<!--END PROJECT_LOGO-->
<!--BEGIN PROJECT_NAME-->
<!--<td id="projectalign">
<div id="projectname">$projectname<!--BEGIN PROJECT_NUMBER--><span id="projectnumber">&#160;$projectnumber</span><!--END PROJECT_NUMBER-->
</div>
<!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF-->
</td>-->
<!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME-->
<!--BEGIN PROJECT_BRIEF-->
<td style="padding-left: 0.5em;">
<td>
<div id="projectbrief">$projectbrief</div>
</td>
<!--END PROJECT_BRIEF-->
<!--END !PROJECT_NAME-->
<!--BEGIN DISABLE_INDEX-->
<!--BEGIN SEARCHENGINE-->
<td>$searchbox</td>
<!--BEGIN !FULL_SIDEBAR-->
<td>$searchbox</td>
<!--END !FULL_SIDEBAR-->
<!--END SEARCHENGINE-->
<!--END DISABLE_INDEX-->
<td id="gsearch">
<div><script>
(function() {
var cx = '004356362924927882526:zup3ehe-7bs';
var gcse = document.createElement('script');
gcse.type = 'text/javascript';
gcse.async = true;
gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
'//www.google.com/cse/cse.js?cx=' + cx;
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(gcse, s);
})();
</script>
<gcse:search></gcse:search>
<div>
</td>
<td id="gsearch">
<script async src="https://cse.google.com/cse.js?cx=004356362924927882526:zup3ehe-7bs"></script>
<div class="gcse-search"></div>
</td>
</tr>
<!--BEGIN SEARCHENGINE-->
<!--BEGIN FULL_SIDEBAR-->
<tr><td colspan="2">$searchbox</td></tr>
<!--END FULL_SIDEBAR-->
<!--END SEARCHENGINE-->
</tbody>
</table>
</div>
Expand Down
8 changes: 4 additions & 4 deletions docs/pages/install.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,13 @@ OpenCL backend, you will need to have the OpenCL **runtime** installed on your
system. Drivers and runtimes should be downloaded and installed from your device
vendor’s website.

# Install Instructions
# Install Instructions {#InstallInstructions}

* [Windows](#Windows)
* [Linux](#Linux)
* [macOS](#macOS)

## <a name="Windows"></a> Windows
## Windows {#Windows}

Prior to installing ArrayFire on Windows,
[download](https://www.microsoft.com/en-in/download/details.aspx?id=48145)
Expand All @@ -41,7 +41,7 @@ can find ArrayFire DLLs.
For more information on using ArrayFire on Windows, visit the following
[page](http://arrayfire.org/docs/using_on_windows.htm).

## <a name="Linux"></a> Linux
## Linux {#Linux}

There are two ways to install ArrayFire on Linux.
1. Package Manager
Expand Down Expand Up @@ -90,7 +90,7 @@ __Fedora, Redhat, CentOS__
yum install freeimage fontconfig mesa-libGLU


## <a name="macOS"></a> macOS
## macOS {#macOS}

Once you have downloaded the ArrayFire installer, execute the installer by
either double clicking on the ArrayFire `pkg` file or running the following
Expand Down
64 changes: 64 additions & 0 deletions docs/pages/release_notes.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,70 @@
Release Notes {#releasenotes}
==============

v3.8.1
======

## Improvements

- moddims now uses JIT approach for certain special cases - \PR{3177}
- Embed Version Info in Windows DLLs - \PR{3025}
- OpenCL device max parameter is now queries from device properties - \PR{3032}
- JIT Performance Optimization: Unique funcName generation sped up - \PR{3040}
- Improved readability of log traces - \PR{3050}
- Use short function name in non-debug build error messages - \PR{3060}
- SIFT/GLOH are now available as part of website binaries - \PR{3071}
- Short-circuit zero elements case in detail::copyArray backend function - \PR{3059}
- Speedup of kernel caching mechanism - \PR{3043}
- Add short-circuit check for empty Arrays in JIT evalNodes - \PR{3072}
- Performance optimization of indexing using dynamic thread block sizes - \PR{3111}
- ArrayFire starting with this release will use Intel MKL single dynamic library which resolves lot of linking issues unified library had when user applications used MKL themselves - \PR{3120}
- Add shortcut check for zero elements in af_write_array - \PR{3130}
- Speedup join by eliminating temp buffers for cascading joins - \PR{3145}
- Added batch support for solve - \PR{1705}
- Use pinned memory to copy device pointers in CUDA solve - \PR{1705}
- Added package manager instructions to docs - \PR{3076}
- CMake Build Improvements - \PR{3027} , \PR{3089} , \PR{3037} , \PR{3072} , \PR{3095} , \PR{3096} , \PR{3097} , \PR{3102} , \PR{3106} , \PR{3105} , \PR{3120} , \PR{3136} , \PR{3135} , \PR{3137} , \PR{3119} , \PR{3150} , \PR{3138} , \PR{3156} , \PR{3139} , \PR{1705} , \PR{3162}
- CPU backend improvements - \PR{3010} , \PR{3138} , \PR{3161}
- CUDA backend improvements - \PR{3066} , \PR{3091} , \PR{3093} , \PR{3125} , \PR{3143} , \PR{3161}
- OpenCL backend improvements - \PR{3091} , \PR{3068} , \PR{3127} , \PR{3010} , \PR{3039} , \PR{3138} , \PR{3161}
- General(including JIT) performance improvements across backends - \PR{3167}
- Testing improvements - \PR{3072} , \PR{3131} , \PR{3151} , \PR{3141} , \PR{3153} , \PR{3152} , \PR{3157} , \PR{1705} , \PR{3170} , \PR{3167}
- Update CLBlast to latest version - \PR{3135} , \PR{3179}
- Improved Otsu threshold computation helper in canny algorithm - \PR{3169}
- Modified default parameters for fftR2C and fftC2R C++ API from 0 to 1.0 - \PR{3178}
- Use appropriate MKL getrs_batch_strided API based on MKL Versions - \PR{3181}

## Fixes

- Fixed a bug JIT kernel disk caching - \PR{3182}
- Fixed stream used by thrust(CUDA backend) functions - \PR{3029}
- Added workaround for new cuSparse API that was added by CUDA amid fix releases - \PR{3057}
- Fixed `const` array indexing inside `gfor` - \PR{3078}
- Handle zero elements in copyData to host - \PR{3059}
- Fixed double free regression in OpenCL backend - \PR{3091}
- Fixed an infinite recursion bug in NaryNode JIT Node - \PR{3072}
- Added missing input validation check in sparse-dense arithmetic operations - \PR{3129}
- Fixed bug in `getMappedPtr` in OpenCL due to invalid lambda capture - \PR{3163}
- Fixed bug in `getMappedPtr` on Arrays that are not ready - \PR{3163}
- Fixed edgeTraceKernel for CPU devices on OpenCL backend - \PR{3164}
- Fixed windows build issue(s) with VS2019 - \PR{3048}
- API documentation fixes - \PR{3075} , \PR{3076} , \PR{3143} , \PR{3161}
- CMake Build Fixes - \PR{3088}
- Fixed the tutorial link in README - \PR{3033}
- Fixed function name typo in timing tutorial - \PR{3028}
- Fixed couple of bugs in CPU backend canny implementation - \PR{3169}
- Fixed reference count of array(s) used in JIT operations. It is related to arrayfire's internal memory book keeping. The behavior/accuracy of arrayfire code wasn't broken earlier. It corrected the reference count to be of optimal value in the said scenarios. This may potentially reduce memory usage in some narrow cases - \PR{3167}
- Added assert that checks if topk is called with a negative value for k - \PR{3176}
- Fixed an Issue where countByKey would give incorrect results for any n > 128 - \PR{3175}

## Contributions

Special thanks to our contributors:
[HO-COOH][https://github.com/HO-COOH]
[Willy Born][https://github.com/willyborn]
[Gilad Avidov][https://github.com/avidov]
[Pavan Yalamanchili][https://github.com/pavanky]

v3.8.0
======

Expand Down
2 changes: 1 addition & 1 deletion docs/pages/using_on_linux.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ requirements are that you include the ArrayFire header directories and link with
the ArrayFire library you intend to use i.e. CUDA, OpenCL, CPU, or Unified
backends.

## <a name="big-picture"/> The big picture
## The big picture {#big-picture}

On Linux, we recommend installing ArrayFire to `/opt/arrayfire` directory. The
installer will populate files in the following sub-directories:
Expand Down
4 changes: 2 additions & 2 deletions docs/pages/using_on_osx.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ CMake or Makefiles with CMake being our preferred build system.
* [CMake](#CMake)
* [Makefiles](#Makefiles)

## <a name="CMake"></a>CMake
## CMake {#CMake}

The CMake build system can be used to create ArrayFire projects. As [discussed
above](#big-picture), ArrayFire ships with a series of CMake scripts to make
Expand Down Expand Up @@ -80,7 +80,7 @@ you would modify the `cmake` command above to contain the following definition:

You can also specify this information in the `ccmake` command-line interface.

## <a name="Makefiles"></a> Makefiles
## Makefiles {#Makefiles}

Building ArrayFire projects with Makefiles is fairly similar to CMake except you
must specify all paths and libraries manually.
Expand Down
33 changes: 16 additions & 17 deletions docs/pages/using_on_windows.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,9 @@ Using ArrayFire with Microsoft Windows and Visual Studio {#using_on_windows}
============================================================================

If you have not already done so, please make sure you have installed,
configured, and tested ArrayFire following the [installation instructions](\ref
installing).
configured, and tested ArrayFire following the [installation instructions](#installing).

## The big picture
# The big picture

The ArrayFire Windows installer creates the following:
1. **AF_PATH** environment variable to point to the installation location. The
Expand All @@ -26,12 +25,12 @@ If you chose not to modify PATH during installation please make sure to do so
manually so that all applications using ArrayFire libraries will be able to find
the required DLLs.

## <a name="section1" />Build and Run Helloworld
# Build and Run Helloworld {#section1}

This can be done in two ways either by using CMake build tool or using Visual
Studio directly.

### <a name="section1part1"/> Using CMake
## Using CMake {#section1part1}
1. Download and install [CMake](https://cmake.org/download/), preferrably the
latest version.
2. Open CMake-GUI and set the field __Where is the source code__ to the root
Expand Down Expand Up @@ -59,7 +58,7 @@ Studio directly.
10. Once the helloworld example builds, you will see a console window with the
output from helloworld program.

### <a name="section1part2"/> Using Visual Studio
## Using Visual Studio {#section1part2}

1. Open Visual Studio of your choice and create an empty C++ project.
2. Right click the project and add an existing source file
Expand All @@ -76,16 +75,16 @@ Studio directly.
7. Build and run the project. You will see a console window with the output from
helloworld program.

## <a name="section2" />Using ArrayFire within Existing Visual Studio Projects
# Using ArrayFire within Existing Visual Studio Projects {#section2}
This is divided into three parts:
* [Part A: Adding ArrayFire to an existing solution (Single
Backend)](#section3partA)
* [Part B: Adding ArrayFire CUDA to a new/existing CUDA project](#section3partB)
* [Part C: Project with all ArrayFire backends](#section3partC)
* [Part A: Adding ArrayFire to an existing solution (Single Backend)](#section2partA)
* [Part B: Adding ArrayFire CUDA to a new/existing CUDA project](#section2partB)
* [Part C: Project with all ArrayFire backends](#section2partC)

## Part A: Adding ArrayFire to an existing solution (Single Backend) {#section2partA}

### <a name="section3partA" />Part A: Adding ArrayFire to an existing solution (Single Backend)
Note: If you plan on using Native CUDA code in the project, use the steps under
[Part B](#section3partB).
[Part B](#section2partB).

Adding a single backend to an existing project is quite simple.

Expand All @@ -97,7 +96,7 @@ Adding a single backend to an existing project is quite simple.
Properties -> Linker -> Input -> Additional Dependencies_. based on your
preferred backend.

### <a name="section3partB" />Part B: Adding ArrayFire CUDA to a new/existing CUDA project
## Part B: Adding ArrayFire CUDA to a new/existing CUDA project {#section2partB}
Lastly, if your project contains custom CUDA code, the instructions are slightly
different as it requires using a CUDA NVCC Project:

Expand All @@ -109,15 +108,15 @@ different as it requires using a CUDA NVCC Project:
4. Add `afcpu.lib`, `afcuda.lib`, `afopencl.lib`, or `af.lib` to _Project Properties ->
Linker -> Input -> Additional Dependencies_. based on your preferred backend.

### <a name="section3partC" />Part C: Project with all ArrayFire backends
### Part C: Project with all ArrayFire backends {#section2partC}
If you wish to create a project that allows you to use all the ArrayFire
backends with ease, you should use `af.lib` in step 3 from [Part
A](#section3partA).
A](#section2partA).

You can alternately download the template project from [ArrayFire Template
Projects](https://github.com/arrayfire/arrayfire-project-templates)

## <a name="section4" />Using ArrayFire with CMake
# <a name="section3" />Using ArrayFire with CMake
ArrayFire ships with a series of CMake scripts to make finding and using our
library easy.

Expand Down