(9085,18528,'2016-08-23 16:07:22','2016-08-23 20:07:22','[content_band inner_container=\"true\" no_margin=\"true\" border=\"top\" padding_top=\"40px\" padding_bottom=\"40px\"][column type=\"one-fifth\"].[/column][column type=\"three-fifths\"][custom_headline type=\"left\" level=\"h3\"]Fortune 300 Financial Company[/custom_headline][/column][column type=\"one-fifth\" last=\"true\"].[/column][gap size=\"3%\"]\r\n\r\n[column type=\"one-fifth\"].[/column][column type=\"three-fifths\"]\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2015/04/philadelphia-skyline.png\"><img class=\"aligncenter size-full wp-image-9081\" src=\"http://sandbox.arrayfire.com/wp-content/uploads/2015/04/philadelphia-skyline.png\" alt=\"philadelphia-skyline\" width=\"720\" height=\"160\" /></a>\r\n\r\nA Fortune 300 Financial Company ported their CPU code (C/C++) to CUDA and this enabled them to speed up the necessary financial calculations. Their primary objective was to reduce the time taken to run this code. Before porting to CUDA, they required ten to twelve hours to run the entire code. After porting to CUDA, they were able to do the same work in about 30 minutes.\r\n\r\nThe Client has several C/C++ programmers in their team and they trained many of them to use CUDA. Their code used CUDA to speed up a calculation using Monte Carlo methods to analyze various scenarios in their hedge-fund projection system (HPS). The major portion of their calculations were carried out on independent policies and thus the entire process was ideal for parallel programming (no communication bottlenecks).\r\n<h4>Mission</h4>\r\nThe CPU code was slow and this was holding them back. Because the code took the entire night to run, they were not able to run several different scenarios and take corrective action based on the results of the code. The primary reason to move to GPUs was to speed up the calculations.\r\n\r\nThe Client invested heavily into building CPU+GPU clusters relying on AMAX. They had the code running on four compute nodes, with four GPUs on each node. Each GPU was a NVIDIA K20X. The code ran on 16 GPUs. They were in the process of installing an even bigger system, with 64 total GPUs.\r\n<h4>Action</h4>\r\nOur initial plan was adjusted as the project progressed, and we identified key areas that needed improvement. The first couple of weeks were somewhat tricky because we were not able to get a working version of the codebase that was representative of the code they were actually running. This was because the code was in a very active state of development and integration on their side.\r\n\r\nWe made several suggestions to improve the efficiency of the codebase, but most of these were minor improvements. There were two levels of parallelism in the code—at the kernel level (GPU CUDA code) and the cluster level (MPI). One of the really useful suggestions we made was relevant at the MPI level, where we suggested they organize their policies in a random manner to distribute the computing load in a more uniform manner. This led to a major efficiency increase. This suggestion was immediately implemented by their engineers. Another useful contribution we made was to stress-test their code to get an estimate of how many more policies they could handle. This was really simple to do, but was a big hit within the company.\r\n\r\nIn the begging of the project, we were unable to access a working version of their code. Additionally, we were not able to access their machines from our laptops. Both of these challenges were overcome in the following week and no significant adjustments to the original plan were required.\r\n<h4>Results</h4>\r\nThe final deliverable consisted of a detailed technical report covering six modules of our assessment of F3F Company\'s HPS, including the following system reviews: code base, performance and optimization, fault tolerance, scalability, compatibility with emerging CUDA trends, and disaster recovery. We also delivered an executive summary of our findings suitable for higher management.\r\n\r\nThe Client had already developed the code base for their HPS. They engaged ArrayFire to obtain an expert assessment of their work, and to get a \"stamp of approval\" that the code will work as intended and is of sufficiently good quality. We successfully delivered on all objectives. Our assessment and findings were fully documented in nearly 100 pages of detailed technical reports and slide modules. These contained a wealth of significant benchmarks and visuals related to the code base and our assessment of their HPS.\r\n\r\nThe Client was extremely satisfied with our input and suggestions. We met or exceeded their expectations in all project objectives and deliverables.\r\n<h6>About Our Client</h6>\r\nHeadquartered in the Philadelphia region, the Fortune 300 Financial Services Company offers a diverse range of financial services and solutions. With a strong focus on four core business areas — life insurance, annuities, retirement plan services, and group protection — their business is built around supporting, preserving, and enhancing our customer\'s lifestyles and providing better retirement outcomes.[/column][column type=\"one-fifth\" last=\"true\"].[/column][/content_band]\r\n\r\nGraphics credit <a href=\"http://cliparts.co/clipart/2385767\">cliparts.co</a>','Case Study: Fortune 300 Financial Company','','inherit','closed','closed','','6928-revision-v1','','','2016-08-23 16:07:22','2016-08-23 20:07:22','',6928,'http://sandbox.arrayfire.com/6928-revision-v1/',0,'revision','',0),(9086,18528,'2016-08-23 16:07:52','2016-08-23 20:07:52','[content_band inner_container=\"true\" no_margin=\"true\" border=\"top\" padding_top=\"40px\" padding_bottom=\"40px\"][column type=\"one-fifth\"].[/column][column type=\"three-fifths\"][custom_headline type=\"left\" level=\"h3\"]Fortune 300 Financial Company[/custom_headline][/column][column type=\"one-fifth\" last=\"true\"].[/column][gap size=\"3%\"]\r\n\r\n[column type=\"one-fifth\"].[/column][column type=\"three-fifths\"]\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2015/04/philadelphia-skyline.png\"><img class=\"aligncenter size-full wp-image-9081\" src=\"http://sandbox.arrayfire.com/wp-content/uploads/2015/04/philadelphia-skyline.png\" alt=\"philadelphia-skyline\" width=\"720\" height=\"160\" /></a>\r\n\r\nA Fortune 300 Financial Company ported their CPU code (C/C++) to CUDA and this enabled them to speed up the necessary financial calculations. Their primary objective was to reduce the time taken to run this code. Before porting to CUDA, they required ten to twelve hours to run the entire code. After porting to CUDA, they were able to do the same work in about 30 minutes.\r\n\r\nThe Client has several C/C++ programmers in their team and they trained many of them to use CUDA. Their code used CUDA to speed up a calculation using Monte Carlo methods to analyze various scenarios in their hedge-fund projection system (HPS). The major portion of their calculations were carried out on independent policies and thus the entire process was ideal for parallel programming (no communication bottlenecks).\r\n<h4>Mission</h4>\r\nThe CPU code was slow and this was holding them back. Because the code took the entire night to run, they were not able to run several different scenarios and take corrective action based on the results of the code. The primary reason to move to GPUs was to speed up the calculations.\r\n\r\nThe Client invested heavily into building CPU+GPU clusters relying on AMAX. They had the code running on four compute nodes, with four GPUs on each node. Each GPU was a NVIDIA K20X. The code ran on 16 GPUs. They were in the process of installing an even bigger system, with 64 total GPUs.\r\n<h4>Action</h4>\r\nOur initial plan was adjusted as the project progressed, and we identified key areas that needed improvement. The first couple of weeks were somewhat tricky because we were not able to get a working version of the codebase that was representative of the code they were actually running. This was because the code was in a very active state of development and integration on their side.\r\n\r\nWe made several suggestions to improve the efficiency of the codebase, but most of these were minor improvements. There were two levels of parallelism in the code—at the kernel level (GPU CUDA code) and the cluster level (MPI). One of the really useful suggestions we made was relevant at the MPI level, where we suggested they organize their policies in a random manner to distribute the computing load in a more uniform manner. This led to a major efficiency increase. This suggestion was immediately implemented by their engineers. Another useful contribution we made was to stress-test their code to get an estimate of how many more policies they could handle. This was really simple to do, but was a big hit within the company.\r\n\r\nIn the begging of the project, we were unable to access a working version of their code. Additionally, we were not able to access their machines from our laptops. Both of these challenges were overcome in the following week and no significant adjustments to the original plan were required.\r\n<h4>Results</h4>\r\nThe final deliverable consisted of a detailed technical report covering six modules of our assessment of Client\'s HPS, including the following system reviews: code base, performance and optimization, fault tolerance, scalability, compatibility with emerging CUDA trends, and disaster recovery. We also delivered an executive summary of our findings suitable for higher management.\r\n\r\nThe Client had already developed the code base for their HPS. They engaged ArrayFire to obtain an expert assessment of their work, and to get a \"stamp of approval\" that the code will work as intended and is of sufficiently good quality. We successfully delivered on all objectives. Our assessment and findings were fully documented in nearly 100 pages of detailed technical reports and slide modules. These contained a wealth of significant benchmarks and visuals related to the code base and our assessment of their HPS.\r\n\r\nThe Client was extremely satisfied with our input and suggestions. We met or exceeded their expectations in all project objectives and deliverables.\r\n<h6>About Our Client</h6>\r\nHeadquartered in the Philadelphia region, the Fortune 300 Financial Services Company offers a diverse range of financial services and solutions. With a strong focus on four core business areas — life insurance, annuities, retirement plan services, and group protection — their business is built around supporting, preserving, and enhancing our customer\'s lifestyles and providing better retirement outcomes.[/column][column type=\"one-fifth\" last=\"true\"].[/column][/content_band]\r\n\r\nGraphics credit <a href=\"http://cliparts.co/clipart/2385767\">cliparts.co</a>','Case Study: Fortune 300 Financial Company','','inherit','closed','closed','','6928-revision-v1','','','2016-08-23 16:07:52','2016-08-23 20:07:52','',6928,'http://sandbox.arrayfire.com/6928-revision-v1/',0,'revision','',0),(9087,18528,'2016-08-23 16:08:21','2016-08-23 20:08:21','[content_band inner_container=\"true\" no_margin=\"true\" border=\"top\" padding_top=\"40px\" padding_bottom=\"40px\"][column type=\"one-fifth\"].[/column][column type=\"three-fifths\"][custom_headline type=\"left\" level=\"h3\"]Fortune 300 Financial Company[/custom_headline][/column][column type=\"one-fifth\" last=\"true\"].[/column][gap size=\"3%\"]\r\n\r\n[column type=\"one-fifth\"].[/column][column type=\"three-fifths\"]\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2015/04/philadelphia-skyline.png\"><img class=\"aligncenter size-full wp-image-9081\" src=\"http://sandbox.arrayfire.com/wp-content/uploads/2015/04/philadelphia-skyline.png\" alt=\"philadelphia-skyline\" width=\"720\" height=\"160\" /></a>\r\n\r\nA Fortune 300 Financial Company ported their CPU code (C/C++) to CUDA and this enabled them to speed up the necessary financial calculations. Their primary objective was to reduce the time taken to run this code. Before porting to CUDA, they required ten to twelve hours to run the entire code. After porting to CUDA, they were able to do the same work in about 30 minutes.\r\n\r\nThe Client has several C/C++ programmers in their team and they trained many of them to use CUDA. Their code used CUDA to speed up a calculation using Monte Carlo methods to analyze various scenarios in their hedge-fund projection system (HPS). The major portion of their calculations were carried out on independent policies and thus the entire process was ideal for parallel programming (no communication bottlenecks).\r\n<h4>Mission</h4>\r\nThe CPU code was slow and this was holding them back. Because the code took the entire night to run, they were not able to run several different scenarios and take corrective action based on the results of the code. The primary reason to move to GPUs was to speed up the calculations.\r\n\r\nThe Client invested heavily into building CPU+GPU clusters relying on AMAX. They had the code running on four compute nodes, with four GPUs on each node. Each GPU was a NVIDIA K20X. The code ran on 16 GPUs. They were in the process of installing an even bigger system, with 64 total GPUs.\r\n<h4>Action</h4>\r\nOur initial plan was adjusted as the project progressed, and we identified key areas that needed improvement. The first couple of weeks were somewhat tricky because we were not able to get a working version of the codebase that was representative of the code they were actually running. This was because the code was in a very active state of development and integration on their side.\r\n\r\nWe made several suggestions to improve the efficiency of the codebase, but most of these were minor improvements. There were two levels of parallelism in the code—at the kernel level (GPU CUDA code) and the cluster level (MPI). One of the really useful suggestions we made was relevant at the MPI level, where we suggested they organize their policies in a random manner to distribute the computing load in a more uniform manner. This led to a major efficiency increase. This suggestion was immediately implemented by their engineers. Another useful contribution we made was to stress-test their code to get an estimate of how many more policies they could handle. This was really simple to do, but was a big hit within the company.\r\n\r\nIn the begging of the project, we were unable to access a working version of their code. Additionally, we were not able to access their machines from our laptops. Both of these challenges were overcome in the following week and no significant adjustments to the original plan were required.\r\n<h4>Results</h4>\r\nThe final deliverable consisted of a detailed technical report covering six modules of our assessment of Client\'s HPS, including the following system reviews: code base, performance and optimization, fault tolerance, scalability, compatibility with emerging CUDA trends, and disaster recovery. We also delivered an executive summary of our findings suitable for higher management.\r\n\r\nThe Client had already developed the code base for their HPS. They engaged ArrayFire to obtain an expert assessment of their work, and to get a \"stamp of approval\" that the code will work as intended and is of sufficiently good quality. We successfully delivered on all objectives. Our assessment and findings were fully documented in nearly 100 pages of detailed technical reports and slide modules. These contained a wealth of significant benchmarks and visuals related to the code base and our assessment of their HPS.\r\n\r\nThe Client was extremely satisfied with our input and suggestions. We met or exceeded their expectations in all project objectives and deliverables.\r\n[/column][column type=\"one-fifth\" last=\"true\"].[/column][/content_band]\r\n\r\nGraphics credit <a href=\"http://cliparts.co/clipart/2385767\">cliparts.co</a>','Case Study: Fortune 300 Financial Company','','inherit','closed','closed','','6928-revision-v1','','','2016-08-23 16:08:21','2016-08-23 20:08:21','',6928,'http://sandbox.arrayfire.com/6928-revision-v1/',0,'revision','',0),(9088,18528,'2016-08-23 16:08:44','2016-08-23 20:08:44','[content_band inner_container=\"true\" no_margin=\"true\" border=\"top\" padding_top=\"40px\" padding_bottom=\"40px\"][column type=\"one-fifth\"].[/column][column type=\"three-fifths\"][custom_headline type=\"left\" level=\"h3\"]Fortune 300 Financial Company[/custom_headline][/column][column type=\"one-fifth\" last=\"true\"].[/column][gap size=\"3%\"]\r\n\r\n[column type=\"one-fifth\"].[/column][column type=\"three-fifths\"]\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2015/04/philadelphia-skyline.png\"><img class=\"aligncenter size-full wp-image-9081\" src=\"http://sandbox.arrayfire.com/wp-content/uploads/2015/04/philadelphia-skyline.png\" alt=\"philadelphia-skyline\" width=\"720\" height=\"160\" /></a>\r\n\r\nA Fortune 300 Financial Company located in the North East ported their CPU code (C/C++) to CUDA and this enabled them to speed up the necessary financial calculations. Their primary objective was to reduce the time taken to run this code. Before porting to CUDA, they required ten to twelve hours to run the entire code. After porting to CUDA, they were able to do the same work in about 30 minutes.\r\n\r\nThe Client has several C/C++ programmers in their team and they trained many of them to use CUDA. Their code used CUDA to speed up a calculation using Monte Carlo methods to analyze various scenarios in their hedge-fund projection system (HPS). The major portion of their calculations were carried out on independent policies and thus the entire process was ideal for parallel programming (no communication bottlenecks).\r\n<h4>Mission</h4>\r\nThe CPU code was slow and this was holding them back. Because the code took the entire night to run, they were not able to run several different scenarios and take corrective action based on the results of the code. The primary reason to move to GPUs was to speed up the calculations.\r\n\r\nThe Client invested heavily into building CPU+GPU clusters relying on AMAX. They had the code running on four compute nodes, with four GPUs on each node. Each GPU was a NVIDIA K20X. The code ran on 16 GPUs. They were in the process of installing an even bigger system, with 64 total GPUs.\r\n<h4>Action</h4>\r\nOur initial plan was adjusted as the project progressed, and we identified key areas that needed improvement. The first couple of weeks were somewhat tricky because we were not able to get a working version of the codebase that was representative of the code they were actually running. This was because the code was in a very active state of development and integration on their side.\r\n\r\nWe made several suggestions to improve the efficiency of the codebase, but most of these were minor improvements. There were two levels of parallelism in the code—at the kernel level (GPU CUDA code) and the cluster level (MPI). One of the really useful suggestions we made was relevant at the MPI level, where we suggested they organize their policies in a random manner to distribute the computing load in a more uniform manner. This led to a major efficiency increase. This suggestion was immediately implemented by their engineers. Another useful contribution we made was to stress-test their code to get an estimate of how many more policies they could handle. This was really simple to do, but was a big hit within the company.\r\n\r\nIn the begging of the project, we were unable to access a working version of their code. Additionally, we were not able to access their machines from our laptops. Both of these challenges were overcome in the following week and no significant adjustments to the original plan were required.\r\n<h4>Results</h4>\r\nThe final deliverable consisted of a detailed technical report covering six modules of our assessment of Client\'s HPS, including the following system reviews: code base, performance and optimization, fault tolerance, scalability, compatibility with emerging CUDA trends, and disaster recovery. We also delivered an executive summary of our findings suitable for higher management.\r\n\r\nThe Client had already developed the code base for their HPS. They engaged ArrayFire to obtain an expert assessment of their work, and to get a \"stamp of approval\" that the code will work as intended and is of sufficiently good quality. We successfully delivered on all objectives. Our assessment and findings were fully documented in nearly 100 pages of detailed technical reports and slide modules. These contained a wealth of significant benchmarks and visuals related to the code base and our assessment of their HPS.\r\n\r\nThe Client was extremely satisfied with our input and suggestions. We met or exceeded their expectations in all project objectives and deliverables.\r\n[/column][column type=\"one-fifth\" last=\"true\"].[/column][/content_band]\r\n\r\nGraphics credit <a href=\"http://cliparts.co/clipart/2385767\">cliparts.co</a>','Case Study: Fortune 300 Financial Company','','inherit','closed','closed','','6928-revision-v1','','','2016-08-23 16:08:44','2016-08-23 20:08:44','',6928,'http://sandbox.arrayfire.com/6928-revision-v1/',0,'revision','',0),(9089,18528,'2016-08-23 16:09:37','2016-08-23 20:09:37','[content_band inner_container=\"true\" no_margin=\"true\" border=\"top\" padding_top=\"40px\" padding_bottom=\"40px\"][column type=\"one-fifth\"].[/column][column type=\"three-fifths\"][custom_headline type=\"left\" level=\"h3\"]Fortune 300 Financial Company[/custom_headline][/column][column type=\"one-fifth\" last=\"true\"].[/column][gap size=\"3%\"]\r\n\r\n[column type=\"one-fifth\"].[/column][column type=\"three-fifths\"]\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2015/04/philadelphia-skyline.png\"><img class=\"aligncenter size-full wp-image-9081\" src=\"http://sandbox.arrayfire.com/wp-content/uploads/2015/04/philadelphia-skyline.png\" alt=\"philadelphia-skyline\" width=\"720\" height=\"160\" /></a>\r\n\r\nA Fortune 300 Financial Company located in the North East USA ported their CPU code (C/C++) to CUDA and this enabled them to speed up the necessary financial calculations. Their primary objective was to reduce the time taken to run this code. Before porting to CUDA, they required ten to twelve hours to run the entire code. After porting to CUDA, they were able to do the same work in about 30 minutes.\r\n\r\nThe Client has several C/C++ programmers in their team and they trained many of them to use CUDA. Their code used CUDA to speed up a calculation using Monte Carlo methods to analyze various scenarios in their hedge-fund projection system (HPS). The major portion of their calculations were carried out on independent policies and thus the entire process was ideal for parallel programming (no communication bottlenecks).\r\n<h4>Mission</h4>\r\nThe CPU code was slow and this was holding them back. Because the code took the entire night to run, they were not able to run several different scenarios and take corrective action based on the results of the code. The primary reason to move to GPUs was to speed up the calculations.\r\n\r\nThe Client invested heavily into building CPU+GPU clusters relying on AMAX. They had the code running on four compute nodes, with four GPUs on each node. Each GPU was a NVIDIA K20X. The code ran on 16 GPUs. They were in the process of installing an even bigger system, with 64 total GPUs.\r\n<h4>Action</h4>\r\nOur initial plan was adjusted as the project progressed, and we identified key areas that needed improvement. The first couple of weeks were somewhat tricky because we were not able to get a working version of the codebase that was representative of the code they were actually running. This was because the code was in a very active state of development and integration on their side.\r\n\r\nWe made several suggestions to improve the efficiency of the codebase, but most of these were minor improvements. There were two levels of parallelism in the code—at the kernel level (GPU CUDA code) and the cluster level (MPI). One of the really useful suggestions we made was relevant at the MPI level, where we suggested they organize their policies in a random manner to distribute the computing load in a more uniform manner. This led to a major efficiency increase. This suggestion was immediately implemented by their engineers. Another useful contribution we made was to stress-test their code to get an estimate of how many more policies they could handle. This was really simple to do, but was a big hit within the company.\r\n\r\nIn the begging of the project, we were unable to access a working version of their code. Additionally, we were not able to access their machines from our laptops. Both of these challenges were overcome in the following week and no significant adjustments to the original plan were required.\r\n<h4>Results</h4>\r\nThe final deliverable consisted of a detailed technical report covering six modules of our assessment of Client\'s HPS, including the following system reviews: code base, performance and optimization, fault tolerance, scalability, compatibility with emerging CUDA trends, and disaster recovery. We also delivered an executive summary of our findings suitable for higher management.\r\n\r\nThe Client had already developed the code base for their HPS. They engaged ArrayFire to obtain an expert assessment of their work, and to get a \"stamp of approval\" that the code will work as intended and is of sufficiently good quality. We successfully delivered on all objectives. Our assessment and findings were fully documented in nearly 100 pages of detailed technical reports and slide modules. These contained a wealth of significant benchmarks and visuals related to the code base and our assessment of their HPS.\r\n\r\nThe Client was extremely satisfied with our input and suggestions. We met or exceeded their expectations in all project objectives and deliverables.\r\n[/column][column type=\"one-fifth\" last=\"true\"].[/column][/content_band]\r\n\r\nGraphics credit <a href=\"http://cliparts.co/clipart/2385767\">cliparts.co</a>','Case Study: Fortune 300 Financial Company','','inherit','closed','closed','','6928-revision-v1','','','2016-08-23 16:09:37','2016-08-23 20:09:37','',6928,'http://sandbox.arrayfire.com/6928-revision-v1/',0,'revision','',0),(9090,18528,'2016-08-23 16:12:26','2016-08-23 20:12:26','We\'ve worked with clients from the financial sector, academia, entertainment, and defense sectors. Below we show some of our favorite projects we\'ve worked on in the past.\r\n\r\n[content_band bg_color=\"#ffffff\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"][custom_headline type=\"left\" level=\"h2\" ]Computer Vision[/custom_headline][gap size=\"4%\"]\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/10/glasses-logo-promo-01.png\" alt=\"Glasses.com\"]The Glasses.com app relies on computer vision to recognize the features of a user’s face. The application then generates an accurate, high-fidelity, three-dimensional model of that face, and virtually places selected frames on the image.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-glasses-com-app-with-3dfit-technology/\" size=\"regular\" ]Read the case study[/button][/promo][/column]</p>\r\n[column type=\"one-half\" last=\"true\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/10/reveal-logo-promo-01.png\" alt=\"Reveal Imaging\"]Reveal Imaging, an SAIC company, uses ArrayFire in developing threat-detection products for transportation systems—such as cargo and baggage screening in airports—and in securing facilities and public events.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-reveal-imaging/\" size=\"regular\" ]Read the case study[/button][/promo][/column][/content_band]</p>\r\n\r\n[content_band bg_color=\"#ffffff\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"][custom_headline type=\"left\" level=\"h2\" ]Financial Services[/custom_headline][gap size=\"4%\"]\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2015/04/philadelphia-skyline.png\" alt=\"Fortune 300 Financial Services Company\"]\r\nArrayFire was hired to evaluate the performance of a hedge platform implemented in CUDA. Our final deliverable consisted of a 100 page report discussing the code base, performance and optimization, fault tolerance, scalability, compatibility with emerging trends, and  disaster recovery options. Our suggestions resulted in a 20% decrease in production runtimes.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-case-study-fortune-300-financial-company\" size=\"regular\" ]Read the case study[/button][/promo][/column]</p>\r\n\r\n[/content_band]','Case Studies','','inherit','closed','closed','','9071-revision-v1','','','2016-08-23 16:12:26','2016-08-23 20:12:26','',9071,'http://sandbox.arrayfire.com/9071-revision-v1/',0,'revision','',0),(9091,18528,'2016-08-24 10:52:37','2016-08-24 14:52:37','<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/pT5oEjE8c.jpg\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/pT5oEjE8c-1024x240.jpg\" alt=\"skyline-san-fransisco\" width=\"742\" height=\"174\" class=\"aligncenter size-large wp-image-9103\" /></a>\r\n\r\nA Fortune 200 Insurance Company located on the West coast was using a third-party, closed-source application to make inferences about future market conditions in order to hedge their investments. In order to carry out calculations over millions of possible scenarios, they were using a small cluster consisting of 1,300 hyperthreaded CPU cores in blade servers. In the near term, they projected that their business needs would grow by a factor of two and they were near capacity with their existing system.\r\n\r\n<h3>Mission</h3>\r\n\r\nThe Client hired ArrayFire to conduct a comprehensive audit of their system to access its performance in nine key areas:\r\n\r\n<ol>\r\n	<li> The technological platform - a high-level overview of their system, example execution flows, discussions of shortcomings of their current approach, and recommendations for how the system could be optimized to be more efficient, execute faster, and be more reliable.\r\n	<li> The code base - our engineers evaluated the code for compsition, quality, conformance with the best industry practices, and performance characteristics.  \r\n	<li> Data management and governance policies - a comparision of Client\'s policies with industry standards.\r\n	<li> Performance and optimization strategies - Using runtime profiling ArrayFire explored various approaches for how the system might be optmized to improve throughput.\r\n	<li> Fault tolerance, stability, and reliability - Using on-site inspections, interviews with employees, and parsing documentation, ArrayFire accessed whether machines were sufficiently redudnant to meet business needs, inspected flows of data throughout the system (storage, network, compute infrastructure, etc.), and attempted to locate single points of failure and unreliable cross-over points.\r\n	<li> Scalability - ArrayFire tested various assumptions about how their platform might tolerate projected business growth and provided suggestions on how their computational enviornment could be modified to tolerate future conditions.\r\n	<li> Compatibility with emerging trends - ArrayFire parsed academic and business literature to find state-of-the-art implementations of the Client\'s application.\r\n	<li> Disaster recovery platforms - Through parsing the disaster recovery documentation and interviews with employees, ArrayFire compared Client\'s disaster recovery platform with industry standards.\r\n	<li> Change management process - ArrayFire compared Client\'s process of implementing and testing changes to their code with industry best practices.\r\n</ol>\r\n\r\n<h3>Action</h3>\r\n\r\nOver a period of two months, ArrayFire investigated the aforementioned items, conducted on-site and phone interviews with employees, and profiled all aspects of their existing software. This included disk I/O, database access patterns, network bandwidth utilization, processor utilization, load balancing, execution order modifications, and code optimizations. \r\n\r\n<h3>Results</h3>\r\n\r\nThese techniques resulted in the discovery of hitherto unknown bottleknecks. In particular, poorly chosen virtual disk layouts in a SAN resulted in disk I/O limitations, job order execution resulted in heavy database lock contention, and poor load balancing caused a significant portion of the cluster to sit idle during production runs.\r\n\r\nThrough profiling, ArrayFire predicted portions of their code could be accelerated by 1.3 - 18 times. Furthermore, components of their system could be improved by nearly 50% with minor modifications. Using known runtime information, ArrayFire predicted the entire process could be reduced by approximately 45%, on the existing hardware, if all of our suggestions were implemented. Subsequent communications with Client indicated they implemented most of our (prioritized) suggestions and decreased total production runtimes by nearly 39%.\r\n\r\n[content_band bg_image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/11/Epipheo-background1.png\" parallax=\"true\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\" ]\r\n[blockquote cite=\"<span style=\"color: #ffffff;\">Engineer for Client</span>\" type=\"center\"]\r\n<span style=\"color: #ffffff;\">\r\nCompared to Wednesday night, the [REDACTED] jobs took 35 minutes less and the [REDACTED] to 2 hours less.  This is runtime reduction of 39% in both cases.\r\n</span>\r\n<span style=\"color: #ffffff;\">- Systems Engineer, Client</span>[/blockquote]\r\n[/content_band]\r\n\r\n\r\nImage Credit <a href=\"http://cliparts.co\">ClipArts.co</a>','Case Study: Fortune 200 Insurance Company','','publish','closed','closed','','case-study-fortune-200-insurance-company','','','2016-08-24 10:52:37','2016-08-24 14:52:37','',0,'http://sandbox.arrayfire.com/?page_id=9091',0,'page','',0),(9092,18528,'2016-08-24 08:01:05','2016-08-24 12:01:05','We\'ve worked with clients from the financial sector, academia, entertainment, and defense sectors. Below we show some of our favorite projects we\'ve worked on in the past.\r\n\r\n[content_band bg_color=\"#ffffff\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"][custom_headline type=\"left\" level=\"h2\" ]Computer Vision[/custom_headline][gap size=\"4%\"]\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/10/glasses-logo-promo-01.png\" alt=\"Glasses.com\"]The Glasses.com app relies on computer vision to recognize the features of a user’s face. The application then generates an accurate, high-fidelity, three-dimensional model of that face, and virtually places selected frames on the image.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-glasses-com-app-with-3dfit-technology/\" size=\"regular\" ]Read the case study[/button][/promo][/column]</p>\r\n[column type=\"one-half\" last=\"true\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/10/reveal-logo-promo-01.png\" alt=\"Reveal Imaging\"]Reveal Imaging, an SAIC company, uses ArrayFire in developing threat-detection products for transportation systems—such as cargo and baggage screening in airports—and in securing facilities and public events.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-reveal-imaging/\" size=\"regular\" ]Read the case study[/button][/promo][/column][/content_band]</p>\r\n\r\n[content_band bg_color=\"#ffffff\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"][custom_headline type=\"left\" level=\"h2\" ]Financial Services[/custom_headline][gap size=\"4%\"]\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2015/04/philadelphia-skyline.png\" alt=\"Fortune 300 Financial Services Company\"]\r\nArrayFire was hired to evaluate the performance of a hedge platform implemented in CUDA. Our final deliverable consisted of a 100 page report discussing the code base, performance and optimization, fault tolerance, scalability, compatibility with emerging trends, and  disaster recovery options. Our suggestions resulted in a 20% decrease in production runtimes.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-fortune-300-financial-company\" size=\"regular\" ]Read the case study[/button][/promo][/column]</p>\r\n\r\n[/content_band]','Case Studies','','inherit','closed','closed','','9071-revision-v1','','','2016-08-24 08:01:05','2016-08-24 12:01:05','',9071,'http://sandbox.arrayfire.com/9071-revision-v1/',0,'revision','',0),(9093,18528,'2016-08-24 08:40:03','2016-08-24 12:40:03','A Fortune 200 Insurance Company located on the West coast\r\n<h3>Mission</h3>\r\n<h3>Action</h3>\r\nevaluate their technological platforms, code base, data management and governance policies, performance and optimization, fault tolerance characteristics, scalability issues, compatability with emerging trends, disaster recovery platforms, and change management processes.\r\n<h3>Results</h3>\r\n\r\n[blockquote cite=\"<span style=\"color: #ffffff;\">Engineer for Client</span>\" type=\"center\"]\r\n<span style=\"color: #ffffff;\">\r\nCompared to Wednesday night, the [REDACTED] jobs took 35 minutes less and the [REDACTED] to 2 hours less.  This is runtime reduction of 39% in both cases.\r\n</span>\r\n<span style=\"color: #ffffff;\">Engineer for Client</span>[/blockquote]\r\n\r\n\"Compared to Wednesday night, the [REDACTED] jobs took 35 minutes less and the [REDACTED] to 2 hours less.  This is runtime reduction of 39% in both cases.\" - Engineer for Client\r\n<ul>\r\n 	<li>Executive summaries discussing both hedge platforms, and their disaster recovery solution</li>\r\n 	<li>Middle-management report summarizing our findings including suggestions for performance improvements and estimates for the acceleration potential.</li>\r\n 	<li>A detailed, 160 page report discussing the status quo, shortcomings of their current approach, and recommendations for improvement.</li>\r\n</ul>\r\n&nbsp;','Case Study: Fortune 200 Insurance Company','','inherit','closed','closed','','9091-revision-v1','','','2016-08-24 08:40:03','2016-08-24 12:40:03','',9091,'http://sandbox.arrayfire.com/9091-revision-v1/',0,'revision','',0),(9094,18528,'2016-08-24 08:40:25','2016-08-24 12:40:25','A Fortune 200 Insurance Company located on the West coast\r\n<h3>Mission</h3>\r\n<h3>Action</h3>\r\nevaluate their technological platforms, code base, data management and governance policies, performance and optimization, fault tolerance characteristics, scalability issues, compatability with emerging trends, disaster recovery platforms, and change management processes.\r\n<h3>Results</h3>\r\n\r\n[content_band bg_image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/11/Epipheo-background1.png\" parallax=\"true\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\" ]\r\n[blockquote cite=\"<span style=\"color: #ffffff;\">Engineer for Client</span>\" type=\"center\"]\r\n<span style=\"color: #ffffff;\">\r\nCompared to Wednesday night, the [REDACTED] jobs took 35 minutes less and the [REDACTED] to 2 hours less.  This is runtime reduction of 39% in both cases.\r\n</span>\r\n<span style=\"color: #ffffff;\">Engineer for Client</span>[/blockquote]\r\n[/content_band]\r\n\r\n\"Compared to Wednesday night, the [REDACTED] jobs took 35 minutes less and the [REDACTED] to 2 hours less.  This is runtime reduction of 39% in both cases.\" - Engineer for Client\r\n<ul>\r\n 	<li>Executive summaries discussing both hedge platforms, and their disaster recovery solution</li>\r\n 	<li>Middle-management report summarizing our findings including suggestions for performance improvements and estimates for the acceleration potential.</li>\r\n 	<li>A detailed, 160 page report discussing the status quo, shortcomings of their current approach, and recommendations for improvement.</li>\r\n</ul>\r\n&nbsp;','Case Study: Fortune 200 Insurance Company','','inherit','closed','closed','','9091-revision-v1','','','2016-08-24 08:40:25','2016-08-24 12:40:25','',9091,'http://sandbox.arrayfire.com/9091-revision-v1/',0,'revision','',0),(9095,18528,'2016-08-24 08:41:42','2016-08-24 12:41:42','A Fortune 200 Insurance Company located on the West coast\r\n<h3>Mission</h3>\r\n<h3>Action</h3>\r\nevaluate their technological platforms, code base, data management and governance policies, performance and optimization, fault tolerance characteristics, scalability issues, compatability with emerging trends, disaster recovery platforms, and change management processes.\r\n<h3>Results</h3>\r\n\r\n[content_band bg_image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/11/Epipheo-background1.png\" parallax=\"true\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\" ]\r\n[blockquote cite=\"<span style=\"color: #ffffff;\">Engineer for Client</span>\" type=\"center\"]\r\n<span style=\"color: #ffffff;\">\r\nCompared to Wednesday night, the [REDACTED] jobs took 35 minutes less and the [REDACTED] to 2 hours less.  This is runtime reduction of 39% in both cases.\r\n</span>\r\n<span style=\"color: #ffffff;\">- Engineer, Client</span>[/blockquote]\r\n[/content_band]\r\n\r\n\"Compared to Wednesday night, the [REDACTED] jobs took 35 minutes less and the [REDACTED] to 2 hours less.  This is runtime reduction of 39% in both cases.\" - Engineer for Client\r\n<ul>\r\n 	<li>Executive summaries discussing both hedge platforms, and their disaster recovery solution</li>\r\n 	<li>Middle-management report summarizing our findings including suggestions for performance improvements and estimates for the acceleration potential.</li>\r\n 	<li>A detailed, 160 page report discussing the status quo, shortcomings of their current approach, and recommendations for improvement.</li>\r\n</ul>\r\n&nbsp;','Case Study: Fortune 200 Insurance Company','','inherit','closed','closed','','9091-revision-v1','','','2016-08-24 08:41:42','2016-08-24 12:41:42','',9091,'http://sandbox.arrayfire.com/9091-revision-v1/',0,'revision','',0),(9096,18528,'2016-08-24 08:41:54','2016-08-24 12:41:54','A Fortune 200 Insurance Company located on the West coast\r\n<h3>Mission</h3>\r\n<h3>Action</h3>\r\nevaluate their technological platforms, code base, data management and governance policies, performance and optimization, fault tolerance characteristics, scalability issues, compatability with emerging trends, disaster recovery platforms, and change management processes.\r\n<h3>Results</h3>\r\n\r\n[content_band bg_image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/11/Epipheo-background1.png\" parallax=\"true\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\" ]\r\n[blockquote cite=\"<span style=\"color: #ffffff;\">Engineer for Client</span>\" type=\"center\"]\r\n<span style=\"color: #ffffff;\">\r\nCompared to Wednesday night, the [REDACTED] jobs took 35 minutes less and the [REDACTED] to 2 hours less.  This is runtime reduction of 39% in both cases.\r\n</span>\r\n<span style=\"color: #ffffff;\">- Systems Engineer, Client</span>[/blockquote]\r\n[/content_band]\r\n\r\n\"Compared to Wednesday night, the [REDACTED] jobs took 35 minutes less and the [REDACTED] to 2 hours less.  This is runtime reduction of 39% in both cases.\" - Engineer for Client\r\n<ul>\r\n 	<li>Executive summaries discussing both hedge platforms, and their disaster recovery solution</li>\r\n 	<li>Middle-management report summarizing our findings including suggestions for performance improvements and estimates for the acceleration potential.</li>\r\n 	<li>A detailed, 160 page report discussing the status quo, shortcomings of their current approach, and recommendations for improvement.</li>\r\n</ul>\r\n&nbsp;','Case Study: Fortune 200 Insurance Company','','inherit','closed','closed','','9091-revision-v1','','','2016-08-24 08:41:54','2016-08-24 12:41:54','',9091,'http://sandbox.arrayfire.com/9091-revision-v1/',0,'revision','',0),(9097,18528,'2016-08-24 09:12:48','2016-08-24 13:12:48','A Fortune 200 Insurance Company located on the West coast was using a third-party, closed-source application to make inferences about future market conditions in order to hedge their investments. In order to carry out calculations over millions of possible scenarios, they were using a small cluster consisting of 1,300 hyperthreaded CPU cores in blade servers. In the near term, they projected that their business needs would grow by a factor of two and they were near capacity with their existing system.\r\n\r\n<h3>Mission</h3>\r\n\r\nThe Client hired ArrayFire to conduct a comprehensive audit of their system to access its performance in nine key areas:\r\n\r\n<ol>\r\n	<li> The technological platform - a high-level overview of their system, example execution flows, discussions of shortcomings of their current approach, and recommendations for how the system could be optimized to be more efficient, execute faster, and be more reliable.\r\n	<li> The code base - our engineers evaluated the code for compsition, quality, conformance with the best industry practices, and performance characteristics.  \r\n	<li> Data management and governance policies - a comparision of Client\'s policies with industry standards.\r\n	<li> Performance and optimization strategies - Using runtime profiling ArrayFire explored various approaches for how the system might be optmized to improve throughput.\r\n	<li> Fault tolerance, stability, and reliability - Using on-site inspections, interviews with employees, and parsing documentation, ArrayFire accessed whether machines were sufficiently redudnant to meet business needs, inspected flows of data throughout the system (storage, network, compute infrastructure, etc.), and attempted to locate single points of failure and unreliable cross-over points.\r\n	<li> Scalability - ArrayFire tested various assumptions about how their platform might tolerate projected business growth and provided suggestions on how their computational enviornment could be modified to tolerate future conditions.\r\n	<li> Compatibility with emerging trends - ArrayFire parsed academic and business literature to find state-of-the-art implementations of the Client\'s application.\r\n	<li> Disaster recovery platforms - Through parsing the disaster recovery documentation and interviews with employees, ArrayFire compared Client\'s disaster recovery platform with industry standards.\r\n	<li> Change management process - ArrayFire compared Client\'s process of implementing and testing changes to their code with industry best practices.\r\n</ol>\r\n\r\n<h3>Action</h3>\r\n\r\nOver a period of two months ArrayFire investigated these items, conducted interviews with employees, and profiled existing and hypothetical implementations to find the \r\n\r\n\r\n\r\nevaluate their technological platforms, code base, data management and governance policies, performance and optimization, fault tolerance characteristics, scalability issues, compatability with emerging trends, disaster recovery platforms, and change management processes.\r\n<h3>Results</h3>\r\n[content_band bg_image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/11/Epipheo-background1.png\" parallax=\"true\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\" ]\r\n[blockquote cite=\"<span style=\"color: #ffffff;\">Engineer for Client</span>\" type=\"center\"]\r\n<span style=\"color: #ffffff;\">\r\nCompared to Wednesday night, the [REDACTED] jobs took 35 minutes less and the [REDACTED] to 2 hours less.  This is runtime reduction of 39% in both cases.\r\n</span>\r\n<span style=\"color: #ffffff;\">- Systems Engineer, Client</span>[/blockquote]\r\n[/content_band]\r\n\r\n\"Compared to Wednesday night, the [REDACTED] jobs took 35 minutes less and the [REDACTED] to 2 hours less.  This is runtime reduction of 39% in both cases.\" - Engineer for Client\r\n<ul>\r\n 	<li>Executive summaries discussing both hedge platforms, and their disaster recovery solution</li>\r\n 	<li>Middle-management report summarizing our findings including suggestions for performance improvements and estimates for the acceleration potential.</li>\r\n 	<li>A detailed, 160 page report discussing the status quo, shortcomings of their current approach, and recommendations for improvement.</li>\r\n</ul>\r\n&nbsp;','Case Study: Fortune 200 Insurance Company','','inherit','closed','closed','','9091-revision-v1','','','2016-08-24 09:12:48','2016-08-24 13:12:48','',9091,'http://sandbox.arrayfire.com/9091-revision-v1/',0,'revision','',0),(9098,18528,'2016-08-24 09:35:14','2016-08-24 13:35:14','A Fortune 200 Insurance Company located on the West coast was using a third-party, closed-source application to make inferences about future market conditions in order to hedge their investments. In order to carry out calculations over millions of possible scenarios, they were using a small cluster consisting of 1,300 hyperthreaded CPU cores in blade servers. In the near term, they projected that their business needs would grow by a factor of two and they were near capacity with their existing system.\r\n\r\n<h3>Mission</h3>\r\n\r\nThe Client hired ArrayFire to conduct a comprehensive audit of their system to access its performance in nine key areas:\r\n\r\n<ol>\r\n	<li> The technological platform - a high-level overview of their system, example execution flows, discussions of shortcomings of their current approach, and recommendations for how the system could be optimized to be more efficient, execute faster, and be more reliable.\r\n	<li> The code base - our engineers evaluated the code for compsition, quality, conformance with the best industry practices, and performance characteristics.  \r\n	<li> Data management and governance policies - a comparision of Client\'s policies with industry standards.\r\n	<li> Performance and optimization strategies - Using runtime profiling ArrayFire explored various approaches for how the system might be optmized to improve throughput.\r\n	<li> Fault tolerance, stability, and reliability - Using on-site inspections, interviews with employees, and parsing documentation, ArrayFire accessed whether machines were sufficiently redudnant to meet business needs, inspected flows of data throughout the system (storage, network, compute infrastructure, etc.), and attempted to locate single points of failure and unreliable cross-over points.\r\n	<li> Scalability - ArrayFire tested various assumptions about how their platform might tolerate projected business growth and provided suggestions on how their computational enviornment could be modified to tolerate future conditions.\r\n	<li> Compatibility with emerging trends - ArrayFire parsed academic and business literature to find state-of-the-art implementations of the Client\'s application.\r\n	<li> Disaster recovery platforms - Through parsing the disaster recovery documentation and interviews with employees, ArrayFire compared Client\'s disaster recovery platform with industry standards.\r\n	<li> Change management process - ArrayFire compared Client\'s process of implementing and testing changes to their code with industry best practices.\r\n</ol>\r\n\r\n<h3>Action</h3>\r\n\r\nOver a period of two months, ArrayFire investigated the aforementioned items, conducted on-site and phone interviews with employees, and profiled all aspects of their existing software. This included disk I/O, database access patterns, network bandwidth utilization, processor utilization, load balancing, execution order modifications, and code optimizations. \r\n\r\n<h3>Results</h3>\r\n\r\nThese techniques resulted in the discovery of hitherto unknown bottleknecks. In particular, poorly chosen virtual disk layouts in a SAN resulted in disk I/O limitations, job order execution resulted in heavy database lock contention, and poor load balancing caused a significant portion of the cluster to sit idle during production runs.\r\n\r\nThrough experimentally informed mathematics, ArrayFire predicted some portions of the production runs could be accelerated by factors of 1.2 - 10x if all of our suggestions were implemented. Using known runtime data, we predicted the entire process could be accelerated by approximately 45% on the existing hardware if all of our suggestions were implemented. Subsequent communications with Client indicated they implemented most of our suggestions and decreased their runtime by 39%.\r\n\r\n[content_band bg_image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/11/Epipheo-background1.png\" parallax=\"true\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\" ]\r\n[blockquote cite=\"<span style=\"color: #ffffff;\">Engineer for Client</span>\" type=\"center\"]\r\n<span style=\"color: #ffffff;\">\r\nCompared to Wednesday night, the [REDACTED] jobs took 35 minutes less and the [REDACTED] to 2 hours less.  This is runtime reduction of 39% in both cases.\r\n</span>\r\n<span style=\"color: #ffffff;\">- Systems Engineer, Client</span>[/blockquote]\r\n[/content_band]\r\n\r\n\"Compared to Wednesday night, the [REDACTED] jobs took 35 minutes less and the [REDACTED] to 2 hours less.  This is runtime reduction of 39% in both cases.\" - Engineer for Client\r\n','Case Study: Fortune 200 Insurance Company','','inherit','closed','closed','','9091-revision-v1','','','2016-08-24 09:35:14','2016-08-24 13:35:14','',9091,'http://sandbox.arrayfire.com/9091-revision-v1/',0,'revision','',0),(9099,18528,'2016-08-24 09:35:34','2016-08-24 13:35:34','A Fortune 200 Insurance Company located on the West coast was using a third-party, closed-source application to make inferences about future market conditions in order to hedge their investments. In order to carry out calculations over millions of possible scenarios, they were using a small cluster consisting of 1,300 hyperthreaded CPU cores in blade servers. In the near term, they projected that their business needs would grow by a factor of two and they were near capacity with their existing system.\r\n\r\n<h3>Mission</h3>\r\n\r\nThe Client hired ArrayFire to conduct a comprehensive audit of their system to access its performance in nine key areas:\r\n\r\n<ol>\r\n	<li> The technological platform - a high-level overview of their system, example execution flows, discussions of shortcomings of their current approach, and recommendations for how the system could be optimized to be more efficient, execute faster, and be more reliable.\r\n	<li> The code base - our engineers evaluated the code for compsition, quality, conformance with the best industry practices, and performance characteristics.  \r\n	<li> Data management and governance policies - a comparision of Client\'s policies with industry standards.\r\n	<li> Performance and optimization strategies - Using runtime profiling ArrayFire explored various approaches for how the system might be optmized to improve throughput.\r\n	<li> Fault tolerance, stability, and reliability - Using on-site inspections, interviews with employees, and parsing documentation, ArrayFire accessed whether machines were sufficiently redudnant to meet business needs, inspected flows of data throughout the system (storage, network, compute infrastructure, etc.), and attempted to locate single points of failure and unreliable cross-over points.\r\n	<li> Scalability - ArrayFire tested various assumptions about how their platform might tolerate projected business growth and provided suggestions on how their computational enviornment could be modified to tolerate future conditions.\r\n	<li> Compatibility with emerging trends - ArrayFire parsed academic and business literature to find state-of-the-art implementations of the Client\'s application.\r\n	<li> Disaster recovery platforms - Through parsing the disaster recovery documentation and interviews with employees, ArrayFire compared Client\'s disaster recovery platform with industry standards.\r\n	<li> Change management process - ArrayFire compared Client\'s process of implementing and testing changes to their code with industry best practices.\r\n</ol>\r\n\r\n<h3>Action</h3>\r\n\r\nOver a period of two months, ArrayFire investigated the aforementioned items, conducted on-site and phone interviews with employees, and profiled all aspects of their existing software. This included disk I/O, database access patterns, network bandwidth utilization, processor utilization, load balancing, execution order modifications, and code optimizations. \r\n\r\n<h3>Results</h3>\r\n\r\nThese techniques resulted in the discovery of hitherto unknown bottleknecks. In particular, poorly chosen virtual disk layouts in a SAN resulted in disk I/O limitations, job order execution resulted in heavy database lock contention, and poor load balancing caused a significant portion of the cluster to sit idle during production runs.\r\n\r\nThrough experimentally informed mathematics, ArrayFire predicted some portions of the production runs could be accelerated by factors of 1.2 - 10x if all of our suggestions were implemented. Using known runtime data, we predicted the entire process could be accelerated by approximately 45% on the existing hardware if all of our suggestions were implemented. Subsequent communications with Client indicated they implemented most of our suggestions and decreased their runtime by 39%.\r\n\r\n[content_band bg_image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/11/Epipheo-background1.png\" parallax=\"true\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\" ]\r\n[blockquote cite=\"<span style=\"color: #ffffff;\">Engineer for Client</span>\" type=\"center\"]\r\n<span style=\"color: #ffffff;\">\r\nCompared to Wednesday night, the [REDACTED] jobs took 35 minutes less and the [REDACTED] to 2 hours less.  This is runtime reduction of 39% in both cases.\r\n</span>\r\n<span style=\"color: #ffffff;\">- Systems Engineer, Client</span>[/blockquote]\r\n[/content_band]','Case Study: Fortune 200 Insurance Company','','inherit','closed','closed','','9091-revision-v1','','','2016-08-24 09:35:34','2016-08-24 13:35:34','',9091,'http://sandbox.arrayfire.com/9091-revision-v1/',0,'revision','',0),(9100,18528,'2016-08-24 09:38:38','2016-08-24 13:38:38','A Fortune 200 Insurance Company located on the West coast was using a third-party, closed-source application to make inferences about future market conditions in order to hedge their investments. In order to carry out calculations over millions of possible scenarios, they were using a small cluster consisting of 1,300 hyperthreaded CPU cores in blade servers. In the near term, they projected that their business needs would grow by a factor of two and they were near capacity with their existing system.\r\n\r\n<h3>Mission</h3>\r\n\r\nThe Client hired ArrayFire to conduct a comprehensive audit of their system to access its performance in nine key areas:\r\n\r\n<ol>\r\n	<li> The technological platform - a high-level overview of their system, example execution flows, discussions of shortcomings of their current approach, and recommendations for how the system could be optimized to be more efficient, execute faster, and be more reliable.\r\n	<li> The code base - our engineers evaluated the code for compsition, quality, conformance with the best industry practices, and performance characteristics.  \r\n	<li> Data management and governance policies - a comparision of Client\'s policies with industry standards.\r\n	<li> Performance and optimization strategies - Using runtime profiling ArrayFire explored various approaches for how the system might be optmized to improve throughput.\r\n	<li> Fault tolerance, stability, and reliability - Using on-site inspections, interviews with employees, and parsing documentation, ArrayFire accessed whether machines were sufficiently redudnant to meet business needs, inspected flows of data throughout the system (storage, network, compute infrastructure, etc.), and attempted to locate single points of failure and unreliable cross-over points.\r\n	<li> Scalability - ArrayFire tested various assumptions about how their platform might tolerate projected business growth and provided suggestions on how their computational enviornment could be modified to tolerate future conditions.\r\n	<li> Compatibility with emerging trends - ArrayFire parsed academic and business literature to find state-of-the-art implementations of the Client\'s application.\r\n	<li> Disaster recovery platforms - Through parsing the disaster recovery documentation and interviews with employees, ArrayFire compared Client\'s disaster recovery platform with industry standards.\r\n	<li> Change management process - ArrayFire compared Client\'s process of implementing and testing changes to their code with industry best practices.\r\n</ol>\r\n\r\n<h3>Action</h3>\r\n\r\nOver a period of two months, ArrayFire investigated the aforementioned items, conducted on-site and phone interviews with employees, and profiled all aspects of their existing software. This included disk I/O, database access patterns, network bandwidth utilization, processor utilization, load balancing, execution order modifications, and code optimizations. \r\n\r\n<h3>Results</h3>\r\n\r\nThese techniques resulted in the discovery of hitherto unknown bottleknecks. In particular, poorly chosen virtual disk layouts in a SAN resulted in disk I/O limitations, job order execution resulted in heavy database lock contention, and poor load balancing caused a significant portion of the cluster to sit idle during production runs.\r\n\r\nThrough profiling, ArrayFire predicted portions of their code could be accelerated by 1.3 - 18 times. Furthermore, components of their system could be improved by nearly 50% with minor modifications. Using known runtime information, ArrayFire predicted the entire process could be reduced by approximately 45%, on the existing hardware, if all of our suggestions were implemented. Subsequent communications with Client indicated they implemented most of our (prioritized) suggestions and decreased total production runtimes by nearly 39%.\r\n\r\n[content_band bg_image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/11/Epipheo-background1.png\" parallax=\"true\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\" ]\r\n[blockquote cite=\"<span style=\"color: #ffffff;\">Engineer for Client</span>\" type=\"center\"]\r\n<span style=\"color: #ffffff;\">\r\nCompared to Wednesday night, the [REDACTED] jobs took 35 minutes less and the [REDACTED] to 2 hours less.  This is runtime reduction of 39% in both cases.\r\n</span>\r\n<span style=\"color: #ffffff;\">- Systems Engineer, Client</span>[/blockquote]\r\n[/content_band]','Case Study: Fortune 200 Insurance Company','','inherit','closed','closed','','9091-revision-v1','','','2016-08-24 09:38:38','2016-08-24 13:38:38','',9091,'http://sandbox.arrayfire.com/9091-revision-v1/',0,'revision','',0),(9102,18528,'2016-08-24 09:42:58','2016-08-24 13:42:58','<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/pT5oEjE8c.jpg\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/pT5oEjE8c-1024x1024.jpg\" alt=\"skyline-san-fransisco\" width=\"742\" height=\"742\" class=\"aligncenter size-large wp-image-9101\" /></a>\r\n\r\nA Fortune 200 Insurance Company located on the West coast was using a third-party, closed-source application to make inferences about future market conditions in order to hedge their investments. In order to carry out calculations over millions of possible scenarios, they were using a small cluster consisting of 1,300 hyperthreaded CPU cores in blade servers. In the near term, they projected that their business needs would grow by a factor of two and they were near capacity with their existing system.\r\n\r\n<h3>Mission</h3>\r\n\r\nThe Client hired ArrayFire to conduct a comprehensive audit of their system to access its performance in nine key areas:\r\n\r\n<ol>\r\n	<li> The technological platform - a high-level overview of their system, example execution flows, discussions of shortcomings of their current approach, and recommendations for how the system could be optimized to be more efficient, execute faster, and be more reliable.\r\n	<li> The code base - our engineers evaluated the code for compsition, quality, conformance with the best industry practices, and performance characteristics.  \r\n	<li> Data management and governance policies - a comparision of Client\'s policies with industry standards.\r\n	<li> Performance and optimization strategies - Using runtime profiling ArrayFire explored various approaches for how the system might be optmized to improve throughput.\r\n	<li> Fault tolerance, stability, and reliability - Using on-site inspections, interviews with employees, and parsing documentation, ArrayFire accessed whether machines were sufficiently redudnant to meet business needs, inspected flows of data throughout the system (storage, network, compute infrastructure, etc.), and attempted to locate single points of failure and unreliable cross-over points.\r\n	<li> Scalability - ArrayFire tested various assumptions about how their platform might tolerate projected business growth and provided suggestions on how their computational enviornment could be modified to tolerate future conditions.\r\n	<li> Compatibility with emerging trends - ArrayFire parsed academic and business literature to find state-of-the-art implementations of the Client\'s application.\r\n	<li> Disaster recovery platforms - Through parsing the disaster recovery documentation and interviews with employees, ArrayFire compared Client\'s disaster recovery platform with industry standards.\r\n	<li> Change management process - ArrayFire compared Client\'s process of implementing and testing changes to their code with industry best practices.\r\n</ol>\r\n\r\n<h3>Action</h3>\r\n\r\nOver a period of two months, ArrayFire investigated the aforementioned items, conducted on-site and phone interviews with employees, and profiled all aspects of their existing software. This included disk I/O, database access patterns, network bandwidth utilization, processor utilization, load balancing, execution order modifications, and code optimizations. \r\n\r\n<h3>Results</h3>\r\n\r\nThese techniques resulted in the discovery of hitherto unknown bottleknecks. In particular, poorly chosen virtual disk layouts in a SAN resulted in disk I/O limitations, job order execution resulted in heavy database lock contention, and poor load balancing caused a significant portion of the cluster to sit idle during production runs.\r\n\r\nThrough profiling, ArrayFire predicted portions of their code could be accelerated by 1.3 - 18 times. Furthermore, components of their system could be improved by nearly 50% with minor modifications. Using known runtime information, ArrayFire predicted the entire process could be reduced by approximately 45%, on the existing hardware, if all of our suggestions were implemented. Subsequent communications with Client indicated they implemented most of our (prioritized) suggestions and decreased total production runtimes by nearly 39%.\r\n\r\n[content_band bg_image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/11/Epipheo-background1.png\" parallax=\"true\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\" ]\r\n[blockquote cite=\"<span style=\"color: #ffffff;\">Engineer for Client</span>\" type=\"center\"]\r\n<span style=\"color: #ffffff;\">\r\nCompared to Wednesday night, the [REDACTED] jobs took 35 minutes less and the [REDACTED] to 2 hours less.  This is runtime reduction of 39% in both cases.\r\n</span>\r\n<span style=\"color: #ffffff;\">- Systems Engineer, Client</span>[/blockquote]\r\n[/content_band]\r\n\r\n\r\nImage Credit <a href=\"http://cliparts.co\">ClipArts.co</a>','Case Study: Fortune 200 Insurance Company','','inherit','closed','closed','','9091-revision-v1','','','2016-08-24 09:42:58','2016-08-24 13:42:58','',9091,'http://sandbox.arrayfire.com/9091-revision-v1/',0,'revision','',0),(9103,18528,'2016-08-24 09:43:50','2016-08-24 13:43:50','','skyline-san-fransisco','','inherit','open','closed','','pt5oeje8c','','','2016-08-24 09:43:59','2016-08-24 13:43:59','',9091,'http://sandbox.arrayfire.com/wp-content/uploads/2016/08/pT5oEjE8c.jpg',0,'attachment','image/jpeg',0),(9104,18528,'2016-08-24 09:44:02','2016-08-24 13:44:02','<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/pT5oEjE8c.jpg\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/pT5oEjE8c-1024x240.jpg\" alt=\"skyline-san-fransisco\" width=\"742\" height=\"174\" class=\"aligncenter size-large wp-image-9103\" /></a>\r\n\r\nA Fortune 200 Insurance Company located on the West coast was using a third-party, closed-source application to make inferences about future market conditions in order to hedge their investments. In order to carry out calculations over millions of possible scenarios, they were using a small cluster consisting of 1,300 hyperthreaded CPU cores in blade servers. In the near term, they projected that their business needs would grow by a factor of two and they were near capacity with their existing system.\r\n\r\n<h3>Mission</h3>\r\n\r\nThe Client hired ArrayFire to conduct a comprehensive audit of their system to access its performance in nine key areas:\r\n\r\n<ol>\r\n	<li> The technological platform - a high-level overview of their system, example execution flows, discussions of shortcomings of their current approach, and recommendations for how the system could be optimized to be more efficient, execute faster, and be more reliable.\r\n	<li> The code base - our engineers evaluated the code for compsition, quality, conformance with the best industry practices, and performance characteristics.  \r\n	<li> Data management and governance policies - a comparision of Client\'s policies with industry standards.\r\n	<li> Performance and optimization strategies - Using runtime profiling ArrayFire explored various approaches for how the system might be optmized to improve throughput.\r\n	<li> Fault tolerance, stability, and reliability - Using on-site inspections, interviews with employees, and parsing documentation, ArrayFire accessed whether machines were sufficiently redudnant to meet business needs, inspected flows of data throughout the system (storage, network, compute infrastructure, etc.), and attempted to locate single points of failure and unreliable cross-over points.\r\n	<li> Scalability - ArrayFire tested various assumptions about how their platform might tolerate projected business growth and provided suggestions on how their computational enviornment could be modified to tolerate future conditions.\r\n	<li> Compatibility with emerging trends - ArrayFire parsed academic and business literature to find state-of-the-art implementations of the Client\'s application.\r\n	<li> Disaster recovery platforms - Through parsing the disaster recovery documentation and interviews with employees, ArrayFire compared Client\'s disaster recovery platform with industry standards.\r\n	<li> Change management process - ArrayFire compared Client\'s process of implementing and testing changes to their code with industry best practices.\r\n</ol>\r\n\r\n<h3>Action</h3>\r\n\r\nOver a period of two months, ArrayFire investigated the aforementioned items, conducted on-site and phone interviews with employees, and profiled all aspects of their existing software. This included disk I/O, database access patterns, network bandwidth utilization, processor utilization, load balancing, execution order modifications, and code optimizations. \r\n\r\n<h3>Results</h3>\r\n\r\nThese techniques resulted in the discovery of hitherto unknown bottleknecks. In particular, poorly chosen virtual disk layouts in a SAN resulted in disk I/O limitations, job order execution resulted in heavy database lock contention, and poor load balancing caused a significant portion of the cluster to sit idle during production runs.\r\n\r\nThrough profiling, ArrayFire predicted portions of their code could be accelerated by 1.3 - 18 times. Furthermore, components of their system could be improved by nearly 50% with minor modifications. Using known runtime information, ArrayFire predicted the entire process could be reduced by approximately 45%, on the existing hardware, if all of our suggestions were implemented. Subsequent communications with Client indicated they implemented most of our (prioritized) suggestions and decreased total production runtimes by nearly 39%.\r\n\r\n[content_band bg_image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/11/Epipheo-background1.png\" parallax=\"true\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\" ]\r\n[blockquote cite=\"<span style=\"color: #ffffff;\">Engineer for Client</span>\" type=\"center\"]\r\n<span style=\"color: #ffffff;\">\r\nCompared to Wednesday night, the [REDACTED] jobs took 35 minutes less and the [REDACTED] to 2 hours less.  This is runtime reduction of 39% in both cases.\r\n</span>\r\n<span style=\"color: #ffffff;\">- Systems Engineer, Client</span>[/blockquote]\r\n[/content_band]\r\n\r\n\r\nImage Credit <a href=\"http://cliparts.co\">ClipArts.co</a>','Case Study: Fortune 200 Insurance Company','','inherit','closed','closed','','9091-revision-v1','','','2016-08-24 09:44:02','2016-08-24 13:44:02','',9091,'http://sandbox.arrayfire.com/9091-revision-v1/',0,'revision','',0),(9105,18528,'2016-08-26 10:23:54','2016-08-26 14:23:54','<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/watermark-sleepmed-logo.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/watermark-sleepmed-logo.png\" alt=\"watermark-sleepmed-logo\" width=\"445\" height=\"84\" class=\"aligncenter size-full wp-image-9106\" /></a>\r\n\r\nSleepmed is a biomedical company which focuses on improving the health and quality of life of those who suffer from sleep disorders. Sleepmed is <a href=\"http://www.sleepmedinc.com/about\">the nation leader in sleep diagnosis</a> and provides services to more than 80,000 patients annually in one of their 200 labs located in 32 states across the USA. To accomplish this task they created hardware which automatically collects a few gigabytes of important diagnostic data on patients when they sleep. These data are automatically reduced and processed to reveal important events which are later interpreted by sleep specialists.\r\n\r\n<h3>Mission</h3>\r\n\r\nSleepMed was in the process of developing new data collection hardware which, in principle, could share a significant fraction of the code base with the existing hardware. However, in order to accommodate the new hardware a significant fraction of the code needed to be refactored and modularized while maintaining perfect feature parity due to FDA compliance requirements. ArrayFire was hired to create a comprehensive test suite for each step of the data processing pipeline, perform the refactoring, and produce encyclopedic documentation for the software.\r\n\r\n<h3>Action</h3>\r\n\r\nArrayFire began this process by accessing the quantity of tests that were required to maintain FDA compliance. Given that this number was in the thousands, we built a small, dedicated computing cluster to test the code while we made revisions. After this, we maliciously parsed the code looking for distinct modules. We extracted each module, wrote unit tests, and verified their compatibility with the old code using \"gold standard\" data tests developed by SleepMed engineers.\r\n\r\n<h3>Results</h3>\r\n\r\nArrayFire modularized the code from 225k lines of code with no modularity to 100k lines of code with 33 distinct modules. Each module now has its own testing framework and set of \"gold standard\" input/output reference data. With the code modularized, SleepMed now has the ability to hire contractors to work on any single module. The contractors, in turn, need only run tests for their module and a handful of full-system tests to verify that their modifications did not break any existing functionality. These changes permitted SleepMed to integrate their new hardware into the existing pipeline with ease without the onerous and expensive task of seeking FDA approval for new data analysis software.','Case Study: Sleepmed','','publish','closed','closed','','case-study-sleepmed','','','2016-08-26 11:32:29','2016-08-26 15:32:29','',0,'http://sandbox.arrayfire.com/?page_id=9105',0,'page','',0),(9106,18528,'2016-08-24 10:45:11','2016-08-24 14:45:11','','watermark-sleepmed-logo','','inherit','open','closed','','watermark-sleepmed-logo','','','2016-08-24 10:45:11','2016-08-24 14:45:11','',9105,'http://sandbox.arrayfire.com/wp-content/uploads/2016/08/watermark-sleepmed-logo.png',0,'attachment','image/png',0),(9107,18528,'2016-08-24 10:52:23','2016-08-24 14:52:23','<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/watermark-sleepmed-logo.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/watermark-sleepmed-logo.png\" alt=\"watermark-sleepmed-logo\" width=\"445\" height=\"84\" class=\"aligncenter size-full wp-image-9106\" /></a>\r\n\r\n<h3>Mission</h3>\r\n<h3>Action</h3>\r\n<h3>Results</h3>\r\n\r\n','Case Study: WaterMark / Sleepmed','','inherit','closed','closed','','9105-revision-v1','','','2016-08-24 10:52:23','2016-08-24 14:52:23','',9105,'http://sandbox.arrayfire.com/9105-revision-v1/',0,'revision','',0),(9108,18528,'2016-08-24 10:59:05','2016-08-24 14:59:05','We\'ve worked with clients from the financial sector, academia, entertainment, and defense sectors. Below we show some of our favorite projects we\'ve worked on in the past.\r\n\r\n[content_band bg_color=\"#ffffff\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"][custom_headline type=\"left\" level=\"h2\" ]Computer Vision[/custom_headline][gap size=\"4%\"]\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/10/glasses-logo-promo-01.png\" alt=\"Glasses.com\"]The Glasses.com app relies on computer vision to recognize the features of a user’s face. The application then generates an accurate, high-fidelity, three-dimensional model of that face, and virtually places selected frames on the image.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-glasses-com-app-with-3dfit-technology/\" size=\"regular\" ]Read the case study[/button][/promo][/column]</p>\r\n[column type=\"one-half\" last=\"true\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/10/reveal-logo-promo-01.png\" alt=\"Reveal Imaging\"]Reveal Imaging, an SAIC company, uses ArrayFire in developing threat-detection products for transportation systems—such as cargo and baggage screening in airports—and in securing facilities and public events.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-reveal-imaging/\" size=\"regular\" ]Read the case study[/button][/promo][/column][/content_band]</p>\r\n\r\n[content_band bg_color=\"#ffffff\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"][custom_headline type=\"left\" level=\"h2\" ]Financial Services[/custom_headline][gap size=\"4%\"]\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2015/04/philadelphia-skyline.png\" alt=\"Fortune 300 Financial Services Company\"]\r\nArrayFire was hired to evaluate the performance of a hedge platform implemented in CUDA. Our final deliverable consisted of a 100 page report discussing the code base, performance and optimization, fault tolerance, scalability, compatibility with emerging trends, and  disaster recovery options. Our suggestions resulted in a 20% decrease in production runtimes.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-fortune-300-financial-company\" size=\"regular\" ]Read this case study[/button][/promo][/column]</p>\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/pT5oEjE8c.jpg\" alt=\"Fortune 200 Insurance Company\"]\r\nArrayFire was hired to conduct a comprehensive audit of two hedging platforms. Our final deliverable was a 160 page technical report, a middle-management report, and five executive summaries detailing our findings. ArrayFire located key bottleknecks that, once corrected, decreased the total nightly runtime by 39% without any major code or system modifications.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-fortune-200-insurance-company\" size=\"regular\" ]Read this case study[/button][/promo][/column]</p>\r\n[/content_band]','Case Studies','','inherit','closed','closed','','9071-revision-v1','','','2016-08-24 10:59:05','2016-08-24 14:59:05','',9071,'http://sandbox.arrayfire.com/9071-revision-v1/',0,'revision','',0),(9109,18528,'2016-08-24 11:03:01','2016-08-24 15:03:01','<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/watermark-sleepmed-logo.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/watermark-sleepmed-logo.png\" alt=\"watermark-sleepmed-logo\" width=\"445\" height=\"84\" class=\"aligncenter size-full wp-image-9106\" /></a>\r\n\r\nWatermark / Sleepmed is a biomedical company which focuses on improving the health and quality of life of those who suffer from sleep disorders. Watermark is <a href=\"http://www.sleepmedinc.com/about\">the nation leader in sleep diagnosis</a> and provides services to more than 80,000 patients annually in one of their 200 labs located in 32 states across the USA.\r\n\r\n<h3>Mission</h3>\r\n<h3>Action</h3>\r\n<h3>Results</h3>\r\n\r\n','Case Study: WaterMark / Sleepmed','','inherit','closed','closed','','9105-revision-v1','','','2016-08-24 11:03:01','2016-08-24 15:03:01','',9105,'http://sandbox.arrayfire.com/9105-revision-v1/',0,'revision','',0),(9110,18528,'2016-08-24 13:57:25','2016-08-24 17:57:25','<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/watermark-sleepmed-logo.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/watermark-sleepmed-logo.png\" alt=\"watermark-sleepmed-logo\" width=\"445\" height=\"84\" class=\"aligncenter size-full wp-image-9106\" /></a>\r\n\r\nWatermark / Sleepmed is a biomedical company which focuses on improving the health and quality of life of those who suffer from sleep disorders. Watermark is <a href=\"http://www.sleepmedinc.com/about\">the nation leader in sleep diagnosis</a> and provides services to more than 80,000 patients annually in one of their 200 labs located in 32 states across the USA.\r\n\r\nSleepmed accomplishes this task by collecting diagnostic data on a patient while they sleep. This data is then analyzed \r\n\r\n<h3>Mission</h3>\r\n<h3>Action</h3>\r\n<h3>Results</h3>\r\n\r\n','Case Study: WaterMark / Sleepmed','','inherit','closed','closed','','9105-revision-v1','','','2016-08-24 13:57:25','2016-08-24 17:57:25','',9105,'http://sandbox.arrayfire.com/9105-revision-v1/',0,'revision','',0),(9111,18528,'2016-08-24 14:54:14','2016-08-24 18:54:14','<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/watermark-sleepmed-logo.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/watermark-sleepmed-logo.png\" alt=\"watermark-sleepmed-logo\" width=\"445\" height=\"84\" class=\"aligncenter size-full wp-image-9106\" /></a>\r\n\r\nWatermark / Sleepmed is a biomedical company which focuses on improving the health and quality of life of those who suffer from sleep disorders. Watermark is <a href=\"http://www.sleepmedinc.com/about\">the nation leader in sleep diagnosis</a> and provides services to more than 80,000 patients annually in one of their 200 labs located in 32 states across the USA. To accomplish this task they created hardware which automatically collects a few gigabytes of important diagnostic data on patients when they sleep. These data are automatically reduced and processed to reveal important events which are later interpreted by sleep specialists.\r\n\r\n<h3>Mission</h3>\r\n\r\nSleepMed was in the process of developing new data collection hardware which, in principle, could share a significant fraction of the code base with the existing hardware. ArrayFire was hired to create a comprehensive testing suite and modularize/refactor the existing code base to accommodate the new hardware.\r\n\r\n<h3>Action</h3>\r\n\r\n\r\n\r\n<h3>Results</h3>\r\n\r\n','Case Study: WaterMark / Sleepmed','','inherit','closed','closed','','9105-revision-v1','','','2016-08-24 14:54:14','2016-08-24 18:54:14','',9105,'http://sandbox.arrayfire.com/9105-revision-v1/',0,'revision','',0),(9112,18528,'2016-08-25 12:46:22','2016-08-25 16:46:22','<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/watermark-sleepmed-logo.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/watermark-sleepmed-logo.png\" alt=\"watermark-sleepmed-logo\" width=\"445\" height=\"84\" class=\"aligncenter size-full wp-image-9106\" /></a>\r\n\r\nWatermark / Sleepmed is a biomedical company which focuses on improving the health and quality of life of those who suffer from sleep disorders. Watermark is <a href=\"http://www.sleepmedinc.com/about\">the nation leader in sleep diagnosis</a> and provides services to more than 80,000 patients annually in one of their 200 labs located in 32 states across the USA. To accomplish this task they created hardware which automatically collects a few gigabytes of important diagnostic data on patients when they sleep. These data are automatically reduced and processed to reveal important events which are later interpreted by sleep specialists.\r\n\r\n<h3>Mission</h3>\r\n\r\nSleepMed was in the process of developing new data collection hardware which, in principle, could share a significant fraction of the code base with the existing hardware. ArrayFire was hired to create a comprehensive testing suite and modularize/refactor the existing code base to accommodate the new hardware.\r\n\r\n<h3>Action</h3>\r\n\r\nArrayFire first created a dedicated testing environment for SleepMed\'s software. This involved sourcing the components, assembling a cluster, defining suitable test results, and implementing a testing framework.\r\n\r\n\r\n<h3>Results</h3>\r\n\r\n','Case Study: WaterMark / Sleepmed','','inherit','closed','closed','','9105-revision-v1','','','2016-08-25 12:46:22','2016-08-25 16:46:22','',9105,'http://sandbox.arrayfire.com/9105-revision-v1/',0,'revision','',0),(9113,18528,'2016-08-25 13:04:24','2016-08-25 17:04:24','<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/watermark-sleepmed-logo.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/watermark-sleepmed-logo.png\" alt=\"watermark-sleepmed-logo\" width=\"445\" height=\"84\" class=\"aligncenter size-full wp-image-9106\" /></a>\r\n\r\nWatermark / Sleepmed is a biomedical company which focuses on improving the health and quality of life of those who suffer from sleep disorders. Watermark is <a href=\"http://www.sleepmedinc.com/about\">the nation leader in sleep diagnosis</a> and provides services to more than 80,000 patients annually in one of their 200 labs located in 32 states across the USA. To accomplish this task they created hardware which automatically collects a few gigabytes of important diagnostic data on patients when they sleep. These data are automatically reduced and processed to reveal important events which are later interpreted by sleep specialists.\r\n\r\n<h3>Mission</h3>\r\n\r\nSleepMed was in the process of developing new data collection hardware which, in principle, could share a significant fraction of the code base with the existing hardware. However, in order to accommodate the new hardware a significant fraction of the code needed to be refactored and modularized while maintaining perfect feature parity due to FDA compliance requirements. ArrayFire was hired to create a comprehensive test suite for each step of the data processing pipeline, perform the refactoring, and produce encyclopedic documentation for the software.\r\n\r\n<h3>Action</h3>\r\n\r\nArrayFire first created a dedicated testing environment for SleepMed\'s software. This involved sourcing the components, assembling a cluster, defining suitable test results, and implementing a testing framework.\r\n\r\n\r\n<h3>Results</h3>\r\n\r\n','Case Study: WaterMark / Sleepmed','','inherit','closed','closed','','9105-revision-v1','','','2016-08-25 13:04:24','2016-08-25 17:04:24','',9105,'http://sandbox.arrayfire.com/9105-revision-v1/',0,'revision','',0),(9114,18528,'2016-08-25 13:51:35','2016-08-25 17:51:35','<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/watermark-sleepmed-logo.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/watermark-sleepmed-logo.png\" alt=\"watermark-sleepmed-logo\" width=\"445\" height=\"84\" class=\"aligncenter size-full wp-image-9106\" /></a>\r\n\r\nWatermark / Sleepmed is a biomedical company which focuses on improving the health and quality of life of those who suffer from sleep disorders. Watermark is <a href=\"http://www.sleepmedinc.com/about\">the nation leader in sleep diagnosis</a> and provides services to more than 80,000 patients annually in one of their 200 labs located in 32 states across the USA. To accomplish this task they created hardware which automatically collects a few gigabytes of important diagnostic data on patients when they sleep. These data are automatically reduced and processed to reveal important events which are later interpreted by sleep specialists.\r\n\r\n<h3>Mission</h3>\r\n\r\nSleepMed was in the process of developing new data collection hardware which, in principle, could share a significant fraction of the code base with the existing hardware. However, in order to accommodate the new hardware a significant fraction of the code needed to be refactored and modularized while maintaining perfect feature parity due to FDA compliance requirements. ArrayFire was hired to create a comprehensive test suite for each step of the data processing pipeline, perform the refactoring, and produce encyclopedic documentation for the software.\r\n\r\n<h3>Action</h3>\r\n\r\nArrayFire began this process by accessing the quantity of tests that were required to maintain FDA compliance. Given that this number was in the thousands, we built a small, dedicated computing cluster to test the code while we made revisions. After this, we parsed the code to identify distinct modules and began writing additional input/output verification tests.\r\n\r\n* additional tests\r\n* reduction in code size\r\n* increase in performance\r\n* made analysis software run on Raspberry Pi in reasonable time period.\r\n\r\n<h3>Results</h3>\r\n\r\n','Case Study: WaterMark / Sleepmed','','inherit','closed','closed','','9105-revision-v1','','','2016-08-25 13:51:35','2016-08-25 17:51:35','',9105,'http://sandbox.arrayfire.com/9105-revision-v1/',0,'revision','',0),(9118,18528,'2016-08-26 09:34:14','2016-08-26 13:34:14','<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/pT5oEjE8c.jpg\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/pT5oEjE8c-1024x240.jpg\" alt=\"skyline-san-fransisco\" width=\"742\" height=\"174\" class=\"aligncenter size-large wp-image-9103\" /></a>\r\n\r\nA Fortune 200 Insurance Company located on the West coast was using a third-party, closed-source application to make inferences about future market conditions in order to hedge their investments. In order to carry out calculations over millions of possible scenarios, they were using a small cluster consisting of 1,300 hyperthreaded CPU cores in blade servers. In the near term, they projected that their business needs would grow by a factor of two and they were near capacity with their existing system.\r\n\r\n<h3>Mission</h3>\r\n\r\nThe Client hired ArrayFire to conduct a comprehensive audit of their system to access its performance in nine key areas:\r\n\r\n<ol>\r\n	<li> The technological platform - a high-level overview of their system, example execution flows, discussions of shortcomings of their current approach, and recommendations for how the system could be optimized to be more efficient, execute faster, and be more reliable.\r\n	<li> The code base - our engineers evaluated the code for compsition, quality, conformance with the best industry practices, and performance characteristics.  \r\n	<li> Data management and governance policies - a comparision of Client\'s policies with industry standards.\r\n	<li> Performance and optimization strategies - Using runtime profiling ArrayFire explored various approaches for how the system might be optmized to improve throughput.\r\n	<li> Fault tolerance, stability, and reliability - Using on-site inspections, interviews with employees, and parsing documentation, ArrayFire accessed whether machines were sufficiently redudnant to meet business needs, inspected flows of data throughout the system (storage, network, compute infrastructure, etc.), and attempted to locate single points of failure and unreliable cross-over points.\r\n	<li> Scalability - ArrayFire tested various assumptions about how their platform might tolerate projected business growth and provided suggestions on how their computational enviornment could be modified to tolerate future conditions.\r\n	<li> Compatibility with emerging trends - ArrayFire parsed academic and business literature to find state-of-the-art implementations of the Client\'s application.\r\n	<li> Disaster recovery platforms - Through parsing the disaster recovery documentation and interviews with employees, ArrayFire compared Client\'s disaster recovery platform with industry standards.\r\n	<li> Change management process - ArrayFire compared Client\'s process of implementing and testing changes to their code with industry best practices.\r\n</ol>\r\n\r\n<h3>Action</h3>\r\n\r\nOver a period of two months, ArrayFire investigated the aforementioned items, conducted on-site and phone interviews with employees, and profiled all aspects of their existing software. This included disk I/O, database access patterns, network bandwidth utilization, processor utilization, load balancing, execution order modifications, and code optimizations. \r\n\r\n<h3>Results</h3>\r\n\r\nThese techniques resulted in the discovery of hitherto unknown bottleknecks. In particular, poorly chosen virtual disk layouts in a SAN resulted in disk I/O limitations, job order execution resulted in heavy database lock contention, and poor load balancing caused a significant portion of the cluster to sit idle during production runs.\r\n\r\nThrough profiling, ArrayFire predicted portions of their code could be accelerated by 1.3 - 18 times. Furthermore, components of their system could be improved by nearly 50% with minor modifications. Using known runtime information, ArrayFire predicted the entire process could be reduced by approximately 45%, on the existing hardware, if all of our suggestions were implemented. Subsequent communications with Client indicated they implemented most of our (prioritized) suggestions and decreased total production runtimes by nearly 39%.\r\n\r\n[content_band bg_image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/11/Epipheo-background1.png\" parallax=\"true\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\" ]\r\n[blockquote cite=\"<span style=\"color: #ffffff;\">Engineer for Client</span>\" type=\"center\"]\r\n<span style=\"color: #ffffff;\">\r\nCompared to Wednesday night, the [REDACTED] jobs took 35 minutes less and the [REDACTED] to 2 hours less.  This is runtime reduction of 39% in both cases.\r\n</span>\r\n<span style=\"color: #ffffff;\">- Systems Engineer, Client</span>[/blockquote]\r\n[/content_band]\r\n\r\n\r\nImage Credit <a href=\"http://cliparts.co\">ClipArts.co</a>','Case Study: Fortune 200 Insurance Company','','inherit','closed','closed','','9091-autosave-v1','','','2016-08-26 09:34:14','2016-08-26 13:34:14','',9091,'http://sandbox.arrayfire.com/9091-autosave-v1/',0,'revision','',0),(9119,18528,'2016-08-26 09:41:17','2016-08-26 13:41:17','[content_band inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"][column type=\"one-half\"][custom_headline type=\"left\" level=\"h2\"]Call the ArrayFire team[/custom_headline]\r\n\r\nHire us to accelerate your code, train your pros, or even write new code for your organization!\r\n\r\nWe’ve already helped thousands of organizations speed up their code. We’ve accelerated algorithms, sped up data analysis, and solved challenging problems of all types in the past, and we’re confident that we can accelerate your code, too.\r\n\r\nStart by setting up a free consultation to discuss your project with an ArrayFire expert today!\r\n\r\n[gap size=\"5%\"][button  type=\"flat\" shape=\"rounded\" href=\"http://meetme.so/arrayfire\" size=\"normal\" ]Schedule a consultation[/button][/column][column type=\"one-half\" last=\"true\" class=\"center-text\"][gap size=\"15%\"]<img class=\"aligncenter wp-image-462\" src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/01/Bat-signal.png\" alt=\"Bat signal\" width=\"700\" height=\"437\" />[/column][gap size=\"2%\"][/content_band]\r\n\r\n<!-- Starter Package Band -->\r\n[content_band bg_color=\"#f2f2f2\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"]\r\n\r\n[column type=\"one-half\"] [custom_headline type=\"left\" level=\"h2\"]Starter Package ($799) [/custom_headline] Hire us for a single day. We\'ll match you with one engineer dedicated for a full day, supported by senior and test engineers throughout the day. Here\'s how it works:\r\n\r\n[icon_list] [icon_list_item type=\"angle-double-right\"]We conduct an initial phone call.[/icon_list_item] [icon_list_item type=\"angle-double-right\"]You send us your code or algorithm. [/icon_list_item] [icon_list_item type=\"angle-double-right\"]We analyze your code for potential GPU benefit.[/icon_list_item][icon_list_item type=\"angle-double-right\"]We accelerate as much of your code as is possible within the one-day effort, applying our extensive GPU software libraries.[/icon_list_item][icon_list_item type=\"angle-double-right\"]We produce a final report for you, along with your optimized code.[/icon_list_item] [/icon_list] The final report outlines the best approach to follow for full GPU-acceleration of your code.\r\n\r\n[button type=\"flat\"  shape=\"rounded\" size=\"regular\" href=\"http://sandbox.arrayfire.com/product-category/starter-package/\" title=\"Starter Package\"]Get the Starter Package[/button]\r\n\r\n&nbsp;\r\n\r\n[/column][column type=\"one-half\" last=\"true\" ][gap size=\"15%\"]<img class=\"aligncenter wp-image-4962\" src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/02/Benchmark-guy-torso-opposite.png\" alt=\"Benchmark guy, torso opposite\" width=\"450\" height=\"397\" />[/column]\r\n<div></div>\r\n[/content_band]\r\n\r\n<!-- Software Design Horizontal Band -->\r\n[content_band inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"0px\" margin_top=\"0px\" padding_bottom=\"40px\" ]\r\n\r\n<!-- Link from home page -->\r\n<a name=\"software-design\"></a>\r\n\r\n[custom_headline type=\"left\" level=\"h2\" class=\"center-text\"]Software Design[/custom_headline]\r\n\r\nYour hardware can do anything, given the right code. Getting that code right can be tricky when your team is swamped in work or when you\'re new to parallel programming. Bring us in—our team is capable of writing custom code that\'s as unique as your work and tailored to your task. Here\'s what we bring to the table:\r\n\r\n[column type=\"one-half\"]\r\n\r\n[icon_list] [icon_list_item type=\"angle-double-right\"]Excellence in GPU code[/icon_list_item] [icon_list_item type=\"angle-double-right\"]Well-written, efficient C, C++, Fortran, Java, or .NET [/icon_list_item] [icon_list_item type=\"angle-double-right\"]Application porting and integration[/icon_list_item][icon_list_item type=\"angle-double-right\"]Tuning software to peak hardware performance[/icon_list_item][icon_list_item type=\"angle-double-right\"]Scalability of algorithms to handle enterprise-level programs[/icon_list_item] [/icon_list]\r\n\r\nRead more about our capabilities in our <a href=\"/case-studies\">case studies</a> or check out one of our more involved projects to the right.\r\n\r\n[button  type=\"flat\" shape=\"rounded\" href=\"http://meetme.so/arrayfire\" size=\"regular\" ]Schedule a consultation[/button]\r\n[/column]\r\n\r\n[column type=\"one-half\"]\r\n[promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/10/glasses-logo-promo-01.png\" alt=\"Glasses.com\"]The Glasses.com app relies on computer vision functionality and three-dimentional head modeling code implemented and accelerated by ArrayFire. This code generates accurate, high-fidelity images that let a user virtually try on thousands of pairs of glasses without leaving the comfort of their own home.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-glasses-com-app-with-3dfit-technology\" size=\"regular\" ]Read the case study[/button]</p>\r\n[/promo]\r\n\r\n[/column]\r\n\r\n [/content_band]\r\n\r\n<!-- System Evaluation Horizontal Band -->\r\n[content_band bg_color=\"#f2f2f2\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"]\r\n\r\n<!-- Link from home page -->\r\n<a name=\"system-evaluation\"></a>\r\n\r\n[custom_headline type=\"left\" level=\"h2\" class=\"center-text\"]System Evaluation[/custom_headline]\r\n\r\nGetting the maximum performance out of your system is tricky to say the least. The interplay between network communication, disk operations, and processing can be tricky to understand and even more difficult to profile correctly. Our team excels at benchmarking and we know how to find the bottleknecks in your application quickly. Hire us to evaluate sections of your code or the entire system. We do it all! Here is what we bring to the table:\r\n\r\n[column type=\"one-half\"  last=\"true\" ]\r\n\r\n[icon_list]\r\n[icon_list_item type=\"angle-double-right\"]System architecture and design expertise\r\n[/icon_list_item]\r\n\r\n[icon_list_item type=\"angle-double-right\"]In-depth knowledge and a plethora of field experience optimizing applications and processes for CPUs, GPUs, and FPGAs.[/icon_list_item]\r\n\r\n[icon_list_item type=\"angle-double-right\"]Awareness of the latest industry trends and tools[/icon_list_item]\r\n\r\n[icon_list_item type=\"angle-double-right\"]Hands on experience auditing on large, complicated systems.[/icon_list_item]\r\n\r\n[/icon_list][button  type=\"flat\" shape=\"rounded\" href=\"http://meetme.so/arrayfire\" size=\"regular\" ]Schedule a consultation[/button][/column]\r\n\r\n[column type=\"one-half\"]\r\n\r\n[promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/pT5oEjE8c-1024x240.jpg\" alt=\"San Fransisco Skyline\"]A Fortune 200 Insurance Company contacted ArrayFire to conduct an audit of their system in nine key areas. Two of these were scalability and optimization techniques. Through our comprehensive review ArrayFire located key bottleknecks that, once corrected, decreased total nightly runtime by 39% without any major code or system modifications.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-fortune-200-insurance-company\" size=\"regular\" ]Read the case study[/button]</p>\r\n[/promo]\r\n\r\n[/column]\r\n\r\n[/content_band]','Consulting','','inherit','closed','closed','','6634-revision-v1','','','2016-08-26 09:41:17','2016-08-26 13:41:17','',6634,'http://sandbox.arrayfire.com/6634-revision-v1/',0,'revision','',0),(9120,18528,'2016-08-26 09:57:12','2016-08-26 13:57:12','[content_band inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"][column type=\"three-fifths\"][custom_headline type=\"left\" level=\"h2\"]Call the ArrayFire team[/custom_headline]\r\n\r\nHire us to accelerate your code, train your pros, or even write new code for your organization!\r\n\r\nWe’ve already helped thousands of organizations speed up their code. We’ve accelerated algorithms, sped up data analysis, and solved challenging problems of all types in the past, and we’re confident that we can accelerate your code, too.\r\n\r\nStart by setting up a free consultation to discuss your project with an ArrayFire expert today!\r\n\r\n[gap size=\"5%\"]\r\n\r\n[button  type=\"flat\" shape=\"rounded\" href=\"http://meetme.so/arrayfire\" size=\"normal\" ]Schedule a consultation[/button]\r\n\r\n[button  type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-studies\" size=\"normal\" ]Read Case Studies[/button]\r\n\r\n[/column]\r\n\r\n\r\n[column type=\"two-fifths\" last=\"true\" class=\"center-text\"][gap size=\"15%\"]<img class=\"aligncenter wp-image-462\" src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/01/Bat-signal.png\" alt=\"Bat signal\" width=\"700\" height=\"437\" />[/column][gap size=\"2%\"][/content_band]\r\n\r\n<!-- Starter Package Band -->\r\n[content_band bg_color=\"#f2f2f2\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"]\r\n\r\n[column type=\"one-half\"] [custom_headline type=\"left\" level=\"h2\"]Starter Package ($799) [/custom_headline] Hire us for a single day. We\'ll match you with one engineer dedicated for a full day, supported by senior and test engineers throughout the day. Here\'s how it works:\r\n\r\n[icon_list] [icon_list_item type=\"angle-double-right\"]We conduct an initial phone call.[/icon_list_item] [icon_list_item type=\"angle-double-right\"]You send us your code or algorithm. [/icon_list_item] [icon_list_item type=\"angle-double-right\"]We analyze your code for potential GPU benefit.[/icon_list_item][icon_list_item type=\"angle-double-right\"]We accelerate as much of your code as is possible within the one-day effort, applying our extensive GPU software libraries.[/icon_list_item][icon_list_item type=\"angle-double-right\"]We produce a final report for you, along with your optimized code.[/icon_list_item] [/icon_list] The final report outlines the best approach to follow for full GPU-acceleration of your code.\r\n\r\n[button type=\"flat\"  shape=\"rounded\" size=\"regular\" href=\"http://sandbox.arrayfire.com/product-category/starter-package/\" title=\"Starter Package\"]Get the Starter Package[/button]\r\n\r\n&nbsp;\r\n\r\n[/column][column type=\"one-half\" last=\"true\" ][gap size=\"15%\"]<img class=\"aligncenter wp-image-4962\" src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/02/Benchmark-guy-torso-opposite.png\" alt=\"Benchmark guy, torso opposite\" width=\"450\" height=\"397\" />[/column]\r\n<div></div>\r\n[/content_band]\r\n\r\n<!-- Software Design Horizontal Band -->\r\n[content_band inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"0px\" margin_top=\"0px\" padding_bottom=\"40px\" ]\r\n\r\n<!-- Link from home page -->\r\n<a name=\"software-design\"></a>\r\n\r\n[custom_headline type=\"left\" level=\"h2\" class=\"center-text\"]Software Design[/custom_headline]\r\n\r\nYour hardware can do anything, given the right code. Getting that code right can be tricky when your team is swamped in work or when you\'re new to parallel programming. Bring us in—our team is capable of writing custom code that\'s as unique as your work and tailored to your task. Here\'s what we bring to the table:\r\n\r\n[column type=\"one-half\"]\r\n\r\n[icon_list] [icon_list_item type=\"angle-double-right\"]Excellence in GPU code[/icon_list_item] [icon_list_item type=\"angle-double-right\"]Well-written, efficient C, C++, Fortran, Java, or .NET [/icon_list_item] [icon_list_item type=\"angle-double-right\"]Application porting and integration[/icon_list_item][icon_list_item type=\"angle-double-right\"]Tuning software to peak hardware performance[/icon_list_item][icon_list_item type=\"angle-double-right\"]Scalability of algorithms to handle enterprise-level programs[/icon_list_item] [/icon_list]\r\n\r\nRead more about our capabilities in our <a href=\"/case-studies\">case studies</a> or check out one of our more involved projects to the right.\r\n\r\n[button  type=\"flat\" shape=\"rounded\" href=\"http://meetme.so/arrayfire\" size=\"regular\" ]Schedule a consultation[/button]\r\n[/column]\r\n\r\n[column type=\"one-half\"]\r\n[promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/10/glasses-logo-promo-01.png\" alt=\"Glasses.com\"]The Glasses.com app relies on computer vision functionality and three-dimentional head modeling code implemented and accelerated by ArrayFire. This code generates accurate, high-fidelity images that let a user virtually try on thousands of pairs of glasses without leaving the comfort of their own home.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-glasses-com-app-with-3dfit-technology\" size=\"regular\" ]Read the case study[/button]</p>\r\n[/promo]\r\n\r\n[/column]\r\n\r\n [/content_band]\r\n\r\n<!-- System Evaluation Horizontal Band -->\r\n[content_band bg_color=\"#f2f2f2\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"]\r\n\r\n<!-- Link from home page -->\r\n<a name=\"system-evaluation\"></a>\r\n\r\n[custom_headline type=\"left\" level=\"h2\" class=\"center-text\"]System Evaluation[/custom_headline]\r\n\r\nGetting the maximum performance out of your system is tricky to say the least. The interplay between network communication, disk operations, and processing can be tricky to understand and even more difficult to profile correctly. Our team excels at benchmarking and we know how to find the bottleknecks in your application quickly. Hire us to evaluate sections of your code or the entire system. We do it all! Here is what we bring to the table:\r\n\r\n[column type=\"one-half\"  last=\"true\" ]\r\n\r\n[icon_list]\r\n[icon_list_item type=\"angle-double-right\"]System architecture and design expertise\r\n[/icon_list_item]\r\n\r\n[icon_list_item type=\"angle-double-right\"]In-depth knowledge and a plethora of field experience optimizing applications and processes for CPUs, GPUs, and FPGAs.[/icon_list_item]\r\n\r\n[icon_list_item type=\"angle-double-right\"]Awareness of the latest industry trends and tools[/icon_list_item]\r\n\r\n[icon_list_item type=\"angle-double-right\"]Hands on experience auditing on large, complicated systems.[/icon_list_item]\r\n\r\n[/icon_list][button  type=\"flat\" shape=\"rounded\" href=\"http://meetme.so/arrayfire\" size=\"regular\" ]Schedule a consultation[/button][/column]\r\n\r\n[column type=\"one-half\"]\r\n\r\n[promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/pT5oEjE8c-1024x240.jpg\" alt=\"San Fransisco Skyline\"]A Fortune 200 Insurance Company contacted ArrayFire to conduct an audit of their system in nine key areas. Two of these were scalability and optimization techniques. Through our comprehensive review ArrayFire located key bottleknecks that, once corrected, decreased total nightly runtime by 39% without any major code or system modifications.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-fortune-200-insurance-company\" size=\"regular\" ]Read the case study[/button]</p>\r\n[/promo]\r\n\r\n[/column]\r\n\r\n[/content_band]','Consulting','','inherit','closed','closed','','6634-revision-v1','','','2016-08-26 09:57:12','2016-08-26 13:57:12','',6634,'http://sandbox.arrayfire.com/6634-revision-v1/',0,'revision','',0),(9121,18528,'2016-08-26 10:04:08','2016-08-26 14:04:08','We\'ve worked with clients from the financial sector, academia, entertainment, and defense sectors. Below we show some of our favorite projects we\'ve worked on in the past.\r\n\r\n[content_band bg_color=\"#ffffff\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"][custom_headline type=\"left\" level=\"h2\" ]Computer Vision[/custom_headline][gap size=\"4%\"]\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/10/glasses-logo-promo-01.png\" alt=\"Glasses.com\"]The Glasses.com app relies on computer vision to recognize the features of a user’s face. The application then generates an accurate, high-fidelity, three-dimensional model of that face, and virtually places selected frames on the image.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-glasses-com-app-with-3dfit-technology/\" size=\"regular\" ]Read the case study[/button][/promo][/column]</p>\r\n[column type=\"one-half\" last=\"true\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/10/reveal-logo-promo-01.png\" alt=\"Reveal Imaging\"]Reveal Imaging, an SAIC company, uses ArrayFire in developing threat-detection products for transportation systems—such as cargo and baggage screening in airports—and in securing facilities and public events.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-reveal-imaging/\" size=\"regular\" ]Read the case study[/button][/promo][/column][/content_band]</p>\r\n\r\n[content_band bg_color=\"#ffffff\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"][custom_headline type=\"left\" level=\"h2\" ]Financial Services[/custom_headline][gap size=\"4%\"]\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2015/04/philadelphia-skyline.png\" alt=\"Fortune 300 Financial Services Company\"]\r\nArrayFire evaluated the performance of a hedge platform implemented in CUDA. Our final deliverable consisted of a 100 page report discussing the code base, performance and optimization, fault tolerance, scalability, compatibility with emerging trends, and  disaster recovery options. Our suggestions resulted in a 20% decrease in production runtimes.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-fortune-300-financial-company\" size=\"regular\" ]Read this case study[/button][/promo][/column]</p>\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/pT5oEjE8c.jpg\" alt=\"Fortune 200 Insurance Company\"]\r\nArrayFire was hired to conduct a comprehensive audit of two hedging platforms. Our final deliverable was a 160 page technical report, a middle-management report, and five executive summaries detailing our findings. ArrayFire located key bottleknecks that, once corrected, decreased the total nightly runtime by 39% without any major code or system modifications.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-fortune-200-insurance-company\" size=\"regular\" ]Read this case study[/button][/promo][/column]</p>\r\n[/content_band]','Case Studies','','inherit','closed','closed','','9071-revision-v1','','','2016-08-26 10:04:08','2016-08-26 14:04:08','',9071,'http://sandbox.arrayfire.com/9071-revision-v1/',0,'revision','',0),(9122,18528,'2016-08-26 10:21:01','2016-08-26 14:21:01','<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/watermark-sleepmed-logo.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/watermark-sleepmed-logo.png\" alt=\"watermark-sleepmed-logo\" width=\"445\" height=\"84\" class=\"aligncenter size-full wp-image-9106\" /></a>\r\n\r\nWatermark / Sleepmed is a biomedical company which focuses on improving the health and quality of life of those who suffer from sleep disorders. Watermark is <a href=\"http://www.sleepmedinc.com/about\">the nation leader in sleep diagnosis</a> and provides services to more than 80,000 patients annually in one of their 200 labs located in 32 states across the USA. To accomplish this task they created hardware which automatically collects a few gigabytes of important diagnostic data on patients when they sleep. These data are automatically reduced and processed to reveal important events which are later interpreted by sleep specialists.\r\n\r\n<h3>Mission</h3>\r\n\r\nSleepMed was in the process of developing new data collection hardware which, in principle, could share a significant fraction of the code base with the existing hardware. However, in order to accommodate the new hardware a significant fraction of the code needed to be refactored and modularized while maintaining perfect feature parity due to FDA compliance requirements. ArrayFire was hired to create a comprehensive test suite for each step of the data processing pipeline, perform the refactoring, and produce encyclopedic documentation for the software.\r\n\r\n<h3>Action</h3>\r\n\r\nArrayFire began this process by accessing the quantity of tests that were required to maintain FDA compliance. Given that this number was in the thousands, we built a small, dedicated computing cluster to test the code while we made revisions. After this, we maliciously parsed the code looking for distinct modules. We extracted each module, wrote unit tests, and verified their compatibility with the old code using \"gold standard\" data tests developed by SleepMed engineers.\r\n\r\n<h3>Results</h3>\r\n\r\nArrayFire modularized the code from 225k lines of code with no modularity to 100k lines of code with 33 distinct modules. Each module now has its own testing framework and set of \"gold standard\" input/output reference data. With the code modularized, SleepMed now has the ability to hire contractors to work on any single module. The contractors, in turn, need only run tests for their module and a handful of full-system tests to verify that their modifications did not break any existing functionality. These changes permitted SleepMed to integrate their new hardware into the existing pipeline with ease without the onerous and expensive task of seeking FDA approval for new data analysis software.','Case Study: WaterMark / Sleepmed','','inherit','closed','closed','','9105-revision-v1','','','2016-08-26 10:21:01','2016-08-26 14:21:01','',9105,'http://sandbox.arrayfire.com/9105-revision-v1/',0,'revision','',0),(9124,18528,'2016-08-26 11:31:46','2016-08-26 15:31:46','<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/watermark-sleepmed-logo.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/watermark-sleepmed-logo.png\" alt=\"watermark-sleepmed-logo\" width=\"445\" height=\"84\" class=\"aligncenter size-full wp-image-9106\" /></a>\r\n\r\nWatermark / Sleepmed is a biomedical company which focuses on improving the health and quality of life of those who suffer from sleep disorders. Watermark is <a href=\"http://www.sleepmedinc.com/about\">the nation leader in sleep diagnosis</a> and provides services to more than 80,000 patients annually in one of their 200 labs located in 32 states across the USA. To accomplish this task they created hardware which automatically collects a few gigabytes of important diagnostic data on patients when they sleep. These data are automatically reduced and processed to reveal important events which are later interpreted by sleep specialists.\r\n\r\n<h3>Mission</h3>\r\n\r\nSleepMed was in the process of developing new data collection hardware which, in principle, could share a significant fraction of the code base with the existing hardware. However, in order to accommodate the new hardware a significant fraction of the code needed to be refactored and modularized while maintaining perfect feature parity due to FDA compliance requirements. ArrayFire was hired to create a comprehensive test suite for each step of the data processing pipeline, perform the refactoring, and produce encyclopedic documentation for the software.\r\n\r\n<h3>Action</h3>\r\n\r\nArrayFire began this process by accessing the quantity of tests that were required to maintain FDA compliance. Given that this number was in the thousands, we built a small, dedicated computing cluster to test the code while we made revisions. After this, we maliciously parsed the code looking for distinct modules. We extracted each module, wrote unit tests, and verified their compatibility with the old code using \"gold standard\" data tests developed by SleepMed engineers.\r\n\r\n<h3>Results</h3>\r\n\r\nArrayFire modularized the code from 225k lines of code with no modularity to 100k lines of code with 33 distinct modules. Each module now has its own testing framework and set of \"gold standard\" input/output reference data. With the code modularized, SleepMed now has the ability to hire contractors to work on any single module. The contractors, in turn, need only run tests for their module and a handful of full-system tests to verify that their modifications did not break any existing functionality. These changes permitted SleepMed to integrate their new hardware into the existing pipeline with ease without the onerous and expensive task of seeking FDA approval for new data analysis software.','Case Study: Sleepmed','','inherit','closed','closed','','9105-revision-v1','','','2016-08-26 11:31:46','2016-08-26 15:31:46','',9105,'http://sandbox.arrayfire.com/9105-revision-v1/',0,'revision','',0),(9125,18528,'2016-08-26 11:32:29','2016-08-26 15:32:29','<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/watermark-sleepmed-logo.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/watermark-sleepmed-logo.png\" alt=\"watermark-sleepmed-logo\" width=\"445\" height=\"84\" class=\"aligncenter size-full wp-image-9106\" /></a>\r\n\r\nSleepmed is a biomedical company which focuses on improving the health and quality of life of those who suffer from sleep disorders. Sleepmed is <a href=\"http://www.sleepmedinc.com/about\">the nation leader in sleep diagnosis</a> and provides services to more than 80,000 patients annually in one of their 200 labs located in 32 states across the USA. To accomplish this task they created hardware which automatically collects a few gigabytes of important diagnostic data on patients when they sleep. These data are automatically reduced and processed to reveal important events which are later interpreted by sleep specialists.\r\n\r\n<h3>Mission</h3>\r\n\r\nSleepMed was in the process of developing new data collection hardware which, in principle, could share a significant fraction of the code base with the existing hardware. However, in order to accommodate the new hardware a significant fraction of the code needed to be refactored and modularized while maintaining perfect feature parity due to FDA compliance requirements. ArrayFire was hired to create a comprehensive test suite for each step of the data processing pipeline, perform the refactoring, and produce encyclopedic documentation for the software.\r\n\r\n<h3>Action</h3>\r\n\r\nArrayFire began this process by accessing the quantity of tests that were required to maintain FDA compliance. Given that this number was in the thousands, we built a small, dedicated computing cluster to test the code while we made revisions. After this, we maliciously parsed the code looking for distinct modules. We extracted each module, wrote unit tests, and verified their compatibility with the old code using \"gold standard\" data tests developed by SleepMed engineers.\r\n\r\n<h3>Results</h3>\r\n\r\nArrayFire modularized the code from 225k lines of code with no modularity to 100k lines of code with 33 distinct modules. Each module now has its own testing framework and set of \"gold standard\" input/output reference data. With the code modularized, SleepMed now has the ability to hire contractors to work on any single module. The contractors, in turn, need only run tests for their module and a handful of full-system tests to verify that their modifications did not break any existing functionality. These changes permitted SleepMed to integrate their new hardware into the existing pipeline with ease without the onerous and expensive task of seeking FDA approval for new data analysis software.','Case Study: Sleepmed','','inherit','closed','closed','','9105-revision-v1','','','2016-08-26 11:32:29','2016-08-26 15:32:29','',9105,'http://sandbox.arrayfire.com/9105-revision-v1/',0,'revision','',0),(9126,18528,'2016-08-26 12:40:15','2016-08-26 16:40:15','We\'ve worked with clients from the financial sector, academia, entertainment, and defense sectors. Below we show some of our favorite projects we\'ve worked on in the past.\r\n\r\n[content_band bg_color=\"#ffffff\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"][custom_headline type=\"left\" level=\"h2\" ]Computer Vision[/custom_headline][gap size=\"4%\"]\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/10/glasses-logo-promo-01.png\" alt=\"Glasses.com\"]The Glasses.com app relies on computer vision to recognize the features of a user’s face. The application then generates an accurate, high-fidelity, three-dimensional model of that face, and virtually places selected frames on the image.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-glasses-com-app-with-3dfit-technology/\" size=\"regular\" ]Read the case study[/button][/promo][/column]</p>\r\n[column type=\"one-half\" last=\"true\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/10/reveal-logo-promo-01.png\" alt=\"Reveal Imaging\"]Reveal Imaging, an SAIC company, uses ArrayFire in developing threat-detection products for transportation systems—such as cargo and baggage screening in airports—and in securing facilities and public events.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-reveal-imaging/\" size=\"regular\" ]Read the case study[/button][/promo][/column][/content_band]</p>\r\n\r\n[content_band bg_color=\"#ffffff\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"][custom_headline type=\"left\" level=\"h2\" ]Financial Services[/custom_headline][gap size=\"4%\"]\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2015/04/philadelphia-skyline.png\" alt=\"Fortune 300 Financial Services Company\"]\r\nArrayFire evaluated the performance of a hedge platform implemented in CUDA. Our final deliverable consisted of a 100 page report discussing the code base, performance and optimization, fault tolerance, scalability, compatibility with emerging trends, and  disaster recovery options. Our suggestions resulted in a 20% decrease in production runtimes.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-fortune-300-financial-company\" size=\"regular\" ]Read this case study[/button][/promo][/column]</p>\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/pT5oEjE8c.jpg\" alt=\"Fortune 200 Insurance Company\"]\r\nArrayFire was hired to conduct a comprehensive audit of two hedging platforms. Our final deliverable was a 160 page technical report, a middle-management report, and five executive summaries detailing our findings. ArrayFire located key bottleknecks that, once corrected, decreased the total nightly runtime by 39% without any major code or system modifications.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-fortune-200-insurance-company\" size=\"regular\" ]Read this case study[/button][/promo][/column]</p>\r\n[/content_band]\r\n\r\n[content_band bg_color=\"#ffffff\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"][custom_headline type=\"left\" level=\"h2\" ]Biomedical Services[/custom_headline][gap size=\"4%\"]\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/watermark-sleepmed-logo.png\" alt=\"SleepMed\"]\r\nSleepMed is the nation leader in diagnosing and treating sleep disorders in the United States. SleepMed contracted with ArrayFire to develop a detailed test suite and refactor their code to permit easier addition of new hardware. Through aggressive testing and modularization, ArrayFire reduced their code length by nearly 40% while providing a comprehensive set of tests for each module.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-sleepmed/\" size=\"regular\" ]Read this case study[/button][/promo][/column]</p>\r\n\r\n[/content_band]\r\n\r\n','Case Studies','','inherit','closed','closed','','9071-revision-v1','','','2016-08-26 12:40:15','2016-08-26 16:40:15','',9071,'http://sandbox.arrayfire.com/9071-revision-v1/',0,'revision','',0),(9127,18528,'2016-08-26 12:42:37','2016-08-26 16:42:37','We\'ve worked with clients from the financial sector, academia, entertainment, and defense sectors. Below we show some of our favorite projects we\'ve worked on in the past including:\r\n\r\n<ul>\r\n<li><a href=\"#computer-vision\">Computer Vision</a></li>\r\n<li><a href=\"#finance\">Finance</a></li>\r\n<li><a href=\"#biomedical\">Biomedical Applications</a></li>\r\n</ul>\r\n\r\n<a name=\"computer-vision\">\r\n[content_band bg_color=\"#f2f2f2\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"][custom_headline type=\"left\" level=\"h2\" ]Computer Vision[/custom_headline][gap size=\"4%\"]\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/10/glasses-logo-promo-01.png\" alt=\"Glasses.com\"]The Glasses.com app relies on computer vision to recognize the features of a user’s face. The application then generates an accurate, high-fidelity, three-dimensional model of that face, and virtually places selected frames on the image.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-glasses-com-app-with-3dfit-technology/\" size=\"regular\" ]Read the case study[/button][/promo][/column]</p>\r\n[column type=\"one-half\" last=\"true\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/10/reveal-logo-promo-01.png\" alt=\"Reveal Imaging\"]Reveal Imaging, an SAIC company, uses ArrayFire in developing threat-detection products for transportation systems—such as cargo and baggage screening in airports—and in securing facilities and public events.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-reveal-imaging/\" size=\"regular\" ]Read the case study[/button][/promo][/column][/content_band]</p>\r\n\r\n[content_band bg_color=\"#ffffff\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"][custom_headline type=\"left\" level=\"h2\" ]Financial Services[/custom_headline][gap size=\"4%\"]\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2015/04/philadelphia-skyline.png\" alt=\"Fortune 300 Financial Services Company\"]\r\nArrayFire evaluated the performance of a hedge platform implemented in CUDA. Our final deliverable consisted of a 100 page report discussing the code base, performance and optimization, fault tolerance, scalability, compatibility with emerging trends, and  disaster recovery options. Our suggestions resulted in a 20% decrease in production runtimes.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-fortune-300-financial-company\" size=\"regular\" ]Read this case study[/button][/promo][/column]</p>\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/pT5oEjE8c.jpg\" alt=\"Fortune 200 Insurance Company\"]\r\nArrayFire was hired to conduct a comprehensive audit of two hedging platforms. Our final deliverable was a 160 page technical report, a middle-management report, and five executive summaries detailing our findings. ArrayFire located key bottleknecks that, once corrected, decreased the total nightly runtime by 39% without any major code or system modifications.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-fortune-200-insurance-company\" size=\"regular\" ]Read this case study[/button][/promo][/column]</p>\r\n[/content_band]\r\n\r\n[content_band bg_color=\"#f2f2f2\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"][custom_headline type=\"left\" level=\"h2\" ]Biomedical Services[/custom_headline][gap size=\"4%\"]\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/watermark-sleepmed-logo.png\" alt=\"SleepMed\"]\r\nSleepMed is the nation leader in diagnosing and treating sleep disorders in the United States. SleepMed contracted with ArrayFire to develop a detailed test suite and refactor their code to permit easier addition of new hardware. Through aggressive testing and modularization, ArrayFire reduced their code length by nearly 40% while providing a comprehensive set of tests for each module.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-sleepmed/\" size=\"regular\" ]Read this case study[/button][/promo][/column]</p>\r\n\r\n[/content_band]\r\n\r\n','Case Studies','','inherit','closed','closed','','9071-revision-v1','','','2016-08-26 12:42:37','2016-08-26 16:42:37','',9071,'http://sandbox.arrayfire.com/9071-revision-v1/',0,'revision','',0),(9128,18528,'2016-08-26 12:43:10','2016-08-26 16:43:10','We\'ve worked with clients from the financial sector, academia, entertainment, and defense sectors. Below we show some of our favorite projects we\'ve worked on in the past including:\r\n\r\n<ul>\r\n<li><a href=\"#computer-vision\">Computer Vision</a></li>\r\n<li><a href=\"#finance\">Finance</a></li>\r\n<li><a href=\"#biomedical\">Biomedical Applications</a></li>\r\n</ul>\r\n\r\n<a name=\"computer-vision\">\r\n[content_band bg_color=\"#f2f2f2\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"][custom_headline type=\"left\" level=\"h2\" ]Computer Vision[/custom_headline][gap size=\"4%\"]\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/10/glasses-logo-promo-01.png\" alt=\"Glasses.com\"]The Glasses.com app relies on computer vision to recognize the features of a user’s face. The application then generates an accurate, high-fidelity, three-dimensional model of that face, and virtually places selected frames on the image.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-glasses-com-app-with-3dfit-technology/\" size=\"regular\" ]Read the case study[/button][/promo][/column]</p>\r\n[column type=\"one-half\" last=\"true\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/10/reveal-logo-promo-01.png\" alt=\"Reveal Imaging\"]Reveal Imaging, an SAIC company, uses ArrayFire in developing threat-detection products for transportation systems—such as cargo and baggage screening in airports—and in securing facilities and public events.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-reveal-imaging/\" size=\"regular\" ]Read the case study[/button][/promo][/column][/content_band]</p>\r\n\r\n<a name=\"finance\">\r\n[content_band bg_color=\"#ffffff\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"][custom_headline type=\"left\" level=\"h2\" ]Financial Services[/custom_headline][gap size=\"4%\"]\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2015/04/philadelphia-skyline.png\" alt=\"Fortune 300 Financial Services Company\"]\r\nArrayFire evaluated the performance of a hedge platform implemented in CUDA. Our final deliverable consisted of a 100 page report discussing the code base, performance and optimization, fault tolerance, scalability, compatibility with emerging trends, and  disaster recovery options. Our suggestions resulted in a 20% decrease in production runtimes.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-fortune-300-financial-company\" size=\"regular\" ]Read this case study[/button][/promo][/column]</p>\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/pT5oEjE8c.jpg\" alt=\"Fortune 200 Insurance Company\"]\r\nArrayFire was hired to conduct a comprehensive audit of two hedging platforms. Our final deliverable was a 160 page technical report, a middle-management report, and five executive summaries detailing our findings. ArrayFire located key bottleknecks that, once corrected, decreased the total nightly runtime by 39% without any major code or system modifications.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-fortune-200-insurance-company\" size=\"regular\" ]Read this case study[/button][/promo][/column]</p>\r\n[/content_band]\r\n\r\n<a name=\"biomedical\">\r\n[content_band bg_color=\"#f2f2f2\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"][custom_headline type=\"left\" level=\"h2\" ]Biomedical Services[/custom_headline][gap size=\"4%\"]\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/watermark-sleepmed-logo.png\" alt=\"SleepMed\"]\r\nSleepMed is the nation leader in diagnosing and treating sleep disorders in the United States. SleepMed contracted with ArrayFire to develop a detailed test suite and refactor their code to permit easier addition of new hardware. Through aggressive testing and modularization, ArrayFire reduced their code length by nearly 40% while providing a comprehensive set of tests for each module.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-sleepmed/\" size=\"regular\" ]Read this case study[/button][/promo][/column]</p>\r\n\r\n[/content_band]\r\n\r\n','Case Studies','','inherit','closed','closed','','9071-revision-v1','','','2016-08-26 12:43:10','2016-08-26 16:43:10','',9071,'http://sandbox.arrayfire.com/9071-revision-v1/',0,'revision','',0),(9129,18528,'2016-08-26 12:43:22','2016-08-26 16:43:22','We\'ve worked with clients from the financial sector, academia, entertainment, and defense sectors. Below we show some of our favorite projects we\'ve worked on in the past including:\r\n\r\n<ul>\r\n<li><a href=\"#computer-vision\">Computer Vision</a></li>\r\n<li><a href=\"#finance\">Finance</a></li>\r\n<li><a href=\"#biomedical\">Biomedical Applications</a></li>\r\n</ul>\r\n\r\n<a name=\"computer-vision\" />\r\n[content_band bg_color=\"#f2f2f2\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"][custom_headline type=\"left\" level=\"h2\" ]Computer Vision[/custom_headline][gap size=\"4%\"]\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/10/glasses-logo-promo-01.png\" alt=\"Glasses.com\"]The Glasses.com app relies on computer vision to recognize the features of a user’s face. The application then generates an accurate, high-fidelity, three-dimensional model of that face, and virtually places selected frames on the image.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-glasses-com-app-with-3dfit-technology/\" size=\"regular\" ]Read the case study[/button][/promo][/column]</p>\r\n[column type=\"one-half\" last=\"true\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/10/reveal-logo-promo-01.png\" alt=\"Reveal Imaging\"]Reveal Imaging, an SAIC company, uses ArrayFire in developing threat-detection products for transportation systems—such as cargo and baggage screening in airports—and in securing facilities and public events.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-reveal-imaging/\" size=\"regular\" ]Read the case study[/button][/promo][/column][/content_band]</p>\r\n\r\n<a name=\"finance\">\r\n[content_band bg_color=\"#ffffff\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"][custom_headline type=\"left\" level=\"h2\" ]Financial Services[/custom_headline][gap size=\"4%\"]\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2015/04/philadelphia-skyline.png\" alt=\"Fortune 300 Financial Services Company\"]\r\nArrayFire evaluated the performance of a hedge platform implemented in CUDA. Our final deliverable consisted of a 100 page report discussing the code base, performance and optimization, fault tolerance, scalability, compatibility with emerging trends, and  disaster recovery options. Our suggestions resulted in a 20% decrease in production runtimes.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-fortune-300-financial-company\" size=\"regular\" ]Read this case study[/button][/promo][/column]</p>\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/pT5oEjE8c.jpg\" alt=\"Fortune 200 Insurance Company\"]\r\nArrayFire was hired to conduct a comprehensive audit of two hedging platforms. Our final deliverable was a 160 page technical report, a middle-management report, and five executive summaries detailing our findings. ArrayFire located key bottleknecks that, once corrected, decreased the total nightly runtime by 39% without any major code or system modifications.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-fortune-200-insurance-company\" size=\"regular\" ]Read this case study[/button][/promo][/column]</p>\r\n[/content_band]\r\n\r\n<a name=\"biomedical\">\r\n[content_band bg_color=\"#f2f2f2\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"][custom_headline type=\"left\" level=\"h2\" ]Biomedical Services[/custom_headline][gap size=\"4%\"]\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/watermark-sleepmed-logo.png\" alt=\"SleepMed\"]\r\nSleepMed is the nation leader in diagnosing and treating sleep disorders in the United States. SleepMed contracted with ArrayFire to develop a detailed test suite and refactor their code to permit easier addition of new hardware. Through aggressive testing and modularization, ArrayFire reduced their code length by nearly 40% while providing a comprehensive set of tests for each module.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-sleepmed/\" size=\"regular\" ]Read this case study[/button][/promo][/column]</p>\r\n\r\n[/content_band]\r\n\r\n','Case Studies','','inherit','closed','closed','','9071-revision-v1','','','2016-08-26 12:43:22','2016-08-26 16:43:22','',9071,'http://sandbox.arrayfire.com/9071-revision-v1/',0,'revision','',0),(9130,18528,'2016-08-26 12:43:35','2016-08-26 16:43:35','We\'ve worked with clients from the financial sector, academia, entertainment, and defense sectors. Below we show some of our favorite projects we\'ve worked on in the past including:\r\n\r\n<ul>\r\n<li><a href=\"#computer-vision\">Computer Vision</a></li>\r\n<li><a href=\"#finance\">Finance</a></li>\r\n<li><a href=\"#biomedical\">Biomedical Applications</a></li>\r\n</ul>\r\n\r\n<a name=\"computer-vision\"></a>\r\n[content_band bg_color=\"#f2f2f2\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"][custom_headline type=\"left\" level=\"h2\" ]Computer Vision[/custom_headline][gap size=\"4%\"]\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/10/glasses-logo-promo-01.png\" alt=\"Glasses.com\"]The Glasses.com app relies on computer vision to recognize the features of a user’s face. The application then generates an accurate, high-fidelity, three-dimensional model of that face, and virtually places selected frames on the image.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-glasses-com-app-with-3dfit-technology/\" size=\"regular\" ]Read the case study[/button][/promo][/column]</p>\r\n[column type=\"one-half\" last=\"true\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/10/reveal-logo-promo-01.png\" alt=\"Reveal Imaging\"]Reveal Imaging, an SAIC company, uses ArrayFire in developing threat-detection products for transportation systems—such as cargo and baggage screening in airports—and in securing facilities and public events.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-reveal-imaging/\" size=\"regular\" ]Read the case study[/button][/promo][/column][/content_band]</p>\r\n\r\n<a name=\"finance\"></a>\r\n[content_band bg_color=\"#ffffff\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"][custom_headline type=\"left\" level=\"h2\" ]Financial Services[/custom_headline][gap size=\"4%\"]\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2015/04/philadelphia-skyline.png\" alt=\"Fortune 300 Financial Services Company\"]\r\nArrayFire evaluated the performance of a hedge platform implemented in CUDA. Our final deliverable consisted of a 100 page report discussing the code base, performance and optimization, fault tolerance, scalability, compatibility with emerging trends, and  disaster recovery options. Our suggestions resulted in a 20% decrease in production runtimes.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-fortune-300-financial-company\" size=\"regular\" ]Read this case study[/button][/promo][/column]</p>\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/pT5oEjE8c.jpg\" alt=\"Fortune 200 Insurance Company\"]\r\nArrayFire was hired to conduct a comprehensive audit of two hedging platforms. Our final deliverable was a 160 page technical report, a middle-management report, and five executive summaries detailing our findings. ArrayFire located key bottleknecks that, once corrected, decreased the total nightly runtime by 39% without any major code or system modifications.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-fortune-200-insurance-company\" size=\"regular\" ]Read this case study[/button][/promo][/column]</p>\r\n[/content_band]\r\n\r\n<a name=\"biomedical\"></a>\r\n[content_band bg_color=\"#f2f2f2\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"][custom_headline type=\"left\" level=\"h2\" ]Biomedical Services[/custom_headline][gap size=\"4%\"]\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/watermark-sleepmed-logo.png\" alt=\"SleepMed\"]\r\nSleepMed is the nation leader in diagnosing and treating sleep disorders in the United States. SleepMed contracted with ArrayFire to develop a detailed test suite and refactor their code to permit easier addition of new hardware. Through aggressive testing and modularization, ArrayFire reduced their code length by nearly 40% while providing a comprehensive set of tests for each module.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-sleepmed/\" size=\"regular\" ]Read this case study[/button][/promo][/column]</p>\r\n\r\n[/content_band]\r\n\r\n','Case Studies','','inherit','closed','closed','','9071-revision-v1','','','2016-08-26 12:43:35','2016-08-26 16:43:35','',9071,'http://sandbox.arrayfire.com/9071-revision-v1/',0,'revision','',0),(9131,18528,'2016-08-26 12:47:22','2016-08-26 16:47:22',' ','','','publish','closed','closed','','9131','','','2018-08-22 21:35:30','2018-08-23 01:35:30','',0,'http://sandbox.arrayfire.com/?p=9131',8,'nav_menu_item','',0),(9132,18528,'2016-08-26 12:52:58','2016-08-26 16:52:58','Learn how ArrayFire has worked in real code, including applications in academia, finance, government, life sciences, manufacturing, media, and oil & gas. With ArrayFire, you get the best in accelerated computing, ensuring real success in your business and research objectives. Below we show some of our favorite projects we\'ve worked on in the past including:\r\n\r\n<ul>\r\n<li><a href=\"#computer-vision\">Computer Vision</a></li>\r\n<li><a href=\"#finance\">Finance</a></li>\r\n<li><a href=\"#biomedical\">Biomedical Applications</a></li>\r\n</ul>\r\n\r\n<a name=\"computer-vision\"></a>\r\n[content_band bg_color=\"#f2f2f2\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"][custom_headline type=\"left\" level=\"h2\" ]Computer Vision[/custom_headline][gap size=\"4%\"]\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/10/glasses-logo-promo-01.png\" alt=\"Glasses.com\"]The Glasses.com app relies on computer vision to recognize the features of a user’s face. The application then generates an accurate, high-fidelity, three-dimensional model of that face, and virtually places selected frames on the image.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-glasses-com-app-with-3dfit-technology/\" size=\"regular\" ]Read the case study[/button][/promo][/column]</p>\r\n[column type=\"one-half\" last=\"true\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/10/reveal-logo-promo-01.png\" alt=\"Reveal Imaging\"]Reveal Imaging, an SAIC company, uses ArrayFire in developing threat-detection products for transportation systems—such as cargo and baggage screening in airports—and in securing facilities and public events.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-reveal-imaging/\" size=\"regular\" ]Read the case study[/button][/promo][/column][/content_band]</p>\r\n\r\n<a name=\"finance\"></a>\r\n[content_band bg_color=\"#ffffff\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"][custom_headline type=\"left\" level=\"h2\" ]Financial Services[/custom_headline][gap size=\"4%\"]\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2015/04/philadelphia-skyline.png\" alt=\"Fortune 300 Financial Services Company\"]\r\nArrayFire evaluated the performance of a hedge platform implemented in CUDA. Our final deliverable consisted of a 100 page report discussing the code base, performance and optimization, fault tolerance, scalability, compatibility with emerging trends, and  disaster recovery options. Our suggestions resulted in a 20% decrease in production runtimes.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-fortune-300-financial-company\" size=\"regular\" ]Read this case study[/button][/promo][/column]</p>\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/pT5oEjE8c.jpg\" alt=\"Fortune 200 Insurance Company\"]\r\nArrayFire was hired to conduct a comprehensive audit of two hedging platforms. Our final deliverable was a 160 page technical report, a middle-management report, and five executive summaries detailing our findings. ArrayFire located key bottleknecks that, once corrected, decreased the total nightly runtime by 39% without any major code or system modifications.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-fortune-200-insurance-company\" size=\"regular\" ]Read this case study[/button][/promo][/column]</p>\r\n[/content_band]\r\n\r\n<a name=\"biomedical\"></a>\r\n[content_band bg_color=\"#f2f2f2\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"][custom_headline type=\"left\" level=\"h2\" ]Biomedical Services[/custom_headline][gap size=\"4%\"]\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/watermark-sleepmed-logo.png\" alt=\"SleepMed\"]\r\nSleepMed is the nation leader in diagnosing and treating sleep disorders in the United States. SleepMed contracted with ArrayFire to develop a detailed test suite and refactor their code to permit easier addition of new hardware. Through aggressive testing and modularization, ArrayFire reduced their code length by nearly 40% while providing a comprehensive set of tests for each module.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-sleepmed/\" size=\"regular\" ]Read this case study[/button][/promo][/column]</p>\r\n\r\n[/content_band]\r\n\r\n','Case Studies','','inherit','closed','closed','','9071-revision-v1','','','2016-08-26 12:52:58','2016-08-26 16:52:58','',9071,'http://sandbox.arrayfire.com/9071-revision-v1/',0,'revision','',0),(9133,18528,'2016-08-26 13:16:45','2016-08-26 17:16:45','','computer-vision','','inherit','open','closed','','cv-big-buck-bunny','','','2016-08-26 13:16:57','2016-08-26 17:16:57','',245,'http://sandbox.arrayfire.com/wp-content/uploads/2014/01/cv-big-buck-bunny.png',0,'attachment','image/png',0),(9135,18528,'2016-08-26 13:24:47','2016-08-26 17:24:47','','ISA','','inherit','open','closed','','isa','','','2016-08-26 13:24:47','2016-08-26 17:24:47','',245,'http://sandbox.arrayfire.com/wp-content/uploads/2014/01/ISA.png',0,'attachment','image/png',0),(9136,18528,'2016-08-26 13:25:53','2016-08-26 17:25:53','','radarformation','','inherit','open','closed','','radarformation','','','2016-08-26 13:25:53','2016-08-26 17:25:53','',245,'http://sandbox.arrayfire.com/wp-content/uploads/2014/01/radarformation.jpg',0,'attachment','image/jpeg',0),(9137,18528,'2016-08-26 13:38:03','2016-08-26 17:38:03','','photo-computer-finance','','inherit','open','closed','','photo-computer-finance','','','2016-08-26 13:38:03','2016-08-26 17:38:03','',245,'http://sandbox.arrayfire.com/wp-content/uploads/2014/01/photo-computer-finance.jpg',0,'attachment','image/jpeg',0),(9138,18528,'2016-08-26 13:54:08','2016-08-26 17:54:08','','ship-at-sea','','inherit','open','closed','','olympus-digital-camera','','','2016-08-26 13:54:18','2016-08-26 17:54:18','',245,'http://sandbox.arrayfire.com/wp-content/uploads/2014/01/shadow-of-the-war-1536222.jpg',0,'attachment','image/jpeg',0),(9139,18528,'2016-08-26 14:04:07','2016-08-26 18:04:07','','photo-computer-vision','','inherit','open','closed','','photo-computer-vision','','','2016-08-26 14:04:07','2016-08-26 18:04:07','',245,'http://sandbox.arrayfire.com/wp-content/uploads/2014/01/photo-computer-vision.jpg',0,'attachment','image/jpeg',0),(9140,18528,'2016-08-26 14:09:08','2016-08-26 18:09:08','','photo-ai','','inherit','open','closed','','photo-ai','','','2016-08-26 14:09:08','2016-08-26 18:09:08','',245,'http://sandbox.arrayfire.com/wp-content/uploads/2014/01/photo-ai.jpg',0,'attachment','image/jpeg',0),(9141,18528,'2016-08-26 14:10:25','2016-08-26 18:10:25','[content_band inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"40px\" padding_bottom=\"10px\"][column type=\"two-fifths\"]\r\n\r\n[custom_headline type=\"left\" level=\"h3\"]If you want faster code, you\'ve come to the right place.[/custom_headline][gap size=\"3%\"][button  type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/download\" size=\"x-large\" block=\"true\"]Download ArrayFire[/button]\r\n\r\n[gap size=\"5%\"]\r\n\r\n[button  type=\"flat\" block=\"true\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/consulting/\" size=\"x-large\" ]Schedule a consultation[/button][gap size=\"2%\"]\r\n\r\n[/column][column type=\"three-fifths\" last=\"true\"][gap size=\"7%\"]\r\n<div id=\"wistia_rj2bar3xxp\" class=\"wistia_embed\" style=\"width: 640px; height: 388px;\"></div>\r\n<script src=\"//fast.wistia.com/assets/external/E-v1.js\" charset=\"ISO-8859-1\"></script><script>// <![CDATA[\r\nwistiaEmbed = Wistia.embed(\"rj2bar3xxp\");\r\n// ]]></script>\r\n[/column]\r\n<div id=\"arrayfire\"></div>\r\n[/content_band]\r\n\r\n\r\n[content_band bg_color=\"#f2f2f2\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"]\r\n\r\n[custom_headline type=\"left\" level=\"h3\" class=\"center-text\"]Services[/custom_headline]\r\n\r\nArrayFire specializes in developing accelerated, scalable computing solutions on modern computational platforms for our clients. As an industry leader in high performance computing for nearly 10 years, ArrayFire continues to drive innovation in all areas of accelerated computing, ranging from apps deployed on low-powered and mobile platforms to scientific simulations on high-end supercomputers.\r\n\r\n[/content_band]\r\n\r\n[content_band bg_color=\"#ffffff\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"40px\" padding_bottom=\"10px\"]\r\n\r\n[column type=\"one-third\" ][custom_headline type=\"left\" level=\"h3\" class=\"center-text\"][image src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/01/car-e1412967813807.png\" class=\"mbn\"] Software Design[/custom_headline]\r\n\r\n[line style=\"border-top: solid #999999;\"]ArrayFire has worked with hundreds of companies and entrepreneurs to develop custom, high performance software solutions for their unique problems. We use the latest software development methods, profiling tools, and deployment methods to deliver scalable solutions for your present and future business goals.\r\n\r\n[button type=\"flat\" shape=\"rounded\" size=\"regular\" href=\"http://www.sandbox.arrayfire.com/consulting#software-design\" padding_top=\"40px\" padding_bottom=\"40px\"]Read more...[/button]\r\n[/column]\r\n\r\n[column type=\"one-third\" ][custom_headline type=\"left\" level=\"h3\" class=\"center-text\"][image src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/09/mini-motorcycle-01-e1412969290876.png\" class=\"mbn\"] System Assessment[/custom_headline][line style=\"border-top: solid #999999;\"]ArrayFire performs holistic application audits that establish the current and theoretical maximum performance your application can achieve. Our methods evaluate everything from the hardware up so you can determine bottlenecks and get the maximum return on investment for future development work.\r\n\r\n[button type=\"flat\" shape=\"rounded\" size=\"regular\" href=\"http://www.sandbox.arrayfire.com/consulting#system-evaluation\" padding_top=\"40px\" padding_bottom=\"40px\"]Read More...[/button]\r\n\r\n[/column]\r\n\r\n[column type=\"one-third\" last=\"true\" ][custom_headline type=\"left\" level=\"h3\" class=\"center-text\"][image src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/09/mini-plane-01-e1412969527633.png\" class=\"mbn\"] Training [/custom_headline][line style=\"border-top: solid #999999;\"]ArrayFire trains your engineers on the latest techniques in parallel computing including CUDA or OpenCL for CPUs, GPUs, FPGAs, and other accelerators. We offer two- and four-day training sessions that are fully customizable so your team learns skills that they need to accelerate your software.\r\n\r\n[button type=\"flat\" shape=\"rounded\" size=\"regular\" href=\"http://www.sandbox.arrayfire.com/training\" padding_top=\"40px\" padding_bottom=\"40px\"]Read More...[/button]\r\n\r\n[/column]\r\n\r\n[/content_band]\r\n\r\n[content_band bg_color=\"#f2f2f2\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"]\r\n\r\n[custom_headline type=\"left\" level=\"h3\" class=\"center-text\"]ArrayFire Library[/custom_headline]\r\n\r\nThe ArrayFire accelerated computing library is a free, general-purpose, open-source library that simplifies the process of developing software that targets parallel and massively-parallel architectures including CPUs, GPUs, and other hardware acceleration devices. ArrayFire is used on devices from low-powered mobile phones to high-powered GPU-enabled supercomputers including CPUs from all major vendors (Intel, AMD, Arm), GPUs from the dominant manufacturers (NVIDIA, AMD, and Qualcomm), as well as a variety of other accelerator devices on Windows, Mac, and Linux. \r\n\r\n[button type=\"flat\" shape=\"rounded\" size=\"regular\" href=\"http://www.sandbox.arrayfire.com/download\" padding_top=\"40px\" padding_bottom=\"40px\"]Download ArrayFire[/button]\r\n\r\n[/content_band]\r\n\r\n[content_band bg_color=\"#ffffff\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"]\r\n\r\n[custom_headline type=\"left\" level=\"h3\" class=\"center-text\"]Technologies[/custom_headline]\r\n\r\n[column type=\"one-fourth\"]\r\n[custom_headline type=\"left\" level=\"h5\" class=\"center-text\"]Computer Vision[/custom_headline]\r\n<a href=\"http://sandbox.arrayfire.com/case-studies/#computer-vision\">\r\n<img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/01/photo-computer-vision.jpg\" alt=\"photo-computer-vision\" width=\"341\" height=\"256\" class=\"aligncenter size-full wp-image-9139\" /></a>\r\n[/column]\r\n\r\n[column type=\"one-fourth\"]\r\n[custom_headline type=\"left\" level=\"h5\" class=\"center-text\"]Defense[/custom_headline]\r\n<a href=\"http://sandbox.arrayfire.com/case-studies/#defense\">\r\n<img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/01/shadow-of-the-war-1536222.jpg\" alt=\"ship-at-sea\" width=\"384\" height=\"256\" class=\"aligncenter size-full wp-image-9138\" /></a>\r\n[/column]\r\n\r\n[column type=\"one-fourth\"]\r\n[custom_headline type=\"left\" level=\"h5\" class=\"center-text\"]Finance[/custom_headline]\r\n\r\n<a href=\"http://sandbox.arrayfire.com/case-studies/#finance\">\r\n<img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/01/photo-computer-finance.jpg\" alt=\"photo-computer-finance\" width=\"384\" height=\"256\" class=\"aligncenter size-full wp-image-9137\" /></a>\r\n\r\n[/column]\r\n\r\n[column type=\"one-fourth\"]\r\n[custom_headline type=\"left\" level=\"h5\" class=\"center-text\"]Machine Learning[/custom_headline]\r\n<a href=\"http://sandbox.arrayfire.com/case-studies/#machine-learning\">\r\n<img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/01/photo-ai.jpg\" alt=\"photo-ai\" width=\"334\" height=\"256\" class=\"aligncenter size-full wp-image-9140\" /></a>\r\n<!-- Image credit: https://commons.wikimedia.org/wiki/File:Artificial-intelligence-elon-musk-hawking.jpg -->\r\n[/column]\r\n\r\n[/content_band]','Home','','inherit','closed','closed','','245-revision-v1','','','2016-08-26 14:10:25','2016-08-26 18:10:25','',245,'http://sandbox.arrayfire.com/245-revision-v1/',0,'revision','',0),(9142,18528,'2016-08-26 14:15:59','2016-08-26 18:15:59','Learn how ArrayFire has worked in real code, including applications in academia, finance, government, life sciences, manufacturing, media, and oil & gas. With ArrayFire, you get the best in accelerated computing, ensuring real success in your business and research objectives. Below we show some of our favorite projects we\'ve worked on in the past including:\r\n\r\n<ul>\r\n<li><a href=\"#computer-vision\">Computer Vision</a></li>\r\n<li><a href=\"#defense\">Defense</a></li>\r\n<li><a href=\"#finance\">Finance</a></li>\r\n<li><a href=\"#biomedical\">Biomedical Applications</a></li>\r\n</ul>\r\n\r\n\r\n<a name=\"computer-vision\"></a>\r\n[content_band bg_color=\"#f2f2f2\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"][custom_headline type=\"left\" level=\"h2\" ]Computer Vision[/custom_headline][gap size=\"4%\"]\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/10/glasses-logo-promo-01.png\" alt=\"Glasses.com\"]The Glasses.com app relies on computer vision to recognize the features of a user’s face. The application then generates an accurate, high-fidelity, three-dimensional model of that face, and virtually places selected frames on the image.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-glasses-com-app-with-3dfit-technology/\" size=\"regular\" ]Read the case study[/button][/promo][/column]</p>\r\n[/content_band]</p>\r\n\r\n<a name=\"defense\"></a>\r\n[content_band bg_color=\"#ffffff\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"][custom_headline type=\"left\" level=\"h2\" ]Defense[/custom_headline][gap size=\"4%\"]\r\n\r\n[column type=\"one-half\" last=\"true\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/10/reveal-logo-promo-01.png\" alt=\"Reveal Imaging\"]Reveal Imaging, an SAIC company, uses ArrayFire in developing threat-detection products for transportation systems—such as cargo and baggage screening in airports—and in securing facilities and public events.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-reveal-imaging/\" size=\"regular\" ]Read the case study[/button][/promo][/column][/content_band]</p>\r\n\r\n<a name=\"finance\"></a>\r\n[content_band bg_color=\"#f2f2f2\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"][custom_headline type=\"left\" level=\"h2\" ]Financial Services[/custom_headline][gap size=\"4%\"]\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2015/04/philadelphia-skyline.png\" alt=\"Fortune 300 Financial Services Company\"]\r\nArrayFire evaluated the performance of a hedge platform implemented in CUDA. Our final deliverable consisted of a 100 page report discussing the code base, performance and optimization, fault tolerance, scalability, compatibility with emerging trends, and  disaster recovery options. Our suggestions resulted in a 20% decrease in production runtimes.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-fortune-300-financial-company\" size=\"regular\" ]Read this case study[/button][/promo][/column]</p>\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/pT5oEjE8c.jpg\" alt=\"Fortune 200 Insurance Company\"]\r\nArrayFire was hired to conduct a comprehensive audit of two hedging platforms. Our final deliverable was a 160 page technical report, a middle-management report, and five executive summaries detailing our findings. ArrayFire located key bottleknecks that, once corrected, decreased the total nightly runtime by 39% without any major code or system modifications.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-fortune-200-insurance-company\" size=\"regular\" ]Read this case study[/button][/promo][/column]</p>\r\n[/content_band]\r\n\r\n<a name=\"biomedical\"></a>\r\n[content_band bg_color=\"#ffffff\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"][custom_headline type=\"left\" level=\"h2\" ]Biomedical Services[/custom_headline][gap size=\"4%\"]\r\n\r\n[column type=\"one-half\"][promo image=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/08/watermark-sleepmed-logo.png\" alt=\"SleepMed\"]\r\nSleepMed is the nation leader in diagnosing and treating sleep disorders in the United States. SleepMed contracted with ArrayFire to develop a detailed test suite and refactor their code to permit easier addition of new hardware. Through aggressive testing and modularization, ArrayFire reduced their code length by nearly 40% while providing a comprehensive set of tests for each module.\r\n<p style=\"text-align: center;\">[button type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/case-study-sleepmed/\" size=\"regular\" ]Read this case study[/button][/promo][/column]</p>\r\n\r\n[/content_band]\r\n\r\n','Case Studies','','inherit','closed','closed','','9071-revision-v1','','','2016-08-26 14:15:59','2016-08-26 18:15:59','',9071,'http://sandbox.arrayfire.com/9071-revision-v1/',0,'revision','',0),(9143,18528,'2016-08-26 14:34:33','2016-08-26 18:34:33','[content_band inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"40px\" padding_bottom=\"10px\"][column type=\"two-fifths\"]\r\n\r\n[custom_headline type=\"left\" level=\"h3\"]If you want faster code, you\'ve come to the right place.[/custom_headline][gap size=\"3%\"][button  type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/download\" size=\"x-large\" block=\"true\"]Download ArrayFire[/button]\r\n\r\n[gap size=\"5%\"]\r\n\r\n[button  type=\"flat\" block=\"true\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/consulting/\" size=\"x-large\" ]Schedule a consultation[/button][gap size=\"2%\"]\r\n\r\n[/column][column type=\"three-fifths\" last=\"true\"][gap size=\"7%\"]\r\n<div id=\"wistia_rj2bar3xxp\" class=\"wistia_embed\" style=\"width: 640px; height: 388px;\"></div>\r\n<script src=\"//fast.wistia.com/assets/external/E-v1.js\" charset=\"ISO-8859-1\"></script><script>// <![CDATA[\r\nwistiaEmbed = Wistia.embed(\"rj2bar3xxp\");\r\n// ]]></script>\r\n[/column]\r\n<div id=\"arrayfire\"></div>\r\n[/content_band]\r\n\r\n\r\n[content_band bg_color=\"#f2f2f2\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"]\r\n\r\n[custom_headline type=\"left\" level=\"h3\" class=\"center-text\"]Services[/custom_headline]\r\n\r\nArrayFire specializes in developing accelerated, scalable computing solutions on modern computational platforms for our clients. As an industry leader in high performance computing for nearly 10 years, ArrayFire continues to drive innovation in all areas of accelerated computing, ranging from apps deployed on low-powered and mobile platforms to scientific simulations on high-end supercomputers.\r\n\r\n[/content_band]\r\n\r\n[content_band bg_color=\"#ffffff\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"40px\" padding_bottom=\"10px\"]\r\n\r\n[column type=\"one-third\" ][custom_headline type=\"left\" level=\"h3\" class=\"center-text\"][image src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/01/car-e1412967813807.png\" class=\"mbn\"] Software Design[/custom_headline]\r\n\r\n[line style=\"border-top: solid #999999;\"]ArrayFire has worked with hundreds of companies and entrepreneurs to develop custom, high performance software solutions for their unique problems. We use the latest software development methods, profiling tools, and deployment methods to deliver scalable solutions for your present and future business goals.\r\n\r\n[button type=\"flat\" shape=\"rounded\" size=\"regular\" href=\"http://www.sandbox.arrayfire.com/consulting#software-design\" padding_top=\"40px\" padding_bottom=\"40px\"]Read more...[/button]\r\n[/column]\r\n\r\n[column type=\"one-third\" ][custom_headline type=\"left\" level=\"h3\" class=\"center-text\"][image src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/09/mini-motorcycle-01-e1412969290876.png\" class=\"mbn\"] System Assessment[/custom_headline][line style=\"border-top: solid #999999;\"]ArrayFire performs holistic application audits that establish the current and theoretical maximum performance your application can achieve. Our methods evaluate everything from the hardware up so you can determine bottlenecks and get the maximum return on investment for future development work.\r\n\r\n[button type=\"flat\" shape=\"rounded\" size=\"regular\" href=\"http://www.sandbox.arrayfire.com/consulting#system-evaluation\" padding_top=\"40px\" padding_bottom=\"40px\"]Read More...[/button]\r\n\r\n[/column]\r\n\r\n[column type=\"one-third\" last=\"true\" ][custom_headline type=\"left\" level=\"h3\" class=\"center-text\"][image src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/09/mini-plane-01-e1412969527633.png\" class=\"mbn\"] Training [/custom_headline][line style=\"border-top: solid #999999;\"]ArrayFire trains your engineers on the latest techniques in parallel computing including CUDA or OpenCL for CPUs, GPUs, FPGAs, and other accelerators. We offer two- and four-day training sessions that are fully customizable so your team learns skills that they need to accelerate your software.\r\n\r\n[button type=\"flat\" shape=\"rounded\" size=\"regular\" href=\"http://www.sandbox.arrayfire.com/training\" padding_top=\"40px\" padding_bottom=\"40px\"]Read More...[/button]\r\n\r\n[/column]\r\n\r\n[/content_band]\r\n\r\n[content_band bg_color=\"#f2f2f2\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"]\r\n\r\n[custom_headline type=\"left\" level=\"h3\" class=\"center-text\"]ArrayFire Library[/custom_headline]\r\n\r\nThe ArrayFire accelerated computing library is a free, general-purpose, open-source library that simplifies the process of developing software that targets parallel and massively-parallel architectures including CPUs, GPUs, and other hardware acceleration devices. ArrayFire is used on devices from low-powered mobile phones to high-powered GPU-enabled supercomputers including CPUs from all major vendors (Intel, AMD, Arm), GPUs from the dominant manufacturers (NVIDIA, AMD, and Qualcomm), as well as a variety of other accelerator devices on Windows, Mac, and Linux. \r\n\r\n[button type=\"flat\" shape=\"rounded\" size=\"regular\" href=\"http://www.sandbox.arrayfire.com/download\" padding_top=\"40px\" padding_bottom=\"40px\"]Download ArrayFire[/button]\r\n\r\n[/content_band]\r\n\r\n[content_band bg_color=\"#ffffff\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"]\r\n\r\n[custom_headline type=\"left\" level=\"h3\" class=\"center-text\"]Domain Specialization[/custom_headline]\r\n\r\n[column type=\"one-fourth\"]\r\n[custom_headline type=\"left\" level=\"h5\" class=\"center-text\"]Computer Vision[/custom_headline]\r\n<a href=\"http://sandbox.arrayfire.com/case-studies/#computer-vision\">\r\n<img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/01/photo-computer-vision.jpg\" alt=\"photo-computer-vision\" width=\"341\" height=\"256\" class=\"aligncenter size-full wp-image-9139\" /></a>\r\n[/column]\r\n\r\n[column type=\"one-fourth\"]\r\n[custom_headline type=\"left\" level=\"h5\" class=\"center-text\"]Defense[/custom_headline]\r\n<a href=\"http://sandbox.arrayfire.com/case-studies/#defense\">\r\n<img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/01/shadow-of-the-war-1536222.jpg\" alt=\"ship-at-sea\" width=\"384\" height=\"256\" class=\"aligncenter size-full wp-image-9138\" /></a>\r\n[/column]\r\n\r\n[column type=\"one-fourth\"]\r\n[custom_headline type=\"left\" level=\"h5\" class=\"center-text\"]Finance[/custom_headline]\r\n\r\n<a href=\"http://sandbox.arrayfire.com/case-studies/#finance\">\r\n<img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/01/photo-computer-finance.jpg\" alt=\"photo-computer-finance\" width=\"384\" height=\"256\" class=\"aligncenter size-full wp-image-9137\" /></a>\r\n\r\n[/column]\r\n\r\n[column type=\"one-fourth\"]\r\n[custom_headline type=\"left\" level=\"h5\" class=\"center-text\"]Machine Learning[/custom_headline]\r\n<a href=\"http://sandbox.arrayfire.com/case-studies/#machine-learning\">\r\n<img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/01/photo-ai.jpg\" alt=\"photo-ai\" width=\"334\" height=\"256\" class=\"aligncenter size-full wp-image-9140\" /></a>\r\n<!-- Image credit: https://commons.wikimedia.org/wiki/File:Artificial-intelligence-elon-musk-hawking.jpg -->\r\n[/column]\r\n\r\n[/content_band]','Home','','inherit','closed','closed','','245-revision-v1','','','2016-08-26 14:34:33','2016-08-26 18:34:33','',245,'http://sandbox.arrayfire.com/245-revision-v1/',0,'revision','',0),(9144,18528,'2016-08-26 14:39:28','2016-08-26 18:39:28','[content_band inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"40px\" padding_bottom=\"10px\"][column type=\"two-fifths\"]\r\n\r\n[custom_headline type=\"left\" level=\"h3\"]If you want faster code, you\'ve come to the right place.[/custom_headline][gap size=\"3%\"][button  type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/download\" size=\"x-large\" block=\"true\"]Download ArrayFire[/button]\r\n\r\n[gap size=\"5%\"]\r\n\r\n[button  type=\"flat\" block=\"true\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/consulting/\" size=\"x-large\" ]Schedule a consultation[/button][gap size=\"2%\"]\r\n\r\n[/column][column type=\"three-fifths\" last=\"true\"][gap size=\"7%\"]\r\n<div id=\"wistia_rj2bar3xxp\" class=\"wistia_embed\" style=\"width: 640px; height: 388px;\"></div>\r\n<script src=\"//fast.wistia.com/assets/external/E-v1.js\" charset=\"ISO-8859-1\"></script><script>// <![CDATA[\r\nwistiaEmbed = Wistia.embed(\"rj2bar3xxp\");\r\n// ]]></script>\r\n[/column]\r\n<div id=\"arrayfire\"></div>\r\n[/content_band]\r\n\r\n\r\n[content_band bg_color=\"#f2f2f2\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"]\r\n\r\n[custom_headline type=\"left\" level=\"h3\" class=\"center-text\"]Services[/custom_headline]\r\n\r\nArrayFire specializes in developing accelerated, scalable computing solutions on modern computational platforms for our clients. As an industry leader in high performance computing for nearly 10 years, ArrayFire continues to drive innovation in all areas of accelerated computing, ranging from apps deployed on low-powered and mobile platforms to scientific simulations on high-end supercomputers.\r\n\r\n[/content_band]\r\n\r\n[content_band bg_color=\"#ffffff\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"40px\" padding_bottom=\"10px\"]\r\n\r\n[column type=\"one-third\" ][custom_headline type=\"left\" level=\"h3\" class=\"center-text\"][image src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/01/car-e1412967813807.png\" class=\"mbn\"] Software Design[/custom_headline]\r\n\r\n[line style=\"border-top: solid #999999;\"]ArrayFire has worked with hundreds of companies and entrepreneurs to develop custom, high performance software solutions for their unique problems. We use the latest software development methods, profiling tools, and deployment methods to deliver scalable solutions for your present and future business goals.\r\n\r\n[button type=\"flat\" shape=\"rounded\" size=\"regular\" href=\"http://www.sandbox.arrayfire.com/consulting#software-design\" padding_top=\"40px\" padding_bottom=\"40px\"]Read more...[/button]\r\n[/column]\r\n\r\n[column type=\"one-third\" ][custom_headline type=\"left\" level=\"h3\" class=\"center-text\"][image src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/09/mini-motorcycle-01-e1412969290876.png\" class=\"mbn\"] System Assessment[/custom_headline][line style=\"border-top: solid #999999;\"]ArrayFire performs holistic application audits that establish the current and theoretical maximum performance your application can achieve. Our methods evaluate everything from the hardware up so you can determine bottlenecks and get the maximum return on investment for future development work.\r\n\r\n[button type=\"flat\" shape=\"rounded\" size=\"regular\" href=\"http://www.sandbox.arrayfire.com/consulting#system-evaluation\" padding_top=\"40px\" padding_bottom=\"40px\"]Read More...[/button]\r\n\r\n[/column]\r\n\r\n[column type=\"one-third\" last=\"true\" ][custom_headline type=\"left\" level=\"h3\" class=\"center-text\"][image src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/09/mini-plane-01-e1412969527633.png\" class=\"mbn\"] Training [/custom_headline][line style=\"border-top: solid #999999;\"]ArrayFire trains your engineers on the latest techniques in parallel computing including CUDA or OpenCL for CPUs, GPUs, FPGAs, and other accelerators. We offer two- and four-day training sessions that are fully customizable so your team learns skills that they need to accelerate your software.\r\n\r\n[button type=\"flat\" shape=\"rounded\" size=\"regular\" href=\"http://www.sandbox.arrayfire.com/training\" padding_top=\"40px\" padding_bottom=\"40px\"]Read More...[/button]\r\n\r\n[/column]\r\n\r\n[/content_band]\r\n\r\n[content_band bg_color=\"#f2f2f2\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"]\r\n\r\n[custom_headline type=\"left\" level=\"h3\" class=\"center-text\"]ArrayFire Library[/custom_headline]\r\n\r\nThe ArrayFire accelerated computing library is a free, general-purpose, open-source library that simplifies the process of developing software that targets parallel and massively-parallel architectures including CPUs, GPUs, and other hardware acceleration devices. ArrayFire is used on devices from low-powered mobile phones to high-powered GPU-enabled supercomputers including CPUs from all major vendors (Intel, AMD, Arm), GPUs from the dominant manufacturers (NVIDIA, AMD, and Qualcomm), as well as a variety of other accelerator devices on Windows, Mac, and Linux. \r\n\r\n[button type=\"flat\" shape=\"rounded\" size=\"regular\" href=\"http://www.sandbox.arrayfire.com/download\" padding_top=\"40px\" padding_bottom=\"40px\"]Download ArrayFire[/button]\r\n\r\n[/content_band]\r\n\r\n[content_band bg_color=\"#ffffff\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"]\r\n\r\n[custom_headline type=\"left\" level=\"h3\" class=\"center-text\"]Domain Specialization[/custom_headline]\r\n\r\nOur engineers are experienced in a wide variety of technical areas of scientific computing including HPC, distributed computing, hardware accelerators (multi-core CPUs, GPUs, FPGAs), and visualization. Our wide skill set let us solve your problem in unique ways. Most of our clients hire us because of our experience in one of the following key areas:\r\n\r\n[column type=\"one-fourth\"]\r\n[custom_headline type=\"left\" level=\"h5\" class=\"center-text\"]Computer Vision[/custom_headline]\r\n<a href=\"http://sandbox.arrayfire.com/case-studies/#computer-vision\">\r\n<img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/01/photo-computer-vision.jpg\" alt=\"photo-computer-vision\" width=\"341\" height=\"256\" class=\"aligncenter size-full wp-image-9139\" /></a>\r\n[/column]\r\n\r\n[column type=\"one-fourth\"]\r\n[custom_headline type=\"left\" level=\"h5\" class=\"center-text\"]Defense[/custom_headline]\r\n<a href=\"http://sandbox.arrayfire.com/case-studies/#defense\">\r\n<img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/01/shadow-of-the-war-1536222.jpg\" alt=\"ship-at-sea\" width=\"384\" height=\"256\" class=\"aligncenter size-full wp-image-9138\" /></a>\r\n[/column]\r\n\r\n[column type=\"one-fourth\"]\r\n[custom_headline type=\"left\" level=\"h5\" class=\"center-text\"]Finance[/custom_headline]\r\n\r\n<a href=\"http://sandbox.arrayfire.com/case-studies/#finance\">\r\n<img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/01/photo-computer-finance.jpg\" alt=\"photo-computer-finance\" width=\"384\" height=\"256\" class=\"aligncenter size-full wp-image-9137\" /></a>\r\n\r\n[/column]\r\n\r\n[column type=\"one-fourth\"]\r\n[custom_headline type=\"left\" level=\"h5\" class=\"center-text\"]Machine Learning[/custom_headline]\r\n<a href=\"http://sandbox.arrayfire.com/case-studies/#machine-learning\">\r\n<img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/01/photo-ai.jpg\" alt=\"photo-ai\" width=\"334\" height=\"256\" class=\"aligncenter size-full wp-image-9140\" /></a>\r\n<!-- Image credit: https://commons.wikimedia.org/wiki/File:Artificial-intelligence-elon-musk-hawking.jpg -->\r\n[/column]\r\n\r\n[/content_band]','Home','','inherit','closed','closed','','245-revision-v1','','','2016-08-26 14:39:28','2016-08-26 18:39:28','',245,'http://sandbox.arrayfire.com/245-revision-v1/',0,'revision','',0),(9145,18528,'2016-08-29 14:07:18','2016-08-29 18:07:18','[content_band inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"40px\" padding_bottom=\"10px\"][column type=\"two-fifths\"]\r\n\r\n[custom_headline type=\"left\" level=\"h3\"]If you want faster code, you\'ve come to the right place.[/custom_headline][gap size=\"3%\"][button  type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/download\" size=\"x-large\" block=\"true\"]Download ArrayFire[/button]\r\n\r\n[gap size=\"5%\"]\r\n\r\n[button  type=\"flat\" block=\"true\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/consulting/\" size=\"x-large\" ]Schedule a consultation[/button][gap size=\"2%\"]\r\n\r\n[/column][column type=\"three-fifths\" last=\"true\"][gap size=\"7%\"]\r\n<div id=\"wistia_rj2bar3xxp\" class=\"wistia_embed\" style=\"width: 640px; height: 388px;\"></div>\r\n<script src=\"//fast.wistia.com/assets/external/E-v1.js\" charset=\"ISO-8859-1\"></script><script>// <![CDATA[\r\nwistiaEmbed = Wistia.embed(\"rj2bar3xxp\");\r\n// ]]></script>\r\n[/column]\r\n<div id=\"arrayfire\"></div>\r\n[/content_band]\r\n\r\n\r\n[content_band bg_color=\"#f2f2f2\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"]\r\n\r\n[custom_headline type=\"left\" level=\"h3\" class=\"center-text\"]Services[/custom_headline]\r\n\r\nArrayFire specializes in developing accelerated, scalable computing solutions on modern computational platforms for our clients. As an industry leader in high performance computing for nearly 10 years, ArrayFire continues to drive innovation in all areas of accelerated computing, ranging from apps deployed on low-powered and mobile platforms to scientific simulations on high-end supercomputers.\r\n\r\n[/content_band]\r\n\r\n[content_band bg_color=\"#ffffff\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"40px\" padding_bottom=\"10px\"]\r\n\r\n[column type=\"one-third\" ][custom_headline type=\"left\" level=\"h3\" class=\"center-text\"][image src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/01/car-e1412967813807.png\" class=\"mbn\"] Software Design[/custom_headline]\r\n\r\n[line style=\"border-top: solid #999999;\"]ArrayFire has worked with hundreds of companies and entrepreneurs to develop custom, high performance software solutions for their unique problems. We use the latest software development methods, profiling tools, and deployment methods to deliver scalable solutions for your present and future business goals.\r\n\r\n[button type=\"flat\" shape=\"rounded\" size=\"regular\" href=\"http://www.sandbox.arrayfire.com/consulting#software-design\" padding_top=\"40px\" padding_bottom=\"40px\"]Read more...[/button]\r\n[/column]\r\n\r\n[column type=\"one-third\" ][custom_headline type=\"left\" level=\"h3\" class=\"center-text\"][image src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/09/mini-motorcycle-01-e1412969290876.png\" class=\"mbn\"] System Assessment[/custom_headline][line style=\"border-top: solid #999999;\"]ArrayFire performs holistic application audits that establish the current and theoretical maximum performance your application can achieve. Our methods evaluate everything from the hardware up so you can determine bottlenecks and get the maximum return on investment for future development work.\r\n\r\n[button type=\"flat\" shape=\"rounded\" size=\"regular\" href=\"http://www.sandbox.arrayfire.com/consulting#system-evaluation\" padding_top=\"40px\" padding_bottom=\"40px\"]Read More...[/button]\r\n\r\n[/column]\r\n\r\n[column type=\"one-third\" last=\"true\" ][custom_headline type=\"left\" level=\"h3\" class=\"center-text\"][image src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/09/mini-plane-01-e1412969527633.png\" class=\"mbn\"] Training [/custom_headline][line style=\"border-top: solid #999999;\"]ArrayFire trains your engineers on the latest techniques in parallel computing including CUDA or OpenCL for CPUs, GPUs, FPGAs, and other accelerators. We offer two- and four-day training sessions that are fully customizable so your team learns skills that they need to accelerate your software.\r\n\r\n[button type=\"flat\" shape=\"rounded\" size=\"regular\" href=\"http://www.sandbox.arrayfire.com/training\" padding_top=\"40px\" padding_bottom=\"40px\"]Read More...[/button]\r\n\r\n[/column]\r\n\r\n[/content_band]\r\n\r\n[content_band bg_color=\"#f2f2f2\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"]\r\n\r\n[custom_headline type=\"left\" level=\"h3\" class=\"center-text\"]ArrayFire Library[/custom_headline]\r\n\r\nThe ArrayFire accelerated computing library is a free, general-purpose, open-source library that simplifies the process of developing software that targets parallel and massively-parallel architectures including CPUs, GPUs, and other hardware acceleration devices. ArrayFire is used on devices from low-powered mobile phones to high-powered GPU-enabled supercomputers including CPUs from all major vendors (Intel, AMD, Arm), GPUs from the dominant manufacturers (NVIDIA, AMD, and Qualcomm), as well as a variety of other accelerator devices on Windows, Mac, and Linux. \r\n\r\n[button type=\"flat\" shape=\"rounded\" size=\"regular\" href=\"http://www.sandbox.arrayfire.com/download\" padding_top=\"40px\" padding_bottom=\"40px\"]Download ArrayFire[/button]\r\n\r\n[/content_band]\r\n\r\n[content_band bg_color=\"#ffffff\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"]\r\n\r\n[custom_headline type=\"left\" level=\"h3\" class=\"center-text\"]Domain Specialization[/custom_headline]\r\n\r\nOur engineers are experienced in a wide variety of technical areas of scientific computing including HPC, distributed computing, hardware accelerators (multi-core CPUs, GPUs, FPGAs), and visualization. Our wide skill set enable us to solve your problem in unique ways. Most of our clients hire us because of our experience in one of the following key areas:\r\n\r\n[column type=\"one-fourth\"]\r\n[custom_headline type=\"left\" level=\"h5\" class=\"center-text\"]Computer Vision[/custom_headline]\r\n<a href=\"http://sandbox.arrayfire.com/case-studies/#computer-vision\">\r\n<img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/01/photo-computer-vision.jpg\" alt=\"photo-computer-vision\" width=\"341\" height=\"256\" class=\"aligncenter size-full wp-image-9139\" /></a>\r\n[/column]\r\n\r\n[column type=\"one-fourth\"]\r\n[custom_headline type=\"left\" level=\"h5\" class=\"center-text\"]Defense[/custom_headline]\r\n<a href=\"http://sandbox.arrayfire.com/case-studies/#defense\">\r\n<img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/01/shadow-of-the-war-1536222.jpg\" alt=\"ship-at-sea\" width=\"384\" height=\"256\" class=\"aligncenter size-full wp-image-9138\" /></a>\r\n[/column]\r\n\r\n[column type=\"one-fourth\"]\r\n[custom_headline type=\"left\" level=\"h5\" class=\"center-text\"]Finance[/custom_headline]\r\n\r\n<a href=\"http://sandbox.arrayfire.com/case-studies/#finance\">\r\n<img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/01/photo-computer-finance.jpg\" alt=\"photo-computer-finance\" width=\"384\" height=\"256\" class=\"aligncenter size-full wp-image-9137\" /></a>\r\n\r\n[/column]\r\n\r\n[column type=\"one-fourth\"]\r\n[custom_headline type=\"left\" level=\"h5\" class=\"center-text\"]Machine Learning[/custom_headline]\r\n<a href=\"http://sandbox.arrayfire.com/case-studies/#machine-learning\">\r\n<img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/01/photo-ai.jpg\" alt=\"photo-ai\" width=\"334\" height=\"256\" class=\"aligncenter size-full wp-image-9140\" /></a>\r\n<!-- Image credit: https://commons.wikimedia.org/wiki/File:Artificial-intelligence-elon-musk-hawking.jpg -->\r\n[/column]\r\n\r\n[/content_band]','Home','','inherit','closed','closed','','245-revision-v1','','','2016-08-29 14:07:18','2016-08-29 18:07:18','',245,'http://sandbox.arrayfire.com/245-revision-v1/',0,'revision','',0),(9146,18528,'2016-08-29 14:31:56','2016-08-29 18:31:56','[content_band inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"40px\" padding_bottom=\"10px\"][column type=\"two-fifths\"]\r\n\r\n[custom_headline type=\"left\" level=\"h3\"]If you want faster code, you\'ve come to the right place.[/custom_headline][gap size=\"3%\"][button  type=\"flat\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/download\" size=\"x-large\" block=\"true\"]Download ArrayFire[/button]\r\n\r\n[gap size=\"5%\"]\r\n\r\n[button  type=\"flat\" block=\"true\" shape=\"rounded\" href=\"http://sandbox.arrayfire.com/consulting/\" size=\"x-large\" ]Schedule a consultation[/button][gap size=\"2%\"]\r\n\r\n[/column][column type=\"three-fifths\" last=\"true\"][gap size=\"7%\"]\r\n<div id=\"wistia_rj2bar3xxp\" class=\"wistia_embed\" style=\"width: 640px; height: 388px;\"></div>\r\n<script src=\"//fast.wistia.com/assets/external/E-v1.js\" charset=\"ISO-8859-1\"></script><script>// <![CDATA[\r\nwistiaEmbed = Wistia.embed(\"rj2bar3xxp\");\r\n// ]]></script>\r\n[/column]\r\n<div id=\"arrayfire\"></div>\r\n[/content_band]\r\n\r\n\r\n[content_band bg_color=\"#f2f2f2\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"]\r\n\r\n[custom_headline type=\"left\" level=\"h3\" class=\"center-text\"]Services[/custom_headline]\r\n\r\nArrayFire specializes in developing accelerated, scalable computing solutions on modern computational platforms for our clients. As an industry leader in high performance computing for nearly 10 years, ArrayFire continues to drive innovation in all areas of accelerated computing, ranging from apps deployed on low-powered and mobile platforms to scientific simulations on high-end supercomputers.\r\n\r\n[/content_band]\r\n\r\n[content_band bg_color=\"#ffffff\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"40px\" padding_bottom=\"10px\"]\r\n\r\n[column type=\"one-third\" ][custom_headline type=\"left\" level=\"h3\" class=\"center-text\"][image src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/01/car-e1412967813807.png\" class=\"mbn\"] Software Design[/custom_headline]\r\n\r\n[line style=\"border-top: solid #999999;\"]ArrayFire has worked with hundreds of companies and entrepreneurs to develop custom, high performance software solutions for their unique problems. We use the latest software development methods, profiling tools, and deployment methods to deliver scalable solutions for your present and future business goals.\r\n\r\n[button type=\"flat\" shape=\"rounded\" size=\"regular\" href=\"http://www.sandbox.arrayfire.com/consulting#software-design\" padding_top=\"40px\" padding_bottom=\"40px\"]Read more...[/button]\r\n[/column]\r\n\r\n[column type=\"one-third\" ][custom_headline type=\"left\" level=\"h3\" class=\"center-text\"][image src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/09/mini-motorcycle-01-e1412969290876.png\" class=\"mbn\"] System Assessment[/custom_headline][line style=\"border-top: solid #999999;\"]ArrayFire performs holistic application audits that establish the current and theoretical maximum performance your application can achieve. Our methods evaluate everything from the hardware up so you can determine bottlenecks and get the maximum return on investment for future development work.\r\n\r\n[button type=\"flat\" shape=\"rounded\" size=\"regular\" href=\"http://www.sandbox.arrayfire.com/consulting#system-evaluation\" padding_top=\"40px\" padding_bottom=\"40px\"]Read More...[/button]\r\n\r\n[/column]\r\n\r\n[column type=\"one-third\" last=\"true\" ][custom_headline type=\"left\" level=\"h3\" class=\"center-text\"][image src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/09/mini-plane-01-e1412969527633.png\" class=\"mbn\"] Training [/custom_headline][line style=\"border-top: solid #999999;\"]ArrayFire trains your engineers on the latest techniques in parallel computing including CUDA or OpenCL for CPUs, GPUs, FPGAs, and other accelerators. We offer two- and four-day training sessions that are fully customizable so your team learns skills that they need to accelerate your software.\r\n\r\n[button type=\"flat\" shape=\"rounded\" size=\"regular\" href=\"http://www.sandbox.arrayfire.com/training\" padding_top=\"40px\" padding_bottom=\"40px\"]Read More...[/button]\r\n\r\n[/column]\r\n\r\n[/content_band]\r\n\r\n[content_band bg_color=\"#f2f2f2\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"]\r\n\r\n[custom_headline type=\"left\" level=\"h3\" class=\"center-text\"]ArrayFire Library[/custom_headline]\r\n\r\nThe ArrayFire accelerated computing library is a free, general-purpose, open-source library that simplifies the process of developing software that targets parallel and massively-parallel architectures including CPUs, GPUs, and other hardware acceleration devices. ArrayFire is used on devices from low-powered mobile phones to high-powered GPU-enabled supercomputers including CPUs from all major vendors (Intel, AMD, Arm), GPUs from the dominant manufacturers (NVIDIA, AMD, and Qualcomm), as well as a variety of other accelerator devices on Windows, Mac, and Linux. \r\n\r\n[button type=\"flat\" shape=\"rounded\" size=\"regular\" href=\"http://www.sandbox.arrayfire.com/download\" padding_top=\"40px\" padding_bottom=\"40px\"]Download ArrayFire[/button]\r\n\r\n[/content_band]\r\n\r\n[content_band bg_color=\"#ffffff\" inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"]\r\n\r\n[custom_headline type=\"left\" level=\"h3\" class=\"center-text\"]Domain Specialization[/custom_headline]\r\n\r\nOur engineers are experienced in a wide variety of technical areas of scientific computing including HPC, distributed computing, hardware accelerators (multi-core CPUs, GPUs, FPGAs), and visualization. Our wide skill set enables us to solve your problem in unique ways. Most of our clients hire us because of our experience in one of the following key areas:\r\n\r\n[column type=\"one-fourth\"]\r\n[custom_headline type=\"left\" level=\"h5\" class=\"center-text\"]Computer Vision[/custom_headline]\r\n<a href=\"http://sandbox.arrayfire.com/case-studies/#computer-vision\">\r\n<img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/01/photo-computer-vision.jpg\" alt=\"photo-computer-vision\" width=\"341\" height=\"256\" class=\"aligncenter size-full wp-image-9139\" /></a>\r\n[/column]\r\n\r\n[column type=\"one-fourth\"]\r\n[custom_headline type=\"left\" level=\"h5\" class=\"center-text\"]Defense[/custom_headline]\r\n<a href=\"http://sandbox.arrayfire.com/case-studies/#defense\">\r\n<img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/01/shadow-of-the-war-1536222.jpg\" alt=\"ship-at-sea\" width=\"384\" height=\"256\" class=\"aligncenter size-full wp-image-9138\" /></a>\r\n[/column]\r\n\r\n[column type=\"one-fourth\"]\r\n[custom_headline type=\"left\" level=\"h5\" class=\"center-text\"]Finance[/custom_headline]\r\n\r\n<a href=\"http://sandbox.arrayfire.com/case-studies/#finance\">\r\n<img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/01/photo-computer-finance.jpg\" alt=\"photo-computer-finance\" width=\"384\" height=\"256\" class=\"aligncenter size-full wp-image-9137\" /></a>\r\n\r\n[/column]\r\n\r\n[column type=\"one-fourth\"]\r\n[custom_headline type=\"left\" level=\"h5\" class=\"center-text\"]Machine Learning[/custom_headline]\r\n<a href=\"http://sandbox.arrayfire.com/case-studies/#machine-learning\">\r\n<img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/01/photo-ai.jpg\" alt=\"photo-ai\" width=\"334\" height=\"256\" class=\"aligncenter size-full wp-image-9140\" /></a>\r\n<!-- Image credit: https://commons.wikimedia.org/wiki/File:Artificial-intelligence-elon-musk-hawking.jpg -->\r\n[/column]\r\n\r\n[/content_band]','Home','','inherit','closed','closed','','245-revision-v1','','','2016-08-29 14:31:56','2016-08-29 18:31:56','',245,'http://sandbox.arrayfire.com/245-revision-v1/',0,'revision','',0),(9148,11,'2016-09-13 11:08:09','2016-09-13 15:08:09','[content_band inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"]\r\n[custom_headline type=\"left\" level=\"h2\"]\r\nArrayFire Installers\r\n[/custom_headline]\r\n[custom_headline type=\"left\" level=\"h5\"]\r\nEach download contains both CUDA and OpenCL files.\r\n[/custom_headline]\r\n[gap size=\"4%\"]\r\n\r\n[column type=\"one-fourth\"][button  block=\"true\" onclick=\"&lt;!-- Google Code for ArrayFire Download (Windows) Conversion Page\r\nIn your html page, add the snippet and call\r\ngoog_report_conversion when someone clicks on the\r\nchosen link or button. --&gt;\r\n&lt;script type=\"text/javascript\"&gt;\r\n/* &lt;!&amp;#91;CDATA&amp;#91; */\r\ngoog_snippet_vars = function() {\r\nvar w = window;\r\nw.google_conversion_id = 1021026651;\r\nw.google_conversion_label = \"18VJCJjPql4Q28Lu5gM\";\r\nw.google_remarketing_only = false;\r\n}\r\n// DO NOT CHANGE THE CODE BELOW.\r\ngoog_report_conversion = function(url) {\r\ngoog_snippet_vars();\r\nwindow.google_conversion_format = \"3\";\r\nwindow.google_is_call = true;\r\nvar opt = new Object();\r\nopt.onload_callback = function() {\r\nif (typeof(url) != \'undefined\') {\r\nwindow.location = url;\r\n}\r\n}\r\nvar conv_handler = window&amp;#91;\'google_trackConversion\'&amp;#93;;\r\nif (typeof(conv_handler) == \'function\') {\r\nconv_handler(opt);\r\n}\r\n}\r\n/* &amp;#93;&amp;#93;&gt; */\r\n&lt;/script&gt;\r\n&lt;script type=\"text/javascript\"\r\nsrc=\"//www.googleadservices.com/pagead/conversion_async.js\"&gt;\r\n&lt;/script&gt;\" class=\"center-text\" type=\"flat\" shape=\"rounded\" href=\"http://go.sandbox.arrayfire.com/windows-installer\" size=\"regular\" ]Windows, v3.4.0\r\n(64-bit)[/button][/column] [column type=\"one-fourth\"][button block=\"true\" type=\"flat\"  shape=\"rounded\" href=\"http://go.sandbox.arrayfire.com/linux-x86_64-installer\" size=\"regular\" ]Linux, v3.4.0\r\n(64-bit)[/button][/column][column type=\"one-fourth\"][button  block=\"true\" type=\"flat\"  shape=\"rounded\" href=\"http://go.sandbox.arrayfire.com/osx-installer\" size=\"regular\" ]Mac OSX, v3.4.0\r\n(64-bit)[/button][/column] [column type=\"one-fourth\" last=\"true\"][button block=\"true\"  type=\"flat\"  shape=\"rounded\" href=\"http://go.sandbox.arrayfire.com/linux-armv7l-installer\" size=\"regular\" ]Tegra K1 v3.4.0\r\n(32-bit)[/button][/column][gap size=\"9%\"]\r\n\r\nCheck out our GitHub repository to <a href=\"https://github.com/arrayfire/arrayfire\">build from the source</a>.\r\n\r\nLooking for an older installer? <a href=\"http://sandbox.arrayfire.com/installer_archive\">Try here</a>.[/content_band]\r\n<p style=\"text-align: left;\">[content_band inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\" bg_color=\"#f1f1f1\"][column type=\"one-half\"][gap size=\"8%\"]<img class=\"aligncenter wp-image-5156\" src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/02/mobile_Exported1-e1395437261846.png\" alt=\"mobile_Exported\" width=\"233\" height=\"311\" />[/column][column type=\"one-half\" last=\"true\"]\r\n[custom_headline type=\"left\" level=\"h2\"]\r\nGreat. What now?\r\n[/custom_headline]</p>\r\n<p style=\"text-align: left;\">[gap size=\"5%\"]</p>\r\n<p style=\"text-align: left;\">Welcome to ArrayFire! You\'ve got an awesome library there—learn more about its features and functions on <a href=\"http://www.sandbox.arrayfire.com/docs/index.htm\">our documentation</a>.</p>\r\n<p style=\"text-align: left;\">In addition to our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">ArrayFire user group</a> and <a href=\"http://sandbox.arrayfire.com/blog/\">our blog</a>, we offer a plethora of <a href=\"http://sandbox.arrayfire.com/support/\">support options</a> to fit your needs.</p>\r\n<p style=\"text-align: left;\">Got a job that needs closer attention? Hire us! Our engineers are acceleration wizards. Check out our <a href=\"http://sandbox.arrayfire.com/consulting/\">consulting offerings</a>, or set up a free <a href=\"http://meetme.so/arrayfire\">technical consultation</a> with us today![/column]</p>\r\n<p style=\"text-align: left;\">[/content_band]</p>\r\n<p style=\"text-align: center;\"></p>','Download','','inherit','closed','closed','','5931-revision-v1','','','2016-09-13 11:08:09','2016-09-13 15:08:09','',5931,'http://sandbox.arrayfire.com/5931-revision-v1/',0,'revision','',0),(9150,11,'2016-09-13 14:05:10','2016-09-13 18:05:10','','Linux aarch64 installer','','publish','closed','closed','','linux-aarch64-installer','','','2017-09-19 00:38:06','2017-09-19 04:38:06','',0,'http://sandbox.arrayfire.com/?page_id=9150',0,'page','',0),(9151,11,'2016-09-13 14:05:10','2016-09-13 18:05:10','','Linux aarch64 installer','','inherit','closed','closed','','9150-revision-v1','','','2016-09-13 14:05:10','2016-09-13 18:05:10','',9150,'http://sandbox.arrayfire.com/9150-revision-v1/',0,'revision','',0),(9152,11,'2016-09-13 14:34:42','2016-09-13 18:34:42','[content_band inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\"]\r\n[custom_headline type=\"left\" level=\"h2\"]\r\nArrayFire Installers\r\n[/custom_headline]\r\n[custom_headline type=\"left\" level=\"h5\"]\r\nEach download contains both CUDA and OpenCL files.\r\n[/custom_headline]\r\n[gap size=\"4%\"]\r\n\r\n[column type=\"one-fifth\"][button  block=\"true\" onclick=\"&lt;!-- Google Code for ArrayFire Download (Windows) Conversion Page\r\nIn your html page, add the snippet and call\r\ngoog_report_conversion when someone clicks on the\r\nchosen link or button. --&gt;\r\n&lt;script type=\"text/javascript\"&gt;\r\n/* &lt;!&amp;#91;CDATA&amp;#91; */\r\ngoog_snippet_vars = function() {\r\nvar w = window;\r\nw.google_conversion_id = 1021026651;\r\nw.google_conversion_label = \"18VJCJjPql4Q28Lu5gM\";\r\nw.google_remarketing_only = false;\r\n}\r\n// DO NOT CHANGE THE CODE BELOW.\r\ngoog_report_conversion = function(url) {\r\ngoog_snippet_vars();\r\nwindow.google_conversion_format = \"3\";\r\nwindow.google_is_call = true;\r\nvar opt = new Object();\r\nopt.onload_callback = function() {\r\nif (typeof(url) != \'undefined\') {\r\nwindow.location = url;\r\n}\r\n}\r\nvar conv_handler = window&amp;#91;\'google_trackConversion\'&amp;#93;;\r\nif (typeof(conv_handler) == \'function\') {\r\nconv_handler(opt);\r\n}\r\n}\r\n/* &amp;#93;&amp;#93;&gt; */\r\n&lt;/script&gt;\r\n&lt;script type=\"text/javascript\"\r\nsrc=\"//www.googleadservices.com/pagead/conversion_async.js\"&gt;\r\n&lt;/script&gt;\" class=\"center-text\" type=\"flat\" shape=\"rounded\" href=\"http://go.sandbox.arrayfire.com/windows-installer\" size=\"regular\" ]Windows, v3.4.0\r\n(64-bit)[/button][/column] [column type=\"one-fifth\"][button block=\"true\" type=\"flat\"  shape=\"rounded\" href=\"http://go.sandbox.arrayfire.com/linux-x86_64-installer\" size=\"regular\" ]Linux, v3.4.0\r\n(64-bit)[/button][/column][column type=\"one-fifth\"][button  block=\"true\" type=\"flat\"  shape=\"rounded\" href=\"http://go.sandbox.arrayfire.com/osx-installer\" size=\"regular\" ]Mac OSX, v3.4.0\r\n(64-bit)[/button][/column][column type=\"one-fifth\"][button block=\"true\"  type=\"flat\"  shape=\"rounded\" href=\"http://go.sandbox.arrayfire.com/linux-armv7l-installer\" size=\"regular\"]Tegra K1 v3.4.0\r\n(32-bit)[/button][/column][column type=\"one-fifth\" last=\"true\"][button block=\"true\"  type=\"flat\"  shape=\"rounded\" href=\"http://sandbox.arrayfire.com/installer_archive/3.4.0/ArrayFire-v3.4.0_Linux_aarch64.sh\" size=\"regular\" ]Tegra X1 v3.4.0\r\n(32-bit)[/button][/column][gap size=\"9%\"]\r\n\r\nCheck out our GitHub repository to <a href=\"https://github.com/arrayfire/arrayfire\">build from the source</a>.\r\n\r\nLooking for an older installer? <a href=\"http://sandbox.arrayfire.com/installer_archive\">Try here</a>.[/content_band]\r\n<p style=\"text-align: left;\">[content_band inner_container=\"true\" no_margin=\"true\" border=\"none\" padding_top=\"10px\" padding_bottom=\"40px\" bg_color=\"#f1f1f1\"][column type=\"one-half\"][gap size=\"8%\"]<img class=\"aligncenter wp-image-5156\" src=\"http://sandbox.arrayfire.com/wp-content/uploads/2014/02/mobile_Exported1-e1395437261846.png\" alt=\"mobile_Exported\" width=\"233\" height=\"311\" />[/column][column type=\"one-half\" last=\"true\"]\r\n[custom_headline type=\"left\" level=\"h2\"]\r\nGreat. What now?\r\n[/custom_headline]</p>\r\n<p style=\"text-align: left;\">[gap size=\"5%\"]</p>\r\n<p style=\"text-align: left;\">Welcome to ArrayFire! You\'ve got an awesome library there—learn more about its features and functions on <a href=\"http://www.sandbox.arrayfire.com/docs/index.htm\">our documentation</a>.</p>\r\n<p style=\"text-align: left;\">In addition to our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">ArrayFire user group</a> and <a href=\"http://sandbox.arrayfire.com/blog/\">our blog</a>, we offer a plethora of <a href=\"http://sandbox.arrayfire.com/support/\">support options</a> to fit your needs.</p>\r\n<p style=\"text-align: left;\">Got a job that needs closer attention? Hire us! Our engineers are acceleration wizards. Check out our <a href=\"http://sandbox.arrayfire.com/consulting/\">consulting offerings</a>, or set up a free <a href=\"http://meetme.so/arrayfire\">technical consultation</a> with us today![/column]</p>\r\n<p style=\"text-align: left;\">[/content_band]</p>\r\n<p style=\"text-align: center;\"></p>','Download','','inherit','closed','closed','','5931-revision-v1','','','2016-09-13 14:34:42','2016-09-13 18:34:42','',5931,'http://sandbox.arrayfire.com/5931-revision-v1/',0,'revision','',0),(9154,4,'2016-09-21 22:18:18','2016-09-22 02:18:18','<span style=\"font-weight: 400;\">Today we are pleased to announce the release of ArrayFire v3.4, our open source library of parallel computing functions supporting CUDA, OpenCL, and CPU devices. This new version of ArrayFire improves features and performance for applications in machine learning, computer vision, signal processing, statistics, finance, and more.</span>\r\n\r\n<span style=\"font-weight: 400;\">This release focuses on 5 major components of the library that are common to many areas of mathematical, scientific, and financial computing:  sparse matrix operations, random number generation, image processing, just-in-time (JIT) compilation, and visualizations.</span>\r\n\r\n[custom_headline type=\"left\" level=\"h3\" looks_like=\"h3\"]Major Updates and Features[/custom_headline]\r\n<ul>\r\n 	<li>Sparse Matrix and BLAS (<a href=\"http://sandbox.arrayfire.com/sparse-matrices-in-arrayfire-v3-4/\">see blog post</a>)\r\n<ul>\r\n 	<li>Support for CSR and COO storage types</li>\r\n 	<li>Sparse-Dense Matrix Multiplication and Matrix-Vector Multiplication</li>\r\n 	<li>Conversion to and from dense matrix to CSR and COO storage types</li>\r\n</ul>\r\n</li>\r\n 	<li>Support for Random Number Generator Engines (<a href=\"http://sandbox.arrayfire.com/random-number-generators-in-arrayfire-v3-4/\">see blog post</a>)\r\n<ul>\r\n 	<li>Philox</li>\r\n 	<li>Threefry</li>\r\n 	<li>Mersenne Twister</li>\r\n</ul>\r\n</li>\r\n 	<li>Image Processing (<a href=\"http://sandbox.arrayfire.com/image-processing-functions-in-arrayfire-v3-4/\">see blog post</a>)\r\n<ul>\r\n 	<li>New interpolation functions</li>\r\n 	<li>Image moments</li>\r\n</ul>\r\n</li>\r\n 	<li>Faster JIT for CUDA and OpenCL (<a href=\"http://sandbox.arrayfire.com/performance-improvements-to-jit-in-arrayfire-v3-4/\">see blog post</a>)\r\n<ul>\r\n 	<li>Performance improvements</li>\r\n 	<li>Support for evaluating multiple outputs in a single kernel</li>\r\n</ul>\r\n</li>\r\n 	<li>Improvements to Graphics (<a href=\"http://sandbox.arrayfire.com/graphics-updates-in-arrayfire-v3-4/\">see blog post</a>)\r\n<ul>\r\n 	<li>Using Forge v0.9.0</li>\r\n 	<li>Vector Field plotting functionality</li>\r\n 	<li>Multiple overlays on the same window are now possible</li>\r\n 	<li>New API to set axes limits for graphs</li>\r\n 	<li>New API for plot and scatter</li>\r\n</ul>\r\n</li>\r\n</ul>\r\nFor the comprehensive list of new features and updates, please refer to our <a href=\"http://arrayfire.org/docs/releasenotes.htm\">release notes</a>.\r\n\r\n<span style=\"font-weight: 400;\">While we are happy for reaching this milestone, we are not complacent. Work on the next milestone has already commenced, and we hope to exceed the expectations of our community.</span>\r\n\r\n[custom_headline type=\"left\" level=\"h3\" looks_like=\"h3\"]Download[/custom_headline]\r\n\r\nArrayFire v3.4 can be downloaded from these locations:\r\n<ul>\r\n 	<li><a href=\"http://sandbox.arrayfire.com/download/\">Binaries</a></li>\r\n 	<li><a href=\"https://github.com/arrayfire\">Source code</a></li>\r\n</ul>\r\n[custom_headline type=\"left\" level=\"h3\" looks_like=\"h3\"]Community[/custom_headline]\r\n\r\nArrayFire is continually improving through the addition of new functions and features. We welcome your feedback:\r\n<ul>\r\n 	<li>General discussion forums on the <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">ArrayFire Google Group</a></li>\r\n 	<li>Live discussion chat on the <a href=\"https://gitter.im/arrayfire/arrayfire?utm_source=badge&amp;utm_medium=badge&amp;utm_campaign=pr-badge&amp;utm_content=badge\">ArrayFire Gitter</a></li>\r\n 	<li>Issue reports on the <a href=\"https://github.com/arrayfire/arrayfire/issues\">ArrayFire GitHub</a></li>\r\n</ul>\r\nFinally, as you find success with ArrayFire, we invite you to contribute a post to this blog to share with the broader community. Email <a href=\"mailto:scott@arrayfire.com\">scott@arrayfire.com</a> to contribute to this blog.\r\n\r\n&nbsp;','ArrayFire v3.4 Official Release','','publish','open','closed','','arrayfire-v3-4-official-release','','','2016-09-21 22:18:18','2016-09-22 02:18:18','',0,'http://sandbox.arrayfire.com/?p=9154',0,'post','',0),(9166,18673,'2016-09-21 22:15:47','2016-09-22 02:15:47','There are a number of  additions and updates to image based features in the new v3.4 release of ArrayFire. Among the updates are:\r\n<ul>\r\n 	<li>New interpolation methods for several existing functions\r\n<ul>\r\n 	<li><a href=\"http://arrayfire.org/docs/group__signal__func__approx1.htm\">approx1</a>, <a href=\"http://arrayfire.org/docs/group__signal__func__approx2.htm\">approx2</a></li>\r\n 	<li><a href=\"http://arrayfire.org/docs/group__transform__func__transform.htm\">transform</a></li>\r\n 	<li><a href=\"http://arrayfire.org/docs/group__transform__func__resize.htm\">resize</a></li>\r\n</ul>\r\n</li>\r\n 	<li>Functions for image <a href=\"http://arrayfire.org/docs/group__image__func__moments.htm\">moments</a></li>\r\n</ul>\r\nThis blog post will display some typical use cases for these new features.\r\n\r\n<span style=\"line-height: 1.5;\">[custom_headline type=\"left\" level=\"h3\" looks_like=\"h3\"]Interpolation methods[/custom_headline]</span>\r\n\r\nArrayFire v3.4 implements several new <a href=\"http://arrayfire.org/docs/defines_8h.htm#ac0b7c1cfd1fb146314d96f17bbfffa68\"> interpolation methods </a>for 1-d and 2-d domains. The new interpolation methods for 1-d functions are:\r\n<ul>\r\n 	<li><strong>AF_INTERP_LINEAR_COSINE</strong></li>\r\n 	<li><strong>AF_INTERP_CUBIC</strong></li>\r\n</ul>\r\nand for 2-d functions are:\r\n<ul>\r\n 	<li><strong>AF_INTERP_BILINEAR_COSINE</strong></li>\r\n 	<li><strong>AF_INTERP_BICUBIC</strong></li>\r\n</ul>\r\nThe behavior of the <a href=\"http://arrayfire.org/docs/defines_8h.htm#ac0b7c1cfd1fb146314d96f17bbfffa68\">interpolation methods</a> can be seen in the following pictures.\r\n\r\n&nbsp;\r\n\r\n[caption id=\"attachment_9338\" align=\"aligncenter\" width=\"300\"]<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/ap1_0.png\"><img class=\"size-medium wp-image-9338\" src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/ap1_0-300x271.png\" alt=\"Original data points\" width=\"300\" height=\"271\" /></a> Original data points[/caption]\r\n\r\n[caption id=\"attachment_9339\" align=\"aligncenter\" width=\"300\"]<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/ap1_1.png\"><img class=\"size-medium wp-image-9339\" src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/ap1_1-300x267.png\" alt=\"Linear interpolation\" width=\"300\" height=\"267\" /></a> Linear interpolation[/caption]\r\n\r\n[caption id=\"attachment_9340\" align=\"aligncenter\" width=\"300\"]<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/ap1_2.png\"><img class=\"size-medium wp-image-9340\" src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/ap1_2-300x252.png\" alt=\"Linear cosine interpolation\" width=\"300\" height=\"252\" /></a> Linear cosine interpolation[/caption]\r\n\r\n[caption id=\"attachment_9337\" align=\"aligncenter\" width=\"300\"]<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/ap1_3.png\"><img class=\"size-medium wp-image-9337\" src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/ap1_3-300x255.png\" alt=\"Cubic interpolation\" width=\"300\" height=\"255\" /></a> Cubic interpolation[/caption]\r\n\r\nA common use for interpolation is image filtering. Given a coarse image, we can resample it to be smoother.\r\n<pre class=\"lang:c++ decode:true\" title=\"Interpolating images with approx2()\">af::array img = af::randu(7,7); //create a random image\r\n\r\n//define sample points for interpolation\r\naf::array Xs = af::seq(0, 6, 0.1f);\r\naf::array Ys = af::seq(0, 6, 0.1f);\r\nXs = af::tile(Xs, 1, Ys.dims(0));\r\nYs = af::tile(Ys.T(), Xs.dims(0));\r\n\r\n//interpolate based on specific method\r\naf::array img_bilinear = af::approx2(img, Xs, Ys, AF_INTERP_BILINEAR);\r\naf::array img_bilinearcos = af::approx2(img, Xs, Ys, AF_INTERP_BILINEAR_COSINE);\r\naf::array img_bicubic = af::approx2(img, Xs, Ys, AF_INTERP_BICUBIC_SPLINE);</pre>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/Capture.png\"><img class=\"aligncenter size-full wp-image-9245\" src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/Capture.png\" alt=\"Capture\" width=\"1025\" height=\"243\" /></a>\r\n\r\nThe new interpolation methods further apply to several similar image transformation functions:\r\n<ul>\r\n 	<li><a href=\"http://arrayfire.org/docs/group__transform__func__resize.htm\">Resize</a></li>\r\n 	<li><a href=\"http://arrayfire.org/docs/group__transform__func__rotate.htm\">Rotate</a></li>\r\n 	<li><a href=\"http://arrayfire.org/docs/group__transform__func__scale.htm\">Scale</a></li>\r\n 	<li><a href=\"http://arrayfire.org/docs/group__transform__func__skew.htm\">Skew</a></li>\r\n 	<li><a href=\"http://arrayfire.org/docs/group__transform__func__transform.htm\">Transform</a></li>\r\n 	<li><a href=\"http://arrayfire.org/docs/group__transform__func__translate.htm\">Translate</a></li>\r\n</ul>\r\nDifferent interpolation methods greatly affect the final result of image processing operations. In general, bilinear and bilinear-cosine produce a good result when upscaling an image, however they often result in a blurry look. The bicubic method tends to sharpen the image resulting in slightly stronger borders and a better overall look. Below are some examples of this behavior using image rotation and image scaling.\r\n\r\n[caption id=\"attachment_9331\" align=\"aligncenter\" width=\"300\"]<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/s_0.png\"><img class=\"size-medium wp-image-9331\" src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/s_0-300x84.png\" alt=\"3x image scaling using nearest-neighbor sampling\" width=\"300\" height=\"84\" /></a> 3x image scaling using nearest-neighbor sampling[/caption]\r\n\r\n[caption id=\"attachment_9332\" align=\"aligncenter\" width=\"300\"]<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/s_1.png\"><img class=\"size-medium wp-image-9332\" src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/s_1-300x85.png\" alt=\"3x image scaling using bilinear-cosine sampling\" width=\"300\" height=\"85\" /></a> 3x image scaling using bilinear-cosine sampling[/caption]\r\n\r\n[caption id=\"attachment_9334\" align=\"aligncenter\" width=\"300\"]<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/s_2.png\"><img class=\"size-medium wp-image-9334\" src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/s_2-300x85.png\" alt=\"3x image scaling using bicubic sampling\" width=\"300\" height=\"85\" /></a> 3x image scaling using bicubic sampling[/caption]\r\n\r\n[block_grid type=\"four-up\"] [block_grid_item]\r\n\r\n[caption id=\"attachment_9335\" align=\"aligncenter\" width=\"150\"]<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/rot_0.png\"><img class=\"wp-image-9335 size-thumbnail\" src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/rot_0-150x150.png\" alt=\"rot_0\" width=\"150\" height=\"150\" /></a> Image rotation with nearest neighbor sampling.[/caption]\r\n\r\n[/block_grid_item][block_grid_item]\r\n\r\n[caption id=\"attachment_9336\" align=\"aligncenter\" width=\"150\"]<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/rot_1.png\"><img class=\"wp-image-9336 size-thumbnail\" src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/rot_1-150x150.png\" alt=\"rot_1\" width=\"150\" height=\"150\" /></a> Image rotation with bilinear sampling.[/caption]\r\n\r\n[/block_grid_item][block_grid_item]\r\n\r\n[caption id=\"attachment_9329\" align=\"aligncenter\" width=\"150\"]<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/rot_2.png\"><img class=\"wp-image-9329 size-thumbnail\" src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/rot_2-150x150.png\" alt=\"rot_2\" width=\"150\" height=\"150\" /></a> Image rotation with bilinear-cosine sampling.[/caption]\r\n\r\n[/block_grid_item][block_grid_item]\r\n\r\n[caption id=\"attachment_9330\" align=\"aligncenter\" width=\"150\"]<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/rot_3.png\"><img class=\"wp-image-9330 size-thumbnail\" src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/rot_3-150x150.png\" alt=\"rot_3\" width=\"150\" height=\"150\" /></a> Image rotation with bicubic sampling.[/caption]\r\n\r\n[/block_grid_item][block_grid_item]\r\n\r\n[/block_grid]\r\n\r\n<span style=\"line-height: 1.5;\">[custom_headline type=\"left\" level=\"h3\" looks_like=\"h3\"]Image moments[/custom_headline]</span>\r\n\r\nImage <a href=\"http://arrayfire.org/docs/group__image__func__moments.htm\">moments </a>are another new addition to ArrayFire v3.4. Image moments are weighted averages of pixels in an image which provide useful properties of an image. A common use of image moments is to find the center of mass or area (or gray level sum) of an image.\r\n\r\nCurrently, ArrayFire calculates all<a href=\"http://arrayfire.org/docs/defines_8h.htm#ad3ee8e32709131cf4126dfa26210aec0\"> first order moments</a>. Each moment can be returned individually or all first-order moments can be calculated at once. All moments can be found as follows:\r\n<pre class=\"lang:c++ decode:true\">af::array moments = af::moments(input_image, AF_MOMENT_FIRST_ORDER);</pre>\r\n<div class=\"fragment\">\r\n<div class=\"line\">Here is an example of how the shorthand versions might be used to find the area and center of mass of an image:</div>\r\n</div>\r\n<pre class=\"lang:default decode:true\" title=\"Calculating center of mass of grayscale image\">double m00, m01, m10;\r\naf::moments(&amp;m00, aimg, AF_MOMENT_M00);\r\naf::moments(&amp;m01, aimg, AF_MOMENT_M01);\r\naf::moments(&amp;m10, aimg, AF_MOMENT_M10);\r\n\r\ndouble area = m00;\r\ndouble x_center = m10 / m00;\r\ndouble y_center = m01 / m00;\r\n</pre>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/com.png\"><img class=\"aligncenter wp-image-9246 size-medium\" src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/com-300x300.png\" alt=\"com\" width=\"300\" height=\"300\" /></a>\r\n\r\n[custom_headline type=\"left\" level=\"h3\" looks_like=\"h3\"]Download[/custom_headline]\r\n\r\nArrayFire v3.4 can be downloaded from these locations:\r\n<ul>\r\n 	<li><a href=\"http://sandbox.arrayfire.com/download/\">Binaries</a></li>\r\n 	<li><a href=\"https://github.com/arrayfire\">Source code</a></li>\r\n</ul>\r\n[custom_headline type=\"left\" level=\"h3\" looks_like=\"h3\"]Community[/custom_headline]\r\n\r\nArrayFire is continually improving through the addition of new image processing and computer vision functions. We welcome your feedback:\r\n<ul>\r\n 	<li>General discussion forums on the <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">ArrayFire Google Group</a></li>\r\n 	<li>Live discussion chat on the <a href=\"https://gitter.im/arrayfire/arrayfire?utm_source=badge&amp;utm_medium=badge&amp;utm_campaign=pr-badge&amp;utm_content=badge\">ArrayFire Gitter</a></li>\r\n 	<li>Issue reports on the <a href=\"https://github.com/arrayfire/arrayfire/issues\">ArrayFire GitHub</a></li>\r\n</ul>\r\nFinally, as you find success with ArrayFire, we invite you to contribute a post to this blog to share with the broader community. Email <a href=\"mailto:scott@arrayfire.com\">scott@arrayfire.com</a> to contribute to this blog.','Image Processing Functions in ArrayFire v3.4','','publish','open','closed','','image-processing-functions-in-arrayfire-v3-4','','','2016-09-21 22:16:13','2016-09-22 02:16:13','',0,'http://sandbox.arrayfire.com/?p=9166',0,'post','',0),(9167,18673,'2016-09-19 12:01:47','2016-09-19 16:01:47','There are a number of  additions and updates to image based features in the new 3.4 release of ArrayFire. Among the updates are:\r\n<ul>\r\n 	<li>Cubic interpolation</li>\r\n 	<li>Image moments</li>\r\n 	<li></li>\r\n</ul>\r\nThis blog post will display some typical use cases for these new features.\r\n\r\nNew image processing functions -- new interpolation methods, image moments, etc  -- Stefan. This will be almost entirely visual. Create some pretty pictures.','New image-based features in ArrayFire v3.4','','inherit','closed','closed','','9166-revision-v1','','','2016-09-19 12:01:47','2016-09-19 16:01:47','',9166,'http://sandbox.arrayfire.com/9166-revision-v1/',0,'revision','',0),(9169,18673,'2016-09-19 12:08:07','2016-09-19 16:08:07','There are a number of  additions and updates to image based features in the new 3.4 release of ArrayFire. Among the updates are:\r\n<ul>\r\n 	<li>Cubic interpolation</li>\r\n 	<li>Image moments</li>\r\n 	<li></li>\r\n</ul>\r\nThis blog post will display some typical use cases for these new features.\r\n\r\nNew image processing functions -- new interpolation methods, image moments, etc  -- Stefan. This will be almost entirely visual. Create some pretty pictures.\r\n\r\nArrayFire is always adding new methods to help you with accelerating your applications. We hope the new functions will be the vital tools that assist you in your high performance applications!','New image-based features in ArrayFire v3.4','','inherit','closed','closed','','9166-revision-v1','','','2016-09-19 12:08:07','2016-09-19 16:08:07','',9166,'http://sandbox.arrayfire.com/9166-revision-v1/',0,'revision','',0),(9170,18673,'2016-09-19 12:09:14','2016-09-19 16:09:14','There are a number of  additions and updates to image based features in the new 3.4 release of ArrayFire. Among the updates are:\r\n<ul>\r\n 	<li>Cubic interpolation</li>\r\n 	<li>Image moments</li>\r\n 	<li></li>\r\n</ul>\r\nThis blog post will display some typical use cases for these new features.\r\n\r\nNew image processing functions -- new interpolation methods, image moments, etc  -- Stefan. This will be almost entirely visual. Create some pretty pictures.\r\n\r\nArrayFire is always adding new methods to help you with accelerating your applications. We hope the new functions will be the vital tools that assist and inspire in your high performance applications!','New image-based features in ArrayFire v3.4','','inherit','closed','closed','','9166-revision-v1','','','2016-09-19 12:09:14','2016-09-19 16:09:14','',9166,'http://sandbox.arrayfire.com/9166-revision-v1/',0,'revision','',0),(9172,17729,'2016-09-21 22:17:06','2016-09-22 02:17:06','This post outlines the new graphics features available in ArrayFire v3.4:  Vector Fields, Overlays\r\n\r\n[custom_headline type=\"left\" level=\"h3\" looks_like=\"h3\"]Vector Fields[/custom_headline]\r\n\r\nWe have added visualization support to render ArrayFire <a href=\"http://arrayfire.org/docs/array_8h_source.htm\" target=\"_blank\">array</a> objects as vector fields. An <a href=\"https://github.com/arrayfire/arrayfire/blob/master/examples/graphics/field.cpp\">example</a> of how to visualize vector fields is included in ArrayFire v3.4. A screenshot of this example\'s output in multi-view mode is shown below, showcasing both static and dynamic vector field rendering.\r\n\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield.png\"><img class=\"alignnone size-large wp-image-9185\" src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield-1024x550.png\" alt=\"vfield\" width=\"742\" height=\"399\" /></a>\r\n\r\n[custom_headline type=\"left\" level=\"h3\" looks_like=\"h3\"]Overlays[/custom_headline]\r\n\r\nPreviously, each graph (such as plot, hist, scatter, etc) was rendered in its own window (or view). Overlaying graphs was not supported. ArrayFire v3.4 now support graph overlays.\r\n\r\nEach draw call in ArrayFire is either rendered to a whole window (single view) or to a view, which is a portion of the screen obtained in multiview mode.\r\n\r\nThe following image is an example of a graph overlay:\r\n\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\"><img class=\"alignnone size-full wp-image-9182\" src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\" alt=\"multipleplot\" width=\"1002\" height=\"828\" /></a>\r\n\r\nThe following graphs support overlay if they are of same type of object (2d/3d):\r\n<table width=\"100%\">\r\n<tbody>\r\n<tr>\r\n<td><a href=\"https://github.com/arrayfire/arrayfire/blob/master/examples/graphics/plot3.cpp\" target=\"_blank\">plot</a></td>\r\n<td><a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot3.png\"><img class=\"alignnone size-medium wp-image-9211\" src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot3-300x300.png\" alt=\"plot3\" width=\"300\" height=\"300\" /></a></td>\r\n</tr>\r\n<tr>\r\n<td><a href=\"https://github.com/arrayfire/arrayfire/blob/master/examples/graphics/histogram.cpp\" target=\"_blank\">histogram</a></td>\r\n<td><a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/histogram.png\"><img class=\"alignnone size-medium wp-image-9207\" src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/histogram-300x152.png\" alt=\"histogram\" width=\"300\" height=\"152\" /></a></td>\r\n</tr>\r\n<tr>\r\n<td><a href=\"https://github.com/arrayfire/arrayfire/blob/master/examples/graphics/surface.cpp\" target=\"_blank\">surface</a></td>\r\n<td><a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/surface.png\"><img class=\"alignnone size-medium wp-image-9212\" src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/surface-300x300.png\" alt=\"surface\" width=\"300\" height=\"300\" /></a></td>\r\n</tr>\r\n<tr>\r\n<td><a href=\"https://github.com/arrayfire/arrayfire/blob/master/examples/graphics/field.cpp\" target=\"_blank\">vector fields</a></td>\r\n<td><a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield-300x161.png\" alt=\"vfield\" width=\"300\" height=\"161\" class=\"alignnone size-medium wp-image-9185\" /></a></td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n[custom_headline type=\"left\" level=\"h3\" looks_like=\"h3\"]Animations[/custom_headline]\r\n\r\nArrayFire v3.4 includes the following examples of producing fun animations based on simple equations: <a href=\"https://github.com/arrayfire/arrayfire/blob/master/examples/graphics/conway.cpp\" target=\"_blank\">conway</a>, <a href=\"https://github.com/arrayfire/arrayfire/blob/master/examples/graphics/conway_pretty.cpp\" target=\"_blank\">conway_pretty</a>, <a href=\"https://github.com/arrayfire/arrayfire/blob/master/examples/graphics/gravity_sim.cpp\" target=\"_blank\">gravity</a>, and <a href=\"https://github.com/arrayfire/arrayfire/blob/master/examples/graphics/fractal.cpp\" target=\"_blank\">julia fractal</a>.\r\n\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/conway.gif\"><img class=\"alignnone size-full wp-image-9227\" src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/conway.gif\" alt=\"conway\" width=\"256\" height=\"256\" /></a> <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/conway_pretty.gif\"><img class=\"alignnone size-full wp-image-9228\" src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/conway_pretty.gif\" alt=\"conway_pretty\" width=\"256\" height=\"256\" /></a> <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/gravity.gif\"><img class=\"alignnone size-full wp-image-9216\" src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/gravity.gif\" alt=\"gravity\" width=\"256\" height=\"256\" /></a> <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/julia.gif\"><img class=\"alignnone size-full wp-image-9240\" src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/julia.gif\" alt=\"julia\" width=\"256\" height=\"256\" /></a>\r\n\r\n[custom_headline type=\"left\" level=\"h3\" looks_like=\"h3\"]Behavioral Changes[/custom_headline]\r\n\r\nIn previous versions of ArrayFire, axes limits were computed automatically to fit the data. In ArrayFire v3.4, users are required to set axes limits, as shown below:\r\n<pre><code class=\"language-cpp\">\r\naf::Window myWindow(800, 800, \"2D Plot example: ArrayFire\");\r\n\r\narray Y;\r\nint sign = 1;\r\narray X = seq(-af::Pi, af::Pi, PRECISION);\r\narray noise = randn(X.dims(0))/5.f;\r\n\r\nmyWindow.grid(2, 1);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(0, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1, 1, true);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(1, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1.25, 1.25, true);\r\n\r\nfor (double val=0; !myWindow.close(); )\r\n{\r\n    Y = sin(X);\r\n\r\n    myWindow(0,0).plot(X, Y);\r\n    myWindow(1,0).scatter(X, Y + noise, AF_MARKER_POINT);\r\n\r\n    myWindow.show();\r\n\r\n    X = X + PRECISION * float(sign);\r\n    val += PRECISION * float(sign);\r\n\r\n    if (val >af::Pi) {\r\n        sign = -1;\r\n    } else if (val < -af::Pi) {\r\n        sign = 1;\r\n    }\r\n}\r\n</code></pre>\r\nThe code above produces the output below. You can find the complete example <a href=\"https://github.com/arrayfire/arrayfire/blob/master/examples/graphics/plot2d.cpp\" target=\"_blank\">here</a>.\r\n\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d.png\"><img class=\"alignnone size-large wp-image-9183\" src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d-1024x927.png\" alt=\"plot2d\" width=\"742\" height=\"672\" /></a>\r\n\r\n<strong>Miscellaneous Change</strong>\r\n\r\nRemoved <a href=\"http://glew.sourceforge.net/\">GLEW</a> and replaced with <a href=\"https://github.com/cginternals/glbinding\">glbinding</a>.\r\n\r\n[custom_headline type=\"left\" level=\"h3\" looks_like=\"h3\"]Download[/custom_headline]\r\n\r\nArrayFire v3.4 can be downloaded from these locations:\r\n<ul>\r\n 	<li><a href=\"http://sandbox.arrayfire.com/download/\">Binaries</a></li>\r\n 	<li><a href=\"https://github.com/arrayfire\">Source code</a></li>\r\n</ul>\r\n[custom_headline type=\"left\" level=\"h3\" looks_like=\"h3\"]Community[/custom_headline]\r\n\r\nArrayFire is continually improving through the addition of new visualization functions. We welcome your feedback:\r\n<ul>\r\n 	<li>General discussion forums on the <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">ArrayFire Google Group</a></li>\r\n 	<li>Live discussion chat on the <a href=\"https://gitter.im/arrayfire/arrayfire?utm_source=badge&amp;utm_medium=badge&amp;utm_campaign=pr-badge&amp;utm_content=badge\">ArrayFire Gitter</a></li>\r\n 	<li>Issue reports on the <a href=\"https://github.com/arrayfire/arrayfire/issues\">ArrayFire GitHub</a></li>\r\n</ul>\r\nFinally, as you find success with ArrayFire, we invite you to contribute a post to this blog to share with the broader community. Email <a href=\"mailto:scott@arrayfire.com\">scott@arrayfire.com</a> to contribute to this blog.','Graphics Updates in ArrayFire v3.4','','publish','open','closed','','graphics-updates-in-arrayfire-v3-4','','','2017-10-25 12:08:21','2017-10-25 16:08:21','',0,'http://sandbox.arrayfire.com/?p=9172',0,'post','',0),(9173,17729,'2016-09-19 12:25:24','2016-09-19 16:25:24','In this post, we outline the new graphics features and updates that come along with ArrayFire v3.4.0 release.','Graphics updates in ArrayFire v3.4.0','','inherit','closed','closed','','9172-revision-v1','','','2016-09-19 12:25:24','2016-09-19 16:25:24','',9172,'http://sandbox.arrayfire.com/9172-revision-v1/',0,'revision','',0),(9174,17729,'2016-09-19 12:28:14','2016-09-19 16:28:14','In this post, we shall briefly discuss the new graphics features and updates that come along with ArrayFire v3.4.0 release.\r\n\r\n<h4>Deprecated and their replacements</h4>\r\n\r\n','Graphics updates in ArrayFire v3.4.0','','inherit','closed','closed','','9172-revision-v1','','','2016-09-19 12:28:14','2016-09-19 16:28:14','',9172,'http://sandbox.arrayfire.com/9172-revision-v1/',0,'revision','',0),(9175,17729,'2016-09-19 13:16:51','2016-09-19 17:16:51','<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Untitled Document.md</title><style></style></head><body id=\"preview\">\r\n<p>This post outlines the new graphics features and updates that come along with ArrayFire v3.4.0 release.</p>\r\n<h5><a id=\"Deprecated_and_their_replacements_2\"></a>Deprecated and their replacements</h5>\r\n<h6><a id=\"C_API_4\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_plot</code> has been deprecated in favour of <code>af_draw_plot_2d</code> or <code>af_draw_plot_nd</code> where the function with <strong>2d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised version.</li>\r\n<li><code>af_draw_plot3</code> has been deprecated in favour of <code>af_draw_plot_3d</code> or <code>af_draw_plot_nd</code> where the function with <strong>3d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised version.</li>\r\n<li><code>af_draw_scatter</code> has been deprecated in favour of <code>af_draw_scatter_2d</code> or <code>af_draw_scatter_nd</code> where the function with <strong>2d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised version.</li>\r\n<li><code>af_draw_scatter3</code> has been deprecated in favour of <code>af_draw_scatter_3d</code> or <code>af_draw_scatter_nd</code> where the function with <strong>3d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised version.</li>\r\n</ul>\r\n<h6><a id=\"C_API_9\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::plot3</code> has been deprecated in favour of <code>af::Window::plot</code>, which is generalized plotting draw call that can handle both 2d and 3d data.</li>\r\n<li><code>af::Window::scatter3</code> has been deprecated in favour of <code>af::Window::scatter</code>, which is generalized plotting draw call that can handle both 2d and 3d data.</li>\r\n</ul>\r\n<h5><a id=\"Behavioral_Changes_13\"></a>Behavioral Changes</h5>\r\n<p>Prior to v3.4.0 release, all plotting functions used to compute the axes limits pertaining to corresponding data automatically. This additional step of computing axes is now not performed in any plotting functions. Instead, new API has been provided to set the axes limits of the corresponding graph plot. Following are the new API calls for setting axes limits.</p>\r\n<h6><a id=\"C_API_16\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_set_axes_limits_compute</code> computes the axes limits from given <code>af_array</code>\'s and then passed the same to draw call.</li>\r\n<li><code>af_set_axes_limits_2d</code> can be used to explicitly set the x and y axes limits to specific minimum and maximum values.</li>\r\n<li><code>af_set_axes_limits_3d</code> can be used to explicitly set the x, y &amp; z axes limits to specific minimum and maximum values.</li>\r\n</ul>\r\n<h6><a id=\"C_API_20\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::setAxesLimits</code></li>\r\n</ul>\r\n<p>Given below is an example showing the code changes one has to make to their C++ ArrayFire program that uses graphics functionality of ArrayFire.</p>\r\n<pre><code class=\"language-cpp\">        af::<span class=\"hljs-function\">Window <span class=\"hljs-title\">myWindow</span><span class=\"hljs-params\">(<span class=\"hljs-number\">800</span>, <span class=\"hljs-number\">800</span>, <span class=\"hljs-string\">\"2D Plot example: ArrayFire\"</span>)</span></span>;\r\n\r\n        <span class=\"hljs-built_in\">array</span> Y;\r\n        <span class=\"hljs-keyword\">int</span> sign = <span class=\"hljs-number\">1</span>;\r\n        <span class=\"hljs-built_in\">array</span> X = seq(-af::Pi, af::Pi, PRECISION);\r\n        <span class=\"hljs-built_in\">array</span> noise = randn(X.dims(<span class=\"hljs-number\">0</span>))/<span class=\"hljs-number\">5.f</span>;\r\n\r\n        myWindow.grid(<span class=\"hljs-number\">2</span>, <span class=\"hljs-number\">1</span>);\r\n        <span class=\"hljs-comment\">// Before v3.4.0 the following two lines were performed automatically</span>\r\n        <span class=\"hljs-comment\">// every iteration of the render loop inside the plotting calls such</span>\r\n        <span class=\"hljs-comment\">// plot, scatter etc.</span>\r\n        myWindow(<span class=\"hljs-number\">0</span>, <span class=\"hljs-number\">0</span>).setAxesLimits(-<span class=\"hljs-number\">2</span> * af::Pi, <span class=\"hljs-number\">2</span> * af::Pi, -<span class=\"hljs-number\">1</span>, <span class=\"hljs-number\">1</span>, <span class=\"hljs-literal\">true</span>);         <span class=\"hljs-comment\">// New API setting axes limits</span>\r\n        myWindow(<span class=\"hljs-number\">1</span>, <span class=\"hljs-number\">0</span>).setAxesLimits(-<span class=\"hljs-number\">2</span> * af::Pi, <span class=\"hljs-number\">2</span> * af::Pi, -<span class=\"hljs-number\">1.25</span>, <span class=\"hljs-number\">1.25</span>, <span class=\"hljs-literal\">true</span>);   <span class=\"hljs-comment\">// New API setting axes limits</span>\r\n\r\n        <span class=\"hljs-keyword\">for</span> (<span class=\"hljs-keyword\">double</span> val=<span class=\"hljs-number\">0</span>; !myWindow.close(); ) {\r\n            Y = <span class=\"hljs-built_in\">sin</span>(X);\r\n            myWindow(<span class=\"hljs-number\">0</span>,<span class=\"hljs-number\">0</span>).plot(X, Y);\r\n            myWindow(<span class=\"hljs-number\">1</span>,<span class=\"hljs-number\">0</span>).scatter(X, Y + noise, AF_MARKER_POINT);\r\n            myWindow.show();\r\n\r\n            X = X + <span class=\"hljs-function\">PRECISION * <span class=\"hljs-title\">float</span><span class=\"hljs-params\">(sign)</span></span>;\r\n            val += <span class=\"hljs-function\">PRECISION * <span class=\"hljs-title\">float</span><span class=\"hljs-params\">(sign)</span></span>;\r\n            <span class=\"hljs-keyword\">if</span> (val&gt;af::Pi) {\r\n                sign = -<span class=\"hljs-number\">1</span>;\r\n            } <span class=\"hljs-keyword\">else</span> <span class=\"hljs-keyword\">if</span> (val&lt;-af::Pi) {\r\n                sign = <span class=\"hljs-number\">1</span>;\r\n            }\r\n        }\r\n</code></pre>\r\n<h5><a id=\"New_Features_56\"></a>New Features</h5>\r\n<p>Any new functions that have been already mentioned in the above two sections are not repeated below.</p>\r\n<h6><a id=\"C_API_58\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_nd</code> is generalized version that can handle both 2d and 3d <code>af_array</code>s.</li>\r\n<li><code>af_set_axes_titles</code> can be used to set the titles of axes of a given chart/graph.</li>\r\n</ul>\r\n<h6><a id=\"C_API_63\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::vectorField</code> is an overloaded and generalized vector field rendering function.</li>\r\n<li><code>af::Window::setAxesTitles</code> is used to set the chart/graph axes labels</li>\r\n</ul>\r\n<p>Apart from the above new functions, each window/view supports overlay of different renderables now. If you are not already aware of what a view (graphics context) in ArrayFire is: Each draw call in ArrayFire is either rendered to whole window(single view) or a portion of the screen(multiview mode or grid mode), this subset portion of the whole window is called a view.\r\nThe following renerables support overlay if they are of same type of object (2d/3d).</p>\r\n<ul>\r\n<li>plot</li>\r\n<li>hist</li>\r\n<li>surface</li>\r\n<li>vector fields</li>\r\n</ul>\r\n<h5><a id=\"Misc_Changes_74\"></a>Misc Changes</h5>\r\n<p>Removed <a href=\"http://glew.sourceforge.net/\">GLEW</a> and replaced with <a href=\"https://github.com/cginternals/glbinding\">glbinding</a>.</p>\r\n<h5><a id=\"Conclusion_77\"></a>Conclusion</h5>\r\n<p>We intend to add more graphcis functionality in future releases, keep checking for new posts from us. Please do try the new graphics functionality and kindly let us know if you find any bugs in the library.</p>\r\n\r\n</body></html>','Graphics updates in ArrayFire v3.4.0','','inherit','closed','closed','','9172-revision-v1','','','2016-09-19 13:16:51','2016-09-19 17:16:51','',9172,'http://sandbox.arrayfire.com/9172-revision-v1/',0,'revision','',0),(9176,17729,'2016-09-19 13:18:51','2016-09-19 17:18:51','<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Untitled Document.md</title><style></style></head><body id=\"preview\">\r\n<p>This post outlines the new graphics features and updates that come along with ArrayFire v3.4.0 release.</p>\r\n<h5><a id=\"Deprecated_and_their_replacements_2\"></a>Deprecated and their replacements</h5>\r\n<h6><a id=\"C_API_4\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_plot</code> has been deprecated in favour of <code>af_draw_plot_2d</code> or <code>af_draw_plot_nd</code> where the function with <strong>2d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised version.</li>\r\n<li><code>af_draw_plot3</code> has been deprecated in favour of <code>af_draw_plot_3d</code> or <code>af_draw_plot_nd</code> where the function with <strong>3d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised version.</li>\r\n<li><code>af_draw_scatter</code> has been deprecated in favour of <code>af_draw_scatter_2d</code> or <code>af_draw_scatter_nd</code> where the function with <strong>2d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised version.</li>\r\n<li><code>af_draw_scatter3</code> has been deprecated in favour of <code>af_draw_scatter_3d</code> or <code>af_draw_scatter_nd</code> where the function with <strong>3d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised version.</li>\r\n</ul>\r\n<h6><a id=\"C_API_9\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::plot3</code> has been deprecated in favour of <code>af::Window::plot</code>, which is generalized plotting draw call that can handle both 2d and 3d data.</li>\r\n<li><code>af::Window::scatter3</code> has been deprecated in favour of <code>af::Window::scatter</code>, which is generalized plotting draw call that can handle both 2d and 3d data.</li>\r\n</ul>\r\n<h5><a id=\"Behavioral_Changes_13\"></a>Behavioral Changes</h5>\r\n<p>Prior to v3.4.0 release, all plotting functions used to compute the axes limits pertaining to corresponding data automatically. This additional step of computing axes is now not performed in any plotting functions. Instead, new API has been provided to set the axes limits of the corresponding graph plot. Following are the new API calls for setting axes limits.</p>\r\n<h6><a id=\"C_API_16\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_set_axes_limits_compute</code> computes the axes limits from given <code>af_array</code>\'s and then passed the same to draw call.</li>\r\n<li><code>af_set_axes_limits_2d</code> can be used to explicitly set the x and y axes limits to specific minimum and maximum values.</li>\r\n<li><code>af_set_axes_limits_3d</code> can be used to explicitly set the x, y &amp; z axes limits to specific minimum and maximum values.</li>\r\n</ul>\r\n<h6><a id=\"C_API_20\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::setAxesLimits</code></li>\r\n</ul>\r\n<p>Given below is an example showing the code changes one has to make to their C++ ArrayFire program that uses graphics functionality of ArrayFire.</p>\r\n\r\n<pre><code class=\"language-cpp\">\r\n        af::Window myWindow(800, 800, \"2D Plot example: ArrayFire\");\r\n\r\n        array Y;\r\n        int sign = 1;\r\n        array X = seq(-af::Pi, af::Pi, PRECISION);\r\n        array noise = randn(X.dims(0))/5.f;\r\n\r\n        myWindow.grid(2, 1);\r\n        myWindow(0, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1, 1, true);\r\n        myWindow(1, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1.25, 1.25, true);\r\n\r\n        for (double val=0; !myWindow.close(); ) {\r\n\r\n            Y = sin(X);\r\n\r\n            myWindow(0,0).plot(X, Y);\r\n            myWindow(1,0).scatter(X, Y + noise, AF_MARKER_POINT);\r\n\r\n            myWindow.show();\r\n\r\n            X = X + PRECISION * float(sign);\r\n            val += PRECISION * float(sign);\r\n\r\n            if (val>af::Pi) {\r\n                sign = -1;\r\n            } else if (val<-af::Pi) {\r\n                sign = 1;\r\n            }\r\n        }\r\n</code></pre>\r\n\r\n<h5><a id=\"New_Features_56\"></a>New Features</h5>\r\n<p>Any new functions that have been already mentioned in the above two sections are not repeated below.</p>\r\n<h6><a id=\"C_API_58\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_nd</code> is generalized version that can handle both 2d and 3d <code>af_array</code>s.</li>\r\n<li><code>af_set_axes_titles</code> can be used to set the titles of axes of a given chart/graph.</li>\r\n</ul>\r\n<h6><a id=\"C_API_63\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::vectorField</code> is an overloaded and generalized vector field rendering function.</li>\r\n<li><code>af::Window::setAxesTitles</code> is used to set the chart/graph axes labels</li>\r\n</ul>\r\n<p>Apart from the above new functions, each window/view supports overlay of different renderables now. If you are not already aware of what a view (graphics context) in ArrayFire is: Each draw call in ArrayFire is either rendered to whole window(single view) or a portion of the screen(multiview mode or grid mode), this subset portion of the whole window is called a view.\r\nThe following renerables support overlay if they are of same type of object (2d/3d).</p>\r\n<ul>\r\n<li>plot</li>\r\n<li>hist</li>\r\n<li>surface</li>\r\n<li>vector fields</li>\r\n</ul>\r\n<h5><a id=\"Misc_Changes_74\"></a>Misc Changes</h5>\r\n<p>Removed <a href=\"http://glew.sourceforge.net/\">GLEW</a> and replaced with <a href=\"https://github.com/cginternals/glbinding\">glbinding</a>.</p>\r\n<h5><a id=\"Conclusion_77\"></a>Conclusion</h5>\r\n<p>We intend to add more graphcis functionality in future releases, keep checking for new posts from us. Please do try the new graphics functionality and kindly let us know if you find any bugs in the library.</p>\r\n\r\n</body></html>','Graphics updates in ArrayFire v3.4.0','','inherit','closed','closed','','9172-revision-v1','','','2016-09-19 13:18:51','2016-09-19 17:18:51','',9172,'http://sandbox.arrayfire.com/9172-revision-v1/',0,'revision','',0),(9177,17729,'2016-09-19 13:20:44','2016-09-19 17:20:44','<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Untitled Document.md</title><style></style></head><body id=\"preview\">\r\n<p>This post outlines the new graphics features and updates that come along with ArrayFire v3.4.0 release.</p>\r\n<h5><a id=\"Deprecated_and_their_replacements_2\"></a>Deprecated and their replacements</h5>\r\n<h6><a id=\"C_API_4\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_plot</code> has been deprecated in favour of <code>af_draw_plot_2d</code> or <code>af_draw_plot_nd</code> where the function with <strong>2d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised version.</li>\r\n<li><code>af_draw_plot3</code> has been deprecated in favour of <code>af_draw_plot_3d</code> or <code>af_draw_plot_nd</code> where the function with <strong>3d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised version.</li>\r\n<li><code>af_draw_scatter</code> has been deprecated in favour of <code>af_draw_scatter_2d</code> or <code>af_draw_scatter_nd</code> where the function with <strong>2d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised version.</li>\r\n<li><code>af_draw_scatter3</code> has been deprecated in favour of <code>af_draw_scatter_3d</code> or <code>af_draw_scatter_nd</code> where the function with <strong>3d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised version.</li>\r\n</ul>\r\n<h6><a id=\"C_API_9\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::plot3</code> has been deprecated in favour of <code>af::Window::plot</code>, which is generalized plotting draw call that can handle both 2d and 3d data.</li>\r\n<li><code>af::Window::scatter3</code> has been deprecated in favour of <code>af::Window::scatter</code>, which is generalized plotting draw call that can handle both 2d and 3d data.</li>\r\n</ul>\r\n<h5><a id=\"Behavioral_Changes_13\"></a>Behavioral Changes</h5>\r\n<p>Prior to v3.4.0 release, all plotting functions used to compute the axes limits pertaining to corresponding data automatically. This additional step of computing axes is now not performed in any plotting functions. Instead, new API has been provided to set the axes limits of the corresponding graph plot. Following are the new API calls for setting axes limits.</p>\r\n<h6><a id=\"C_API_16\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_set_axes_limits_compute</code> computes the axes limits from given <code>af_array</code>\'s and then passed the same to draw call.</li>\r\n<li><code>af_set_axes_limits_2d</code> can be used to explicitly set the x and y axes limits to specific minimum and maximum values.</li>\r\n<li><code>af_set_axes_limits_3d</code> can be used to explicitly set the x, y &amp; z axes limits to specific minimum and maximum values.</li>\r\n</ul>\r\n<h6><a id=\"C_API_20\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::setAxesLimits</code></li>\r\n</ul>\r\n<p>Given below is an example showing the code changes one has to make to their C++ ArrayFire program that uses graphics functionality of ArrayFire.</p>\r\n\r\n<pre><code class=\"language-cpp\">\r\naf::Window myWindow(800, 800, \"2D Plot example: ArrayFire\");\r\n\r\narray Y;\r\nint sign = 1;\r\narray X = seq(-af::Pi, af::Pi, PRECISION);\r\narray noise = randn(X.dims(0))/5.f;\r\n\r\nmyWindow.grid(2, 1);\r\nmyWindow(0, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1, 1, true);\r\nmyWindow(1, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1.25, 1.25, true);\r\n\r\nfor (double val=0; !myWindow.close(); )\r\n{\r\n    Y = sin(X);\r\n\r\n    myWindow(0,0).plot(X, Y);\r\n    myWindow(1,0).scatter(X, Y + noise, AF_MARKER_POINT);\r\n\r\n    myWindow.show();\r\n\r\n    X = X + PRECISION * float(sign);\r\n    val += PRECISION * float(sign);\r\n\r\n    if (val>af::Pi) {\r\n        sign = -1;\r\n    } else if (val<-af::Pi) {\r\n        sign = 1;\r\n    }\r\n}\r\n</code></pre>\r\n\r\n<h5><a id=\"New_Features_56\"></a>New Features</h5>\r\n<p>Any new functions that have been already mentioned in the above two sections are not repeated below.</p>\r\n<h6><a id=\"C_API_58\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_nd</code> is generalized version that can handle both 2d and 3d <code>af_array</code>s.</li>\r\n<li><code>af_set_axes_titles</code> can be used to set the titles of axes of a given chart/graph.</li>\r\n</ul>\r\n<h6><a id=\"C_API_63\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::vectorField</code> is an overloaded and generalized vector field rendering function.</li>\r\n<li><code>af::Window::setAxesTitles</code> is used to set the chart/graph axes labels</li>\r\n</ul>\r\n<p>Apart from the above new functions, each window/view supports overlay of different renderables now. If you are not already aware of what a view (graphics context) in ArrayFire is: Each draw call in ArrayFire is either rendered to whole window(single view) or a portion of the screen(multiview mode or grid mode), this subset portion of the whole window is called a view.\r\nThe following renerables support overlay if they are of same type of object (2d/3d).</p>\r\n<ul>\r\n<li>plot</li>\r\n<li>hist</li>\r\n<li>surface</li>\r\n<li>vector fields</li>\r\n</ul>\r\n<h5><a id=\"Misc_Changes_74\"></a>Misc Changes</h5>\r\n<p>Removed <a href=\"http://glew.sourceforge.net/\">GLEW</a> and replaced with <a href=\"https://github.com/cginternals/glbinding\">glbinding</a>.</p>\r\n<h5><a id=\"Conclusion_77\"></a>Conclusion</h5>\r\n<p>We intend to add more graphcis functionality in future releases, keep checking for new posts from us. Please do try the new graphics functionality and kindly let us know if you find any bugs in the library.</p>\r\n\r\n</body></html>','Graphics updates in ArrayFire v3.4.0','','inherit','closed','closed','','9172-revision-v1','','','2016-09-19 13:20:44','2016-09-19 17:20:44','',9172,'http://sandbox.arrayfire.com/9172-revision-v1/',0,'revision','',0),(9178,17729,'2016-09-19 13:26:28','2016-09-19 17:26:28','<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Untitled Document.md</title><style></style></head><body id=\"preview\">\r\n<p>This post outlines the new graphics features and updates that come along with ArrayFire v3.4.0 release.</p>\r\n<h5><a id=\"Deprecated_and_their_replacements_2\"></a>Deprecated and their replacements</h5>\r\n<h6><a id=\"C_API_4\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_plot</code> has been deprecated in favour of <code>af_draw_plot_2d</code> or <code>af_draw_plot_nd</code> where the function with <strong>2d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised version.</li>\r\n<li><code>af_draw_plot3</code> has been deprecated in favour of <code>af_draw_plot_3d</code> or <code>af_draw_plot_nd</code> where the function with <strong>3d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised version.</li>\r\n<li><code>af_draw_scatter</code> has been deprecated in favour of <code>af_draw_scatter_2d</code> or <code>af_draw_scatter_nd</code> where the function with <strong>2d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised version.</li>\r\n<li><code>af_draw_scatter3</code> has been deprecated in favour of <code>af_draw_scatter_3d</code> or <code>af_draw_scatter_nd</code> where the function with <strong>3d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n</ul>\r\n<h6><a id=\"C_API_9\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::plot3</code> has been deprecated in favour of <code>af::Window::plot</code>, which is generalized plotting draw call that can handle both 2d and 3d data.</li>\r\n<li><code>af::Window::scatter3</code> has been deprecated in favour of <code>af::Window::scatter</code>, which is generalized plotting draw call that can handle both 2d and 3d data.</li>\r\n</ul>\r\n<h5><a id=\"Behavioral_Changes_13\"></a>Behavioral Changes</h5>\r\n<p>Prior to v3.4.0 release, all plotting functions used to compute the axes limits pertaining to corresponding data automatically. This additional step of computing axes is now not performed in any plotting functions. Instead, new API has been provided to set the axes limits of the corresponding graph plot. Following are the new API calls for setting axes limits.</p>\r\n<h6><a id=\"C_API_16\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_set_axes_limits_compute</code> computes the axes limits from given <code>af_array</code>\'s and then passed the same to draw call.</li>\r\n<li><code>af_set_axes_limits_2d</code> can be used to explicitly set the x and y axes limits to specific minimum and maximum values.</li>\r\n<li><code>af_set_axes_limits_3d</code> can be used to explicitly set the x, y &amp; z axes limits to specific minimum and maximum values.</li>\r\n</ul>\r\n<h6><a id=\"C_API_20\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::setAxesLimits</code></li>\r\n</ul>\r\n<p>Given below is an example showing the code changes one has to make to their C++ ArrayFire program that uses graphics functionality of ArrayFire.</p>\r\n\r\n<pre><code class=\"language-cpp\">\r\naf::Window myWindow(800, 800, \"2D Plot example: ArrayFire\");\r\n\r\narray Y;\r\nint sign = 1;\r\narray X = seq(-af::Pi, af::Pi, PRECISION);\r\narray noise = randn(X.dims(0))/5.f;\r\n\r\nmyWindow.grid(2, 1);\r\nmyWindow(0, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1, 1, true);\r\nmyWindow(1, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1.25, 1.25, true);\r\n\r\nfor (double val=0; !myWindow.close(); )\r\n{\r\n    Y = sin(X);\r\n\r\n    myWindow(0,0).plot(X, Y);\r\n    myWindow(1,0).scatter(X, Y + noise, AF_MARKER_POINT);\r\n\r\n    myWindow.show();\r\n\r\n    X = X + PRECISION * float(sign);\r\n    val += PRECISION * float(sign);\r\n\r\n    if (val>af::Pi) {\r\n        sign = -1;\r\n    } else if (val<-af::Pi) {\r\n        sign = 1;\r\n    }\r\n}\r\n</code></pre>\r\n\r\n<h5><a id=\"New_Features_56\"></a>New Features</h5>\r\n<p>Any new functions that have been already mentioned in the above two sections are not repeated below.</p>\r\n<h6><a id=\"C_API_58\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_nd</code> is generalized version that can handle both 2d and 3d <code>af_array</code>s.</li>\r\n<li><code>af_set_axes_titles</code> can be used to set the titles of axes of a given chart/graph.</li>\r\n</ul>\r\n<h6><a id=\"C_API_63\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::vectorField</code> is an overloaded and generalized vector field rendering function.</li>\r\n<li><code>af::Window::setAxesTitles</code> is used to set the chart/graph axes labels</li>\r\n</ul>\r\n<p>Apart from the above new functions, each window/view supports overlay of different renderables now. If you are not already aware of what a view (graphics context) in ArrayFire is: Each draw call in ArrayFire is either rendered to whole window(single view) or a portion of the screen(multiview mode or grid mode), this subset portion of the whole window is called a view.\r\nThe following renerables support overlay if they are of same type of object (2d/3d).</p>\r\n<ul>\r\n<li>plot</li>\r\n<li>hist</li>\r\n<li>surface</li>\r\n<li>vector fields</li>\r\n</ul>\r\n<h5><a id=\"Misc_Changes_74\"></a>Misc Changes</h5>\r\n<p>Removed <a href=\"http://glew.sourceforge.net/\">GLEW</a> and replaced with <a href=\"https://github.com/cginternals/glbinding\">glbinding</a>.</p>\r\n<h5><a id=\"Conclusion_77\"></a>Conclusion</h5>\r\n<p>We intend to add more graphcis functionality in future releases, keep checking for new posts from us. Please do try the new graphics functionality and kindly let us know if you find any bugs in the library.</p>\r\n\r\n</body></html>','Graphics updates in ArrayFire v3.4.0','','inherit','closed','closed','','9172-revision-v1','','','2016-09-19 13:26:28','2016-09-19 17:26:28','',9172,'http://sandbox.arrayfire.com/9172-revision-v1/',0,'revision','',0),(9179,17729,'2016-09-19 13:26:46','2016-09-19 17:26:46','<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Untitled Document.md</title><style></style></head><body id=\"preview\">\r\n<p>This post outlines the new graphics features and updates that come along with ArrayFire v3.4.0 release.</p>\r\n<h5><a id=\"Deprecated_and_their_replacements_2\"></a>Deprecated and their replacements</h5>\r\n<h6><a id=\"C_API_4\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_plot</code> has been deprecated in favour of <code>af_draw_plot_2d</code> or <code>af_draw_plot_nd</code> where the function with <strong>2d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised version.</li>\r\n<li><code>af_draw_plot3</code> has been deprecated in favour of <code>af_draw_plot_3d</code> or <code>af_draw_plot_nd</code> where the function with <strong>3d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised version.</li>\r\n<li><code>af_draw_scatter</code> has been deprecated in favour of <code>af_draw_scatter_2d</code> or <code>af_draw_scatter_nd</code> where the function with <strong>2d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n<li><code>af_draw_scatter3</code> has been deprecated in favour of <code>af_draw_scatter_3d</code> or <code>af_draw_scatter_nd</code> where the function with <strong>3d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n</ul>\r\n<h6><a id=\"C_API_9\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::plot3</code> has been deprecated in favour of <code>af::Window::plot</code>, which is generalized plotting draw call that can handle both 2d and 3d data.</li>\r\n<li><code>af::Window::scatter3</code> has been deprecated in favour of <code>af::Window::scatter</code>, which is generalized plotting draw call that can handle both 2d and 3d data.</li>\r\n</ul>\r\n<h5><a id=\"Behavioral_Changes_13\"></a>Behavioral Changes</h5>\r\n<p>Prior to v3.4.0 release, all plotting functions used to compute the axes limits pertaining to corresponding data automatically. This additional step of computing axes is now not performed in any plotting functions. Instead, new API has been provided to set the axes limits of the corresponding graph plot. Following are the new API calls for setting axes limits.</p>\r\n<h6><a id=\"C_API_16\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_set_axes_limits_compute</code> computes the axes limits from given <code>af_array</code>\'s and then passed the same to draw call.</li>\r\n<li><code>af_set_axes_limits_2d</code> can be used to explicitly set the x and y axes limits to specific minimum and maximum values.</li>\r\n<li><code>af_set_axes_limits_3d</code> can be used to explicitly set the x, y &amp; z axes limits to specific minimum and maximum values.</li>\r\n</ul>\r\n<h6><a id=\"C_API_20\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::setAxesLimits</code></li>\r\n</ul>\r\n<p>Given below is an example showing the code changes one has to make to their C++ ArrayFire program that uses graphics functionality of ArrayFire.</p>\r\n\r\n<pre><code class=\"language-cpp\">\r\naf::Window myWindow(800, 800, \"2D Plot example: ArrayFire\");\r\n\r\narray Y;\r\nint sign = 1;\r\narray X = seq(-af::Pi, af::Pi, PRECISION);\r\narray noise = randn(X.dims(0))/5.f;\r\n\r\nmyWindow.grid(2, 1);\r\nmyWindow(0, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1, 1, true);\r\nmyWindow(1, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1.25, 1.25, true);\r\n\r\nfor (double val=0; !myWindow.close(); )\r\n{\r\n    Y = sin(X);\r\n\r\n    myWindow(0,0).plot(X, Y);\r\n    myWindow(1,0).scatter(X, Y + noise, AF_MARKER_POINT);\r\n\r\n    myWindow.show();\r\n\r\n    X = X + PRECISION * float(sign);\r\n    val += PRECISION * float(sign);\r\n\r\n    if (val>af::Pi) {\r\n        sign = -1;\r\n    } else if (val<-af::Pi) {\r\n        sign = 1;\r\n    }\r\n}\r\n</code></pre>\r\n\r\n<h5><a id=\"New_Features_56\"></a>New Features</h5>\r\n<p>Any new functions that have been already mentioned in the above two sections are not repeated below.</p>\r\n<h6><a id=\"C_API_58\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_nd</code> is generalized version that can handle both 2d and 3d <code>af_array</code>s.</li>\r\n<li><code>af_set_axes_titles</code> can be used to set the titles of axes of a given chart/graph.</li>\r\n</ul>\r\n<h6><a id=\"C_API_63\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::vectorField</code> is an overloaded and generalized vector field rendering function.</li>\r\n<li><code>af::Window::setAxesTitles</code> is used to set the chart/graph axes labels</li>\r\n</ul>\r\n<p>Apart from the above new functions, each window/view supports overlay of different renderables now. If you are not already aware of what a view (graphics context) in ArrayFire is: Each draw call in ArrayFire is either rendered to whole window(single view) or a portion of the screen(multiview mode or grid mode), this subset portion of the whole window is called a view.\r\nThe following renerables support overlay if they are of same type of object (2d/3d).</p>\r\n<ul>\r\n<li>plot</li>\r\n<li>hist</li>\r\n<li>surface</li>\r\n<li>vector fields</li>\r\n</ul>\r\n<h5><a id=\"Misc_Changes_74\"></a>Misc Changes</h5>\r\n<p>Removed <a href=\"http://glew.sourceforge.net/\">GLEW</a> and replaced with <a href=\"https://github.com/cginternals/glbinding\">glbinding</a>.</p>\r\n<h5><a id=\"Conclusion_77\"></a>Conclusion</h5>\r\n<p>We intend to add more graphcis functionality in future releases, keep checking for new posts from us. Please do try the new graphics functionality and kindly let us know if you find any bugs in the library.</p>\r\n\r\n</body></html>','Graphics updates in ArrayFire v3.4.0','','inherit','closed','closed','','9172-revision-v1','','','2016-09-19 13:26:46','2016-09-19 17:26:46','',9172,'http://sandbox.arrayfire.com/9172-revision-v1/',0,'revision','',0),(9180,17729,'2016-09-19 13:27:08','2016-09-19 17:27:08','<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Untitled Document.md</title><style></style></head><body id=\"preview\">\r\n<p>This post outlines the new graphics features and updates that come along with ArrayFire v3.4.0 release.</p>\r\n<h5><a id=\"Deprecated_and_their_replacements_2\"></a>Deprecated and their replacements</h5>\r\n<h6><a id=\"C_API_4\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_plot</code> has been deprecated in favour of <code>af_draw_plot_2d</code> or <code>af_draw_plot_nd</code> where the function with <strong>2d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n<li><code>af_draw_plot3</code> has been deprecated in favour of <code>af_draw_plot_3d</code> or <code>af_draw_plot_nd</code> where the function with <strong>3d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n<li><code>af_draw_scatter</code> has been deprecated in favour of <code>af_draw_scatter_2d</code> or <code>af_draw_scatter_nd</code> where the function with <strong>2d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n<li><code>af_draw_scatter3</code> has been deprecated in favour of <code>af_draw_scatter_3d</code> or <code>af_draw_scatter_nd</code> where the function with <strong>3d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n</ul>\r\n<h6><a id=\"C_API_9\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::plot3</code> has been deprecated in favour of <code>af::Window::plot</code>, which is generalized plotting draw call that can handle both 2d and 3d data.</li>\r\n<li><code>af::Window::scatter3</code> has been deprecated in favour of <code>af::Window::scatter</code>, which is generalized plotting draw call that can handle both 2d and 3d data.</li>\r\n</ul>\r\n<h5><a id=\"Behavioral_Changes_13\"></a>Behavioral Changes</h5>\r\n<p>Prior to v3.4.0 release, all plotting functions used to compute the axes limits pertaining to corresponding data automatically. This additional step of computing axes is now not performed in any plotting functions. Instead, new API has been provided to set the axes limits of the corresponding graph plot. Following are the new API calls for setting axes limits.</p>\r\n<h6><a id=\"C_API_16\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_set_axes_limits_compute</code> computes the axes limits from given <code>af_array</code>\'s and then passed the same to draw call.</li>\r\n<li><code>af_set_axes_limits_2d</code> can be used to explicitly set the x and y axes limits to specific minimum and maximum values.</li>\r\n<li><code>af_set_axes_limits_3d</code> can be used to explicitly set the x, y &amp; z axes limits to specific minimum and maximum values.</li>\r\n</ul>\r\n<h6><a id=\"C_API_20\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::setAxesLimits</code></li>\r\n</ul>\r\n<p>Given below is an example showing the code changes one has to make to their C++ ArrayFire program that uses graphics functionality of ArrayFire.</p>\r\n\r\n<pre><code class=\"language-cpp\">\r\naf::Window myWindow(800, 800, \"2D Plot example: ArrayFire\");\r\n\r\narray Y;\r\nint sign = 1;\r\narray X = seq(-af::Pi, af::Pi, PRECISION);\r\narray noise = randn(X.dims(0))/5.f;\r\n\r\nmyWindow.grid(2, 1);\r\nmyWindow(0, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1, 1, true);\r\nmyWindow(1, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1.25, 1.25, true);\r\n\r\nfor (double val=0; !myWindow.close(); )\r\n{\r\n    Y = sin(X);\r\n\r\n    myWindow(0,0).plot(X, Y);\r\n    myWindow(1,0).scatter(X, Y + noise, AF_MARKER_POINT);\r\n\r\n    myWindow.show();\r\n\r\n    X = X + PRECISION * float(sign);\r\n    val += PRECISION * float(sign);\r\n\r\n    if (val>af::Pi) {\r\n        sign = -1;\r\n    } else if (val<-af::Pi) {\r\n        sign = 1;\r\n    }\r\n}\r\n</code></pre>\r\n\r\n<h5><a id=\"New_Features_56\"></a>New Features</h5>\r\n<p>Any new functions that have been already mentioned in the above two sections are not repeated below.</p>\r\n<h6><a id=\"C_API_58\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_nd</code> is generalized version that can handle both 2d and 3d <code>af_array</code>s.</li>\r\n<li><code>af_set_axes_titles</code> can be used to set the titles of axes of a given chart/graph.</li>\r\n</ul>\r\n<h6><a id=\"C_API_63\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::vectorField</code> is an overloaded and generalized vector field rendering function.</li>\r\n<li><code>af::Window::setAxesTitles</code> is used to set the chart/graph axes labels</li>\r\n</ul>\r\n<p>Apart from the above new functions, each window/view supports overlay of different renderables now. If you are not already aware of what a view (graphics context) in ArrayFire is: Each draw call in ArrayFire is either rendered to whole window(single view) or a portion of the screen(multiview mode or grid mode), this subset portion of the whole window is called a view.\r\nThe following renerables support overlay if they are of same type of object (2d/3d).</p>\r\n<ul>\r\n<li>plot</li>\r\n<li>hist</li>\r\n<li>surface</li>\r\n<li>vector fields</li>\r\n</ul>\r\n<h5><a id=\"Misc_Changes_74\"></a>Misc Changes</h5>\r\n<p>Removed <a href=\"http://glew.sourceforge.net/\">GLEW</a> and replaced with <a href=\"https://github.com/cginternals/glbinding\">glbinding</a>.</p>\r\n<h5><a id=\"Conclusion_77\"></a>Conclusion</h5>\r\n<p>We intend to add more graphcis functionality in future releases, keep checking for new posts from us. Please do try the new graphics functionality and kindly let us know if you find any bugs in the library.</p>\r\n\r\n</body></html>','Graphics updates in ArrayFire v3.4.0','','inherit','closed','closed','','9172-revision-v1','','','2016-09-19 13:27:08','2016-09-19 17:27:08','',9172,'http://sandbox.arrayfire.com/9172-revision-v1/',0,'revision','',0),(9181,17729,'2016-09-19 13:29:16','2016-09-19 17:29:16','<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Untitled Document.md</title><style></style></head><body id=\"preview\">\r\n<p>This post outlines the new graphics features and updates that come along with ArrayFire v3.4.0 release.</p>\r\n<h5><a id=\"Deprecated_and_their_replacements_2\"></a>Deprecated and their replacements</h5>\r\n<h6><a id=\"C_API_4\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_plot</code> has been deprecated in favour of <code>af_draw_plot_2d</code> or <code>af_draw_plot_nd</code> where the function with <strong>2d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n<li><code>af_draw_plot3</code> has been deprecated in favour of <code>af_draw_plot_3d</code> or <code>af_draw_plot_nd</code> where the function with <strong>3d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n<li><code>af_draw_scatter</code> has been deprecated in favour of <code>af_draw_scatter_2d</code> or <code>af_draw_scatter_nd</code> where the function with <strong>2d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n<li><code>af_draw_scatter3</code> has been deprecated in favour of <code>af_draw_scatter_3d</code> or <code>af_draw_scatter_nd</code> where the function with <strong>3d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n</ul>\r\n<h6><a id=\"C_API_9\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::plot3</code> has been deprecated in favour of <code>af::Window::plot</code>, which is generalized plotting draw call that can handle both 2d and 3d data.</li>\r\n<li><code>af::Window::scatter3</code> has been deprecated in favour of <code>af::Window::scatter</code>, which is generalized plotting draw call that can handle both 2d and 3d data.</li>\r\n</ul>\r\n<h5><a id=\"Behavioral_Changes_13\"></a>Behavioral Changes</h5>\r\n<p>Prior to v3.4.0 release, all plotting functions used to compute the axes limits pertaining to corresponding data automatically. This additional step of computing axes is now not performed in any plotting functions. Instead, new API has been provided to set the axes limits of the corresponding graph plot. Following are the new API calls for setting axes limits.</p>\r\n<h6><a id=\"C_API_16\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_set_axes_limits_compute</code> computes the axes limits from given <code>af_array</code>\'s and then passed the same to draw call.</li>\r\n<li><code>af_set_axes_limits_2d</code> can be used to explicitly set the x and y axes limits to specific minimum and maximum values.</li>\r\n<li><code>af_set_axes_limits_3d</code> can be used to explicitly set the x, y &amp; z axes limits to specific minimum and maximum values.</li>\r\n</ul>\r\n<h6><a id=\"C_API_20\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::setAxesLimits</code></li>\r\n</ul>\r\n<p>Given below is an example showing the code changes one has to make to their C++ ArrayFire program that uses graphics functionality of ArrayFire.</p>\r\n\r\n<pre><code class=\"language-cpp\">\r\naf::Window myWindow(800, 800, \"2D Plot example: ArrayFire\");\r\n\r\narray Y;\r\nint sign = 1;\r\narray X = seq(-af::Pi, af::Pi, PRECISION);\r\narray noise = randn(X.dims(0))/5.f;\r\n\r\nmyWindow.grid(2, 1);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(0, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1, 1, true);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(1, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1.25, 1.25, true);\r\n\r\nfor (double val=0; !myWindow.close(); )\r\n{\r\n    Y = sin(X);\r\n\r\n    myWindow(0,0).plot(X, Y);\r\n    myWindow(1,0).scatter(X, Y + noise, AF_MARKER_POINT);\r\n\r\n    myWindow.show();\r\n\r\n    X = X + PRECISION * float(sign);\r\n    val += PRECISION * float(sign);\r\n\r\n    if (val>af::Pi) {\r\n        sign = -1;\r\n    } else if (val<-af::Pi) {\r\n        sign = 1;\r\n    }\r\n}\r\n</code></pre>\r\n\r\n<h5><a id=\"New_Features_56\"></a>New Features</h5>\r\n<p>Any new functions that have been already mentioned in the above two sections are not repeated below.</p>\r\n<h6><a id=\"C_API_58\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_nd</code> is generalized version that can handle both 2d and 3d <code>af_array</code>s.</li>\r\n<li><code>af_set_axes_titles</code> can be used to set the titles of axes of a given chart/graph.</li>\r\n</ul>\r\n<h6><a id=\"C_API_63\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::vectorField</code> is an overloaded and generalized vector field rendering function.</li>\r\n<li><code>af::Window::setAxesTitles</code> is used to set the chart/graph axes labels</li>\r\n</ul>\r\n<p>Apart from the above new functions, each window/view supports overlay of different renderables now. If you are not already aware of what a view (graphics context) in ArrayFire is: Each draw call in ArrayFire is either rendered to whole window(single view) or a portion of the screen(multiview mode or grid mode), this subset portion of the whole window is called a view.\r\nThe following renerables support overlay if they are of same type of object (2d/3d).</p>\r\n<ul>\r\n<li>plot</li>\r\n<li>hist</li>\r\n<li>surface</li>\r\n<li>vector fields</li>\r\n</ul>\r\n<h5><a id=\"Misc_Changes_74\"></a>Misc Changes</h5>\r\n<p>Removed <a href=\"http://glew.sourceforge.net/\">GLEW</a> and replaced with <a href=\"https://github.com/cginternals/glbinding\">glbinding</a>.</p>\r\n<h5><a id=\"Conclusion_77\"></a>Conclusion</h5>\r\n<p>We intend to add more graphcis functionality in future releases, keep checking for new posts from us. Please do try the new graphics functionality and kindly let us know if you find any bugs in the library.</p>\r\n\r\n</body></html>','Graphics updates in ArrayFire v3.4.0','','inherit','closed','closed','','9172-revision-v1','','','2016-09-19 13:29:16','2016-09-19 17:29:16','',9172,'http://sandbox.arrayfire.com/9172-revision-v1/',0,'revision','',0),(9182,17729,'2016-09-19 13:53:02','2016-09-19 17:53:02','','multipleplot','','inherit','open','closed','','multipleplot','','','2016-09-19 13:53:02','2016-09-19 17:53:02','',9172,'http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png',0,'attachment','image/png',0),(9183,17729,'2016-09-19 13:53:05','2016-09-19 17:53:05','','plot2d','','inherit','open','closed','','plot2d','','','2016-09-19 13:53:05','2016-09-19 17:53:05','',9172,'http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d.png',0,'attachment','image/png',0),(9184,17729,'2016-09-19 13:53:12','2016-09-19 17:53:12','','swe','','inherit','open','closed','','swe','','','2016-09-19 13:53:12','2016-09-19 17:53:12','',9172,'http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe.png',0,'attachment','image/png',0),(9185,17729,'2016-09-19 13:53:22','2016-09-19 17:53:22','','vfield','Vector Fields','inherit','open','closed','','vfield','','','2017-06-22 08:51:02','2017-06-22 12:51:02','',9172,'http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield.png',0,'attachment','image/png',0),(9186,17729,'2016-09-19 13:53:52','2016-09-19 17:53:52','<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Untitled Document.md</title><style></style></head><body id=\"preview\">\r\n<p>This post outlines the new graphics features and updates that come along with ArrayFire v3.4.0 release.</p>\r\n<h5><a id=\"Deprecated_and_their_replacements_2\"></a>Deprecated and their replacements</h5>\r\n<h6><a id=\"C_API_4\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_plot</code> has been deprecated in favour of <code>af_draw_plot_2d</code> or <code>af_draw_plot_nd</code> where the function with <strong>2d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n<li><code>af_draw_plot3</code> has been deprecated in favour of <code>af_draw_plot_3d</code> or <code>af_draw_plot_nd</code> where the function with <strong>3d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n<li><code>af_draw_scatter</code> has been deprecated in favour of <code>af_draw_scatter_2d</code> or <code>af_draw_scatter_nd</code> where the function with <strong>2d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n<li><code>af_draw_scatter3</code> has been deprecated in favour of <code>af_draw_scatter_3d</code> or <code>af_draw_scatter_nd</code> where the function with <strong>3d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n</ul>\r\n<h6><a id=\"C_API_9\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::plot3</code> has been deprecated in favour of <code>af::Window::plot</code>, which is generalized plotting draw call that can handle both 2d and 3d data.</li>\r\n<li><code>af::Window::scatter3</code> has been deprecated in favour of <code>af::Window::scatter</code>, which is generalized plotting draw call that can handle both 2d and 3d data.</li>\r\n</ul>\r\n<h5><a id=\"Behavioral_Changes_13\"></a>Behavioral Changes</h5>\r\n<p>Prior to v3.4.0 release, all plotting functions used to compute the axes limits pertaining to corresponding data automatically. This additional step of computing axes is now not performed in any plotting functions. Instead, new API has been provided to set the axes limits of the corresponding graph plot. Following are the new API calls for setting axes limits.</p>\r\n<h6><a id=\"C_API_16\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_set_axes_limits_compute</code> computes the axes limits from given <code>af_array</code>\'s and then passed the same to draw call.</li>\r\n<li><code>af_set_axes_limits_2d</code> can be used to explicitly set the x and y axes limits to specific minimum and maximum values.</li>\r\n<li><code>af_set_axes_limits_3d</code> can be used to explicitly set the x, y &amp; z axes limits to specific minimum and maximum values.</li>\r\n</ul>\r\n<h6><a id=\"C_API_20\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::setAxesLimits</code></li>\r\n</ul>\r\n<p>Given below is an example showing the code changes one has to make to their C++ ArrayFire program that uses graphics functionality of ArrayFire.</p>\r\n\r\n<pre><code class=\"language-cpp\">\r\naf::Window myWindow(800, 800, \"2D Plot example: ArrayFire\");\r\n\r\narray Y;\r\nint sign = 1;\r\narray X = seq(-af::Pi, af::Pi, PRECISION);\r\narray noise = randn(X.dims(0))/5.f;\r\n\r\nmyWindow.grid(2, 1);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(0, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1, 1, true);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(1, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1.25, 1.25, true);\r\n\r\nfor (double val=0; !myWindow.close(); )\r\n{\r\n    Y = sin(X);\r\n\r\n    myWindow(0,0).plot(X, Y);\r\n    myWindow(1,0).scatter(X, Y + noise, AF_MARKER_POINT);\r\n\r\n    myWindow.show();\r\n\r\n    X = X + PRECISION * float(sign);\r\n    val += PRECISION * float(sign);\r\n\r\n    if (val>af::Pi) {\r\n        sign = -1;\r\n    } else if (val<-af::Pi) {\r\n        sign = 1;\r\n    }\r\n}\r\n</code></pre>\r\n<p>Above code should render as the following.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d-300x271.png\" alt=\"plot2d\" width=\"300\" height=\"271\" class=\"alignnone size-medium wp-image-9183\" /></a>\r\n\r\n<h5><a id=\"New_Features_56\"></a>New Features</h5>\r\n<p>Any new functions that have been already mentioned in the above two sections are not repeated below.</p>\r\n<h6><a id=\"C_API_58\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_nd</code> is generalized version that can handle both 2d and 3d <code>af_array</code>s.</li>\r\n<li><code>af_set_axes_titles</code> can be used to set the titles of axes of a given chart/graph.</li>\r\n</ul>\r\n<h6><a id=\"C_API_63\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::vectorField</code> is an overloaded and generalized vector field rendering function.</li>\r\n<li><code>af::Window::setAxesTitles</code> is used to set the chart/graph axes labels</li>\r\n</ul>\r\n<p>Apart from the above new functions, each window/view supports overlay of different renderables now. If you are not already aware of what a view (graphics context) in ArrayFire is: Each draw call in ArrayFire is either rendered to whole window(single view) or a portion of the screen(multiview mode or grid mode), this subset portion of the whole window is called a view.\r\nThe following renerables support overlay if they are of same type of object (2d/3d).</p>\r\n<ul>\r\n<li>plot</li>\r\n<li>hist</li>\r\n<li>surface</li>\r\n<li>vector fields</li>\r\n</ul>\r\n<h5><a id=\"Misc_Changes_74\"></a>Misc Changes</h5>\r\n<p>Removed <a href=\"http://glew.sourceforge.net/\">GLEW</a> and replaced with <a href=\"https://github.com/cginternals/glbinding\">glbinding</a>.</p>\r\n<h5><a id=\"Conclusion_77\"></a>Conclusion</h5>\r\n<p>We intend to add more graphcis functionality in future releases, keep checking for new posts from us. Please do try the new graphics functionality and kindly let us know if you find any bugs in the library.</p>\r\n\r\n</body></html>','Graphics updates in ArrayFire v3.4.0','','inherit','closed','closed','','9172-revision-v1','','','2016-09-19 13:53:52','2016-09-19 17:53:52','',9172,'http://sandbox.arrayfire.com/9172-revision-v1/',0,'revision','',0);
INSERT INTO `wp_posts` VALUES (9187,17729,'2016-09-19 13:55:18','2016-09-19 17:55:18','<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Untitled Document.md</title><style></style></head><body id=\"preview\">\r\n<p>This post outlines the new graphics features and updates that come along with ArrayFire v3.4.0 release.</p>\r\n<h5><a id=\"Deprecated_and_their_replacements_2\"></a>Deprecated and their replacements</h5>\r\n<h6><a id=\"C_API_4\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_plot</code> has been deprecated in favour of <code>af_draw_plot_2d</code> or <code>af_draw_plot_nd</code> where the function with <strong>2d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n<li><code>af_draw_plot3</code> has been deprecated in favour of <code>af_draw_plot_3d</code> or <code>af_draw_plot_nd</code> where the function with <strong>3d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n<li><code>af_draw_scatter</code> has been deprecated in favour of <code>af_draw_scatter_2d</code> or <code>af_draw_scatter_nd</code> where the function with <strong>2d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n<li><code>af_draw_scatter3</code> has been deprecated in favour of <code>af_draw_scatter_3d</code> or <code>af_draw_scatter_nd</code> where the function with <strong>3d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n</ul>\r\n<h6><a id=\"C_API_9\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::plot3</code> has been deprecated in favour of <code>af::Window::plot</code>, which is generalized plotting draw call that can handle both 2d and 3d data.</li>\r\n<li><code>af::Window::scatter3</code> has been deprecated in favour of <code>af::Window::scatter</code>, which is generalized plotting draw call that can handle both 2d and 3d data.</li>\r\n</ul>\r\n<h5><a id=\"Behavioral_Changes_13\"></a>Behavioral Changes</h5>\r\n<p>Prior to v3.4.0 release, all plotting functions used to compute the axes limits pertaining to corresponding data automatically. This additional step of computing axes is now not performed in any plotting functions. Instead, new API has been provided to set the axes limits of the corresponding graph plot. Following are the new API calls for setting axes limits.</p>\r\n<h6><a id=\"C_API_16\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_set_axes_limits_compute</code> computes the axes limits from given <code>af_array</code>\'s and then passed the same to draw call.</li>\r\n<li><code>af_set_axes_limits_2d</code> can be used to explicitly set the x and y axes limits to specific minimum and maximum values.</li>\r\n<li><code>af_set_axes_limits_3d</code> can be used to explicitly set the x, y &amp; z axes limits to specific minimum and maximum values.</li>\r\n</ul>\r\n<h6><a id=\"C_API_20\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::setAxesLimits</code></li>\r\n</ul>\r\n<p>Given below is an example showing the code changes one has to make to their C++ ArrayFire program that uses graphics functionality of ArrayFire.</p>\r\n\r\n<pre><code class=\"language-cpp\">\r\naf::Window myWindow(800, 800, \"2D Plot example: ArrayFire\");\r\n\r\narray Y;\r\nint sign = 1;\r\narray X = seq(-af::Pi, af::Pi, PRECISION);\r\narray noise = randn(X.dims(0))/5.f;\r\n\r\nmyWindow.grid(2, 1);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(0, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1, 1, true);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(1, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1.25, 1.25, true);\r\n\r\nfor (double val=0; !myWindow.close(); )\r\n{\r\n    Y = sin(X);\r\n\r\n    myWindow(0,0).plot(X, Y);\r\n    myWindow(1,0).scatter(X, Y + noise, AF_MARKER_POINT);\r\n\r\n    myWindow.show();\r\n\r\n    X = X + PRECISION * float(sign);\r\n    val += PRECISION * float(sign);\r\n\r\n    if (val>af::Pi) {\r\n        sign = -1;\r\n    } else if (val<-af::Pi) {\r\n        sign = 1;\r\n    }\r\n}\r\n</code></pre>\r\n<p>Above code should render as the following.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d-1024x927.png\" alt=\"plot2d\" width=\"742\" height=\"672\" class=\"alignnone size-large wp-image-9183\" /></a>\r\n\r\n<h5><a id=\"New_Features_56\"></a>New Features</h5>\r\n<p>Any new functions that have been already mentioned in the above two sections are not repeated below.</p>\r\n<h6><a id=\"C_API_58\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_nd</code> is generalized version that can handle both 2d and 3d <code>af_array</code>s.</li>\r\n<li><code>af_set_axes_titles</code> can be used to set the titles of axes of a given chart/graph.</li>\r\n</ul>\r\n<h6><a id=\"C_API_63\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::vectorField</code> is an overloaded and generalized vector field rendering function.</li>\r\n<li><code>af::Window::setAxesTitles</code> is used to set the chart/graph axes labels</li>\r\n</ul>\r\n<p>Apart from the above new functions, each window/view supports overlay of different renderables now. If you are not already aware of what a view (graphics context) in ArrayFire is: Each draw call in ArrayFire is either rendered to whole window(single view) or a portion of the screen(multiview mode or grid mode), this subset portion of the whole window is called a view.\r\nThe following renerables support overlay if they are of same type of object (2d/3d).</p>\r\n<ul>\r\n<li>plot</li>\r\n<li>hist</li>\r\n<li>surface</li>\r\n<li>vector fields</li>\r\n</ul>\r\n<h5><a id=\"Misc_Changes_74\"></a>Misc Changes</h5>\r\n<p>Removed <a href=\"http://glew.sourceforge.net/\">GLEW</a> and replaced with <a href=\"https://github.com/cginternals/glbinding\">glbinding</a>.</p>\r\n<h5><a id=\"Conclusion_77\"></a>Conclusion</h5>\r\n<p>We intend to add more graphcis functionality in future releases, keep checking for new posts from us. Please do try the new graphics functionality and kindly let us know if you find any bugs in the library.</p>\r\n\r\n</body></html>','Graphics updates in ArrayFire v3.4.0','','inherit','closed','closed','','9172-revision-v1','','','2016-09-19 13:55:18','2016-09-19 17:55:18','',9172,'http://sandbox.arrayfire.com/9172-revision-v1/',0,'revision','',0),(9188,17729,'2016-09-19 14:06:19','2016-09-19 18:06:19','<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Untitled Document.md</title><style></style></head><body id=\"preview\">\r\n<p>This post outlines the new graphics features and updates that come along with ArrayFire v3.4.0 release.</p>\r\n<h5><a id=\"Deprecated_and_their_replacements_2\"></a>Deprecated and their replacements</h5>\r\n<h6><a id=\"C_API_4\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_plot</code> has been deprecated in favour of <code>af_draw_plot_2d</code> or <code>af_draw_plot_nd</code> where the function with <strong>2d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n<li><code>af_draw_plot3</code> has been deprecated in favour of <code>af_draw_plot_3d</code> or <code>af_draw_plot_nd</code> where the function with <strong>3d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n<li><code>af_draw_scatter</code> has been deprecated in favour of <code>af_draw_scatter_2d</code> or <code>af_draw_scatter_nd</code> where the function with <strong>2d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n<li><code>af_draw_scatter3</code> has been deprecated in favour of <code>af_draw_scatter_3d</code> or <code>af_draw_scatter_nd</code> where the function with <strong>3d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n</ul>\r\n<h6><a id=\"C_API_9\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::plot3</code> has been deprecated in favour of <code>af::Window::plot</code>, which is generalized plotting draw call that can handle both 2d and 3d data.</li>\r\n<li><code>af::Window::scatter3</code> has been deprecated in favour of <code>af::Window::scatter</code>, which is generalized plotting draw call that can handle both 2d and 3d data.</li>\r\n</ul>\r\n<h5><a id=\"Behavioral_Changes_13\"></a>Behavioral Changes</h5>\r\n<p>Prior to v3.4.0 release, all plotting functions used to compute the axes limits pertaining to corresponding data automatically. This additional step of computing axes is now not performed in any plotting functions. Instead, new API has been provided to set the axes limits of the corresponding graph plot. Following are the new API calls for setting axes limits.</p>\r\n<h6><a id=\"C_API_16\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_set_axes_limits_compute</code> computes the axes limits from given <code>af_array</code>\'s and then passed the same to draw call.</li>\r\n<li><code>af_set_axes_limits_2d</code> can be used to explicitly set the x and y axes limits to specific minimum and maximum values.</li>\r\n<li><code>af_set_axes_limits_3d</code> can be used to explicitly set the x, y &amp; z axes limits to specific minimum and maximum values.</li>\r\n</ul>\r\n<h6><a id=\"C_API_20\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::setAxesLimits</code></li>\r\n</ul>\r\n<p>Given below is an example showing the code changes one has to make to their C++ ArrayFire program that uses graphics functionality of ArrayFire.</p>\r\n\r\n<pre><code class=\"language-cpp\">\r\naf::Window myWindow(800, 800, \"2D Plot example: ArrayFire\");\r\n\r\narray Y;\r\nint sign = 1;\r\narray X = seq(-af::Pi, af::Pi, PRECISION);\r\narray noise = randn(X.dims(0))/5.f;\r\n\r\nmyWindow.grid(2, 1);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(0, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1, 1, true);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(1, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1.25, 1.25, true);\r\n\r\nfor (double val=0; !myWindow.close(); )\r\n{\r\n    Y = sin(X);\r\n\r\n    myWindow(0,0).plot(X, Y);\r\n    myWindow(1,0).scatter(X, Y + noise, AF_MARKER_POINT);\r\n\r\n    myWindow.show();\r\n\r\n    X = X + PRECISION * float(sign);\r\n    val += PRECISION * float(sign);\r\n\r\n    if (val>af::Pi) {\r\n        sign = -1;\r\n    } else if (val<-af::Pi) {\r\n        sign = 1;\r\n    }\r\n}\r\n</code></pre>\r\n<p>Above code should render as the following.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d-1024x927.png\" alt=\"plot2d\" width=\"742\" height=\"672\" class=\"alignnone size-large wp-image-9183\" /></a>\r\n\r\n<h5><a id=\"New_Features_56\"></a>New Features</h5>\r\n<p>Any new functions that have been already mentioned in the above two sections are not repeated below.</p>\r\n<h6><a id=\"C_API_58\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_nd</code> is generalized version that can handle both 2d and 3d <code>af_array</code>s.</li>\r\n<li><code>af_set_axes_titles</code> can be used to set the titles of axes of a given chart/graph.</li>\r\n</ul>\r\n<h6><a id=\"C_API_63\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::vectorField</code> is an overloaded and generalized vector field rendering function.</li>\r\n<li><code>af::Window::setAxesTitles</code> is used to set the chart/graph axes labels</li>\r\n</ul>\r\n<p>An example of how to render your data as a vector field has been provided in our examples code base which you can find <a>here href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/field.cpp\"</a>. This example shows a static and dynamic vector fields in multi-view mode. Given below is the screenshot of this example while running.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield-1024x550.png\" alt=\"vfield\" width=\"742\" height=\"399\" class=\"alignnone size-large wp-image-9185\" /></a>\r\n\r\n<p>Apart from the above new functions, each window/view supports overlay of different renderables now. If you are not already aware of what a view (graphics context) in ArrayFire is: Each draw call in ArrayFire is either rendered to whole window(single view) or a portion of the screen(multiview mode or grid mode), this subset portion of the whole window is called a view.\r\nThe following renerables support overlay if they are of same type of object (2d/3d).</p>\r\n<ul>\r\n<li>plot</li>\r\n<li>hist</li>\r\n<li>surface</li>\r\n<li>vector fields</li>\r\n</ul>\r\n<p>You can see an example screenshot of how overlay of plots looks like below.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\" alt=\"multipleplot\" width=\"1002\" height=\"828\" class=\"alignnone size-full wp-image-9182\" /></a>\r\n\r\n<p>Given below is another screen shot of mult-view mode which renders an image, 3d line plot, histogram and surface. You can find the corresponding example code <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/pde/swe.cpp\">here</a></p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe-1024x549.png\" alt=\"swe\" width=\"742\" height=\"398\" class=\"alignnone size-large wp-image-9184\" /></a>\r\n<h5><a id=\"Misc_Changes_74\"></a>Misc Changes</h5>\r\n<p>Removed <a href=\"http://glew.sourceforge.net/\">GLEW</a> and replaced with <a href=\"https://github.com/cginternals/glbinding\">glbinding</a>.</p>\r\n<h5><a id=\"Conclusion_77\"></a>Conclusion</h5>\r\n<p>We intend to add more graphcis functionality in future releases, keep checking for new posts from us. Please do try the new graphics functionality and kindly let us know if you find any bugs in the library.</p>\r\n\r\n</body></html>','Graphics updates in ArrayFire v3.4.0','','inherit','closed','closed','','9172-revision-v1','','','2016-09-19 14:06:19','2016-09-19 18:06:19','',9172,'http://sandbox.arrayfire.com/9172-revision-v1/',0,'revision','',0),(9189,17729,'2016-09-19 14:08:43','2016-09-19 18:08:43','<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Untitled Document.md</title><style></style></head><body id=\"preview\">\r\n<p>This post outlines the new graphics features and updates that come along with ArrayFire v3.4.0 release.</p>\r\n<h5><a id=\"Deprecated_and_their_replacements_2\"></a>Deprecated and their replacements</h5>\r\n<h6><a id=\"C_API_4\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_plot</code> has been deprecated in favour of <code>af_draw_plot_2d</code> or <code>af_draw_plot_nd</code> where the function with <strong>2d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n<li><code>af_draw_plot3</code> has been deprecated in favour of <code>af_draw_plot_3d</code> or <code>af_draw_plot_nd</code> where the function with <strong>3d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n<li><code>af_draw_scatter</code> has been deprecated in favour of <code>af_draw_scatter_2d</code> or <code>af_draw_scatter_nd</code> where the function with <strong>2d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n<li><code>af_draw_scatter3</code> has been deprecated in favour of <code>af_draw_scatter_3d</code> or <code>af_draw_scatter_nd</code> where the function with <strong>3d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n</ul>\r\n<h6><a id=\"C_API_9\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::plot3</code> has been deprecated in favour of <code>af::Window::plot</code>, which is generalized plotting draw call that can handle both 2d and 3d data.</li>\r\n<li><code>af::Window::scatter3</code> has been deprecated in favour of <code>af::Window::scatter</code>, which is generalized plotting draw call that can handle both 2d and 3d data.</li>\r\n</ul>\r\n<h5><a id=\"Behavioral_Changes_13\"></a>Behavioral Changes</h5>\r\n<p>Prior to v3.4.0 release, all plotting functions used to compute the axes limits pertaining to corresponding data automatically. This additional step of computing axes is now not performed in any plotting functions. Instead, new API has been provided to set the axes limits of the corresponding graph plot. Following are the new API calls for setting axes limits.</p>\r\n<h6><a id=\"C_API_16\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_set_axes_limits_compute</code> computes the axes limits from given <code>af_array</code>\'s and then passed the same to draw call.</li>\r\n<li><code>af_set_axes_limits_2d</code> can be used to explicitly set the x and y axes limits to specific minimum and maximum values.</li>\r\n<li><code>af_set_axes_limits_3d</code> can be used to explicitly set the x, y &amp; z axes limits to specific minimum and maximum values.</li>\r\n</ul>\r\n<h6><a id=\"C_API_20\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::setAxesLimits</code></li>\r\n</ul>\r\n<p>Given below is an example showing the code changes one has to make to their C++ ArrayFire program that uses graphics functionality of ArrayFire.</p>\r\n\r\n<pre><code class=\"language-cpp\">\r\naf::Window myWindow(800, 800, \"2D Plot example: ArrayFire\");\r\n\r\narray Y;\r\nint sign = 1;\r\narray X = seq(-af::Pi, af::Pi, PRECISION);\r\narray noise = randn(X.dims(0))/5.f;\r\n\r\nmyWindow.grid(2, 1);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(0, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1, 1, true);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(1, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1.25, 1.25, true);\r\n\r\nfor (double val=0; !myWindow.close(); )\r\n{\r\n    Y = sin(X);\r\n\r\n    myWindow(0,0).plot(X, Y);\r\n    myWindow(1,0).scatter(X, Y + noise, AF_MARKER_POINT);\r\n\r\n    myWindow.show();\r\n\r\n    X = X + PRECISION * float(sign);\r\n    val += PRECISION * float(sign);\r\n\r\n    if (val>af::Pi) {\r\n        sign = -1;\r\n    } else if (val<-af::Pi) {\r\n        sign = 1;\r\n    }\r\n}\r\n</code></pre>\r\n<p>Above code should render as the following.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d-1024x927.png\" alt=\"plot2d\" width=\"742\" height=\"672\" class=\"alignnone size-large wp-image-9183\" /></a>\r\n\r\n<h5><a id=\"New_Features_56\"></a>New Features</h5>\r\n<p>Any new functions that have been already mentioned in the above two sections are not repeated below.</p>\r\n<h6><a id=\"C_API_58\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_nd</code> is generalized version that can handle both 2d and 3d <code>af_array</code>s.</li>\r\n<li><code>af_set_axes_titles</code> can be used to set the titles of axes of a given chart/graph.</li>\r\n</ul>\r\n<h6><a id=\"C_API_63\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::vectorField</code> is an overloaded and generalized vector field rendering function.</li>\r\n<li><code>af::Window::setAxesTitles</code> is used to set the chart/graph axes labels</li>\r\n</ul>\r\n<p>An example of how to render your data as a vector field has been provided in our examples code base which you can find <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/field.cpp\" target=\"_blank\">here</a>. This example shows a static and dynamic vector fields in multi-view mode. Given below is the screenshot of this example while running.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield-1024x550.png\" alt=\"vfield\" width=\"742\" height=\"399\" class=\"alignnone size-large wp-image-9185\" /></a>\r\n\r\n<p>Apart from the above new functions, each window/view supports overlay of different renderables now. If you are not already aware of what a view (graphics context) in ArrayFire is: Each draw call in ArrayFire is either rendered to whole window(single view) or a portion of the screen(multiview mode or grid mode), this subset portion of the whole window is called a view.\r\nThe following renerables support overlay if they are of same type of object (2d/3d).</p>\r\n<ul>\r\n<li>plot</li>\r\n<li>hist</li>\r\n<li>surface</li>\r\n<li>vector fields</li>\r\n</ul>\r\n<p>You can see an example screenshot of how overlay of plots looks like below.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\" alt=\"multipleplot\" width=\"1002\" height=\"828\" class=\"alignnone size-full wp-image-9182\" /></a>\r\n\r\n<p>Given below is another screen shot of mult-view mode which renders an image, 3d line plot, histogram and surface. You can find the corresponding example code <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/pde/swe.cpp\" target=\"_blank\">here</a>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe-1024x549.png\" alt=\"swe\" width=\"742\" height=\"398\" class=\"alignnone size-large wp-image-9184\" /></a>\r\n<h5><a id=\"Misc_Changes_74\"></a>Misc Changes</h5>\r\n<p>Removed <a href=\"http://glew.sourceforge.net/\">GLEW</a> and replaced with <a href=\"https://github.com/cginternals/glbinding\">glbinding</a>.</p>\r\n<h5><a id=\"Conclusion_77\"></a>Conclusion</h5>\r\n<p>We intend to add more graphcis functionality in future releases, keep checking for new posts from us. Please do try the new graphics functionality and kindly let us know if you find any bugs in the library.</p>\r\n\r\n</body></html>','Graphics updates in ArrayFire v3.4.0','','inherit','closed','closed','','9172-revision-v1','','','2016-09-19 14:08:43','2016-09-19 18:08:43','',9172,'http://sandbox.arrayfire.com/9172-revision-v1/',0,'revision','',0),(9190,11,'2016-09-21 22:13:43','2016-09-22 02:13:43','In ArrayFire v3.4, we have added support for sparse matrices, which greatly reduce the memory footprint on GPUs and accelerated devices for many applications.\r\n\r\n[custom_headline type=\"left\" level=\"h3\" looks_like=\"h3\"]Sparse Data Structure[/custom_headline]\r\n\r\nA sparse data structure is one where all the non-zero elements are not stored. Sparse matrices are useful when the number of zero-values elements are much greater than the number of non-zero elements (i.e. the sparsity of the matrix is high). A sparse data structure is generally stored as 3 arrays:\r\n<ul>\r\n 	<li>A data or values array containing all the non-zero elements</li>\r\n 	<li>A vector for row indices (based on storage format)</li>\r\n 	<li>A vector for column indices (based on storage format)</li>\r\n</ul>\r\nThere are many ways to store sparse matrices, the most prominent of which are:\r\n<ul>\r\n 	<li><a href=\"https://en.wikipedia.org/wiki/Sparse_matrix#Compressed_sparse_row_.28CSR.2C_CRS_or_Yale_format.29\">Compressed Sparse Row</a> (CSR)</li>\r\n 	<li><a href=\"https://en.wikipedia.org/wiki/Sparse_matrix#Compressed_sparse_column_.28CSC_or_CCS.29\">Compressed Storage Column</a> (CSC)</li>\r\n 	<li><a href=\"https://en.wikipedia.org/wiki/Sparse_matrix#Coordinate_list_.28COO.29\">Coordinate Format</a> (COO)</li>\r\n</ul>\r\nArrayFire supports CSR and COO format, with support for CSC coming in future releases.\r\n\r\nA more detailed description of sparse matrices can be found on <a href=\"https://en.wikipedia.org/wiki/Sparse_matrix\">Wikipedia</a>.\r\n\r\n[custom_headline type=\"left\" level=\"h3\" looks_like=\"h3\"]Sparse Arrays in ArrayFire[/custom_headline]\r\n\r\nIn ArrayFire, sparse arrays use the same user-facing object, af::array. This makes working with sparse arrays very seamless. We have added a function <a href=\"http://arrayfire.org/docs/group__method__mat.htm#ga5945f95549bae25f75694a69d98ca584\">af::array::issparse()</a> that allows users to check if an array is sparse or not. Although externally, there is no difference between a sparse and dense array, internally, the sparse array is stored as 3 independent arrays along with other metadata. These arrays, as well as other properties, can be fetched using the <a href=\"http://arrayfire.org/docs/group__sparse__func.htm\">sparse functions</a>.\r\n\r\nIn v3.4, the following features are supported for sparse arrays:\r\n<ul>\r\n 	<li><a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm\">Creation for sparse arrays.</a>\r\n<ul>\r\n 	<li><a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gae4621e58bfaf6d80668309824fde86c0\">From 3 (data, row, column) sparse host or device memory vectors.</a></li>\r\n 	<li><a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gae9a843c7e93b05e6b090ca32b271ebe9\">From 3 (data, row, column) sparse af::arrays.</a></li>\r\n 	<li><a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gac0d367d8c9daf27b36a6981bbfcdb970\">From dense af::array.</a></li>\r\n 	<li>To create a sparse array from a host or device dense array, first create a dense af::array, and then pass it to create sparse af::array.</li>\r\n</ul>\r\n</li>\r\n 	<li><a href=\"http://arrayfire.org/docs/group__sparse__func__convert__to.htm\">Storage format conversions.</a>\r\n<ul>\r\n 	<li><a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gac0d367d8c9daf27b36a6981bbfcdb970\">Dense to CSR/COO.</a></li>\r\n 	<li><a href=\"http://arrayfire.org/docs/group__sparse__func__dense.htm\">CSR/COO to dense.</a></li>\r\n</ul>\r\n</li>\r\n 	<li><a href=\"http://arrayfire.org/docs/group__blas__func__matmul.htm#ga63306b6ed967bd1055086db862fe885b\">Sparse-Dense Matrix Multiplication (SPMM/SPMV)</a>\r\n<ul>\r\n 	<li>Sparse Matrix - Dense Matrix</li>\r\n 	<li>Sparse Matrix - Dense Vector</li>\r\n 	<li>Options for Sparse Matrix to be transposed</li>\r\n</ul>\r\n</li>\r\n</ul>\r\nThe Sparse-Dense Matrix Multiplication is implemented within the same <a href=\"http://arrayfire.org/docs/group__blas__func__matmul.htm#ga63306b6ed967bd1055086db862fe885b\">af::matmul()</a> function used for dense arrays.\r\n\r\nAs with all ArrayFire features, sparse support is available across all backends (CUDA, OpenCL, and CPU) and supported devices and architectures.\r\n\r\n[custom_headline type=\"left\" level=\"h3\" looks_like=\"h3\"]Example[/custom_headline]\r\n\r\nIn this section, we showcase the difference in running a conjugate gradient solver with a dense array and a sparse array. The inputs are the same for each example. In the sparse case, the \"A\" matrix is converted to sparse.\r\n<pre class=\"\">\r\n#include <arrayfire.h>\r\n#include <iostream>\r\n\r\nusing namespace af;\r\n\r\nstatic size_t dimension = 16 * 1024;\r\nstatic const int maxIter = 10;\r\nstatic const int sparsityFactor = 7;\r\n\r\nstatic array A;\r\nstatic array spA;  // Sparse A\r\nstatic array x0;\r\nstatic array b;\r\n\r\nvoid setupInputs()\r\n{\r\n    // Generate a random input: A\r\n    array T = randu(dimension, dimension, f32);\r\n    // Create 0s in input.\r\n    // Anything that is no divisible by sparsityFactor will become 0.\r\n    A = floor(T * 1000);\r\n    A = A * ((A % sparsityFactor) == 0) / 1000;\r\n    // Make it positive definite\r\n    A = transpose(A) + A + A.dims(0)*identity(A.dims(0), A.dims(0), f32);\r\n\r\n    // Make A sparse as spA\r\n    spA = sparse(A);\r\n\r\n    // Generate x0: Random guess\r\n    x0 = randu(A.dims(0), f32);\r\n\r\n    //Generate b\r\n    b = matmul(A, x0);\r\n\r\n    std::cout << \"Sparsity of A = \"\r\n              << 100.f * (float)sparseGetNNZ(spA) / (float)spA.elements()\r\n              << std::endl;\r\n    std::cout << \"Memory Usage of A = \" <<  A.bytes() << \" bytes\" << std::endl;\r\n    std::cout << \"Memory Usage of spA = \"\r\n              << sparseGetValues(spA).bytes()\r\n               + sparseGetRowIdx(spA).bytes()\r\n               + sparseGetColIdx(spA).bytes()\r\n              << \" bytes\" << std::endl;\r\n}\r\n\r\nvoid conjugateGradient(const af::array in)\r\n{\r\n    array x = constant(0, b.dims(), f32);\r\n    array r = b - matmul(in, x);\r\n    array p = r;\r\n\r\n    for (int i = 0; i < maxIter; ++i) {\r\n        array Ap = matmul(in, p);\r\n        array alpha_num = dot(r, r);\r\n        array alpha_den = dot(p, Ap);\r\n        array alpha = alpha_num/alpha_den;\r\n        r = r - tile(alpha, Ap.dims())*Ap;\r\n        x = x + tile(alpha, Ap.dims())*p;\r\n        array beta_num = dot(r, r);\r\n        array beta = beta_num/alpha_num;\r\n        p = r + tile(beta, p.dims())*p;\r\n    }\r\n    array res = x0 - x;\r\n\r\n    std::cout << \"Final difference in solutions:\\n\";\r\n    af_print(dot(res, res));\r\n}\r\n\r\nint main(int argc, char *argv[])\r\n{\r\n    af::info();\r\n    setupInputs();\r\n\r\n    std::cout << \"Verifying Dense Conjugate Gradient:\" << std::endl;\r\n    conjugateGradient(A);\r\n\r\n    std::cout << \"Verifying Sparse Conjugate Gradient:\" << std::endl;\r\n    conjugateGradient(spA);\r\n\r\n    return 0;\r\n}\r\n</pre>\r\n[custom_headline type=\"left\" level=\"h3\" looks_like=\"h3\"]Performance and Memory Footprint[/custom_headline]\r\n\r\nUsing the CUDA backend on a Tesla K40c, the conjugate gradient function took 64.94ms for the dense matrix and 39.31ms for the sparse Matrix. That is almost a 2x speedup!\r\n\r\nWith a <code>sparsityFactor</code> of 7, the sparsity of A is about 26.38%. This means a tremendous amount of memory is conserved. For a floating point matrix of size 16M x 16M, a dense matrix uses 1 GB of memory while the sparse array, stored in CSR format, only uses 527 MB. That is a 2x savings on memory usage!\r\n<table>\r\n<tbody>\r\n<tr>\r\n<th>Matrix Elements</th>\r\n<th>Memory Size (Dense)</th>\r\n<th>Memory Size (Sparse)</th>\r\n<th>CG Time (Dense)</th>\r\n<th>CG Time (Sparse)</th>\r\n</tr>\r\n<tr>\r\n<th>16M x 16M</th>\r\n<th>1024 MB</th>\r\n<th>527 MB</th>\r\n<th>64.94ms</th>\r\n<th>39.31ms</th>\r\n</tr>\r\n<tr>\r\n<th>4M x 4M</th>\r\n<th>64 MB</th>\r\n<th>33 MB</th>\r\n<th>4.752ms</th>\r\n<th>3.935ms</th>\r\n</tr>\r\n</tbody>\r\n</table>\r\nSparse arrays will now let users store more data on the GPU while allowing faster computation, thus allowing to solve for bigger, more complex problems.\r\n\r\n[custom_headline type=\"left\" level=\"h3\" looks_like=\"h3\"]Download[/custom_headline]\r\n\r\nArrayFire v3.4 can be downloaded from these locations:\r\n<ul>\r\n 	<li><a href=\"http://sandbox.arrayfire.com/download/\">Binaries</a></li>\r\n 	<li><a href=\"https://github.com/arrayfire\">Source code</a></li>\r\n</ul>\r\n[custom_headline type=\"left\" level=\"h3\" looks_like=\"h3\"]Community[/custom_headline]\r\n\r\nArrayFire is continually improving through the addition of new sparse matrix enhancements. We welcome your feedback:\r\n<ul>\r\n 	<li>General discussion forums on the <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">ArrayFire Google Group</a></li>\r\n 	<li>Live discussion chat on the <a href=\"https://gitter.im/arrayfire/arrayfire?utm_source=badge&amp;utm_medium=badge&amp;utm_campaign=pr-badge&amp;utm_content=badge\">ArrayFire Gitter</a></li>\r\n 	<li>Issue reports on the <a href=\"https://github.com/arrayfire/arrayfire/issues\">ArrayFire GitHub</a></li>\r\n</ul>\r\nFinally, as you find success with ArrayFire, we invite you to contribute a post to this blog to share with the broader community. Email <a href=\"mailto:scott@arrayfire.com\">scott@arrayfire.com</a> to contribute to this blog.','Sparse Matrices in ArrayFire v3.4','','publish','open','closed','','sparse-matrices-in-arrayfire-v3-4','','','2016-09-21 22:41:40','2016-09-22 02:41:40','',0,'http://sandbox.arrayfire.com/?p=9190',0,'post','',0),(9191,17729,'2016-09-19 14:09:28','2016-09-19 18:09:28','<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Untitled Document.md</title><style></style></head><body id=\"preview\">\r\n<p>This post outlines the new graphics features and updates that come along with ArrayFire v3.4.0 release.</p>\r\n<h5><a id=\"Deprecated_and_their_replacements_2\"></a>Deprecated and their replacements</h5>\r\n<h6><a id=\"C_API_4\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_plot</code> has been deprecated in favour of <code>af_draw_plot_2d</code> or <code>af_draw_plot_nd</code> where the function with <strong>2d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n<li><code>af_draw_plot3</code> has been deprecated in favour of <code>af_draw_plot_3d</code> or <code>af_draw_plot_nd</code> where the function with <strong>3d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n<li><code>af_draw_scatter</code> has been deprecated in favour of <code>af_draw_scatter_2d</code> or <code>af_draw_scatter_nd</code> where the function with <strong>2d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n<li><code>af_draw_scatter3</code> has been deprecated in favour of <code>af_draw_scatter_3d</code> or <code>af_draw_scatter_nd</code> where the function with <strong>3d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n</ul>\r\n<h6><a id=\"C_API_9\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::plot3</code> has been deprecated in favour of <code>af::Window::plot</code>, which is generalized plotting draw call that can handle both 2d and 3d data.</li>\r\n<li><code>af::Window::scatter3</code> has been deprecated in favour of <code>af::Window::scatter</code>, which is generalized plotting draw call that can handle both 2d and 3d data.</li>\r\n</ul>\r\n<h5><a id=\"Behavioral_Changes_13\"></a>Behavioral Changes</h5>\r\n<p>Prior to v3.4.0 release, all plotting functions used to compute the axes limits pertaining to corresponding data automatically. This additional step of computing axes is now not performed in any plotting functions. Instead, new API has been provided to set the axes limits of the corresponding graph plot. Following are the new API calls for setting axes limits.</p>\r\n<h6><a id=\"C_API_16\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_set_axes_limits_compute</code> computes the axes limits from given <code>af_array</code>\'s and then passed the same to draw call.</li>\r\n<li><code>af_set_axes_limits_2d</code> can be used to explicitly set the x and y axes limits to specific minimum and maximum values.</li>\r\n<li><code>af_set_axes_limits_3d</code> can be used to explicitly set the x, y &amp; z axes limits to specific minimum and maximum values.</li>\r\n</ul>\r\n<h6><a id=\"C_API_20\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::setAxesLimits</code></li>\r\n</ul>\r\n<p>Given below is an example showing the code changes one has to make to their C++ ArrayFire program that uses graphics functionality of ArrayFire.</p>\r\n\r\n<pre><code class=\"language-cpp\">\r\naf::Window myWindow(800, 800, \"2D Plot example: ArrayFire\");\r\n\r\narray Y;\r\nint sign = 1;\r\narray X = seq(-af::Pi, af::Pi, PRECISION);\r\narray noise = randn(X.dims(0))/5.f;\r\n\r\nmyWindow.grid(2, 1);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(0, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1, 1, true);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(1, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1.25, 1.25, true);\r\n\r\nfor (double val=0; !myWindow.close(); )\r\n{\r\n    Y = sin(X);\r\n\r\n    myWindow(0,0).plot(X, Y);\r\n    myWindow(1,0).scatter(X, Y + noise, AF_MARKER_POINT);\r\n\r\n    myWindow.show();\r\n\r\n    X = X + PRECISION * float(sign);\r\n    val += PRECISION * float(sign);\r\n\r\n    if (val>af::Pi) {\r\n        sign = -1;\r\n    } else if (val<-af::Pi) {\r\n        sign = 1;\r\n    }\r\n}\r\n</code></pre>\r\n<p>Above code should render as the following.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d-1024x927.png\" alt=\"plot2d\" width=\"742\" height=\"672\" class=\"alignnone size-large wp-image-9183\" /></a>\r\n\r\n<h5><a id=\"New_Features_56\"></a>New Features</h5>\r\n<p>Any new functions that have been already mentioned in the above two sections are not repeated below.</p>\r\n<h6><a id=\"C_API_58\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_nd</code> is generalized version that can handle both 2d and 3d <code>af_array</code>s.</li>\r\n<li><code>af_set_axes_titles</code> can be used to set the titles of axes of a given chart/graph.</li>\r\n</ul>\r\n<h6><a id=\"C_API_63\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::vectorField</code> is an overloaded and generalized vector field rendering function.</li>\r\n<li><code>af::Window::setAxesTitles</code> is used to set the chart/graph axes labels</li>\r\n</ul>\r\n<p>An example of how to render your data as a vector field has been provided in our examples which you can find <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/field.cpp\" target=\"_blank\">here</a>. This example shows a static and dynamic vector fields in multi-view mode. Given below is the screenshot of this example while running.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield-1024x550.png\" alt=\"vfield\" width=\"742\" height=\"399\" class=\"alignnone size-large wp-image-9185\" /></a>\r\n\r\n<p>Apart from the above new functions, each window/view supports overlay of different renderables now. If you are not already aware of what a view (graphics context) in ArrayFire is: Each draw call in ArrayFire is either rendered to whole window(single view) or a portion of the screen(multiview mode or grid mode), this subset portion of the whole window is called a view.\r\nThe following renerables support overlay if they are of same type of object (2d/3d).</p>\r\n<ul>\r\n<li>plot</li>\r\n<li>hist</li>\r\n<li>surface</li>\r\n<li>vector fields</li>\r\n</ul>\r\n<p>You can see an example screenshot of how overlay of plots looks like below.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\" alt=\"multipleplot\" width=\"1002\" height=\"828\" class=\"alignnone size-full wp-image-9182\" /></a>\r\n\r\n<p>Given below is another screen shot of mult-view mode which renders an image, 3d line plot, histogram and surface. You can find the corresponding example code <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/pde/swe.cpp\" target=\"_blank\">here</a>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe-1024x549.png\" alt=\"swe\" width=\"742\" height=\"398\" class=\"alignnone size-large wp-image-9184\" /></a>\r\n<h5><a id=\"Misc_Changes_74\"></a>Misc Changes</h5>\r\n<p>Removed <a href=\"http://glew.sourceforge.net/\">GLEW</a> and replaced with <a href=\"https://github.com/cginternals/glbinding\">glbinding</a>.</p>\r\n<h5><a id=\"Conclusion_77\"></a>Conclusion</h5>\r\n<p>We intend to add more graphcis functionality in future releases, keep checking for new posts from us. Please do try the new graphics functionality and kindly let us know if you find any bugs in the library.</p>\r\n\r\n</body></html>','Graphics updates in ArrayFire v3.4.0','','inherit','closed','closed','','9172-revision-v1','','','2016-09-19 14:09:28','2016-09-19 18:09:28','',9172,'http://sandbox.arrayfire.com/9172-revision-v1/',0,'revision','',0),(9192,17729,'2016-09-19 14:10:50','2016-09-19 18:10:50','<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Untitled Document.md</title><style></style></head><body id=\"preview\">\r\n<p>This post outlines the new graphics features and updates that come along with ArrayFire v3.4.0 release.</p>\r\n<h5><a id=\"Deprecated_and_their_replacements_2\"></a>Deprecated and their replacements</h5>\r\n<h6><a id=\"C_API_4\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_plot</code> has been deprecated in favour of <code>af_draw_plot_2d</code> or <code>af_draw_plot_nd</code> where the function with <strong>2d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n<li><code>af_draw_plot3</code> has been deprecated in favour of <code>af_draw_plot_3d</code> or <code>af_draw_plot_nd</code> where the function with <strong>3d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n<li><code>af_draw_scatter</code> has been deprecated in favour of <code>af_draw_scatter_2d</code> or <code>af_draw_scatter_nd</code> where the function with <strong>2d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n<li><code>af_draw_scatter3</code> has been deprecated in favour of <code>af_draw_scatter_3d</code> or <code>af_draw_scatter_nd</code> where the function with <strong>3d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n</ul>\r\n<h6><a id=\"C_API_9\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::plot3</code> has been deprecated in favour of <code>af::Window::plot</code>, which is generalized plotting draw call that can handle both 2d and 3d data.</li>\r\n<li><code>af::Window::scatter3</code> has been deprecated in favour of <code>af::Window::scatter</code>, which is generalized plotting draw call that can handle both 2d and 3d data.</li>\r\n</ul>\r\n<h5><a id=\"Behavioral_Changes_13\"></a>Behavioral Changes</h5>\r\n<p>Prior to v3.4.0 release, all plotting functions used to compute the axes limits pertaining to corresponding data automatically. This additional step of computing axes is now not performed in any plotting functions. Instead, new API has been provided to set the axes limits of the corresponding graph plot. Following are the new API calls for setting axes limits.</p>\r\n<h6><a id=\"C_API_16\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_set_axes_limits_compute</code> computes the axes limits from given <code>af_array</code>\'s and then passed the same to draw call.</li>\r\n<li><code>af_set_axes_limits_2d</code> can be used to explicitly set the x and y axes limits to specific minimum and maximum values.</li>\r\n<li><code>af_set_axes_limits_3d</code> can be used to explicitly set the x, y &amp; z axes limits to specific minimum and maximum values.</li>\r\n</ul>\r\n<h6><a id=\"C_API_20\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::setAxesLimits</code></li>\r\n</ul>\r\n<p>Given below is an example showing the code changes one has to make to their C++ ArrayFire program that uses graphics functionality of ArrayFire.</p>\r\n\r\n<pre><code class=\"language-cpp\">\r\naf::Window myWindow(800, 800, \"2D Plot example: ArrayFire\");\r\n\r\narray Y;\r\nint sign = 1;\r\narray X = seq(-af::Pi, af::Pi, PRECISION);\r\narray noise = randn(X.dims(0))/5.f;\r\n\r\nmyWindow.grid(2, 1);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(0, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1, 1, true);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(1, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1.25, 1.25, true);\r\n\r\nfor (double val=0; !myWindow.close(); )\r\n{\r\n    Y = sin(X);\r\n\r\n    myWindow(0,0).plot(X, Y);\r\n    myWindow(1,0).scatter(X, Y + noise, AF_MARKER_POINT);\r\n\r\n    myWindow.show();\r\n\r\n    X = X + PRECISION * float(sign);\r\n    val += PRECISION * float(sign);\r\n\r\n    if (val>af::Pi) {\r\n        sign = -1;\r\n    } else if (val<-af::Pi) {\r\n        sign = 1;\r\n    }\r\n}\r\n</code></pre>\r\n<p>Above code should render as the following and you can find the complete example <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/plot2d.cpp\" target=\"_blank\">here</a>.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d-1024x927.png\" alt=\"plot2d\" width=\"742\" height=\"672\" class=\"alignnone size-large wp-image-9183\" /></a>\r\n\r\n<h5><a id=\"New_Features_56\"></a>New Features</h5>\r\n<p>Any new functions that have been already mentioned in the above two sections are not repeated below.</p>\r\n<h6><a id=\"C_API_58\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_nd</code> is generalized version that can handle both 2d and 3d <code>af_array</code>s.</li>\r\n<li><code>af_set_axes_titles</code> can be used to set the titles of axes of a given chart/graph.</li>\r\n</ul>\r\n<h6><a id=\"C_API_63\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::vectorField</code> is an overloaded and generalized vector field rendering function.</li>\r\n<li><code>af::Window::setAxesTitles</code> is used to set the chart/graph axes labels</li>\r\n</ul>\r\n<p>An example of how to render your data as a vector field has been provided in our examples which you can find <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/field.cpp\" target=\"_blank\">here</a>. This example shows a static and dynamic vector fields in multi-view mode. Given below is the screenshot of this example while running.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield-1024x550.png\" alt=\"vfield\" width=\"742\" height=\"399\" class=\"alignnone size-large wp-image-9185\" /></a>\r\n\r\n<p>Apart from the above new functions, each window/view supports overlay of different renderables now. If you are not already aware of what a view (graphics context) in ArrayFire is: Each draw call in ArrayFire is either rendered to whole window(single view) or a portion of the screen(multiview mode or grid mode), this subset portion of the whole window is called a view.\r\nThe following renerables support overlay if they are of same type of object (2d/3d).</p>\r\n<ul>\r\n<li>plot</li>\r\n<li>hist</li>\r\n<li>surface</li>\r\n<li>vector fields</li>\r\n</ul>\r\n<p>You can see an example screenshot of how overlay of plots looks like below.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\" alt=\"multipleplot\" width=\"1002\" height=\"828\" class=\"alignnone size-full wp-image-9182\" /></a>\r\n\r\n<p>Given below is another screen shot of mult-view mode which renders an image, 3d line plot, histogram and surface. You can find the corresponding example code <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/pde/swe.cpp\" target=\"_blank\">here</a>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe-1024x549.png\" alt=\"swe\" width=\"742\" height=\"398\" class=\"alignnone size-large wp-image-9184\" /></a>\r\n<h5><a id=\"Misc_Changes_74\"></a>Misc Changes</h5>\r\n<p>Removed <a href=\"http://glew.sourceforge.net/\">GLEW</a> and replaced with <a href=\"https://github.com/cginternals/glbinding\">glbinding</a>.</p>\r\n<h5><a id=\"Conclusion_77\"></a>Conclusion</h5>\r\n<p>We intend to add more graphcis functionality in future releases, keep checking for new posts from us. Please do try the new graphics functionality and kindly let us know if you find any bugs in the library.</p>\r\n\r\n</body></html>','Graphics updates in ArrayFire v3.4.0','','inherit','closed','closed','','9172-revision-v1','','','2016-09-19 14:10:50','2016-09-19 18:10:50','',9172,'http://sandbox.arrayfire.com/9172-revision-v1/',0,'revision','',0),(9193,17729,'2016-09-19 14:12:51','2016-09-19 18:12:51','<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Untitled Document.md</title><style></style></head><body id=\"preview\">\r\n<p>This post outlines the new graphics features and updates that come along with ArrayFire v3.4.0 release.</p>\r\n<h5><a id=\"Deprecated_and_their_replacements_2\"></a>Deprecated and their replacements</h5>\r\n<h6><a id=\"C_API_4\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_plot</code> has been deprecated in favour of <code>af_draw_plot_2d</code> or <code>af_draw_plot_nd</code> where the function with <strong>2d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n<li><code>af_draw_plot3</code> has been deprecated in favour of <code>af_draw_plot_3d</code> or <code>af_draw_plot_nd</code> where the function with <strong>3d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n<li><code>af_draw_scatter</code> has been deprecated in favour of <code>af_draw_scatter_2d</code> or <code>af_draw_scatter_nd</code> where the function with <strong>2d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n<li><code>af_draw_scatter3</code> has been deprecated in favour of <code>af_draw_scatter_3d</code> or <code>af_draw_scatter_nd</code> where the function with <strong>3d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n</ul>\r\n<h6><a id=\"C_API_9\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::plot3</code> has been deprecated in favour of <code>af::Window::plot</code>, which is generalized plotting draw call that can handle both 2d and 3d data.</li>\r\n<li><code>af::Window::scatter3</code> has been deprecated in favour of <code>af::Window::scatter</code>, which is generalized plotting draw call that can handle both 2d and 3d data.</li>\r\n</ul>\r\n<h5><a id=\"Behavioral_Changes_13\"></a>Behavioral Changes</h5>\r\n<p>Prior to v3.4.0 release, all plotting functions used to compute the axes limits pertaining to corresponding data automatically. This additional step of computing axes is now not performed in any plotting functions. Instead, new API has been provided to set the axes limits of the corresponding graph plot. Following are the new API calls for setting axes limits.</p>\r\n<h6><a id=\"C_API_16\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_set_axes_limits_compute</code> computes the axes limits from given <code>af_array</code>\'s and then passed the same to draw call.</li>\r\n<li><code>af_set_axes_limits_2d</code> can be used to explicitly set the x and y axes limits to specific minimum and maximum values.</li>\r\n<li><code>af_set_axes_limits_3d</code> can be used to explicitly set the x, y &amp; z axes limits to specific minimum and maximum values.</li>\r\n</ul>\r\n<h6><a id=\"C_API_20\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::setAxesLimits</code></li>\r\n</ul>\r\n<p>Given below is an example showing the code changes one has to make to their C++ ArrayFire program that uses graphics functionality of ArrayFire.</p>\r\n\r\n<pre><code class=\"language-cpp\">\r\naf::Window myWindow(800, 800, \"2D Plot example: ArrayFire\");\r\n\r\narray Y;\r\nint sign = 1;\r\narray X = seq(-af::Pi, af::Pi, PRECISION);\r\narray noise = randn(X.dims(0))/5.f;\r\n\r\nmyWindow.grid(2, 1);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(0, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1, 1, true);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(1, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1.25, 1.25, true);\r\n\r\nfor (double val=0; !myWindow.close(); )\r\n{\r\n    Y = sin(X);\r\n\r\n    myWindow(0,0).plot(X, Y);\r\n    myWindow(1,0).scatter(X, Y + noise, AF_MARKER_POINT);\r\n\r\n    myWindow.show();\r\n\r\n    X = X + PRECISION * float(sign);\r\n    val += PRECISION * float(sign);\r\n\r\n    if (val>af::Pi) {\r\n        sign = -1;\r\n    } else if (val<-af::Pi) {\r\n        sign = 1;\r\n    }\r\n}\r\n</code></pre>\r\n<p>Above code should render as the following and you can find the complete example <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/plot2d.cpp\" target=\"_blank\">here</a>.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d-1024x927.png\" alt=\"plot2d\" width=\"742\" height=\"672\" class=\"alignnone size-large wp-image-9183\" /></a>\r\n\r\n<h5><a id=\"New_Features_56\"></a>New Features</h5>\r\n<p>Any new functions that have been already mentioned in the above two sections are not repeated below.</p>\r\n<h6><a id=\"C_API_58\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_nd</code> is generalized version that can handle both 2d and 3d <code>af_array</code>s.</li>\r\n<li><code>af_set_axes_titles</code> can be used to set the titles of axes of a given chart/graph.</li>\r\n</ul>\r\n<h6><a id=\"C_API_63\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::vectorField</code> is an overloaded and generalized vector field rendering function.</li>\r\n<li><code>af::Window::setAxesTitles</code> is used to set the chart/graph axes labels</li>\r\n</ul>\r\n<p>An example of how to render your data as a vector field has been provided in our examples which you can find <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/field.cpp\" target=\"_blank\">here</a>. This example shows a static and dynamic vector field in multi-view mode. Given below is the screenshot of this example while running.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield-1024x550.png\" alt=\"vfield\" width=\"742\" height=\"399\" class=\"alignnone size-large wp-image-9185\" /></a>\r\n\r\n<p>Apart from the above new functions, each window/view supports overlay of different renderables now. If you are not already aware of what a view (graphics context) in ArrayFire is: Each draw call in ArrayFire is either rendered to whole window(single view) or a portion of the screen(multiview mode or grid mode), this subset portion of the whole window is called a view.\r\n\r\n<p>Given below is another screen shot of mult-view mode which renders an image, 3d line plot, histogram and surface. You can find the corresponding example code <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/pde/swe.cpp\" target=\"_blank\">here</a>\r\n\r\nThe following renerables support overlay if they are of same type of object (2d/3d).</p>\r\n<ul>\r\n<li>plot</li>\r\n<li>hist</li>\r\n<li>surface</li>\r\n<li>vector fields</li>\r\n</ul>\r\n<p>You can see an example screenshot of how overlay of plots looks like below.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\" alt=\"multipleplot\" width=\"1002\" height=\"828\" class=\"alignnone size-full wp-image-9182\" /></a>\r\n\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe-1024x549.png\" alt=\"swe\" width=\"742\" height=\"398\" class=\"alignnone size-large wp-image-9184\" /></a>\r\n<h5><a id=\"Misc_Changes_74\"></a>Misc Changes</h5>\r\n<p>Removed <a href=\"http://glew.sourceforge.net/\">GLEW</a> and replaced with <a href=\"https://github.com/cginternals/glbinding\">glbinding</a>.</p>\r\n<h5><a id=\"Conclusion_77\"></a>Conclusion</h5>\r\n<p>We intend to add more graphcis functionality in future releases, keep checking for new posts from us. Please do try the new graphics functionality and kindly let us know if you find any bugs in the library.</p>\r\n\r\n</body></html>','Graphics updates in ArrayFire v3.4.0','','inherit','closed','closed','','9172-revision-v1','','','2016-09-19 14:12:51','2016-09-19 18:12:51','',9172,'http://sandbox.arrayfire.com/9172-revision-v1/',0,'revision','',0),(9194,17729,'2016-09-19 14:13:32','2016-09-19 18:13:32','<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Untitled Document.md</title><style></style></head><body id=\"preview\">\r\n<p>This post outlines the new graphics features and updates that come along with ArrayFire v3.4.0 release.</p>\r\n<h5><a id=\"Deprecated_and_their_replacements_2\"></a>Deprecated and their replacements</h5>\r\n<h6><a id=\"C_API_4\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_plot</code> has been deprecated in favour of <code>af_draw_plot_2d</code> or <code>af_draw_plot_nd</code> where the function with <strong>2d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n<li><code>af_draw_plot3</code> has been deprecated in favour of <code>af_draw_plot_3d</code> or <code>af_draw_plot_nd</code> where the function with <strong>3d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n<li><code>af_draw_scatter</code> has been deprecated in favour of <code>af_draw_scatter_2d</code> or <code>af_draw_scatter_nd</code> where the function with <strong>2d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n<li><code>af_draw_scatter3</code> has been deprecated in favour of <code>af_draw_scatter_3d</code> or <code>af_draw_scatter_nd</code> where the function with <strong>3d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n</ul>\r\n<h6><a id=\"C_API_9\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::plot3</code> has been deprecated in favour of <code>af::Window::plot</code>, which is generalized plotting draw call that can handle both 2d and 3d data.</li>\r\n<li><code>af::Window::scatter3</code> has been deprecated in favour of <code>af::Window::scatter</code>, which is generalized plotting draw call that can handle both 2d and 3d data.</li>\r\n</ul>\r\n<h5><a id=\"Behavioral_Changes_13\"></a>Behavioral Changes</h5>\r\n<p>Prior to v3.4.0 release, all plotting functions used to compute the axes limits pertaining to corresponding data automatically. This additional step of computing axes is now not performed in any plotting functions. Instead, new API has been provided to set the axes limits of the corresponding graph plot. Following are the new API calls for setting axes limits.</p>\r\n<h6><a id=\"C_API_16\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_set_axes_limits_compute</code> computes the axes limits from given <code>af_array</code>\'s and then passed the same to draw call.</li>\r\n<li><code>af_set_axes_limits_2d</code> can be used to explicitly set the x and y axes limits to specific minimum and maximum values.</li>\r\n<li><code>af_set_axes_limits_3d</code> can be used to explicitly set the x, y &amp; z axes limits to specific minimum and maximum values.</li>\r\n</ul>\r\n<h6><a id=\"C_API_20\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::setAxesLimits</code></li>\r\n</ul>\r\n<p>Given below is an example showing the code changes one has to make to their C++ ArrayFire program that uses graphics functionality of ArrayFire.</p>\r\n\r\n<pre><code class=\"language-cpp\">\r\naf::Window myWindow(800, 800, \"2D Plot example: ArrayFire\");\r\n\r\narray Y;\r\nint sign = 1;\r\narray X = seq(-af::Pi, af::Pi, PRECISION);\r\narray noise = randn(X.dims(0))/5.f;\r\n\r\nmyWindow.grid(2, 1);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(0, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1, 1, true);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(1, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1.25, 1.25, true);\r\n\r\nfor (double val=0; !myWindow.close(); )\r\n{\r\n    Y = sin(X);\r\n\r\n    myWindow(0,0).plot(X, Y);\r\n    myWindow(1,0).scatter(X, Y + noise, AF_MARKER_POINT);\r\n\r\n    myWindow.show();\r\n\r\n    X = X + PRECISION * float(sign);\r\n    val += PRECISION * float(sign);\r\n\r\n    if (val>af::Pi) {\r\n        sign = -1;\r\n    } else if (val<-af::Pi) {\r\n        sign = 1;\r\n    }\r\n}\r\n</code></pre>\r\n<p>Above code should render as the following and you can find the complete example <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/plot2d.cpp\" target=\"_blank\">here</a>.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d-1024x927.png\" alt=\"plot2d\" width=\"742\" height=\"672\" class=\"alignnone size-large wp-image-9183\" /></a>\r\n\r\n<h5><a id=\"New_Features_56\"></a>New Features</h5>\r\n<p>Any new functions that have been already mentioned in the above two sections are not repeated below.</p>\r\n<h6><a id=\"C_API_58\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_nd</code> is generalized version that can handle both 2d and 3d <code>af_array</code>s.</li>\r\n<li><code>af_set_axes_titles</code> can be used to set the titles of axes of a given chart/graph.</li>\r\n</ul>\r\n<h6><a id=\"C_API_63\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::vectorField</code> is an overloaded and generalized vector field rendering function.</li>\r\n<li><code>af::Window::setAxesTitles</code> is used to set the chart/graph axes labels</li>\r\n</ul>\r\n<p>An example of how to render your data as a vector field has been provided in our examples which you can find <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/field.cpp\" target=\"_blank\">here</a>. This example shows a static and dynamic vector field in multi-view mode. Given below is the screenshot of this example while running.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield-1024x550.png\" alt=\"vfield\" width=\"742\" height=\"399\" class=\"alignnone size-large wp-image-9185\" /></a>\r\n\r\n<p>Apart from the above new functions, each window/view supports overlay of different renderables now. If you are not already aware of what a view (graphics context) in ArrayFire is: Each draw call in ArrayFire is either rendered to whole window(single view) or a portion of the screen(multiview mode or grid mode), this subset portion of the whole window is called a view.\r\n\r\n<p>Given below is another screen shot of mult-view mode which renders an image, 3d line plot, histogram and surface. You can find the corresponding example code <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/pde/swe.cpp\" target=\"_blank\">here</a>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe-1024x549.png\" alt=\"swe\" width=\"742\" height=\"398\" class=\"alignnone size-large wp-image-9184\" /></a>\r\n\r\nThe following renerables support overlay if they are of same type of object (2d/3d).</p>\r\n<ul>\r\n<li>plot</li>\r\n<li>hist</li>\r\n<li>surface</li>\r\n<li>vector fields</li>\r\n</ul>\r\n<p>You can see an example screenshot of how overlay of plots looks like below.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\" alt=\"multipleplot\" width=\"1002\" height=\"828\" class=\"alignnone size-full wp-image-9182\" /></a>\r\n\r\n<h5><a id=\"Misc_Changes_74\"></a>Misc Changes</h5>\r\n<p>Removed <a href=\"http://glew.sourceforge.net/\">GLEW</a> and replaced with <a href=\"https://github.com/cginternals/glbinding\">glbinding</a>.</p>\r\n<h5><a id=\"Conclusion_77\"></a>Conclusion</h5>\r\n<p>We intend to add more graphcis functionality in future releases, keep checking for new posts from us. Please do try the new graphics functionality and kindly let us know if you find any bugs in the library.</p>\r\n\r\n</body></html>','Graphics updates in ArrayFire v3.4.0','','inherit','closed','closed','','9172-revision-v1','','','2016-09-19 14:13:32','2016-09-19 18:13:32','',9172,'http://sandbox.arrayfire.com/9172-revision-v1/',0,'revision','',0),(9195,17729,'2016-09-19 14:13:59','2016-09-19 18:13:59','<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Untitled Document.md</title><style></style></head><body id=\"preview\">\r\n<p>This post outlines the new graphics features and updates that come along with ArrayFire v3.4.0 release.</p>\r\n<h5><a id=\"Deprecated_and_their_replacements_2\"></a>Deprecated and their replacements</h5>\r\n<h6><a id=\"C_API_4\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_plot</code> has been deprecated in favour of <code>af_draw_plot_2d</code> or <code>af_draw_plot_nd</code> where the function with <strong>2d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n<li><code>af_draw_plot3</code> has been deprecated in favour of <code>af_draw_plot_3d</code> or <code>af_draw_plot_nd</code> where the function with <strong>3d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n<li><code>af_draw_scatter</code> has been deprecated in favour of <code>af_draw_scatter_2d</code> or <code>af_draw_scatter_nd</code> where the function with <strong>2d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n<li><code>af_draw_scatter3</code> has been deprecated in favour of <code>af_draw_scatter_3d</code> or <code>af_draw_scatter_nd</code> where the function with <strong>3d</strong> suffix is specific to two dimensional plots and the version with <strong>nd</strong> suffix is generalised.</li>\r\n</ul>\r\n<h6><a id=\"C_API_9\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::plot3</code> has been deprecated in favour of <code>af::Window::plot</code>, which is generalized plotting draw call that can handle both 2d and 3d data.</li>\r\n<li><code>af::Window::scatter3</code> has been deprecated in favour of <code>af::Window::scatter</code>, which is generalized plotting draw call that can handle both 2d and 3d data.</li>\r\n</ul>\r\n<h5><a id=\"Behavioral_Changes_13\"></a>Behavioral Changes</h5>\r\n<p>Prior to v3.4.0 release, all plotting functions used to compute the axes limits pertaining to corresponding data automatically. This additional step of computing axes is now not performed in any plotting functions. Instead, new API has been provided to set the axes limits of the corresponding graph plot. Following are the new API calls for setting axes limits.</p>\r\n<h6><a id=\"C_API_16\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_set_axes_limits_compute</code> computes the axes limits from given <code>af_array</code>\'s and then passed the same to draw call.</li>\r\n<li><code>af_set_axes_limits_2d</code> can be used to explicitly set the x and y axes limits to specific minimum and maximum values.</li>\r\n<li><code>af_set_axes_limits_3d</code> can be used to explicitly set the x, y &amp; z axes limits to specific minimum and maximum values.</li>\r\n</ul>\r\n<h6><a id=\"C_API_20\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::setAxesLimits</code></li>\r\n</ul>\r\n<p>Given below is an example showing the code changes one has to make to their C++ ArrayFire program that uses graphics functionality of ArrayFire.</p>\r\n\r\n<pre><code class=\"language-cpp\">\r\naf::Window myWindow(800, 800, \"2D Plot example: ArrayFire\");\r\n\r\narray Y;\r\nint sign = 1;\r\narray X = seq(-af::Pi, af::Pi, PRECISION);\r\narray noise = randn(X.dims(0))/5.f;\r\n\r\nmyWindow.grid(2, 1);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(0, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1, 1, true);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(1, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1.25, 1.25, true);\r\n\r\nfor (double val=0; !myWindow.close(); )\r\n{\r\n    Y = sin(X);\r\n\r\n    myWindow(0,0).plot(X, Y);\r\n    myWindow(1,0).scatter(X, Y + noise, AF_MARKER_POINT);\r\n\r\n    myWindow.show();\r\n\r\n    X = X + PRECISION * float(sign);\r\n    val += PRECISION * float(sign);\r\n\r\n    if (val>af::Pi) {\r\n        sign = -1;\r\n    } else if (val<-af::Pi) {\r\n        sign = 1;\r\n    }\r\n}\r\n</code></pre>\r\n<p>Above code should render as the following and you can find the complete example <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/plot2d.cpp\" target=\"_blank\">here</a>.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d-1024x927.png\" alt=\"plot2d\" width=\"742\" height=\"672\" class=\"alignnone size-large wp-image-9183\" /></a>\r\n\r\n<h5><a id=\"New_Features_56\"></a>New Features</h5>\r\n<p>Any new functions that have been already mentioned in the above two sections are not repeated below.</p>\r\n<h6><a id=\"C_API_58\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_nd</code> is generalized version that can handle both 2d and 3d <code>af_array</code>s.</li>\r\n<li><code>af_set_axes_titles</code> can be used to set the titles of axes of a given chart/graph.</li>\r\n</ul>\r\n<h6><a id=\"C_API_63\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::vectorField</code> is an overloaded and generalized vector field rendering function.</li>\r\n<li><code>af::Window::setAxesTitles</code> is used to set the chart/graph axes labels</li>\r\n</ul>\r\n<p>An example of how to render your data as a vector field has been provided in our examples which you can find <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/field.cpp\" target=\"_blank\">here</a>. This example shows a static and dynamic vector field in multi-view mode. Given below is the screenshot of this example while running.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield-1024x550.png\" alt=\"vfield\" width=\"742\" height=\"399\" class=\"alignnone size-large wp-image-9185\" /></a>\r\n\r\n<p>Apart from the above new functions, each window/view supports overlay of different renderables now. If you are not already aware of what a view (graphics context) in ArrayFire is: Each draw call in ArrayFire is either rendered to whole window(single view) or a portion of the screen(multiview mode or grid mode), this subset portion of the whole window is called a view.\r\n\r\n<p>Given below is a screen shot of mult-view mode which renders an image, 3d line plot, histogram and surface. You can find the corresponding example code <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/pde/swe.cpp\" target=\"_blank\">here</a>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe-1024x549.png\" alt=\"swe\" width=\"742\" height=\"398\" class=\"alignnone size-large wp-image-9184\" /></a>\r\n\r\nThe following renerables support overlay if they are of same type of object (2d/3d).</p>\r\n<ul>\r\n<li>plot</li>\r\n<li>hist</li>\r\n<li>surface</li>\r\n<li>vector fields</li>\r\n</ul>\r\n<p>You can see an example screenshot of how overlay of plots looks like below.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\" alt=\"multipleplot\" width=\"1002\" height=\"828\" class=\"alignnone size-full wp-image-9182\" /></a>\r\n\r\n<h5><a id=\"Misc_Changes_74\"></a>Misc Changes</h5>\r\n<p>Removed <a href=\"http://glew.sourceforge.net/\">GLEW</a> and replaced with <a href=\"https://github.com/cginternals/glbinding\">glbinding</a>.</p>\r\n<h5><a id=\"Conclusion_77\"></a>Conclusion</h5>\r\n<p>We intend to add more graphcis functionality in future releases, keep checking for new posts from us. Please do try the new graphics functionality and kindly let us know if you find any bugs in the library.</p>\r\n\r\n</body></html>','Graphics updates in ArrayFire v3.4.0','','inherit','closed','closed','','9172-revision-v1','','','2016-09-19 14:13:59','2016-09-19 18:13:59','',9172,'http://sandbox.arrayfire.com/9172-revision-v1/',0,'revision','',0),(9196,17729,'2016-09-19 14:39:28','2016-09-19 18:39:28','<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Untitled Document.md</title><style></style></head><body id=\"preview\">\r\n<p>This post outlines the new graphics features and updates that come along with ArrayFire v3.4.0 release.</p>\r\n<h5><a id=\"Behavioral_Changes_13\"></a>Behavioral Changes</h5>\r\n<p>Prior to v3.4.0 release, all plotting functions used to compute the axes limits pertaining to corresponding data automatically. This additional step of computing axes is now not performed in any plotting functions. Instead, new API has been provided to set the axes limits of the corresponding graph plot. Following are the new API calls for setting axes limits.</p>\r\n<h6><a id=\"C_API_16\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_set_axes_limits_compute</code> computes the axes limits from given <code>af_array</code>\'s and then passed the same to draw call.</li>\r\n<li><code>af_set_axes_limits_2d</code> can be used to explicitly set the x and y axes limits to specific minimum and maximum values.</li>\r\n<li><code>af_set_axes_limits_3d</code> can be used to explicitly set the x, y &amp; z axes limits to specific minimum and maximum values.</li>\r\n</ul>\r\n<h6><a id=\"C_API_20\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::setAxesLimits</code></li>\r\n</ul>\r\n<p>Given below is an example showing the code changes one has to make to their C++ ArrayFire program that uses graphics functionality of ArrayFire.</p>\r\n\r\n<pre><code class=\"language-cpp\">\r\naf::Window myWindow(800, 800, \"2D Plot example: ArrayFire\");\r\n\r\narray Y;\r\nint sign = 1;\r\narray X = seq(-af::Pi, af::Pi, PRECISION);\r\narray noise = randn(X.dims(0))/5.f;\r\n\r\nmyWindow.grid(2, 1);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(0, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1, 1, true);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(1, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1.25, 1.25, true);\r\n\r\nfor (double val=0; !myWindow.close(); )\r\n{\r\n    Y = sin(X);\r\n\r\n    myWindow(0,0).plot(X, Y);\r\n    myWindow(1,0).scatter(X, Y + noise, AF_MARKER_POINT);\r\n\r\n    myWindow.show();\r\n\r\n    X = X + PRECISION * float(sign);\r\n    val += PRECISION * float(sign);\r\n\r\n    if (val>af::Pi) {\r\n        sign = -1;\r\n    } else if (val<-af::Pi) {\r\n        sign = 1;\r\n    }\r\n}\r\n</code></pre>\r\n<p>Above code should render as the following and you can find the complete example <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/plot2d.cpp\" target=\"_blank\">here</a>.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d-1024x927.png\" alt=\"plot2d\" width=\"742\" height=\"672\" class=\"alignnone size-large wp-image-9183\" /></a>\r\n\r\n<h5><a id=\"New_Features_56\"></a>New Features</h5>\r\n<p>Any new functions that have been already mentioned in the above two sections are not repeated below.</p>\r\n<h6><a id=\"C_API_58\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_nd</code> is generalized version that can handle both 2d and 3d <code>af_array</code>s.</li>\r\n<li><code>af_set_axes_titles</code> can be used to set the titles of axes of a given chart/graph.</li>\r\n</ul>\r\n<h6><a id=\"C_API_63\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::vectorField</code> is an overloaded and generalized vector field rendering function.</li>\r\n<li><code>af::Window::setAxesTitles</code> is used to set the chart/graph axes labels</li>\r\n</ul>\r\n<p>An example of how to render your data as a vector field has been provided in our examples which you can find <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/field.cpp\" target=\"_blank\">here</a>. This example shows a static and dynamic vector field in multi-view mode. Given below is the screenshot of this example while running.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield-1024x550.png\" alt=\"vfield\" width=\"742\" height=\"399\" class=\"alignnone size-large wp-image-9185\" /></a>\r\n\r\n<p>Apart from the above new functions, each window/view supports overlay of different renderables now. If you are not already aware of what a view (graphics context) in ArrayFire is: Each draw call in ArrayFire is either rendered to whole window(single view) or a portion of the screen(multiview mode or grid mode), this subset portion of the whole window is called a view.\r\n\r\n<p>Given below is a screen shot of mult-view mode which renders an image, 3d line plot, histogram and surface. You can find the corresponding example code <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/pde/swe.cpp\" target=\"_blank\">here</a>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe-1024x549.png\" alt=\"swe\" width=\"742\" height=\"398\" class=\"alignnone size-large wp-image-9184\" /></a>\r\n\r\nThe following renerables support overlay if they are of same type of object (2d/3d).</p>\r\n<ul>\r\n<li>plot</li>\r\n<li>hist</li>\r\n<li>surface</li>\r\n<li>vector fields</li>\r\n</ul>\r\n<p>You can see an example screenshot of how overlay of plots looks like below.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\" alt=\"multipleplot\" width=\"1002\" height=\"828\" class=\"alignnone size-full wp-image-9182\" /></a>\r\n\r\n<h5><a id=\"Misc_Changes_74\"></a>Misc Changes</h5>\r\n<p>Removed <a href=\"http://glew.sourceforge.net/\">GLEW</a> and replaced with <a href=\"https://github.com/cginternals/glbinding\">glbinding</a>.</p>\r\n<h5><a id=\"Conclusion_77\"></a>Conclusion</h5>\r\n<p>We intend to add more graphcis functionality in future releases, keep checking for new posts from us. Please do try the new graphics functionality and kindly let us know if you find any bugs in the library.</p>\r\n\r\n</body></html>','Graphics updates in ArrayFire v3.4.0','','inherit','closed','closed','','9172-revision-v1','','','2016-09-19 14:39:28','2016-09-19 18:39:28','',9172,'http://sandbox.arrayfire.com/9172-revision-v1/',0,'revision','',0),(9197,4,'2016-09-19 14:43:49','2016-09-19 18:43:49','<span style=\"font-weight: 400;\">A lot has happened since the last ArrayFire release and a lot has changed. We have tackled a large number of issues on <a href=\"https://github.com/arrayfire/arrayfire\">GitHub</a> from our ever growing community of users and contributors and we have introduced significant improvements and functions to our library. </span><span style=\"font-weight: 400;\">What has not changed though, is our passion for pushing the boundaries of computational hardware and our commitment to giving our users an unprecedented degree of freedom to create lightning fast software faster than ever before.</span>\r\n\r\n<span style=\"font-weight: 400;\">With this enthusiasm, we would like to announce the release of Arrayfire v3.4.</span>\r\n\r\n<strong>Major Updates and New Features</strong>\r\n<ul>\r\n 	<li>Sparse Matrix and BLAS\r\n<ul>\r\n 	<li>Support for CSR and COO storage types</li>\r\n 	<li>Sparse-Dense Matrix Multiplication and Matrix-Vector Multiplication</li>\r\n 	<li>Conversion to and from dense matrix to CSR and COO storage types</li>\r\n</ul>\r\n</li>\r\n 	<li>Faster JIT for CUDA and OpenCL\r\n<ul>\r\n 	<li>Performance improvements</li>\r\n 	<li>Support for evaluating multiple outputs in a single kernel</li>\r\n</ul>\r\n</li>\r\n 	<li>Support for random number generator engines\r\n<ul>\r\n 	<li>Philox</li>\r\n 	<li>Threefry</li>\r\n 	<li>Mersenne Twister</li>\r\n</ul>\r\n</li>\r\n 	<li>Improvements to graphics\r\n<ul>\r\n 	<li>Using Forge v0.9.0</li>\r\n 	<li>Vector Field plotting functionality</li>\r\n 	<li>Multiple overlays on the same window are now possible</li>\r\n 	<li>New API to set axes limits for graphs</li>\r\n 	<li>New API for plot and scatter</li>\r\n</ul>\r\n</li>\r\n</ul>\r\nThere are numerous other improvements such as new interpolation methods, image moments, scan by key and so on. For the comprehensive list of improvements and bug fixes, please refer to our <a href=\"http://arrayfire.org/docs/releasenotes.htm\">release notes</a>.\r\n\r\n<span style=\"font-weight: 400;\">While we are happy for reaching this milestone, we are not complacent. Work on the next milestone is continuing on full steam and we hope to exceed the expectations of our community.</span>','ArrayFire v3.4 Official Release','','inherit','closed','closed','','9154-revision-v1','','','2016-09-19 14:43:49','2016-09-19 18:43:49','',9154,'http://sandbox.arrayfire.com/9154-revision-v1/',0,'revision','',0),(9198,4,'2016-09-19 15:13:33','2016-09-19 19:13:33','<span style=\"font-weight: 400;\">Today we are pleased to announce the release of ArrayFire v3.4, our open source library of parallel computing functions supporting CUDA, OpenCL, and CPU host processing. This new version contains additions and updates that improve features and performance for applications in machine learning, computer vision, signal processing, statistics, finance, and more.</span>\r\n\r\n<span style=\"font-weight: 400;\">This release focuses on 4 major areas of the library that are common to many areas of mathematical, scientific, and financial computing:  sparse matrix operations, random number generation, just-in-time (JIT) compilation, and visualizations.</span>\r\n\r\n<strong>Major Updates and New Features</strong>\r\n<ul>\r\n 	<li>Sparse Matrix and BLAS\r\n<ul>\r\n 	<li>Support for CSR and COO storage types</li>\r\n 	<li>Sparse-Dense Matrix Multiplication and Matrix-Vector Multiplication</li>\r\n 	<li>Conversion to and from dense matrix to CSR and COO storage types</li>\r\n</ul>\r\n</li>\r\n 	<li>Support for random number generator engines\r\n<ul>\r\n 	<li>Philox</li>\r\n 	<li>Threefry</li>\r\n 	<li>Mersenne Twister</li>\r\n</ul>\r\n</li>\r\n 	<li>Faster JIT for CUDA and OpenCL\r\n<ul>\r\n 	<li>Performance improvements</li>\r\n 	<li>Support for evaluating multiple outputs in a single kernel</li>\r\n</ul>\r\n</li>\r\n 	<li>Improvements to graphics\r\n<ul>\r\n 	<li>Using Forge v0.9.0</li>\r\n 	<li>Vector Field plotting functionality</li>\r\n 	<li>Multiple overlays on the same window are now possible</li>\r\n 	<li>New API to set axes limits for graphs</li>\r\n 	<li>New API for plot and scatter</li>\r\n</ul>\r\n</li>\r\n</ul>\r\nThere are numerous other improvements such as new interpolation methods, image moments, scan by key and so on. For the comprehensive list of improvements and bug fixes, please refer to our <a href=\"http://arrayfire.org/docs/releasenotes.htm\">release notes</a>.\r\n\r\n<span style=\"font-weight: 400;\">While we are happy for reaching this milestone, we are not complacent. Work on the next milestone is continuing on full steam and we hope to exceed the expectations of our community.</span>','ArrayFire v3.4 Official Release','','inherit','closed','closed','','9154-revision-v1','','','2016-09-19 15:13:33','2016-09-19 19:13:33','',9154,'http://sandbox.arrayfire.com/9154-revision-v1/',0,'revision','',0),(9199,17729,'2016-09-19 15:29:01','2016-09-19 19:29:01','','swe','','inherit','open','closed','','swe-2','','','2016-09-19 15:29:01','2016-09-19 19:29:01','',9172,'http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe.gif',0,'attachment','image/gif',0),(9200,17729,'2016-09-19 15:29:18','2016-09-19 19:29:18','<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Untitled Document.md</title><style></style></head><body id=\"preview\">\r\n<p>This post outlines the new graphics features and updates that come along with ArrayFire v3.4.0 release.</p>\r\n<h5><a id=\"Behavioral_Changes_13\"></a>Behavioral Changes</h5>\r\n<p>Prior to v3.4.0 release, all plotting functions used to compute the axes limits pertaining to corresponding data automatically. This additional step of computing axes is now not performed in any plotting functions. Instead, new API has been provided to set the axes limits of the corresponding graph plot. Following are the new API calls for setting axes limits.</p>\r\n<h6><a id=\"C_API_16\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_set_axes_limits_compute</code> computes the axes limits from given <code>af_array</code>\'s and then passed the same to draw call.</li>\r\n<li><code>af_set_axes_limits_2d</code> can be used to explicitly set the x and y axes limits to specific minimum and maximum values.</li>\r\n<li><code>af_set_axes_limits_3d</code> can be used to explicitly set the x, y &amp; z axes limits to specific minimum and maximum values.</li>\r\n</ul>\r\n<h6><a id=\"C_API_20\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::setAxesLimits</code></li>\r\n</ul>\r\n<p>Given below is an example showing the code changes one has to make to their C++ ArrayFire program that uses graphics functionality of ArrayFire.</p>\r\n\r\n<pre><code class=\"language-cpp\">\r\naf::Window myWindow(800, 800, \"2D Plot example: ArrayFire\");\r\n\r\narray Y;\r\nint sign = 1;\r\narray X = seq(-af::Pi, af::Pi, PRECISION);\r\narray noise = randn(X.dims(0))/5.f;\r\n\r\nmyWindow.grid(2, 1);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(0, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1, 1, true);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(1, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1.25, 1.25, true);\r\n\r\nfor (double val=0; !myWindow.close(); )\r\n{\r\n    Y = sin(X);\r\n\r\n    myWindow(0,0).plot(X, Y);\r\n    myWindow(1,0).scatter(X, Y + noise, AF_MARKER_POINT);\r\n\r\n    myWindow.show();\r\n\r\n    X = X + PRECISION * float(sign);\r\n    val += PRECISION * float(sign);\r\n\r\n    if (val>af::Pi) {\r\n        sign = -1;\r\n    } else if (val<-af::Pi) {\r\n        sign = 1;\r\n    }\r\n}\r\n</code></pre>\r\n<p>Above code should render as the following and you can find the complete example <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/plot2d.cpp\" target=\"_blank\">here</a>.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d-1024x927.png\" alt=\"plot2d\" width=\"742\" height=\"672\" class=\"alignnone size-large wp-image-9183\" /></a>\r\n\r\n<h5><a id=\"New_Features_56\"></a>New Features</h5>\r\n<p>Any new functions that have been already mentioned in the above two sections are not repeated below.</p>\r\n<h6><a id=\"C_API_58\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_nd</code> is generalized version that can handle both 2d and 3d <code>af_array</code>s.</li>\r\n<li><code>af_set_axes_titles</code> can be used to set the titles of axes of a given chart/graph.</li>\r\n</ul>\r\n<h6><a id=\"C_API_63\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::vectorField</code> is an overloaded and generalized vector field rendering function.</li>\r\n<li><code>af::Window::setAxesTitles</code> is used to set the chart/graph axes labels</li>\r\n</ul>\r\n<p>An example of how to render your data as a vector field has been provided in our examples which you can find <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/field.cpp\" target=\"_blank\">here</a>. This example shows a static and dynamic vector field in multi-view mode. Given below is the screenshot of this example while running.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield-1024x550.png\" alt=\"vfield\" width=\"742\" height=\"399\" class=\"alignnone size-large wp-image-9185\" /></a>\r\n\r\n<p>Apart from the above new functions, each window/view supports overlay of different renderables now. If you are not already aware of what a view (graphics context) in ArrayFire is: Each draw call in ArrayFire is either rendered to whole window(single view) or a portion of the screen(multiview mode or grid mode), this subset portion of the whole window is called a view.\r\n\r\n<p>Given below is a screen shot of mult-view mode which renders an image, 3d line plot, histogram and surface. You can find the corresponding example code <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/pde/swe.cpp\" target=\"_blank\">here</a>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe.gif\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe.gif\" alt=\"swe\" width=\"800\" height=\"600\" class=\"alignnone size-full wp-image-9199\" /></a>\r\n\r\nThe following renerables support overlay if they are of same type of object (2d/3d).</p>\r\n<ul>\r\n<li>plot</li>\r\n<li>hist</li>\r\n<li>surface</li>\r\n<li>vector fields</li>\r\n</ul>\r\n<p>You can see an example screenshot of how overlay of plots looks like below.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\" alt=\"multipleplot\" width=\"1002\" height=\"828\" class=\"alignnone size-full wp-image-9182\" /></a>\r\n\r\n<h5><a id=\"Misc_Changes_74\"></a>Misc Changes</h5>\r\n<p>Removed <a href=\"http://glew.sourceforge.net/\">GLEW</a> and replaced with <a href=\"https://github.com/cginternals/glbinding\">glbinding</a>.</p>\r\n<h5><a id=\"Conclusion_77\"></a>Conclusion</h5>\r\n<p>We intend to add more graphcis functionality in future releases, keep checking for new posts from us. Please do try the new graphics functionality and kindly let us know if you find any bugs in the library.</p>\r\n\r\n</body></html>','Graphics updates in ArrayFire v3.4.0','','inherit','closed','closed','','9172-revision-v1','','','2016-09-19 15:29:18','2016-09-19 19:29:18','',9172,'http://sandbox.arrayfire.com/9172-revision-v1/',0,'revision','',0),(9201,17729,'2016-09-19 15:59:01','2016-09-19 19:59:01','<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Untitled Document.md</title><style></style></head><body id=\"preview\">\r\n<p>This post outlines the new graphics features and updates that come along with ArrayFire v3.4.0 release.</p>\r\n<h5><a id=\"Behavioral_Changes_13\"></a>Behavioral Changes</h5>\r\n<p>Prior to v3.4.0 release, all plotting functions used to compute the axes limits pertaining to corresponding data automatically. This additional step of computing axes is now not performed in any plotting functions. Instead, new API has been provided to set the axes limits of the corresponding graph plot. Following are the new API calls for setting axes limits.</p>\r\n<ul>\r\n<li><code>af::Window::setAxesLimits</code></li>\r\n</ul>\r\n<p>Given below is an example showing the code changes one has to make to their C++ ArrayFire program that uses graphics functionality of ArrayFire.</p>\r\n\r\n<pre><code class=\"language-cpp\">\r\naf::Window myWindow(800, 800, \"2D Plot example: ArrayFire\");\r\n\r\narray Y;\r\nint sign = 1;\r\narray X = seq(-af::Pi, af::Pi, PRECISION);\r\narray noise = randn(X.dims(0))/5.f;\r\n\r\nmyWindow.grid(2, 1);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(0, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1, 1, true);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(1, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1.25, 1.25, true);\r\n\r\nfor (double val=0; !myWindow.close(); )\r\n{\r\n    Y = sin(X);\r\n\r\n    myWindow(0,0).plot(X, Y);\r\n    myWindow(1,0).scatter(X, Y + noise, AF_MARKER_POINT);\r\n\r\n    myWindow.show();\r\n\r\n    X = X + PRECISION * float(sign);\r\n    val += PRECISION * float(sign);\r\n\r\n    if (val>af::Pi) {\r\n        sign = -1;\r\n    } else if (val<-af::Pi) {\r\n        sign = 1;\r\n    }\r\n}\r\n</code></pre>\r\n<p>Above code should render as the following and you can find the complete example <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/plot2d.cpp\" target=\"_blank\">here</a>.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d-1024x927.png\" alt=\"plot2d\" width=\"742\" height=\"672\" class=\"alignnone size-large wp-image-9183\" /></a>\r\n\r\n<h5><a id=\"New_Features_56\"></a>New Features</h5>\r\n<p>Any new functions that have been already mentioned in the above two sections are not repeated below.</p>\r\n<h6><a id=\"C_API_58\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_nd</code> is generalized version that can handle both 2d and 3d <code>af_array</code>s.</li>\r\n<li><code>af_set_axes_titles</code> can be used to set the titles of axes of a given chart/graph.</li>\r\n</ul>\r\n<h6><a id=\"C_API_63\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::vectorField</code> is an overloaded and generalized vector field rendering function.</li>\r\n<li><code>af::Window::setAxesTitles</code> is used to set the chart/graph axes labels</li>\r\n</ul>\r\n<p>An example of how to render your data as a vector field has been provided in our examples which you can find <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/field.cpp\" target=\"_blank\">here</a>. This example shows a static and dynamic vector field in multi-view mode. Given below is the screenshot of this example while running.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield-1024x550.png\" alt=\"vfield\" width=\"742\" height=\"399\" class=\"alignnone size-large wp-image-9185\" /></a>\r\n\r\n<p>Apart from the above new functions, each window/view supports overlay of different renderables now. If you are not already aware of what a view (graphics context) in ArrayFire is: Each draw call in ArrayFire is either rendered to whole window(single view) or a portion of the screen(multiview mode or grid mode), this subset portion of the whole window is called a view.\r\n\r\n<p>Given below is a screen shot of mult-view mode which renders an image, 3d line plot, histogram and surface. You can find the corresponding example code <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/pde/swe.cpp\" target=\"_blank\">here</a>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe.gif\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe.gif\" alt=\"swe\" width=\"800\" height=\"600\" class=\"alignnone size-full wp-image-9199\" /></a>\r\n\r\nThe following renerables support overlay if they are of same type of object (2d/3d).</p>\r\n<ul>\r\n<li>plot</li>\r\n<li>hist</li>\r\n<li>surface</li>\r\n<li>vector fields</li>\r\n</ul>\r\n<p>You can see an example screenshot of how overlay of plots looks like below.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\" alt=\"multipleplot\" width=\"1002\" height=\"828\" class=\"alignnone size-full wp-image-9182\" /></a>\r\n\r\n<h5><a id=\"Misc_Changes_74\"></a>Misc Changes</h5>\r\n<p>Removed <a href=\"http://glew.sourceforge.net/\">GLEW</a> and replaced with <a href=\"https://github.com/cginternals/glbinding\">glbinding</a>.</p>\r\n<h5><a id=\"Conclusion_77\"></a>Conclusion</h5>\r\n<p>We intend to add more graphcis functionality in future releases, keep checking for new posts from us. Please do try the new graphics functionality and kindly let us know if you find any bugs in the library.</p>\r\n\r\n</body></html>','Graphics updates in ArrayFire v3.4.0','','inherit','closed','closed','','9172-revision-v1','','','2016-09-19 15:59:01','2016-09-19 19:59:01','',9172,'http://sandbox.arrayfire.com/9172-revision-v1/',0,'revision','',0),(9202,17729,'2016-09-19 16:00:11','2016-09-19 20:00:11','<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Untitled Document.md</title><style></style></head><body id=\"preview\">\r\n<p>This post outlines the new graphics features and updates that come along with ArrayFire v3.4.0 release.</p>\r\n<h5><a id=\"Behavioral_Changes_13\"></a>Behavioral Changes</h5>\r\n<p>Prior to v3.4.0 release, all plotting functions used to compute the axes limits pertaining to corresponding data automatically. This additional step of computing axes is now not performed in any plotting functions. Instead, new API has been provided to set the axes limits of the corresponding graph plot. Given below is the new API for setting axes limits.</p>\r\n<ul>\r\n<li><code>af::Window::setAxesLimits</code></li>\r\n</ul>\r\n<p>Given below is an example showing the code changes one has to make to their C++ ArrayFire program that uses graphics functionality of ArrayFire.</p>\r\n\r\n<pre><code class=\"language-cpp\">\r\naf::Window myWindow(800, 800, \"2D Plot example: ArrayFire\");\r\n\r\narray Y;\r\nint sign = 1;\r\narray X = seq(-af::Pi, af::Pi, PRECISION);\r\narray noise = randn(X.dims(0))/5.f;\r\n\r\nmyWindow.grid(2, 1);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(0, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1, 1, true);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(1, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1.25, 1.25, true);\r\n\r\nfor (double val=0; !myWindow.close(); )\r\n{\r\n    Y = sin(X);\r\n\r\n    myWindow(0,0).plot(X, Y);\r\n    myWindow(1,0).scatter(X, Y + noise, AF_MARKER_POINT);\r\n\r\n    myWindow.show();\r\n\r\n    X = X + PRECISION * float(sign);\r\n    val += PRECISION * float(sign);\r\n\r\n    if (val>af::Pi) {\r\n        sign = -1;\r\n    } else if (val<-af::Pi) {\r\n        sign = 1;\r\n    }\r\n}\r\n</code></pre>\r\n<p>Above code should render as the following and you can find the complete example <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/plot2d.cpp\" target=\"_blank\">here</a>.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d-1024x927.png\" alt=\"plot2d\" width=\"742\" height=\"672\" class=\"alignnone size-large wp-image-9183\" /></a>\r\n\r\n<h5><a id=\"New_Features_56\"></a>New Features</h5>\r\n<p>Any new functions that have been already mentioned in the above two sections are not repeated below.</p>\r\n<h6><a id=\"C_API_58\"></a>C API</h6>\r\n<ul>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_2d</code> renders given data as two dimensional vector field</li>\r\n<li><code>af_draw_vector_field_nd</code> is generalized version that can handle both 2d and 3d <code>af_array</code>s.</li>\r\n<li><code>af_set_axes_titles</code> can be used to set the titles of axes of a given chart/graph.</li>\r\n</ul>\r\n<h6><a id=\"C_API_63\"></a>C++ API</h6>\r\n<ul>\r\n<li><code>af::Window::vectorField</code> is an overloaded and generalized vector field rendering function.</li>\r\n<li><code>af::Window::setAxesTitles</code> is used to set the chart/graph axes labels</li>\r\n</ul>\r\n<p>An example of how to render your data as a vector field has been provided in our examples which you can find <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/field.cpp\" target=\"_blank\">here</a>. This example shows a static and dynamic vector field in multi-view mode. Given below is the screenshot of this example while running.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield-1024x550.png\" alt=\"vfield\" width=\"742\" height=\"399\" class=\"alignnone size-large wp-image-9185\" /></a>\r\n\r\n<p>Apart from the above new functions, each window/view supports overlay of different renderables now. If you are not already aware of what a view (graphics context) in ArrayFire is: Each draw call in ArrayFire is either rendered to whole window(single view) or a portion of the screen(multiview mode or grid mode), this subset portion of the whole window is called a view.\r\n\r\n<p>Given below is a screen shot of mult-view mode which renders an image, 3d line plot, histogram and surface. You can find the corresponding example code <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/pde/swe.cpp\" target=\"_blank\">here</a>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe.gif\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe.gif\" alt=\"swe\" width=\"800\" height=\"600\" class=\"alignnone size-full wp-image-9199\" /></a>\r\n\r\nThe following renerables support overlay if they are of same type of object (2d/3d).</p>\r\n<ul>\r\n<li>plot</li>\r\n<li>hist</li>\r\n<li>surface</li>\r\n<li>vector fields</li>\r\n</ul>\r\n<p>You can see an example screenshot of how overlay of plots looks like below.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\" alt=\"multipleplot\" width=\"1002\" height=\"828\" class=\"alignnone size-full wp-image-9182\" /></a>\r\n\r\n<h5><a id=\"Misc_Changes_74\"></a>Misc Changes</h5>\r\n<p>Removed <a href=\"http://glew.sourceforge.net/\">GLEW</a> and replaced with <a href=\"https://github.com/cginternals/glbinding\">glbinding</a>.</p>\r\n<h5><a id=\"Conclusion_77\"></a>Conclusion</h5>\r\n<p>We intend to add more graphcis functionality in future releases, keep checking for new posts from us. Please do try the new graphics functionality and kindly let us know if you find any bugs in the library.</p>\r\n\r\n</body></html>','Graphics updates in ArrayFire v3.4.0','','inherit','closed','closed','','9172-revision-v1','','','2016-09-19 16:00:11','2016-09-19 20:00:11','',9172,'http://sandbox.arrayfire.com/9172-revision-v1/',0,'revision','',0),(9203,17729,'2016-09-19 16:01:17','2016-09-19 20:01:17','<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Untitled Document.md</title><style></style></head><body id=\"preview\">\r\n<p>This post outlines the new graphics features and updates that come along with ArrayFire v3.4.0 release.</p>\r\n<h5><a id=\"Behavioral_Changes_13\"></a>Behavioral Changes</h5>\r\n<p>Prior to v3.4.0 release, all plotting functions used to compute the axes limits pertaining to corresponding data automatically. This additional step of computing axes is now not performed in any plotting functions. Instead, new API has been provided to set the axes limits of the corresponding graph plot. Given below is the new API for setting axes limits.</p>\r\n<ul>\r\n<li><code>af::Window::setAxesLimits</code></li>\r\n</ul>\r\n<p>Given below is an example showing the code changes one has to make to their C++ ArrayFire program that uses graphics functionality of ArrayFire.</p>\r\n\r\n<pre><code class=\"language-cpp\">\r\naf::Window myWindow(800, 800, \"2D Plot example: ArrayFire\");\r\n\r\narray Y;\r\nint sign = 1;\r\narray X = seq(-af::Pi, af::Pi, PRECISION);\r\narray noise = randn(X.dims(0))/5.f;\r\n\r\nmyWindow.grid(2, 1);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(0, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1, 1, true);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(1, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1.25, 1.25, true);\r\n\r\nfor (double val=0; !myWindow.close(); )\r\n{\r\n    Y = sin(X);\r\n\r\n    myWindow(0,0).plot(X, Y);\r\n    myWindow(1,0).scatter(X, Y + noise, AF_MARKER_POINT);\r\n\r\n    myWindow.show();\r\n\r\n    X = X + PRECISION * float(sign);\r\n    val += PRECISION * float(sign);\r\n\r\n    if (val>af::Pi) {\r\n        sign = -1;\r\n    } else if (val<-af::Pi) {\r\n        sign = 1;\r\n    }\r\n}\r\n</code></pre>\r\n<p>Above code should render as the following and you can find the complete example <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/plot2d.cpp\" target=\"_blank\">here</a>.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d-1024x927.png\" alt=\"plot2d\" width=\"742\" height=\"672\" class=\"alignnone size-large wp-image-9183\" /></a>\r\n\r\n<h5><a id=\"New_Features_56\"></a>New Features</h5>\r\n<ul>\r\n<li><code>af::Window::vectorField</code> is an overloaded and generalized vector field rendering function.</li>\r\n<li><code>af::Window::setAxesTitles</code> is used to set the chart/graph axes labels</li>\r\n</ul>\r\n<p>An example of how to render your data as a vector field has been provided in our examples which you can find <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/field.cpp\" target=\"_blank\">here</a>. This example shows a static and dynamic vector field in multi-view mode. Given below is the screenshot of this example while running.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield-1024x550.png\" alt=\"vfield\" width=\"742\" height=\"399\" class=\"alignnone size-large wp-image-9185\" /></a>\r\n\r\n<p>Apart from the above new functions, each window/view supports overlay of different renderables now. If you are not already aware of what a view (graphics context) in ArrayFire is: Each draw call in ArrayFire is either rendered to whole window(single view) or a portion of the screen(multiview mode or grid mode), this subset portion of the whole window is called a view.\r\n\r\n<p>Given below is a screen shot of mult-view mode which renders an image, 3d line plot, histogram and surface. You can find the corresponding example code <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/pde/swe.cpp\" target=\"_blank\">here</a>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe.gif\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe.gif\" alt=\"swe\" width=\"800\" height=\"600\" class=\"alignnone size-full wp-image-9199\" /></a>\r\n\r\nThe following renerables support overlay if they are of same type of object (2d/3d).</p>\r\n<ul>\r\n<li>plot</li>\r\n<li>hist</li>\r\n<li>surface</li>\r\n<li>vector fields</li>\r\n</ul>\r\n<p>You can see an example screenshot of how overlay of plots looks like below.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\" alt=\"multipleplot\" width=\"1002\" height=\"828\" class=\"alignnone size-full wp-image-9182\" /></a>\r\n\r\n<h5><a id=\"Misc_Changes_74\"></a>Misc Changes</h5>\r\n<p>Removed <a href=\"http://glew.sourceforge.net/\">GLEW</a> and replaced with <a href=\"https://github.com/cginternals/glbinding\">glbinding</a>.</p>\r\n<h5><a id=\"Conclusion_77\"></a>Conclusion</h5>\r\n<p>We intend to add more graphcis functionality in future releases, keep checking for new posts from us. Please do try the new graphics functionality and kindly let us know if you find any bugs in the library.</p>\r\n\r\n</body></html>','Graphics updates in ArrayFire v3.4.0','','inherit','closed','closed','','9172-revision-v1','','','2016-09-19 16:01:17','2016-09-19 20:01:17','',9172,'http://sandbox.arrayfire.com/9172-revision-v1/',0,'revision','',0),(9204,17729,'2016-09-19 16:03:19','2016-09-19 20:03:19','<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Untitled Document.md</title><style></style></head><body id=\"preview\">\r\n<p>This post outlines the new graphics features and updates that come along with ArrayFire v3.4.0 release.</p>\r\n<h5><a id=\"Behavioral_Changes_13\"></a>Behavioral Changes</h5>\r\n<p>Prior to v3.4.0 release, all plotting functions used to compute the axes limits pertaining to corresponding data automatically. This additional step of computing axes is now not performed in any plotting functions. Instead, new API has been provided to set the axes limits of the corresponding graph plot.\r\n\r\n<p>Given below is an example showing the code changes one has to make to their C++ ArrayFire program that uses graphics functionality of ArrayFire.</p>\r\n\r\n<pre><code class=\"language-cpp\">\r\naf::Window myWindow(800, 800, \"2D Plot example: ArrayFire\");\r\n\r\narray Y;\r\nint sign = 1;\r\narray X = seq(-af::Pi, af::Pi, PRECISION);\r\narray noise = randn(X.dims(0))/5.f;\r\n\r\nmyWindow.grid(2, 1);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(0, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1, 1, true);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(1, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1.25, 1.25, true);\r\n\r\nfor (double val=0; !myWindow.close(); )\r\n{\r\n    Y = sin(X);\r\n\r\n    myWindow(0,0).plot(X, Y);\r\n    myWindow(1,0).scatter(X, Y + noise, AF_MARKER_POINT);\r\n\r\n    myWindow.show();\r\n\r\n    X = X + PRECISION * float(sign);\r\n    val += PRECISION * float(sign);\r\n\r\n    if (val>af::Pi) {\r\n        sign = -1;\r\n    } else if (val<-af::Pi) {\r\n        sign = 1;\r\n    }\r\n}\r\n</code></pre>\r\n<p>Above code should render as the following and you can find the complete example <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/plot2d.cpp\" target=\"_blank\">here</a>.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d-1024x927.png\" alt=\"plot2d\" width=\"742\" height=\"672\" class=\"alignnone size-large wp-image-9183\" /></a>\r\n\r\n<h5><a id=\"New_Features_56\"></a>New Features</h5>\r\n\r\n<h6>Vector Fields</h6>\r\n<p>An example of how to render your data as a vector field has been provided in our examples which you can find <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/field.cpp\" target=\"_blank\">here</a>. This example shows a static and dynamic vector field in multi-view mode. Given below is the screenshot of this example while running.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield-1024x550.png\" alt=\"vfield\" width=\"742\" height=\"399\" class=\"alignnone size-large wp-image-9185\" /></a>\r\n\r\n<p>Apart from the above new renderables, each window/view supports overlay of different renderables now. If you are not already aware of what a view (graphics context) in ArrayFire is: Each draw call in ArrayFire is either rendered to whole window(single view) or a portion of the screen(multiview mode or grid mode), this subset portion of the whole window is called a view.\r\n\r\n<p>Given below is a screen shot of mult-view mode which renders an image, 3d line plot, histogram and surface. You can find the corresponding example code <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/pde/swe.cpp\" target=\"_blank\">here</a>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe.gif\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe.gif\" alt=\"swe\" width=\"800\" height=\"600\" class=\"alignnone size-full wp-image-9199\" /></a>\r\n\r\nThe following renerables support overlay if they are of same type of object (2d/3d).</p>\r\n<ul>\r\n<li>plot</li>\r\n<li>hist</li>\r\n<li>surface</li>\r\n<li>vector fields</li>\r\n</ul>\r\n<p>You can see an example screenshot of how overlay of plots looks like below.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\" alt=\"multipleplot\" width=\"1002\" height=\"828\" class=\"alignnone size-full wp-image-9182\" /></a>\r\n\r\n<h5><a id=\"Misc_Changes_74\"></a>Misc Changes</h5>\r\n<p>Removed <a href=\"http://glew.sourceforge.net/\">GLEW</a> and replaced with <a href=\"https://github.com/cginternals/glbinding\">glbinding</a>.</p>\r\n<h5><a id=\"Conclusion_77\"></a>Conclusion</h5>\r\n<p>We intend to add more graphcis functionality in future releases, keep checking for new posts from us. Please do try the new graphics functionality and kindly let us know if you find any bugs in the library.</p>\r\n\r\n</body></html>','Graphics updates in ArrayFire v3.4.0','','inherit','closed','closed','','9172-revision-v1','','','2016-09-19 16:03:19','2016-09-19 20:03:19','',9172,'http://sandbox.arrayfire.com/9172-revision-v1/',0,'revision','',0),(9205,17729,'2016-09-19 16:04:19','2016-09-19 20:04:19','<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Untitled Document.md</title><style></style></head><body id=\"preview\">\r\n<p>This post outlines the new graphics features and updates that come along with ArrayFire v3.4.0 release.</p>\r\n<h5><a id=\"Behavioral_Changes_13\"></a>Behavioral Changes</h5>\r\n<p>Prior to v3.4.0 release, all plotting functions used to compute the axes limits pertaining to corresponding data automatically. This additional step of computing axes is now not performed in any plotting functions. Instead, new API has been provided to set the axes limits of the corresponding graph plot.\r\n\r\n<p>Given below is an example showing the code changes one has to make to their C++ ArrayFire program that uses graphics functionality of ArrayFire.</p>\r\n\r\n<pre><code class=\"language-cpp\">\r\naf::Window myWindow(800, 800, \"2D Plot example: ArrayFire\");\r\n\r\narray Y;\r\nint sign = 1;\r\narray X = seq(-af::Pi, af::Pi, PRECISION);\r\narray noise = randn(X.dims(0))/5.f;\r\n\r\nmyWindow.grid(2, 1);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(0, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1, 1, true);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(1, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1.25, 1.25, true);\r\n\r\nfor (double val=0; !myWindow.close(); )\r\n{\r\n    Y = sin(X);\r\n\r\n    myWindow(0,0).plot(X, Y);\r\n    myWindow(1,0).scatter(X, Y + noise, AF_MARKER_POINT);\r\n\r\n    myWindow.show();\r\n\r\n    X = X + PRECISION * float(sign);\r\n    val += PRECISION * float(sign);\r\n\r\n    if (val>af::Pi) {\r\n        sign = -1;\r\n    } else if (val<-af::Pi) {\r\n        sign = 1;\r\n    }\r\n}\r\n</code></pre>\r\n<p>Above code should render as the following and you can find the complete example <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/plot2d.cpp\" target=\"_blank\">here</a>.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d-1024x927.png\" alt=\"plot2d\" width=\"742\" height=\"672\" class=\"alignnone size-large wp-image-9183\" /></a>\r\n\r\n<h5><a id=\"New_Features_56\"></a>New Features</h5>\r\n\r\n<h6>Vector Fields</h6>\r\n<p>An example of how to render your data as a vector field has been provided in our examples which you can find <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/field.cpp\" target=\"_blank\">here</a>. This example shows a static and dynamic vector field in multi-view mode. Given below is the screenshot of this example while running.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield-1024x550.png\" alt=\"vfield\" width=\"742\" height=\"399\" class=\"alignnone size-large wp-image-9185\" /></a>\r\n\r\n<p>Apart from the above new renderables, each window/view supports overlay of different renderables now. If you are not already aware of what a view (graphics context) in ArrayFire is: Each draw call in ArrayFire is either rendered to whole window(single view) or a portion of the screen(multiview mode or grid mode), this subset portion of the whole window is called a view.\r\n\r\n<p>Given below is a screen shot of mult-view mode which renders an image, 2d line plot, histogram and surface. You can find the corresponding example code <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/pde/swe.cpp\" target=\"_blank\">here</a>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe.gif\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe.gif\" alt=\"swe\" width=\"800\" height=\"600\" class=\"alignnone size-full wp-image-9199\" /></a>\r\n\r\nThe following renerables support overlay if they are of same type of object (2d/3d).</p>\r\n<ul>\r\n<li>plot</li>\r\n<li>hist</li>\r\n<li>surface</li>\r\n<li>vector fields</li>\r\n</ul>\r\n<p>You can see an example screenshot of how overlay of plots looks like below.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\" alt=\"multipleplot\" width=\"1002\" height=\"828\" class=\"alignnone size-full wp-image-9182\" /></a>\r\n\r\n<h5><a id=\"Misc_Changes_74\"></a>Misc Changes</h5>\r\n<p>Removed <a href=\"http://glew.sourceforge.net/\">GLEW</a> and replaced with <a href=\"https://github.com/cginternals/glbinding\">glbinding</a>.</p>\r\n<h5><a id=\"Conclusion_77\"></a>Conclusion</h5>\r\n<p>We intend to add more graphcis functionality in future releases, keep checking for new posts from us. Please do try the new graphics functionality and kindly let us know if you find any bugs in the library.</p>\r\n\r\n</body></html>','Graphics updates in ArrayFire v3.4.0','','inherit','closed','closed','','9172-revision-v1','','','2016-09-19 16:04:19','2016-09-19 20:04:19','',9172,'http://sandbox.arrayfire.com/9172-revision-v1/',0,'revision','',0),(9206,17729,'2016-09-19 16:04:54','2016-09-19 20:04:54','<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Untitled Document.md</title><style></style></head><body id=\"preview\">\r\n<p>This post outlines the new graphics features and updates that come along with ArrayFire v3.4.0 release.</p>\r\n<h5><a id=\"Behavioral_Changes_13\"></a>Behavioral Changes</h5>\r\n<p>Prior to v3.4.0 release, all plotting functions used to compute the axes limits pertaining to corresponding data automatically. This additional step of computing axes is now not performed in any plotting functions. Instead, new API has been provided to set the axes limits of the corresponding graph plot.\r\n\r\n<p>Given below is an example showing the code changes one has to make to their C++ ArrayFire program that uses graphics functionality of ArrayFire.</p>\r\n\r\n<pre><code class=\"language-cpp\">\r\naf::Window myWindow(800, 800, \"2D Plot example: ArrayFire\");\r\n\r\narray Y;\r\nint sign = 1;\r\narray X = seq(-af::Pi, af::Pi, PRECISION);\r\narray noise = randn(X.dims(0))/5.f;\r\n\r\nmyWindow.grid(2, 1);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(0, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1, 1, true);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(1, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1.25, 1.25, true);\r\n\r\nfor (double val=0; !myWindow.close(); )\r\n{\r\n    Y = sin(X);\r\n\r\n    myWindow(0,0).plot(X, Y);\r\n    myWindow(1,0).scatter(X, Y + noise, AF_MARKER_POINT);\r\n\r\n    myWindow.show();\r\n\r\n    X = X + PRECISION * float(sign);\r\n    val += PRECISION * float(sign);\r\n\r\n    if (val>af::Pi) {\r\n        sign = -1;\r\n    } else if (val<-af::Pi) {\r\n        sign = 1;\r\n    }\r\n}\r\n</code></pre>\r\n<p>Above code should render as the following and you can find the complete example <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/plot2d.cpp\" target=\"_blank\">here</a>.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d-1024x927.png\" alt=\"plot2d\" width=\"742\" height=\"672\" class=\"alignnone size-large wp-image-9183\" /></a>\r\n\r\n<h5><a id=\"New_Features_56\"></a>New Features</h5>\r\n\r\n<h6>Vector Fields</h6>\r\n<p>An example of how to render your data as a vector field has been provided in our examples which you can find <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/field.cpp\" target=\"_blank\">here</a>. This example shows a static and dynamic vector field in multi-view mode. Given below is the screenshot of this example while running.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield-1024x550.png\" alt=\"vfield\" width=\"742\" height=\"399\" class=\"alignnone size-large wp-image-9185\" /></a>\r\n\r\n<p>Apart from the above new renderables, each window/view supports overlay of different renderables now. If you are not already aware of what a view (graphics context) in ArrayFire is: Each draw call in ArrayFire is either rendered to whole window(single view) or a portion of the screen(multiview mode or grid mode), this subset portion of the whole window is called a view.\r\n\r\n<p>Given below is a screen shot of mult-view mode which renders an image, 2d line plot, histogram and surface. You can find the corresponding example code <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/pde/swe.cpp\" target=\"_blank\">here</a>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe-1024x549.png\" alt=\"swe\" width=\"742\" height=\"398\" class=\"alignnone size-large wp-image-9184\" /></a>\r\n\r\nThe following renerables support overlay if they are of same type of object (2d/3d).</p>\r\n<ul>\r\n<li>plot</li>\r\n<li>hist</li>\r\n<li>surface</li>\r\n<li>vector fields</li>\r\n</ul>\r\n<p>You can see an example screenshot of how overlay of plots looks like below.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\" alt=\"multipleplot\" width=\"1002\" height=\"828\" class=\"alignnone size-full wp-image-9182\" /></a>\r\n\r\n<h5><a id=\"Misc_Changes_74\"></a>Misc Changes</h5>\r\n<p>Removed <a href=\"http://glew.sourceforge.net/\">GLEW</a> and replaced with <a href=\"https://github.com/cginternals/glbinding\">glbinding</a>.</p>\r\n<h5><a id=\"Conclusion_77\"></a>Conclusion</h5>\r\n<p>We intend to add more graphcis functionality in future releases, keep checking for new posts from us. Please do try the new graphics functionality and kindly let us know if you find any bugs in the library.</p>\r\n\r\n</body></html>','Graphics updates in ArrayFire v3.4.0','','inherit','closed','closed','','9172-revision-v1','','','2016-09-19 16:04:54','2016-09-19 20:04:54','',9172,'http://sandbox.arrayfire.com/9172-revision-v1/',0,'revision','',0),(9207,17729,'2016-09-19 16:11:07','2016-09-19 20:11:07','','histogram','','inherit','open','closed','','histogram','','','2016-09-19 16:11:07','2016-09-19 20:11:07','',9172,'http://sandbox.arrayfire.com/wp-content/uploads/2016/09/histogram.png',0,'attachment','image/png',0),(9210,17729,'2016-09-19 16:11:55','2016-09-19 20:11:55','<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Untitled Document.md</title><style></style></head><body id=\"preview\">\r\n<p>This post outlines the new graphics features and updates that come along with ArrayFire v3.4.0 release.</p>\r\n<h5><a id=\"Behavioral_Changes_13\"></a>Behavioral Changes</h5>\r\n<p>Prior to v3.4.0 release, all plotting functions used to compute the axes limits pertaining to corresponding data automatically. This additional step of computing axes is now not performed in any plotting functions. Instead, new API has been provided to set the axes limits of the corresponding graph plot.\r\n\r\n<p>Given below is an example showing the code changes one has to make to their C++ ArrayFire program that uses graphics functionality of ArrayFire.</p>\r\n\r\n<pre><code class=\"language-cpp\">\r\naf::Window myWindow(800, 800, \"2D Plot example: ArrayFire\");\r\n\r\narray Y;\r\nint sign = 1;\r\narray X = seq(-af::Pi, af::Pi, PRECISION);\r\narray noise = randn(X.dims(0))/5.f;\r\n\r\nmyWindow.grid(2, 1);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(0, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1, 1, true);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(1, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1.25, 1.25, true);\r\n\r\nfor (double val=0; !myWindow.close(); )\r\n{\r\n    Y = sin(X);\r\n\r\n    myWindow(0,0).plot(X, Y);\r\n    myWindow(1,0).scatter(X, Y + noise, AF_MARKER_POINT);\r\n\r\n    myWindow.show();\r\n\r\n    X = X + PRECISION * float(sign);\r\n    val += PRECISION * float(sign);\r\n\r\n    if (val>af::Pi) {\r\n        sign = -1;\r\n    } else if (val<-af::Pi) {\r\n        sign = 1;\r\n    }\r\n}\r\n</code></pre>\r\n<p>Above code should render as the following and you can find the complete example <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/plot2d.cpp\" target=\"_blank\">here</a>.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d-1024x927.png\" alt=\"plot2d\" width=\"742\" height=\"672\" class=\"alignnone size-large wp-image-9183\" /></a>\r\n\r\n<h5><a id=\"New_Features_56\"></a>New Features</h5>\r\n\r\n<h6>Vector Fields</h6>\r\n<p>An example of how to render your data as a vector field has been provided in our examples which you can find <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/field.cpp\" target=\"_blank\">here</a>. This example shows a static and dynamic vector field in multi-view mode. Given below is the screenshot of this example while running.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield-1024x550.png\" alt=\"vfield\" width=\"742\" height=\"399\" class=\"alignnone size-large wp-image-9185\" /></a>\r\n\r\n<p>Apart from the above new renderables, each window/view supports overlay of different renderables now. If you are not already aware of what a view (graphics context) in ArrayFire is: Each draw call in ArrayFire is either rendered to whole window(single view) or a portion of the screen(multiview mode or grid mode), this subset portion of the whole window is called a view.\r\n\r\n<p>Given below is a screen shot of mult-view mode which renders an image, 2d line plot, histogram and surface. You can find the corresponding example code <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/pde/swe.cpp\" target=\"_blank\">here</a>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe-1024x549.png\" alt=\"swe\" width=\"742\" height=\"398\" class=\"alignnone size-large wp-image-9184\" /></a>\r\n\r\nThe following renerables support overlay if they are of same type of object (2d/3d).</p>\r\n<ul>\r\n<li>plot <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot3.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot3-150x150.png\" alt=\"plot3\" width=\"150\" height=\"150\" class=\"alignnone size-thumbnail wp-image-9208\" /></a></li>\r\n<li>histogram <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/histogram.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/histogram-300x152.png\" alt=\"histogram\" width=\"300\" height=\"152\" class=\"alignnone size-medium wp-image-9207\" /></a></li>\r\n<li>surface <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/surface.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/surface-300x300.png\" alt=\"surface\" width=\"300\" height=\"300\" class=\"alignnone size-medium wp-image-9209\" /></a></li>\r\n<li>vector fields</li>\r\n</ul>\r\n<p>You can see an example screenshot of how overlay of plots looks like below.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\" alt=\"multipleplot\" width=\"1002\" height=\"828\" class=\"alignnone size-full wp-image-9182\" /></a>\r\n\r\n<h5><a id=\"Misc_Changes_74\"></a>Misc Changes</h5>\r\n<p>Removed <a href=\"http://glew.sourceforge.net/\">GLEW</a> and replaced with <a href=\"https://github.com/cginternals/glbinding\">glbinding</a>.</p>\r\n<h5><a id=\"Conclusion_77\"></a>Conclusion</h5>\r\n<p>We intend to add more graphcis functionality in future releases, keep checking for new posts from us. Please do try the new graphics functionality and kindly let us know if you find any bugs in the library.</p>\r\n\r\n</body></html>','Graphics updates in ArrayFire v3.4.0','','inherit','closed','closed','','9172-revision-v1','','','2016-09-19 16:11:55','2016-09-19 20:11:55','',9172,'http://sandbox.arrayfire.com/9172-revision-v1/',0,'revision','',0),(9211,17729,'2016-09-19 16:15:30','2016-09-19 20:15:30','','plot3','','inherit','open','closed','','plot3','','','2016-09-19 16:15:30','2016-09-19 20:15:30','',9172,'http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot3.png',0,'attachment','image/png',0),(9212,17729,'2016-09-19 16:15:33','2016-09-19 20:15:33','','surface','','inherit','open','closed','','surface','','','2016-09-19 16:15:33','2016-09-19 20:15:33','',9172,'http://sandbox.arrayfire.com/wp-content/uploads/2016/09/surface.png',0,'attachment','image/png',0),(9213,17729,'2016-09-19 16:16:17','2016-09-19 20:16:17','<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Untitled Document.md</title><style></style></head><body id=\"preview\">\r\n<p>This post outlines the new graphics features and updates that come along with ArrayFire v3.4.0 release.</p>\r\n<h5><a id=\"Behavioral_Changes_13\"></a>Behavioral Changes</h5>\r\n<p>Prior to v3.4.0 release, all plotting functions used to compute the axes limits pertaining to corresponding data automatically. This additional step of computing axes is now not performed in any plotting functions. Instead, new API has been provided to set the axes limits of the corresponding graph plot.\r\n\r\n<p>Given below is an example showing the code changes one has to make to their C++ ArrayFire program that uses graphics functionality of ArrayFire.</p>\r\n\r\n<pre><code class=\"language-cpp\">\r\naf::Window myWindow(800, 800, \"2D Plot example: ArrayFire\");\r\n\r\narray Y;\r\nint sign = 1;\r\narray X = seq(-af::Pi, af::Pi, PRECISION);\r\narray noise = randn(X.dims(0))/5.f;\r\n\r\nmyWindow.grid(2, 1);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(0, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1, 1, true);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(1, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1.25, 1.25, true);\r\n\r\nfor (double val=0; !myWindow.close(); )\r\n{\r\n    Y = sin(X);\r\n\r\n    myWindow(0,0).plot(X, Y);\r\n    myWindow(1,0).scatter(X, Y + noise, AF_MARKER_POINT);\r\n\r\n    myWindow.show();\r\n\r\n    X = X + PRECISION * float(sign);\r\n    val += PRECISION * float(sign);\r\n\r\n    if (val>af::Pi) {\r\n        sign = -1;\r\n    } else if (val<-af::Pi) {\r\n        sign = 1;\r\n    }\r\n}\r\n</code></pre>\r\n<p>Above code should render as the following and you can find the complete example <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/plot2d.cpp\" target=\"_blank\">here</a>.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d-1024x927.png\" alt=\"plot2d\" width=\"742\" height=\"672\" class=\"alignnone size-large wp-image-9183\" /></a>\r\n\r\n<h5><a id=\"New_Features_56\"></a>New Features</h5>\r\n\r\n<h6>Vector Fields</h6>\r\n<p>An example of how to render your data as a vector field has been provided in our examples which you can find <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/field.cpp\" target=\"_blank\">here</a>. This example shows a static and dynamic vector field in multi-view mode. Given below is the screenshot of this example while running.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield-1024x550.png\" alt=\"vfield\" width=\"742\" height=\"399\" class=\"alignnone size-large wp-image-9185\" /></a>\r\n\r\n<p>Apart from the above new renderables, each window/view supports overlay of different renderables now. If you are not already aware of what a view (graphics context) in ArrayFire is: Each draw call in ArrayFire is either rendered to whole window(single view) or a portion of the screen(multiview mode or grid mode), this subset portion of the whole window is called a view.\r\n\r\n<p>Given below is a screen shot of mult-view mode which renders an image, 2d line plot, histogram and surface. You can find the corresponding example code <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/pde/swe.cpp\" target=\"_blank\">here</a>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe-1024x549.png\" alt=\"swe\" width=\"742\" height=\"398\" class=\"alignnone size-large wp-image-9184\" /></a>\r\n\r\nThe following renerables support overlay if they are of same type of object (2d/3d).</p>\r\n<ul>\r\n<li>plot <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot3.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot3-300x300.png\" alt=\"plot3\" width=\"300\" height=\"300\" class=\"alignnone size-medium wp-image-9211\" /></a></li>\r\n<li>histogram <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/histogram.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/histogram-300x152.png\" alt=\"histogram\" width=\"300\" height=\"152\" class=\"alignnone size-medium wp-image-9207\" /></a></li>\r\n<li>surface <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/surface.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/surface-300x300.png\" alt=\"surface\" width=\"300\" height=\"300\" class=\"alignnone size-medium wp-image-9212\" /></a></li>\r\n<li>vector fields</li>\r\n</ul>\r\n<p>You can see an example screenshot of how overlay of plots looks like below.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\" alt=\"multipleplot\" width=\"1002\" height=\"828\" class=\"alignnone size-full wp-image-9182\" /></a>\r\n\r\n<h5><a id=\"Misc_Changes_74\"></a>Misc Changes</h5>\r\n<p>Removed <a href=\"http://glew.sourceforge.net/\">GLEW</a> and replaced with <a href=\"https://github.com/cginternals/glbinding\">glbinding</a>.</p>\r\n<h5><a id=\"Conclusion_77\"></a>Conclusion</h5>\r\n<p>We intend to add more graphcis functionality in future releases, keep checking for new posts from us. Please do try the new graphics functionality and kindly let us know if you find any bugs in the library.</p>\r\n\r\n</body></html>','Graphics updates in ArrayFire v3.4.0','','inherit','closed','closed','','9172-revision-v1','','','2016-09-19 16:16:17','2016-09-19 20:16:17','',9172,'http://sandbox.arrayfire.com/9172-revision-v1/',0,'revision','',0),(9216,17729,'2016-09-19 16:36:13','2016-09-19 20:36:13','','gravity','','inherit','open','closed','','gravity','','','2016-09-19 16:36:13','2016-09-19 20:36:13','',9172,'http://sandbox.arrayfire.com/wp-content/uploads/2016/09/gravity.gif',0,'attachment','image/gif',0),(9217,17729,'2016-09-19 16:36:58','2016-09-19 20:36:58','<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Untitled Document.md</title><style></style></head><body id=\"preview\">\r\n<p>This post outlines the new graphics features and updates that come along with ArrayFire v3.4.0 release.</p>\r\n<h5><a id=\"Behavioral_Changes_13\"></a>Behavioral Changes</h5>\r\n<p>Prior to v3.4.0 release, all plotting functions used to compute the axes limits pertaining to corresponding data automatically. This additional step of computing axes is now not performed in any plotting functions. Instead, new API has been provided to set the axes limits of the corresponding graph plot.\r\n\r\n<p>Given below is an example showing the code changes one has to make to their C++ ArrayFire program that uses graphics functionality of ArrayFire.</p>\r\n\r\n<pre><code class=\"language-cpp\">\r\naf::Window myWindow(800, 800, \"2D Plot example: ArrayFire\");\r\n\r\narray Y;\r\nint sign = 1;\r\narray X = seq(-af::Pi, af::Pi, PRECISION);\r\narray noise = randn(X.dims(0))/5.f;\r\n\r\nmyWindow.grid(2, 1);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(0, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1, 1, true);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(1, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1.25, 1.25, true);\r\n\r\nfor (double val=0; !myWindow.close(); )\r\n{\r\n    Y = sin(X);\r\n\r\n    myWindow(0,0).plot(X, Y);\r\n    myWindow(1,0).scatter(X, Y + noise, AF_MARKER_POINT);\r\n\r\n    myWindow.show();\r\n\r\n    X = X + PRECISION * float(sign);\r\n    val += PRECISION * float(sign);\r\n\r\n    if (val>af::Pi) {\r\n        sign = -1;\r\n    } else if (val<-af::Pi) {\r\n        sign = 1;\r\n    }\r\n}\r\n</code></pre>\r\n<p>Above code should render as the following and you can find the complete example <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/plot2d.cpp\" target=\"_blank\">here</a>.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d-1024x927.png\" alt=\"plot2d\" width=\"742\" height=\"672\" class=\"alignnone size-large wp-image-9183\" /></a>\r\n\r\n<h5><a id=\"New_Features_56\"></a>New Features</h5>\r\n\r\n<h6>Vector Fields</h6>\r\n<p>An example of how to render your data as a vector field has been provided in our examples which you can find <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/field.cpp\" target=\"_blank\">here</a>. This example shows a static and dynamic vector field in multi-view mode. Given below is the screenshot of this example while running.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield-1024x550.png\" alt=\"vfield\" width=\"742\" height=\"399\" class=\"alignnone size-large wp-image-9185\" /></a>\r\n\r\n<p>Apart from the above new renderables, each window/view supports overlay of different renderables now. If you are not already aware of what a view (graphics context) in ArrayFire is: Each draw call in ArrayFire is either rendered to whole window(single view) or a portion of the screen(multiview mode or grid mode), this subset portion of the whole window is called a view.\r\n\r\n<p>Given below is a screen shot of mult-view mode which renders an image, 2d line plot, histogram and surface. You can find the corresponding example code <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/pde/swe.cpp\" target=\"_blank\">here</a>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe-1024x549.png\" alt=\"swe\" width=\"742\" height=\"398\" class=\"alignnone size-large wp-image-9184\" /></a>\r\n\r\nThe following renerables support overlay if they are of same type of object (2d/3d).</p>\r\n<ul>\r\n<li>plot <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot3.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot3-300x300.png\" alt=\"plot3\" width=\"300\" height=\"300\" class=\"alignnone size-medium wp-image-9211\" /></a></li>\r\n<li>histogram <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/histogram.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/histogram-300x152.png\" alt=\"histogram\" width=\"300\" height=\"152\" class=\"alignnone size-medium wp-image-9207\" /></a></li>\r\n<li>surface <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/surface.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/surface-300x300.png\" alt=\"surface\" width=\"300\" height=\"300\" class=\"alignnone size-medium wp-image-9212\" /></a></li>\r\n<li>vector fields</li>\r\n</ul>\r\n<p>You can see an example screenshot of how overlay of plots looks like below.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\" alt=\"multipleplot\" width=\"1002\" height=\"828\" class=\"alignnone size-full wp-image-9182\" /></a>\r\n\r\nWhile taking screen shots for the images for new rendering functions, i found the gifs for our simple yet fun to watch examples - conway and gravity simulation. \r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/conway.gif\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/conway-300x300.gif\" alt=\"conway\" width=\"300\" height=\"300\" class=\"alignnone size-medium wp-image-9214\" /></a> <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/conway_pretty.gif\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/conway_pretty-300x300.gif\" alt=\"conway_pretty\" width=\"300\" height=\"300\" class=\"alignnone size-medium wp-image-9215\" /></a> <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/gravity.gif\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/gravity.gif\" alt=\"gravity\" width=\"256\" height=\"256\" class=\"alignnone size-full wp-image-9216\" /></a>\r\nHere you go, enjoy the gifs! You can find the code for these samples here, <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/conway.cpp\" target=\"_blank\">conway</a> and <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/gravity_sim.cpp\" target=\"_blank\">gravity</a>.\r\n\r\n<h5><a id=\"Misc_Changes_74\"></a>Misc Changes</h5>\r\n<p>Removed <a href=\"http://glew.sourceforge.net/\">GLEW</a> and replaced with <a href=\"https://github.com/cginternals/glbinding\">glbinding</a>.</p>\r\n<h5><a id=\"Conclusion_77\"></a>Conclusion</h5>\r\n<p>We intend to add more graphcis functionality in future releases, keep checking for new posts from us. Please do try the new graphics functionality and kindly let us know if you find any bugs in the library.</p>\r\n\r\n</body></html>','Graphics updates in ArrayFire v3.4.0','','inherit','closed','closed','','9172-revision-v1','','','2016-09-19 16:36:58','2016-09-19 20:36:58','',9172,'http://sandbox.arrayfire.com/9172-revision-v1/',0,'revision','',0),(9218,17729,'2016-09-19 16:38:20','2016-09-19 20:38:20','<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Untitled Document.md</title><style></style></head><body id=\"preview\">\r\n<p>This post outlines the new graphics features and updates that come along with ArrayFire v3.4.0 release.</p>\r\n<h5><a id=\"Behavioral_Changes_13\"></a>Behavioral Changes</h5>\r\n<p>Prior to v3.4.0 release, all plotting functions used to compute the axes limits pertaining to corresponding data automatically. This additional step of computing axes is now not performed in any plotting functions. Instead, new API has been provided to set the axes limits of the corresponding graph plot.\r\n\r\n<p>Given below is an example showing the code changes one has to make to their C++ ArrayFire program that uses graphics functionality of ArrayFire.</p>\r\n\r\n<pre><code class=\"language-cpp\">\r\naf::Window myWindow(800, 800, \"2D Plot example: ArrayFire\");\r\n\r\narray Y;\r\nint sign = 1;\r\narray X = seq(-af::Pi, af::Pi, PRECISION);\r\narray noise = randn(X.dims(0))/5.f;\r\n\r\nmyWindow.grid(2, 1);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(0, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1, 1, true);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(1, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1.25, 1.25, true);\r\n\r\nfor (double val=0; !myWindow.close(); )\r\n{\r\n    Y = sin(X);\r\n\r\n    myWindow(0,0).plot(X, Y);\r\n    myWindow(1,0).scatter(X, Y + noise, AF_MARKER_POINT);\r\n\r\n    myWindow.show();\r\n\r\n    X = X + PRECISION * float(sign);\r\n    val += PRECISION * float(sign);\r\n\r\n    if (val>af::Pi) {\r\n        sign = -1;\r\n    } else if (val<-af::Pi) {\r\n        sign = 1;\r\n    }\r\n}\r\n</code></pre>\r\n<p>Above code should render as the following and you can find the complete example <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/plot2d.cpp\" target=\"_blank\">here</a>.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d-1024x927.png\" alt=\"plot2d\" width=\"742\" height=\"672\" class=\"alignnone size-large wp-image-9183\" /></a>\r\n\r\n<h5><a id=\"New_Features_56\"></a>New Features</h5>\r\n\r\n<h6>Vector Fields</h6>\r\n<p>An example of how to render your data as a vector field has been provided in our examples which you can find <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/field.cpp\" target=\"_blank\">here</a>. This example shows a static and dynamic vector field in multi-view mode. Given below is the screenshot of this example while running.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield-1024x550.png\" alt=\"vfield\" width=\"742\" height=\"399\" class=\"alignnone size-large wp-image-9185\" /></a>\r\n\r\n<p>Apart from the above new renderables, each window/view supports overlay of different renderables now. If you are not already aware of what a view (graphics context) in ArrayFire is: Each draw call in ArrayFire is either rendered to whole window(single view) or a portion of the screen(multiview mode or grid mode), this subset portion of the whole window is called a view.\r\n\r\n<p>Given below is a screen shot of mult-view mode which renders an image, 2d line plot, histogram and surface. You can find the corresponding example code <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/pde/swe.cpp\" target=\"_blank\">here</a>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe-1024x549.png\" alt=\"swe\" width=\"742\" height=\"398\" class=\"alignnone size-large wp-image-9184\" /></a>\r\n\r\nThe following renerables support overlay if they are of same type of object (2d/3d).</p>\r\n<ul>\r\n<li><a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/plot3.cpp\" target=\"_blank\">plot</a> <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot3.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot3-300x300.png\" alt=\"plot3\" width=\"300\" height=\"300\" class=\"alignnone size-medium wp-image-9211\" /></a></li>\r\n<li><a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/histogram.cpp\" target=\"_blank\">histogram</a> <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/histogram.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/histogram-300x152.png\" alt=\"histogram\" width=\"300\" height=\"152\" class=\"alignnone size-medium wp-image-9207\" /></a></li>\r\n<li><a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/surface.cpp\" target=\"_blank\">surface</a> <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/surface.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/surface-300x300.png\" alt=\"surface\" width=\"300\" height=\"300\" class=\"alignnone size-medium wp-image-9212\" /></a></li>\r\n<li>vector fields</li>\r\n</ul>\r\n<p>You can see an example screenshot of how overlay of plots looks like below.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\" alt=\"multipleplot\" width=\"1002\" height=\"828\" class=\"alignnone size-full wp-image-9182\" /></a>\r\n\r\nWhile taking screen shots for the images for new rendering functions, i found the gifs for our simple yet fun to watch examples - conway and gravity simulation. \r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/conway.gif\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/conway-300x300.gif\" alt=\"conway\" width=\"300\" height=\"300\" class=\"alignnone size-medium wp-image-9214\" /></a> <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/conway_pretty.gif\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/conway_pretty-300x300.gif\" alt=\"conway_pretty\" width=\"300\" height=\"300\" class=\"alignnone size-medium wp-image-9215\" /></a> <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/gravity.gif\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/gravity.gif\" alt=\"gravity\" width=\"256\" height=\"256\" class=\"alignnone size-full wp-image-9216\" /></a>\r\nHere you go, enjoy the gifs! You can find the code for these samples here, <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/conway.cpp\" target=\"_blank\">conway</a> and <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/gravity_sim.cpp\" target=\"_blank\">gravity</a>.\r\n\r\n<h5><a id=\"Misc_Changes_74\"></a>Misc Changes</h5>\r\n<p>Removed <a href=\"http://glew.sourceforge.net/\">GLEW</a> and replaced with <a href=\"https://github.com/cginternals/glbinding\">glbinding</a>.</p>\r\n<h5><a id=\"Conclusion_77\"></a>Conclusion</h5>\r\n<p>We intend to add more graphcis functionality in future releases, keep checking for new posts from us. Please do try the new graphics functionality and kindly let us know if you find any bugs in the library.</p>\r\n\r\n</body></html>','Graphics updates in ArrayFire v3.4.0','','inherit','closed','closed','','9172-revision-v1','','','2016-09-19 16:38:20','2016-09-19 20:38:20','',9172,'http://sandbox.arrayfire.com/9172-revision-v1/',0,'revision','',0),(9219,11,'2016-09-19 16:40:25','2016-09-19 20:40:25','With the release of <strong>ArrayFire v3.4</strong>, we have added a number of features that will help our vast range of users. Our users have been asking us for a way to reduce the memory footprint of their data on the GPU. And now we have answered our users\' requests.\r\nIntroducing Sparse Matrices in ArrayFire!\r\n\r\nSparse Data Structure\r\nA sparse data structure is one where all the non-zero elements are not stored. Sparse matrices are useful when the number of zero-values elements are >> number of non-zero elements (sparsity of the matrix is high).\r\nThe sparse data structure in general is stored as 3 arrays.\r\n* A data or values array containing all the non-zero elements\r\n* A vector for row indices (based on storage format).\r\n* A vector for column indices (based on storage format).\r\n\r\nThere are many ways to store sparse matrices, the most prominent of which are <a href=\"https://en.wikipedia.org/wiki/Sparse_matrix#Compressed_sparse_row_.28CSR.2C_CRS_or_Yale_format.29\">Compressed Sparse Row</a>, <a href=\"https://en.wikipedia.org/wiki/Sparse_matrix#Compressed_sparse_column_.28CSC_or_CCS.29\">Compressed Storage Column</a>, <a href=\"https://en.wikipedia.org/wiki/Sparse_matrix#Coordinate_list_.28COO.29\">Coordinate Format</a>. ArrayFire supports CSR and COO format, with CSC support coming in future releases.\r\n\r\nA more detailed description of Sparse Matrix can be found on <a href=\"https://en.wikipedia.org/wiki/Sparse_matrix\">Wikipedia</a>.\r\n\r\nSparse in ArrayFire\r\nIn ArrayFire, Sparse arrays use the same user facing object - af::array. This makes working with sparse arrays all the more seamless.\r\nWe have added a function <a href=\"http://arrayfire.org/docs/group__method__mat.htm#ga5945f95549bae25f75694a69d98ca584\">af::array::issparse()</a> that allows users to check if an array is sparse or not.\r\nAlthough externally, there is no difference between a sparse and dense array, internally, the sparse array is stored as 3 independent arrays along with other meta data.\r\nThese arrays, as well as other properties can be fetched using the <a href=\"http://arrayfire.org/docs/group__sparse__func.htm\">sparse functions</a>.\r\n\r\nSparse Functionality\r\nAs of v3.4, the following features are supported for sparse arrays:\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm\">Creation for sparse arrays.</a>\r\n  * <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gae4621e58bfaf6d80668309824fde86c0\">From 3 (data, row, column) sparse host or device memory vectors.</a>\r\n  * <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gae9a843c7e93b05e6b090ca32b271ebe9\">From 3 (data, row, column) sparse af::arrays.</a>\r\n  * <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gac0d367d8c9daf27b36a6981bbfcdb970\">From dense af::array.</a>\r\n  * To create a sparse array from host or device dense array, first create a dense af::array, and then pass it to create sparse af::array from dense af::array.\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__convert__to.htm\">Storage format conversions.</a>\r\n  * <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gac0d367d8c9daf27b36a6981bbfcdb970\">Dense to CSR/COO.</a>\r\n  * <a href=\"http://arrayfire.org/docs/group__sparse__func__dense.htm\">CSR/COO to dense.</a>\r\n* Sparse-Dense Matrix Multiplication (SPMM/SPMV)\r\n  * Sparse Matrix - Dense Matrix\r\n  * Sparse Matrix - Dense Vector\r\n  * Options for Sparse Matrix to be transposed.\r\nThe Sparse-Dense Matrix Multiplcation is a implemented as a part of <a href=\"http://arrayfire.org/docs/group__blas__func__matmul.htm#ga63306b6ed967bd1055086db862fe885b\">af::matmul()</a>. This is part of making the usage of sparse arrays seamless with regular arrays.\r\n\r\nExample\r\n\r\n\r\nPerformance and Memory Footprint\r\n\r\nAs with all ArrayFire features, Sparse support is available across all backends and all architectures.','Sparse Matrices in ArrayFire','','inherit','closed','closed','','9190-revision-v1','','','2016-09-19 16:40:25','2016-09-19 20:40:25','',9190,'http://sandbox.arrayfire.com/9190-revision-v1/',0,'revision','',0),(9220,17729,'2016-09-19 16:40:30','2016-09-19 20:40:30','<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Untitled Document.md</title><style></style></head><body id=\"preview\">\r\n<p>This post outlines the new graphics features and updates that come along with ArrayFire v3.4.0 release.</p>\r\n<h5><a id=\"Behavioral_Changes_13\"></a>Behavioral Changes</h5>\r\n<p>Prior to v3.4.0 release, all plotting functions used to compute the axes limits pertaining to corresponding data automatically. This additional step of computing axes is now not performed in any plotting functions. Instead, new API has been provided to set the axes limits of the corresponding graph plot.\r\n\r\n<p>Given below is an example showing the code changes one has to make to their C++ ArrayFire program that uses graphics functionality of ArrayFire.</p>\r\n\r\n<pre><code class=\"language-cpp\">\r\naf::Window myWindow(800, 800, \"2D Plot example: ArrayFire\");\r\n\r\narray Y;\r\nint sign = 1;\r\narray X = seq(-af::Pi, af::Pi, PRECISION);\r\narray noise = randn(X.dims(0))/5.f;\r\n\r\nmyWindow.grid(2, 1);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(0, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1, 1, true);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(1, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1.25, 1.25, true);\r\n\r\nfor (double val=0; !myWindow.close(); )\r\n{\r\n    Y = sin(X);\r\n\r\n    myWindow(0,0).plot(X, Y);\r\n    myWindow(1,0).scatter(X, Y + noise, AF_MARKER_POINT);\r\n\r\n    myWindow.show();\r\n\r\n    X = X + PRECISION * float(sign);\r\n    val += PRECISION * float(sign);\r\n\r\n    if (val>af::Pi) {\r\n        sign = -1;\r\n    } else if (val<-af::Pi) {\r\n        sign = 1;\r\n    }\r\n}\r\n</code></pre>\r\n<p>Above code should render as the following and you can find the complete example <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/plot2d.cpp\" target=\"_blank\">here</a>.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d-1024x927.png\" alt=\"plot2d\" width=\"742\" height=\"672\" class=\"alignnone size-large wp-image-9183\" /></a>\r\n\r\n<h5><a id=\"New_Features_56\"></a>New Features</h5>\r\n\r\n<h6>Vector Fields</h6>\r\n<p>An example of how to render your data as a vector field has been provided in our examples which you can find <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/field.cpp\" target=\"_blank\">here</a>. This example shows a static and dynamic vector field in multi-view mode. Given below is the screenshot of this example while running.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield-1024x550.png\" alt=\"vfield\" width=\"742\" height=\"399\" class=\"alignnone size-large wp-image-9185\" /></a>\r\n\r\n<p>Apart from the above new renderables, each window/view supports overlay of different renderables now. If you are not already aware of what a view (graphics context) in ArrayFire is: Each draw call in ArrayFire is either rendered to whole window(single view) or a portion of the screen(multiview mode or grid mode), this subset portion of the whole window is called a view.\r\n\r\n<p>Given below is a screen shot of mult-view mode which renders an image, 2d line plot, histogram and surface. You can find the corresponding example code <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/pde/swe.cpp\" target=\"_blank\">here</a>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe-1024x549.png\" alt=\"swe\" width=\"742\" height=\"398\" class=\"alignnone size-large wp-image-9184\" /></a>\r\n\r\nThe following renerables support overlay if they are of same type of object (2d/3d).</p>\r\n<ul>\r\n<li><a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/plot3.cpp\" target=\"_blank\">plot</a> <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot3.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot3-300x300.png\" alt=\"plot3\" width=\"300\" height=\"300\" class=\"alignnone size-medium wp-image-9211\" /></a></li>\r\n<li><a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/histogram.cpp\" target=\"_blank\">histogram</a> <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/histogram.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/histogram-300x152.png\" alt=\"histogram\" width=\"300\" height=\"152\" class=\"alignnone size-medium wp-image-9207\" /></a></li>\r\n<li><a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/surface.cpp\" target=\"_blank\">surface</a> <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/surface.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/surface-300x300.png\" alt=\"surface\" width=\"300\" height=\"300\" class=\"alignnone size-medium wp-image-9212\" /></a></li>\r\n<li>vector fields</li>\r\n</ul>\r\n<p>You can see an example screenshot of how overlay of plots looks like below.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\" alt=\"multipleplot\" width=\"1002\" height=\"828\" class=\"alignnone size-full wp-image-9182\" /></a>\r\n\r\nWhile taking screen shots for the images for new rendering functions, i found the gifs for our simple yet fun to watch examples - conway and gravity simulation. \r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/conway.gif\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/conway.gif\" alt=\"conway\" width=\"512\" height=\"512\" class=\"alignnone size-full wp-image-9214\" /></a> <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/conway_pretty.gif\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/conway_pretty-300x300.gif\" alt=\"conway_pretty\" width=\"300\" height=\"300\" class=\"alignnone size-medium wp-image-9215\" /></a> <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/gravity.gif\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/gravity.gif\" alt=\"gravity\" width=\"256\" height=\"256\" class=\"alignnone size-full wp-image-9216\" /></a>\r\nHere you go, enjoy the gifs! You can find the code for these samples here, <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/conway.cpp\" target=\"_blank\">conway</a> and <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/gravity_sim.cpp\" target=\"_blank\">gravity</a>.\r\n\r\n<h5><a id=\"Misc_Changes_74\"></a>Misc Changes</h5>\r\n<p>Removed <a href=\"http://glew.sourceforge.net/\">GLEW</a> and replaced with <a href=\"https://github.com/cginternals/glbinding\">glbinding</a>.</p>\r\n<h5><a id=\"Conclusion_77\"></a>Conclusion</h5>\r\n<p>We intend to add more graphcis functionality in future releases, keep checking for new posts from us. Please do try the new graphics functionality and kindly let us know if you find any bugs in the library.</p>\r\n\r\n</body></html>','Graphics updates in ArrayFire v3.4.0','','inherit','closed','closed','','9172-revision-v1','','','2016-09-19 16:40:30','2016-09-19 20:40:30','',9172,'http://sandbox.arrayfire.com/9172-revision-v1/',0,'revision','',0),(9221,11,'2016-09-19 16:40:38','2016-09-19 20:40:38','With the release of <strong>ArrayFire v3.4</strong>, we have added a number of features that will help our vast range of users. Our users have been asking us for a way to reduce the memory footprint of their data on the GPU. And now we have answered our users\' requests.\r\nIntroducing Sparse Matrices in ArrayFire!\r\n\r\n## Sparse Data Structure\r\nA sparse data structure is one where all the non-zero elements are not stored. Sparse matrices are useful when the number of zero-values elements are >> number of non-zero elements (sparsity of the matrix is high).\r\nThe sparse data structure in general is stored as 3 arrays.\r\n* A data or values array containing all the non-zero elements\r\n* A vector for row indices (based on storage format).\r\n* A vector for column indices (based on storage format).\r\n\r\nThere are many ways to store sparse matrices, the most prominent of which are <a href=\"https://en.wikipedia.org/wiki/Sparse_matrix#Compressed_sparse_row_.28CSR.2C_CRS_or_Yale_format.29\">Compressed Sparse Row</a>, <a href=\"https://en.wikipedia.org/wiki/Sparse_matrix#Compressed_sparse_column_.28CSC_or_CCS.29\">Compressed Storage Column</a>, <a href=\"https://en.wikipedia.org/wiki/Sparse_matrix#Coordinate_list_.28COO.29\">Coordinate Format</a>. ArrayFire supports CSR and COO format, with CSC support coming in future releases.\r\n\r\nA more detailed description of Sparse Matrix can be found on <a href=\"https://en.wikipedia.org/wiki/Sparse_matrix\">Wikipedia</a>.\r\n\r\nSparse in ArrayFire\r\nIn ArrayFire, Sparse arrays use the same user facing object - af::array. This makes working with sparse arrays all the more seamless.\r\nWe have added a function <a href=\"http://arrayfire.org/docs/group__method__mat.htm#ga5945f95549bae25f75694a69d98ca584\">af::array::issparse()</a> that allows users to check if an array is sparse or not.\r\nAlthough externally, there is no difference between a sparse and dense array, internally, the sparse array is stored as 3 independent arrays along with other meta data.\r\nThese arrays, as well as other properties can be fetched using the <a href=\"http://arrayfire.org/docs/group__sparse__func.htm\">sparse functions</a>.\r\n\r\nSparse Functionality\r\nAs of v3.4, the following features are supported for sparse arrays:\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm\">Creation for sparse arrays.</a>\r\n  * <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gae4621e58bfaf6d80668309824fde86c0\">From 3 (data, row, column) sparse host or device memory vectors.</a>\r\n  * <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gae9a843c7e93b05e6b090ca32b271ebe9\">From 3 (data, row, column) sparse af::arrays.</a>\r\n  * <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gac0d367d8c9daf27b36a6981bbfcdb970\">From dense af::array.</a>\r\n  * To create a sparse array from host or device dense array, first create a dense af::array, and then pass it to create sparse af::array from dense af::array.\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__convert__to.htm\">Storage format conversions.</a>\r\n  * <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gac0d367d8c9daf27b36a6981bbfcdb970\">Dense to CSR/COO.</a>\r\n  * <a href=\"http://arrayfire.org/docs/group__sparse__func__dense.htm\">CSR/COO to dense.</a>\r\n* Sparse-Dense Matrix Multiplication (SPMM/SPMV)\r\n  * Sparse Matrix - Dense Matrix\r\n  * Sparse Matrix - Dense Vector\r\n  * Options for Sparse Matrix to be transposed.\r\nThe Sparse-Dense Matrix Multiplcation is a implemented as a part of <a href=\"http://arrayfire.org/docs/group__blas__func__matmul.htm#ga63306b6ed967bd1055086db862fe885b\">af::matmul()</a>. This is part of making the usage of sparse arrays seamless with regular arrays.\r\n\r\nExample\r\n\r\n\r\nPerformance and Memory Footprint\r\n\r\nAs with all ArrayFire features, Sparse support is available across all backends and all architectures.','Sparse Matrices in ArrayFire','','inherit','closed','closed','','9190-revision-v1','','','2016-09-19 16:40:38','2016-09-19 20:40:38','',9190,'http://sandbox.arrayfire.com/9190-revision-v1/',0,'revision','',0),(9222,11,'2016-09-19 16:41:26','2016-09-19 20:41:26','With the release of <strong>ArrayFire v3.4</strong>, we have added a number of features that will help our vast range of users. Our users have been asking us for a way to reduce the memory footprint of their data on the GPU. And now we have answered our users\' requests.\r\nIntroducing Sparse Matrices in ArrayFire!\r\n\r\n<h3>Sparse Data Structure</h3>\r\nA sparse data structure is one where all the non-zero elements are not stored. Sparse matrices are useful when the number of zero-values elements are &gt;&gt; number of non-zero elements (sparsity of the matrix is high).\r\nThe sparse data structure in general is stored as 3 arrays.\r\n* A data or values array containing all the non-zero elements\r\n* A vector for row indices (based on storage format).\r\n* A vector for column indices (based on storage format).\r\n\r\nThere are many ways to store sparse matrices, the most prominent of which are <a href=\"https://en.wikipedia.org/wiki/Sparse_matrix#Compressed_sparse_row_.28CSR.2C_CRS_or_Yale_format.29\">Compressed Sparse Row</a>, <a href=\"https://en.wikipedia.org/wiki/Sparse_matrix#Compressed_sparse_column_.28CSC_or_CCS.29\">Compressed Storage Column</a>, <a href=\"https://en.wikipedia.org/wiki/Sparse_matrix#Coordinate_list_.28COO.29\">Coordinate Format</a>. ArrayFire supports CSR and COO format, with CSC support coming in future releases.\r\n\r\nA more detailed description of Sparse Matrix can be found on <a href=\"https://en.wikipedia.org/wiki/Sparse_matrix\">Wikipedia</a>.\r\n\r\nSparse in ArrayFire\r\nIn ArrayFire, Sparse arrays use the same user facing object - af::array. This makes working with sparse arrays all the more seamless.\r\nWe have added a function <a href=\"http://arrayfire.org/docs/group__method__mat.htm#ga5945f95549bae25f75694a69d98ca584\">af::array::issparse()</a> that allows users to check if an array is sparse or not.\r\nAlthough externally, there is no difference between a sparse and dense array, internally, the sparse array is stored as 3 independent arrays along with other meta data.\r\nThese arrays, as well as other properties can be fetched using the <a href=\"http://arrayfire.org/docs/group__sparse__func.htm\">sparse functions</a>.\r\n\r\nSparse Functionality\r\nAs of v3.4, the following features are supported for sparse arrays:\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm\">Creation for sparse arrays.</a>\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gae4621e58bfaf6d80668309824fde86c0\">From 3 (data, row, column) sparse host or device memory vectors.</a>\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gae9a843c7e93b05e6b090ca32b271ebe9\">From 3 (data, row, column) sparse af::arrays.</a>\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gac0d367d8c9daf27b36a6981bbfcdb970\">From dense af::array.</a>\r\n* To create a sparse array from host or device dense array, first create a dense af::array, and then pass it to create sparse af::array from dense af::array.\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__convert__to.htm\">Storage format conversions.</a>\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gac0d367d8c9daf27b36a6981bbfcdb970\">Dense to CSR/COO.</a>\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__dense.htm\">CSR/COO to dense.</a>\r\n* Sparse-Dense Matrix Multiplication (SPMM/SPMV)\r\n* Sparse Matrix - Dense Matrix\r\n* Sparse Matrix - Dense Vector\r\n* Options for Sparse Matrix to be transposed.\r\nThe Sparse-Dense Matrix Multiplcation is a implemented as a part of <a href=\"http://arrayfire.org/docs/group__blas__func__matmul.htm#ga63306b6ed967bd1055086db862fe885b\">af::matmul()</a>. This is part of making the usage of sparse arrays seamless with regular arrays.\r\n\r\nExample\r\n\r\nPerformance and Memory Footprint\r\n\r\nAs with all ArrayFire features, Sparse support is available across all backends and all architectures.','Sparse Matrices in ArrayFire','','inherit','closed','closed','','9190-revision-v1','','','2016-09-19 16:41:26','2016-09-19 20:41:26','',9190,'http://sandbox.arrayfire.com/9190-revision-v1/',0,'revision','',0),(9223,11,'2016-09-19 16:42:56','2016-09-19 20:42:56','With the release of <strong>ArrayFire v3.4</strong>, we have added a number of features that will help our vast range of users. Our users have been asking us for a way to reduce the memory footprint of their data on the GPU. And now we have answered our users\' requests.\r\nIntroducing Sparse Matrices in ArrayFire!\r\n\r\n<h4>Sparse Data Structure</h4>\r\nA sparse data structure is one where all the non-zero elements are not stored. Sparse matrices are useful when the number of zero-values elements are &gt;&gt; number of non-zero elements (sparsity of the matrix is high).\r\nThe sparse data structure in general is stored as 3 arrays.\r\n* A data or values array containing all the non-zero elements\r\n* A vector for row indices (based on storage format).\r\n* A vector for column indices (based on storage format).\r\n\r\nThere are many ways to store sparse matrices, the most prominent of which are <a href=\"https://en.wikipedia.org/wiki/Sparse_matrix#Compressed_sparse_row_.28CSR.2C_CRS_or_Yale_format.29\">Compressed Sparse Row</a>, <a href=\"https://en.wikipedia.org/wiki/Sparse_matrix#Compressed_sparse_column_.28CSC_or_CCS.29\">Compressed Storage Column</a>, <a href=\"https://en.wikipedia.org/wiki/Sparse_matrix#Coordinate_list_.28COO.29\">Coordinate Format</a>. ArrayFire supports CSR and COO format, with CSC support coming in future releases.\r\n\r\nA more detailed description of Sparse Matrix can be found on <a href=\"https://en.wikipedia.org/wiki/Sparse_matrix\">Wikipedia</a>.\r\n\r\n<h4>Sparse in ArrayFire</h4>\r\nIn ArrayFire, Sparse arrays use the same user facing object - af::array. This makes working with sparse arrays all the more seamless.\r\nWe have added a function <a href=\"http://arrayfire.org/docs/group__method__mat.htm#ga5945f95549bae25f75694a69d98ca584\">af::array::issparse()</a> that allows users to check if an array is sparse or not.\r\nAlthough externally, there is no difference between a sparse and dense array, internally, the sparse array is stored as 3 independent arrays along with other meta data.\r\nThese arrays, as well as other properties can be fetched using the <a href=\"http://arrayfire.org/docs/group__sparse__func.htm\">sparse functions</a>.\r\n\r\n<h4>Sparse Functionality</h4>\r\nAs of v3.4, the following features are supported for sparse arrays:\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm\">Creation for sparse arrays.</a>\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gae4621e58bfaf6d80668309824fde86c0\">From 3 (data, row, column) sparse host or device memory vectors.</a>\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gae9a843c7e93b05e6b090ca32b271ebe9\">From 3 (data, row, column) sparse af::arrays.</a>\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gac0d367d8c9daf27b36a6981bbfcdb970\">From dense af::array.</a>\r\n* To create a sparse array from host or device dense array, first create a dense af::array, and then pass it to create sparse af::array from dense af::array.\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__convert__to.htm\">Storage format conversions.</a>\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gac0d367d8c9daf27b36a6981bbfcdb970\">Dense to CSR/COO.</a>\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__dense.htm\">CSR/COO to dense.</a>\r\n* Sparse-Dense Matrix Multiplication (SPMM/SPMV)\r\n* Sparse Matrix - Dense Matrix\r\n* Sparse Matrix - Dense Vector\r\n* Options for Sparse Matrix to be transposed.\r\nThe Sparse-Dense Matrix Multiplcation is a implemented as a part of <a href=\"http://arrayfire.org/docs/group__blas__func__matmul.htm#ga63306b6ed967bd1055086db862fe885b\">af::matmul()</a>. This is part of making the usage of sparse arrays seamless with regular arrays.\r\n\r\n<h4>Example</h4>\r\n\r\n<h4>Performance and Memory Footprint</h4>\r\n\r\nAs with all ArrayFire features, Sparse support is available across all backends and all architectures.','Sparse Matrices in ArrayFire','','inherit','closed','closed','','9190-revision-v1','','','2016-09-19 16:42:56','2016-09-19 20:42:56','',9190,'http://sandbox.arrayfire.com/9190-revision-v1/',0,'revision','',0),(9224,11,'2016-09-19 16:43:13','2016-09-19 20:43:13','With the release of <strong>ArrayFire v3.4</strong>, we have added a number of features that will help our vast range of users. Our users have been asking us for a way to reduce the memory footprint of their data on the GPU. And now we have answered our users\' requests.\r\nIntroducing Sparse Matrices in ArrayFire!\r\n\r\n<h4>Sparse Data Structure</h4>\r\nA sparse data structure is one where all the non-zero elements are not stored. Sparse matrices are useful when the number of zero-values elements are &gt;&gt; number of non-zero elements (sparsity of the matrix is high).\r\nThe sparse data structure in general is stored as 3 arrays.\r\n<ul>\r\nA data or values array containing all the non-zero elements\r\nA vector for row indices (based on storage format).\r\nA vector for column indices (based on storage format).\r\n</ul>\r\n\r\nThere are many ways to store sparse matrices, the most prominent of which are <a href=\"https://en.wikipedia.org/wiki/Sparse_matrix#Compressed_sparse_row_.28CSR.2C_CRS_or_Yale_format.29\">Compressed Sparse Row</a>, <a href=\"https://en.wikipedia.org/wiki/Sparse_matrix#Compressed_sparse_column_.28CSC_or_CCS.29\">Compressed Storage Column</a>, <a href=\"https://en.wikipedia.org/wiki/Sparse_matrix#Coordinate_list_.28COO.29\">Coordinate Format</a>. ArrayFire supports CSR and COO format, with CSC support coming in future releases.\r\n\r\nA more detailed description of Sparse Matrix can be found on <a href=\"https://en.wikipedia.org/wiki/Sparse_matrix\">Wikipedia</a>.\r\n\r\n<h4>Sparse in ArrayFire</h4>\r\nIn ArrayFire, Sparse arrays use the same user facing object - af::array. This makes working with sparse arrays all the more seamless.\r\nWe have added a function <a href=\"http://arrayfire.org/docs/group__method__mat.htm#ga5945f95549bae25f75694a69d98ca584\">af::array::issparse()</a> that allows users to check if an array is sparse or not.\r\nAlthough externally, there is no difference between a sparse and dense array, internally, the sparse array is stored as 3 independent arrays along with other meta data.\r\nThese arrays, as well as other properties can be fetched using the <a href=\"http://arrayfire.org/docs/group__sparse__func.htm\">sparse functions</a>.\r\n\r\n<h4>Sparse Functionality</h4>\r\nAs of v3.4, the following features are supported for sparse arrays:\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm\">Creation for sparse arrays.</a>\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gae4621e58bfaf6d80668309824fde86c0\">From 3 (data, row, column) sparse host or device memory vectors.</a>\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gae9a843c7e93b05e6b090ca32b271ebe9\">From 3 (data, row, column) sparse af::arrays.</a>\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gac0d367d8c9daf27b36a6981bbfcdb970\">From dense af::array.</a>\r\n* To create a sparse array from host or device dense array, first create a dense af::array, and then pass it to create sparse af::array from dense af::array.\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__convert__to.htm\">Storage format conversions.</a>\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gac0d367d8c9daf27b36a6981bbfcdb970\">Dense to CSR/COO.</a>\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__dense.htm\">CSR/COO to dense.</a>\r\n* Sparse-Dense Matrix Multiplication (SPMM/SPMV)\r\n* Sparse Matrix - Dense Matrix\r\n* Sparse Matrix - Dense Vector\r\n* Options for Sparse Matrix to be transposed.\r\nThe Sparse-Dense Matrix Multiplcation is a implemented as a part of <a href=\"http://arrayfire.org/docs/group__blas__func__matmul.htm#ga63306b6ed967bd1055086db862fe885b\">af::matmul()</a>. This is part of making the usage of sparse arrays seamless with regular arrays.\r\n\r\n<h4>Example</h4>\r\n\r\n<h4>Performance and Memory Footprint</h4>\r\n\r\nAs with all ArrayFire features, Sparse support is available across all backends and all architectures.','Sparse Matrices in ArrayFire','','inherit','closed','closed','','9190-revision-v1','','','2016-09-19 16:43:13','2016-09-19 20:43:13','',9190,'http://sandbox.arrayfire.com/9190-revision-v1/',0,'revision','',0),(9225,11,'2016-09-19 16:43:47','2016-09-19 20:43:47','With the release of <strong>ArrayFire v3.4</strong>, we have added a number of features that will help our vast range of users. Our users have been asking us for a way to reduce the memory footprint of their data on the GPU. And now we have answered our users\' requests.\r\nIntroducing Sparse Matrices in ArrayFire!\r\n\r\n<h4>Sparse Data Structure</h4>\r\nA sparse data structure is one where all the non-zero elements are not stored. Sparse matrices are useful when the number of zero-values elements are &gt;&gt; number of non-zero elements (sparsity of the matrix is high).\r\nThe sparse data structure in general is stored as 3 arrays.\r\n<ol>\r\nA data or values array containing all the non-zero elements\r\nA vector for row indices (based on storage format).\r\nA vector for column indices (based on storage format).\r\n</ol>\r\n\r\n\r\nThere are many ways to store sparse matrices, the most prominent of which are <a href=\"https://en.wikipedia.org/wiki/Sparse_matrix#Compressed_sparse_row_.28CSR.2C_CRS_or_Yale_format.29\">Compressed Sparse Row</a>, <a href=\"https://en.wikipedia.org/wiki/Sparse_matrix#Compressed_sparse_column_.28CSC_or_CCS.29\">Compressed Storage Column</a>, <a href=\"https://en.wikipedia.org/wiki/Sparse_matrix#Coordinate_list_.28COO.29\">Coordinate Format</a>. ArrayFire supports CSR and COO format, with CSC support coming in future releases.\r\n\r\nA more detailed description of Sparse Matrix can be found on <a href=\"https://en.wikipedia.org/wiki/Sparse_matrix\">Wikipedia</a>.\r\n\r\n<h4>Sparse in ArrayFire</h4>\r\nIn ArrayFire, Sparse arrays use the same user facing object - af::array. This makes working with sparse arrays all the more seamless.\r\nWe have added a function <a href=\"http://arrayfire.org/docs/group__method__mat.htm#ga5945f95549bae25f75694a69d98ca584\">af::array::issparse()</a> that allows users to check if an array is sparse or not.\r\nAlthough externally, there is no difference between a sparse and dense array, internally, the sparse array is stored as 3 independent arrays along with other meta data.\r\nThese arrays, as well as other properties can be fetched using the <a href=\"http://arrayfire.org/docs/group__sparse__func.htm\">sparse functions</a>.\r\n\r\n<h4>Sparse Functionality</h4>\r\nAs of v3.4, the following features are supported for sparse arrays:\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm\">Creation for sparse arrays.</a>\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gae4621e58bfaf6d80668309824fde86c0\">From 3 (data, row, column) sparse host or device memory vectors.</a>\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gae9a843c7e93b05e6b090ca32b271ebe9\">From 3 (data, row, column) sparse af::arrays.</a>\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gac0d367d8c9daf27b36a6981bbfcdb970\">From dense af::array.</a>\r\n* To create a sparse array from host or device dense array, first create a dense af::array, and then pass it to create sparse af::array from dense af::array.\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__convert__to.htm\">Storage format conversions.</a>\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gac0d367d8c9daf27b36a6981bbfcdb970\">Dense to CSR/COO.</a>\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__dense.htm\">CSR/COO to dense.</a>\r\n* Sparse-Dense Matrix Multiplication (SPMM/SPMV)\r\n* Sparse Matrix - Dense Matrix\r\n* Sparse Matrix - Dense Vector\r\n* Options for Sparse Matrix to be transposed.\r\nThe Sparse-Dense Matrix Multiplcation is a implemented as a part of <a href=\"http://arrayfire.org/docs/group__blas__func__matmul.htm#ga63306b6ed967bd1055086db862fe885b\">af::matmul()</a>. This is part of making the usage of sparse arrays seamless with regular arrays.\r\n\r\n<h4>Example</h4>\r\n\r\n<h4>Performance and Memory Footprint</h4>\r\n\r\nAs with all ArrayFire features, Sparse support is available across all backends and all architectures.','Sparse Matrices in ArrayFire','','inherit','closed','closed','','9190-revision-v1','','','2016-09-19 16:43:47','2016-09-19 20:43:47','',9190,'http://sandbox.arrayfire.com/9190-revision-v1/',0,'revision','',0),(9226,11,'2016-09-19 16:43:57','2016-09-19 20:43:57','With the release of <strong>ArrayFire v3.4</strong>, we have added a number of features that will help our vast range of users. Our users have been asking us for a way to reduce the memory footprint of their data on the GPU. And now we have answered our users\' requests.\r\nIntroducing Sparse Matrices in ArrayFire!\r\n\r\n<h4>Sparse Data Structure</h4>\r\nA sparse data structure is one where all the non-zero elements are not stored. Sparse matrices are useful when the number of zero-values elements are &gt;&gt; number of non-zero elements (sparsity of the matrix is high).\r\nThe sparse data structure in general is stored as 3 arrays.\r\n<ol>\r\n<ol> A data or values array containing all the non-zero elements\r\nA vector for row indices (based on storage format).\r\nA vector for column indices (based on storage format).\r\n</ol>\r\n\r\n\r\nThere are many ways to store sparse matrices, the most prominent of which are <a href=\"https://en.wikipedia.org/wiki/Sparse_matrix#Compressed_sparse_row_.28CSR.2C_CRS_or_Yale_format.29\">Compressed Sparse Row</a>, <a href=\"https://en.wikipedia.org/wiki/Sparse_matrix#Compressed_sparse_column_.28CSC_or_CCS.29\">Compressed Storage Column</a>, <a href=\"https://en.wikipedia.org/wiki/Sparse_matrix#Coordinate_list_.28COO.29\">Coordinate Format</a>. ArrayFire supports CSR and COO format, with CSC support coming in future releases.\r\n\r\nA more detailed description of Sparse Matrix can be found on <a href=\"https://en.wikipedia.org/wiki/Sparse_matrix\">Wikipedia</a>.\r\n\r\n<h4>Sparse in ArrayFire</h4>\r\nIn ArrayFire, Sparse arrays use the same user facing object - af::array. This makes working with sparse arrays all the more seamless.\r\nWe have added a function <a href=\"http://arrayfire.org/docs/group__method__mat.htm#ga5945f95549bae25f75694a69d98ca584\">af::array::issparse()</a> that allows users to check if an array is sparse or not.\r\nAlthough externally, there is no difference between a sparse and dense array, internally, the sparse array is stored as 3 independent arrays along with other meta data.\r\nThese arrays, as well as other properties can be fetched using the <a href=\"http://arrayfire.org/docs/group__sparse__func.htm\">sparse functions</a>.\r\n\r\n<h4>Sparse Functionality</h4>\r\nAs of v3.4, the following features are supported for sparse arrays:\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm\">Creation for sparse arrays.</a>\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gae4621e58bfaf6d80668309824fde86c0\">From 3 (data, row, column) sparse host or device memory vectors.</a>\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gae9a843c7e93b05e6b090ca32b271ebe9\">From 3 (data, row, column) sparse af::arrays.</a>\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gac0d367d8c9daf27b36a6981bbfcdb970\">From dense af::array.</a>\r\n* To create a sparse array from host or device dense array, first create a dense af::array, and then pass it to create sparse af::array from dense af::array.\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__convert__to.htm\">Storage format conversions.</a>\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gac0d367d8c9daf27b36a6981bbfcdb970\">Dense to CSR/COO.</a>\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__dense.htm\">CSR/COO to dense.</a>\r\n* Sparse-Dense Matrix Multiplication (SPMM/SPMV)\r\n* Sparse Matrix - Dense Matrix\r\n* Sparse Matrix - Dense Vector\r\n* Options for Sparse Matrix to be transposed.\r\nThe Sparse-Dense Matrix Multiplcation is a implemented as a part of <a href=\"http://arrayfire.org/docs/group__blas__func__matmul.htm#ga63306b6ed967bd1055086db862fe885b\">af::matmul()</a>. This is part of making the usage of sparse arrays seamless with regular arrays.\r\n\r\n<h4>Example</h4>\r\n\r\n<h4>Performance and Memory Footprint</h4>\r\n\r\nAs with all ArrayFire features, Sparse support is available across all backends and all architectures.','Sparse Matrices in ArrayFire','','inherit','closed','closed','','9190-revision-v1','','','2016-09-19 16:43:57','2016-09-19 20:43:57','',9190,'http://sandbox.arrayfire.com/9190-revision-v1/',0,'revision','',0),(9227,17729,'2016-09-19 16:44:18','2016-09-19 20:44:18','','conway','','inherit','open','closed','','conway','','','2016-09-19 16:44:18','2016-09-19 20:44:18','',9172,'http://sandbox.arrayfire.com/wp-content/uploads/2016/09/conway.gif',0,'attachment','image/gif',0),(9228,17729,'2016-09-19 16:44:20','2016-09-19 20:44:20','','conway_pretty','','inherit','open','closed','','conway_pretty','','','2016-09-19 16:44:20','2016-09-19 20:44:20','',9172,'http://sandbox.arrayfire.com/wp-content/uploads/2016/09/conway_pretty.gif',0,'attachment','image/gif',0),(9229,11,'2016-09-19 16:44:39','2016-09-19 20:44:39','With the release of <strong>ArrayFire v3.4</strong>, we have added a number of features that will help our vast range of users. Our users have been asking us for a way to reduce the memory footprint of their data on the GPU. And now we have answered our users\' requests.\r\nIntroducing Sparse Matrices in ArrayFire!\r\n\r\n<h4>Sparse Data Structure</h4>\r\nA sparse data structure is one where all the non-zero elements are not stored. Sparse matrices are useful when the number of zero-values elements are &gt;&gt; number of non-zero elements (sparsity of the matrix is high).\r\nThe sparse data structure in general is stored as 3 arrays.\r\n<ul>\r\n<li>A data or values array containing all the non-zero elements</li>\r\n<li>A vector for row indices (based on storage format).</li>\r\n<li>A vector for column indices (based on storage format).</li>\r\n</ul>\r\n\r\n\r\nThere are many ways to store sparse matrices, the most prominent of which are <a href=\"https://en.wikipedia.org/wiki/Sparse_matrix#Compressed_sparse_row_.28CSR.2C_CRS_or_Yale_format.29\">Compressed Sparse Row</a>, <a href=\"https://en.wikipedia.org/wiki/Sparse_matrix#Compressed_sparse_column_.28CSC_or_CCS.29\">Compressed Storage Column</a>, <a href=\"https://en.wikipedia.org/wiki/Sparse_matrix#Coordinate_list_.28COO.29\">Coordinate Format</a>. ArrayFire supports CSR and COO format, with CSC support coming in future releases.\r\n\r\nA more detailed description of Sparse Matrix can be found on <a href=\"https://en.wikipedia.org/wiki/Sparse_matrix\">Wikipedia</a>.\r\n\r\n<h4>Sparse in ArrayFire</h4>\r\nIn ArrayFire, Sparse arrays use the same user facing object - af::array. This makes working with sparse arrays all the more seamless.\r\nWe have added a function <a href=\"http://arrayfire.org/docs/group__method__mat.htm#ga5945f95549bae25f75694a69d98ca584\">af::array::issparse()</a> that allows users to check if an array is sparse or not.\r\nAlthough externally, there is no difference between a sparse and dense array, internally, the sparse array is stored as 3 independent arrays along with other meta data.\r\nThese arrays, as well as other properties can be fetched using the <a href=\"http://arrayfire.org/docs/group__sparse__func.htm\">sparse functions</a>.\r\n\r\n<h4>Sparse Functionality</h4>\r\nAs of v3.4, the following features are supported for sparse arrays:\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm\">Creation for sparse arrays.</a>\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gae4621e58bfaf6d80668309824fde86c0\">From 3 (data, row, column) sparse host or device memory vectors.</a>\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gae9a843c7e93b05e6b090ca32b271ebe9\">From 3 (data, row, column) sparse af::arrays.</a>\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gac0d367d8c9daf27b36a6981bbfcdb970\">From dense af::array.</a>\r\n* To create a sparse array from host or device dense array, first create a dense af::array, and then pass it to create sparse af::array from dense af::array.\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__convert__to.htm\">Storage format conversions.</a>\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__create.htm#gac0d367d8c9daf27b36a6981bbfcdb970\">Dense to CSR/COO.</a>\r\n* <a href=\"http://arrayfire.org/docs/group__sparse__func__dense.htm\">CSR/COO to dense.</a>\r\n* Sparse-Dense Matrix Multiplication (SPMM/SPMV)\r\n* Sparse Matrix - Dense Matrix\r\n* Sparse Matrix - Dense Vector\r\n* Options for Sparse Matrix to be transposed.\r\nThe Sparse-Dense Matrix Multiplcation is a implemented as a part of <a href=\"http://arrayfire.org/docs/group__blas__func__matmul.htm#ga63306b6ed967bd1055086db862fe885b\">af::matmul()</a>. This is part of making the usage of sparse arrays seamless with regular arrays.\r\n\r\n<h4>Example</h4>\r\n\r\n<h4>Performance and Memory Footprint</h4>\r\n\r\nAs with all ArrayFire features, Sparse support is available across all backends and all architectures.','Sparse Matrices in ArrayFire','','inherit','closed','closed','','9190-revision-v1','','','2016-09-19 16:44:39','2016-09-19 20:44:39','',9190,'http://sandbox.arrayfire.com/9190-revision-v1/',0,'revision','',0),(9230,17729,'2016-09-19 16:44:59','2016-09-19 20:44:59','<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Untitled Document.md</title><style></style></head><body id=\"preview\">\r\n<p>This post outlines the new graphics features and updates that come along with ArrayFire v3.4.0 release.</p>\r\n<h5><a id=\"Behavioral_Changes_13\"></a>Behavioral Changes</h5>\r\n<p>Prior to v3.4.0 release, all plotting functions used to compute the axes limits pertaining to corresponding data automatically. This additional step of computing axes is now not performed in any plotting functions. Instead, new API has been provided to set the axes limits of the corresponding graph plot.\r\n\r\n<p>Given below is an example showing the code changes one has to make to their C++ ArrayFire program that uses graphics functionality of ArrayFire.</p>\r\n\r\n<pre><code class=\"language-cpp\">\r\naf::Window myWindow(800, 800, \"2D Plot example: ArrayFire\");\r\n\r\narray Y;\r\nint sign = 1;\r\narray X = seq(-af::Pi, af::Pi, PRECISION);\r\narray noise = randn(X.dims(0))/5.f;\r\n\r\nmyWindow.grid(2, 1);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(0, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1, 1, true);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(1, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1.25, 1.25, true);\r\n\r\nfor (double val=0; !myWindow.close(); )\r\n{\r\n    Y = sin(X);\r\n\r\n    myWindow(0,0).plot(X, Y);\r\n    myWindow(1,0).scatter(X, Y + noise, AF_MARKER_POINT);\r\n\r\n    myWindow.show();\r\n\r\n    X = X + PRECISION * float(sign);\r\n    val += PRECISION * float(sign);\r\n\r\n    if (val>af::Pi) {\r\n        sign = -1;\r\n    } else if (val<-af::Pi) {\r\n        sign = 1;\r\n    }\r\n}\r\n</code></pre>\r\n<p>Above code should render as the following and you can find the complete example <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/plot2d.cpp\" target=\"_blank\">here</a>.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d-1024x927.png\" alt=\"plot2d\" width=\"742\" height=\"672\" class=\"alignnone size-large wp-image-9183\" /></a>\r\n\r\n<h5><a id=\"New_Features_56\"></a>New Features</h5>\r\n\r\n<h6>Vector Fields</h6>\r\n<p>An example of how to render your data as a vector field has been provided in our examples which you can find <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/field.cpp\" target=\"_blank\">here</a>. This example shows a static and dynamic vector field in multi-view mode. Given below is the screenshot of this example while running.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield-1024x550.png\" alt=\"vfield\" width=\"742\" height=\"399\" class=\"alignnone size-large wp-image-9185\" /></a>\r\n\r\n<p>Apart from the above new renderables, each window/view supports overlay of different renderables now. If you are not already aware of what a view (graphics context) in ArrayFire is: Each draw call in ArrayFire is either rendered to whole window(single view) or a portion of the screen(multiview mode or grid mode), this subset portion of the whole window is called a view.\r\n\r\n<p>Given below is a screen shot of mult-view mode which renders an image, 2d line plot, histogram and surface. You can find the corresponding example code <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/pde/swe.cpp\" target=\"_blank\">here</a>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe-1024x549.png\" alt=\"swe\" width=\"742\" height=\"398\" class=\"alignnone size-large wp-image-9184\" /></a>\r\n\r\nThe following renerables support overlay if they are of same type of object (2d/3d).</p>\r\n<ul>\r\n<li><a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/plot3.cpp\" target=\"_blank\">plot</a> <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot3.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot3-300x300.png\" alt=\"plot3\" width=\"300\" height=\"300\" class=\"alignnone size-medium wp-image-9211\" /></a></li>\r\n<li><a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/histogram.cpp\" target=\"_blank\">histogram</a> <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/histogram.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/histogram-300x152.png\" alt=\"histogram\" width=\"300\" height=\"152\" class=\"alignnone size-medium wp-image-9207\" /></a></li>\r\n<li><a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/surface.cpp\" target=\"_blank\">surface</a> <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/surface.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/surface-300x300.png\" alt=\"surface\" width=\"300\" height=\"300\" class=\"alignnone size-medium wp-image-9212\" /></a></li>\r\n<li>vector fields</li>\r\n</ul>\r\n<p>You can see an example screenshot of how overlay of plots looks like below.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\" alt=\"multipleplot\" width=\"1002\" height=\"828\" class=\"alignnone size-full wp-image-9182\" /></a>\r\n\r\nWhile taking screen shots for the images for new rendering functions, i found the gifs for our simple yet fun to watch examples - conway and gravity simulation. \r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/conway.gif\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/conway.gif\" alt=\"conway\" width=\"256\" height=\"256\" class=\"alignnone size-full wp-image-9227\" /></a> <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/conway_pretty.gif\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/conway_pretty.gif\" alt=\"conway_pretty\" width=\"256\" height=\"256\" class=\"alignnone size-full wp-image-9228\" /></a> <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/gravity.gif\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/gravity.gif\" alt=\"gravity\" width=\"256\" height=\"256\" class=\"alignnone size-full wp-image-9216\" /></a>\r\nHere you go, enjoy the gifs! You can find the code for these samples here, <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/conway.cpp\" target=\"_blank\">conway</a> and <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/gravity_sim.cpp\" target=\"_blank\">gravity</a>.\r\n\r\n<h5><a id=\"Misc_Changes_74\"></a>Misc Changes</h5>\r\n<p>Removed <a href=\"http://glew.sourceforge.net/\">GLEW</a> and replaced with <a href=\"https://github.com/cginternals/glbinding\">glbinding</a>.</p>\r\n<h5><a id=\"Conclusion_77\"></a>Conclusion</h5>\r\n<p>We intend to add more graphcis functionality in future releases, keep checking for new posts from us. Please do try the new graphics functionality and kindly let us know if you find any bugs in the library.</p>\r\n\r\n</body></html>','Graphics updates in ArrayFire v3.4.0','','inherit','closed','closed','','9172-revision-v1','','','2016-09-19 16:44:59','2016-09-19 20:44:59','',9172,'http://sandbox.arrayfire.com/9172-revision-v1/',0,'revision','',0),(9231,17729,'2016-09-19 16:45:45','2016-09-19 20:45:45','<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Untitled Document.md</title><style></style></head><body id=\"preview\">\r\n<p>This post outlines the new graphics features and updates that come along with ArrayFire v3.4.0 release.</p>\r\n<h5><a id=\"Behavioral_Changes_13\"></a>Behavioral Changes</h5>\r\n<p>Prior to v3.4.0 release, all plotting functions used to compute the axes limits pertaining to corresponding data automatically. This additional step of computing axes is now not performed in any plotting functions. Instead, new API has been provided to set the axes limits of the corresponding graph plot.\r\n\r\n<p>Given below is an example showing the code changes one has to make to their C++ ArrayFire program that uses graphics functionality of ArrayFire.</p>\r\n\r\n<pre><code class=\"language-cpp\">\r\naf::Window myWindow(800, 800, \"2D Plot example: ArrayFire\");\r\n\r\narray Y;\r\nint sign = 1;\r\narray X = seq(-af::Pi, af::Pi, PRECISION);\r\narray noise = randn(X.dims(0))/5.f;\r\n\r\nmyWindow.grid(2, 1);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(0, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1, 1, true);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(1, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1.25, 1.25, true);\r\n\r\nfor (double val=0; !myWindow.close(); )\r\n{\r\n    Y = sin(X);\r\n\r\n    myWindow(0,0).plot(X, Y);\r\n    myWindow(1,0).scatter(X, Y + noise, AF_MARKER_POINT);\r\n\r\n    myWindow.show();\r\n\r\n    X = X + PRECISION * float(sign);\r\n    val += PRECISION * float(sign);\r\n\r\n    if (val>af::Pi) {\r\n        sign = -1;\r\n    } else if (val<-af::Pi) {\r\n        sign = 1;\r\n    }\r\n}\r\n</code></pre>\r\n<p>Above code should render as the following and you can find the complete example <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/plot2d.cpp\" target=\"_blank\">here</a>.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d-1024x927.png\" alt=\"plot2d\" width=\"742\" height=\"672\" class=\"alignnone size-large wp-image-9183\" /></a>\r\n\r\n<h5><a id=\"New_Features_56\"></a>New Features</h5>\r\n\r\n<h6>Vector Fields</h6>\r\n<p>An example of how to render your data as a vector field has been provided in our examples which you can find <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/field.cpp\" target=\"_blank\">here</a>. This example shows a static and dynamic vector field in multi-view mode. Given below is the screenshot of this example while running.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield-1024x550.png\" alt=\"vfield\" width=\"742\" height=\"399\" class=\"alignnone size-large wp-image-9185\" /></a>\r\n\r\n<p>Apart from the above new renderables, each window/view supports overlay of different renderables now. If you are not already aware of what a view (graphics context) in ArrayFire is: Each draw call in ArrayFire is either rendered to whole window(single view) or a portion of the screen(multiview mode or grid mode), this subset portion of the whole window is called a view.\r\n\r\n<p>Given below is a screen shot of mult-view mode which renders an image, 2d line plot, histogram and surface. You can find the corresponding example code <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/pde/swe.cpp\" target=\"_blank\">here</a>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe-1024x549.png\" alt=\"swe\" width=\"742\" height=\"398\" class=\"alignnone size-large wp-image-9184\" /></a>\r\n\r\nThe following renerables support overlay if they are of same type of object (2d/3d).</p>\r\n<ul>\r\n<li><a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/plot3.cpp\" target=\"_blank\">plot</a> <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot3.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot3-300x300.png\" alt=\"plot3\" width=\"300\" height=\"300\" class=\"alignnone size-medium wp-image-9211\" /></a></li>\r\n<li><a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/histogram.cpp\" target=\"_blank\">histogram</a> <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/histogram.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/histogram-300x152.png\" alt=\"histogram\" width=\"300\" height=\"152\" class=\"alignnone size-medium wp-image-9207\" /></a></li>\r\n<li><a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/surface.cpp\" target=\"_blank\">surface</a> <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/surface.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/surface-300x300.png\" alt=\"surface\" width=\"300\" height=\"300\" class=\"alignnone size-medium wp-image-9212\" /></a></li>\r\n<li>vector fields</li>\r\n</ul>\r\n<p>You can see an example screenshot of how overlay of plots looks like below.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\" alt=\"multipleplot\" width=\"1002\" height=\"828\" class=\"alignnone size-full wp-image-9182\" /></a>\r\n\r\nWhile taking screen shots for the images for new rendering functions, i found the gifs for our simple yet fun to watch examples - conway and gravity simulation. \r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/conway.gif\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/conway.gif\" alt=\"conway\" width=\"256\" height=\"256\" class=\"alignnone size-full wp-image-9227\" /></a> <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/conway_pretty.gif\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/conway_pretty.gif\" alt=\"conway_pretty\" width=\"256\" height=\"256\" class=\"alignnone size-full wp-image-9228\" /></a> <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/gravity.gif\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/gravity.gif\" alt=\"gravity\" width=\"256\" height=\"256\" class=\"alignnone size-full wp-image-9216\" /></a>\r\nHere you go, enjoy the gifs! You can find the code for these samples here, <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/conway.cpp\" target=\"_blank\">conway</a>, <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/conway_pretty.cpp\" target=\"_blank\">conway_pretty</a> and <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/gravity_sim.cpp\" target=\"_blank\">gravity</a>.\r\n\r\n<h5><a id=\"Misc_Changes_74\"></a>Misc Changes</h5>\r\n<p>Removed <a href=\"http://glew.sourceforge.net/\">GLEW</a> and replaced with <a href=\"https://github.com/cginternals/glbinding\">glbinding</a>.</p>\r\n<h5><a id=\"Conclusion_77\"></a>Conclusion</h5>\r\n<p>We intend to add more graphcis functionality in future releases, keep checking for new posts from us. Please do try the new graphics functionality and kindly let us know if you find any bugs in the library.</p>\r\n\r\n</body></html>','Graphics updates in ArrayFire v3.4.0','','inherit','closed','closed','','9172-revision-v1','','','2016-09-19 16:45:45','2016-09-19 20:45:45','',9172,'http://sandbox.arrayfire.com/9172-revision-v1/',0,'revision','',0),(9232,17729,'2016-09-19 16:50:15','2016-09-19 20:50:15','<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Untitled Document.md</title><style></style></head><body id=\"preview\">\r\n<p>This post outlines the new graphics features and updates that come along with ArrayFire v3.4.0 release.</p>\r\n<h5><a id=\"New_Features_56\"></a>New Features</h5>\r\n<h6>Vector Fields</h6>\r\n<p>An example of how to render your data as a vector field has been provided in our examples which you can find <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/field.cpp\" target=\"_blank\">here</a>. This example shows a static and dynamic vector field in multi-view mode. Given below is the screenshot of this example while running.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/vfield-1024x550.png\" alt=\"vfield\" width=\"742\" height=\"399\" class=\"alignnone size-large wp-image-9185\" /></a>\r\n\r\n<p>Apart from the above new renderables, each window/view supports overlay of different renderables now. If you are not already aware of what a view (graphics context) in ArrayFire is: Each draw call in ArrayFire is either rendered to whole window(single view) or a portion of the screen(multiview mode or grid mode), this subset portion of the whole window is called a view.\r\n\r\n<p>Given below is a screen shot of mult-view mode which renders an image, 2d line plot, histogram and surface. You can find the corresponding example code <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/pde/swe.cpp\" target=\"_blank\">here</a>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/swe-1024x549.png\" alt=\"swe\" width=\"742\" height=\"398\" class=\"alignnone size-large wp-image-9184\" /></a>\r\n\r\nThe following renerables support overlay if they are of same type of object (2d/3d).</p>\r\n<ul>\r\n<li><a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/plot3.cpp\" target=\"_blank\">plot</a> <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot3.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot3-300x300.png\" alt=\"plot3\" width=\"300\" height=\"300\" class=\"alignnone size-medium wp-image-9211\" /></a></li>\r\n<li><a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/histogram.cpp\" target=\"_blank\">histogram</a> <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/histogram.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/histogram-300x152.png\" alt=\"histogram\" width=\"300\" height=\"152\" class=\"alignnone size-medium wp-image-9207\" /></a></li>\r\n<li><a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/surface.cpp\" target=\"_blank\">surface</a> <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/surface.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/surface-300x300.png\" alt=\"surface\" width=\"300\" height=\"300\" class=\"alignnone size-medium wp-image-9212\" /></a></li>\r\n<li>vector fields</li>\r\n</ul>\r\n<p>You can see an example screenshot of how overlay of plots looks like below.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/multipleplot.png\" alt=\"multipleplot\" width=\"1002\" height=\"828\" class=\"alignnone size-full wp-image-9182\" /></a>\r\n\r\nWhile taking screen shots for the images for new rendering functions, i found the gifs for our simple yet fun to watch examples - conway and gravity simulation. \r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/conway.gif\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/conway.gif\" alt=\"conway\" width=\"256\" height=\"256\" class=\"alignnone size-full wp-image-9227\" /></a> <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/conway_pretty.gif\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/conway_pretty.gif\" alt=\"conway_pretty\" width=\"256\" height=\"256\" class=\"alignnone size-full wp-image-9228\" /></a> <a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/gravity.gif\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/gravity.gif\" alt=\"gravity\" width=\"256\" height=\"256\" class=\"alignnone size-full wp-image-9216\" /></a>\r\nHere you go, enjoy the gifs! You can find the code for these samples here, <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/conway.cpp\" target=\"_blank\">conway</a>, <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/conway_pretty.cpp\" target=\"_blank\">conway_pretty</a> and <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/gravity_sim.cpp\" target=\"_blank\">gravity</a>.\r\n\r\n<h5><a id=\"Behavioral_Changes_13\"></a>Behavioral Changes</h5>\r\n<p>Prior to v3.4.0 release, all plotting functions used to compute the axes limits pertaining to corresponding data automatically. This additional step of computing axes is now not performed in any plotting functions. Instead, new API has been provided to set the axes limits of the corresponding graph plot.\r\n\r\n<p>Given below is an example showing the code changes one has to make to their C++ ArrayFire program that uses graphics functionality of ArrayFire.</p>\r\n\r\n<pre><code class=\"language-cpp\">\r\naf::Window myWindow(800, 800, \"2D Plot example: ArrayFire\");\r\n\r\narray Y;\r\nint sign = 1;\r\narray X = seq(-af::Pi, af::Pi, PRECISION);\r\narray noise = randn(X.dims(0))/5.f;\r\n\r\nmyWindow.grid(2, 1);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(0, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1, 1, true);\r\n// Set the axes limits to view (0,0), prior to v3.4 this was not needed\r\nmyWindow(1, 0).setAxesLimits(-2 * af::Pi, 2 * af::Pi, -1.25, 1.25, true);\r\n\r\nfor (double val=0; !myWindow.close(); )\r\n{\r\n    Y = sin(X);\r\n\r\n    myWindow(0,0).plot(X, Y);\r\n    myWindow(1,0).scatter(X, Y + noise, AF_MARKER_POINT);\r\n\r\n    myWindow.show();\r\n\r\n    X = X + PRECISION * float(sign);\r\n    val += PRECISION * float(sign);\r\n\r\n    if (val>af::Pi) {\r\n        sign = -1;\r\n    } else if (val<-af::Pi) {\r\n        sign = 1;\r\n    }\r\n}\r\n</code></pre>\r\n<p>Above code should render as the following and you can find the complete example <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/examples/graphics/plot2d.cpp\" target=\"_blank\">here</a>.</p>\r\n<a href=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d.png\"><img src=\"http://sandbox.arrayfire.com/wp-content/uploads/2016/09/plot2d-1024x927.png\" alt=\"plot2d\" width=\"742\" height=\"672\" class=\"alignnone size-large wp-image-9183\" /></a>\r\n\r\n<h5><a id=\"Misc_Changes_74\"></a>Misc Changes</h5>\r\n<p>Removed <a href=\"http://glew.sourceforge.net/\">GLEW</a> and replaced with <a href=\"https://github.com/cginternals/glbinding\">glbinding</a>.</p>\r\n<h5><a id=\"Conclusion_77\"></a>Conclusion</h5>\r\n<p>We intend to add more graphcis functionality in future releases, keep checking for new posts from us. Please do try the new graphics functionality and kindly let us know if you find any bugs in the library.</p>\r\n\r\n</body></html>','Graphics updates in ArrayFire v3.4.0','','inherit','closed','closed','','9172-revision-v1','','','2016-09-19 16:50:15','2016-09-19 20:50:15','',9172,'http://sandbox.arrayfire.com/9172-revision-v1/',0,'revision','',0),