UnThread: Questions and Answers


Who is this for?

UnThread is for software developers who write or manage applications containing one or more single, monolithic, CPU-bound tasks that can benefit from mid-level multithreading. UnThread can be used for both new algorithms and existing algorithms that are being converted to multicore.

How is UnThread different than 'X'?
UnThread's uniqueness among multicore tools (e.g., Intel's TBB, Microsoft's TPL/PPL/Concurrency Runtime), can be most easily described in terms of task size. These lower-level multicore tools employ a smaller grain task size, often from segmenting a loop or other iteration. An UnThread task is usually more complex, and can consist of may loops, function calls, etc. Lower-level approaches are useful in a broad range of applications, including those that are not fully CPU-bound. While useful in many cases, these low-level approaches provide scalable concurrency, but only sporadically, since it is applied only to sections of code. UnThread is designed for monolithic, CPU-bound algorithms that can be divided into relatively large sub-tasks, enabling scalable and sustained concurrency, resulting in scalable speedup. Because UnThread tasks are part of a single monolithic task, UnThread tasks are also usually cooperative, as opposed to the independent tasks associated with low-level libraries. UnThread provides many features to make cooperative tasks easier to code.

How many cores does UnThread support?
UnThread currently supports up to 32 cores for 32-bit applications and 64 cores for 64-bit applications. The standard Windows API's store the processor affinity mask in a native word (32-bit DWORD for 32-bit code, and 64-bit QWORD for 64-bit code), hence this limitation. Windows 7 has introduced new API's and general OS support for up to 256 cores, which UnThread will also support in a future version.

Does UnThread employ "task stealing"?
No. Multicore libraries that employ task stealing require the creation of many tasks which the Scheduler assigns to threads/cores. When a thread finds that it has no work to do (no task to execute), it can "steal" a task from another thread. With UnThread, tasks are not created until a thread is available to work it, so task stealing is unnecessary.

What is the availability?
An UnThread pre-release version is available immediately for evaluation, to select customers. Though we are still working on the final commercialization of the toolset, the API is complete and tested and is already in commercial/production use (see below). Request Evaluation.

What applications have been successful in using UnThread?

UnThread was initially written for ourselves. Postulate5 is a division of Pocket Soft, who specializes in "byte-level differencing" tools. One tool, RTPatch Server, is an enterprise-class, patented and CPU-bound algorithm that employs a complex byte-level differencing step. Version 5.00 of RTPatch Server was a conversion of the existing single-threaded byte-level differencing engine to multicore execution, and was accomplished through the use of the UnThread library. Each of the features in UnThread is used extensively in RTPatch Server 5. More about the successful conversion of RTPatch server to multicore.