Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/gtests/blenlib/BLI_task_performance_test.cc90
-rw-r--r--tests/gtests/blenlib/BLI_task_test.cc120
2 files changed, 2 insertions, 208 deletions
diff --git a/tests/gtests/blenlib/BLI_task_performance_test.cc b/tests/gtests/blenlib/BLI_task_performance_test.cc
index 84b7b8b6439..dc8981f8064 100644
--- a/tests/gtests/blenlib/BLI_task_performance_test.cc
+++ b/tests/gtests/blenlib/BLI_task_performance_test.cc
@@ -19,6 +19,8 @@ extern "C" {
#include "MEM_guardedalloc.h"
}
+/* *** Parallel iterations over double-linked list items. *** */
+
#define NUM_RUN_AVERAGED 100
static uint gen_pseudo_random_number(uint num)
@@ -36,94 +38,6 @@ static uint gen_pseudo_random_number(uint num)
return ((num & 255) << 6) + 1;
}
-/* *** Parallel iterations over range of indices. *** */
-
-static void task_parallel_range_func(void *UNUSED(userdata),
- int index,
- const TaskParallelTLS *__restrict UNUSED(tls))
-{
- const uint limit = gen_pseudo_random_number((uint)index);
- for (uint i = (uint)index; i < limit;) {
- i += gen_pseudo_random_number(i);
- }
-}
-
-static void task_parallel_range_test_do(const char *id,
- const int num_items,
- const bool use_threads)
-{
- TaskParallelSettings settings;
- BLI_parallel_range_settings_defaults(&settings);
- settings.use_threading = use_threads;
-
- double averaged_timing = 0.0;
- for (int i = 0; i < NUM_RUN_AVERAGED; i++) {
- const double init_time = PIL_check_seconds_timer();
- for (int j = 0; j < 10; j++) {
- BLI_task_parallel_range(i + j, i + j + num_items, NULL, task_parallel_range_func, &settings);
- }
- averaged_timing += PIL_check_seconds_timer() - init_time;
- }
-
- printf("\t%s: non-pooled done in %fs on average over %d runs\n",
- id,
- averaged_timing / NUM_RUN_AVERAGED,
- NUM_RUN_AVERAGED);
-
- averaged_timing = 0.0;
- for (int i = 0; i < NUM_RUN_AVERAGED; i++) {
- const double init_time = PIL_check_seconds_timer();
- TaskParallelRangePool *range_pool = BLI_task_parallel_range_pool_init(&settings);
- for (int j = 0; j < 10; j++) {
- BLI_task_parallel_range_pool_push(
- range_pool, i + j, i + j + num_items, NULL, task_parallel_range_func, &settings);
- }
- BLI_task_parallel_range_pool_work_and_wait(range_pool);
- BLI_task_parallel_range_pool_free(range_pool);
- averaged_timing += PIL_check_seconds_timer() - init_time;
- }
-
- printf("\t%s: pooled done in %fs on average over %d runs\n",
- id,
- averaged_timing / NUM_RUN_AVERAGED,
- NUM_RUN_AVERAGED);
-}
-
-TEST(task, RangeIter10KNoThread)
-{
- task_parallel_range_test_do(
- "Range parallel iteration - Single thread - 10K items", 10000, false);
-}
-
-TEST(task, RangeIter10k)
-{
- task_parallel_range_test_do("Range parallel iteration - Threaded - 10K items", 10000, true);
-}
-
-TEST(task, RangeIter100KNoThread)
-{
- task_parallel_range_test_do(
- "Range parallel iteration - Single thread - 100K items", 100000, false);
-}
-
-TEST(task, RangeIter100k)
-{
- task_parallel_range_test_do("Range parallel iteration - Threaded - 100K items", 100000, true);
-}
-
-TEST(task, RangeIter1000KNoThread)
-{
- task_parallel_range_test_do(
- "Range parallel iteration - Single thread - 1000K items", 1000000, false);
-}
-
-TEST(task, RangeIter1000k)
-{
- task_parallel_range_test_do("Range parallel iteration - Threaded - 1000K items", 1000000, true);
-}
-
-/* *** Parallel iterations over double-linked list items. *** */
-
static void task_listbase_light_iter_func(void *UNUSED(userdata),
void *item,
int index,
diff --git a/tests/gtests/blenlib/BLI_task_test.cc b/tests/gtests/blenlib/BLI_task_test.cc
index a682e8aedf6..62ae0baaec9 100644
--- a/tests/gtests/blenlib/BLI_task_test.cc
+++ b/tests/gtests/blenlib/BLI_task_test.cc
@@ -17,126 +17,6 @@ extern "C" {
#define NUM_ITEMS 10000
-/* *** Parallel iterations over range of integer values. *** */
-
-static void task_range_iter_func(void *userdata, int index, const TaskParallelTLS *__restrict tls)
-{
- int *data = (int *)userdata;
- data[index] = index;
- *((int *)tls->userdata_chunk) += index;
- // printf("%d, %d, %d\n", index, data[index], *((int *)tls->userdata_chunk));
-}
-
-static void task_range_iter_finalize_func(void *__restrict userdata,
- void *__restrict userdata_chunk)
-{
- int *data = (int *)userdata;
- data[NUM_ITEMS] += *(int *)userdata_chunk;
- // printf("%d, %d\n", data[NUM_ITEMS], *((int *)userdata_chunk));
-}
-
-TEST(task, RangeIter)
-{
- int data[NUM_ITEMS + 1] = {0};
- int sum = 0;
-
- BLI_threadapi_init();
-
- TaskParallelSettings settings;
- BLI_parallel_range_settings_defaults(&settings);
- settings.min_iter_per_thread = 1;
-
- settings.userdata_chunk = &sum;
- settings.userdata_chunk_size = sizeof(sum);
- settings.func_finalize = task_range_iter_finalize_func;
-
- BLI_task_parallel_range(0, NUM_ITEMS, data, task_range_iter_func, &settings);
-
- /* Those checks should ensure us all items of the listbase were processed once, and only once -
- * as expected. */
-
- int expected_sum = 0;
- for (int i = 0; i < NUM_ITEMS; i++) {
- EXPECT_EQ(data[i], i);
- expected_sum += i;
- }
- EXPECT_EQ(data[NUM_ITEMS], expected_sum);
-
- BLI_threadapi_exit();
-}
-
-TEST(task, RangeIterPool)
-{
- const int num_tasks = 10;
- int data[num_tasks][NUM_ITEMS + 1] = {{0}};
- int sum = 0;
-
- BLI_threadapi_init();
-
- TaskParallelSettings settings;
- BLI_parallel_range_settings_defaults(&settings);
- settings.min_iter_per_thread = 1;
-
- TaskParallelRangePool *range_pool = BLI_task_parallel_range_pool_init(&settings);
-
- for (int j = 0; j < num_tasks; j++) {
- settings.userdata_chunk = &sum;
- settings.userdata_chunk_size = sizeof(sum);
- settings.func_finalize = task_range_iter_finalize_func;
-
- BLI_task_parallel_range_pool_push(
- range_pool, 0, NUM_ITEMS, data[j], task_range_iter_func, &settings);
- }
-
- BLI_task_parallel_range_pool_work_and_wait(range_pool);
-
- /* Those checks should ensure us all items of the listbase were processed once, and only once -
- * as expected. */
-
- for (int j = 0; j < num_tasks; j++) {
- int expected_sum = 0;
- for (int i = 0; i < NUM_ITEMS; i++) {
- // EXPECT_EQ(data[j][i], i);
- expected_sum += i;
- }
- EXPECT_EQ(data[j][NUM_ITEMS], expected_sum);
- }
-
- /* A pool can be re-used untill it is freed. */
-
- for (int j = 0; j < num_tasks; j++) {
- memset(data[j], 0, sizeof(data[j]));
- }
- sum = 0;
-
- for (int j = 0; j < num_tasks; j++) {
- settings.userdata_chunk = &sum;
- settings.userdata_chunk_size = sizeof(sum);
- settings.func_finalize = task_range_iter_finalize_func;
-
- BLI_task_parallel_range_pool_push(
- range_pool, 0, NUM_ITEMS, data[j], task_range_iter_func, &settings);
- }
-
- BLI_task_parallel_range_pool_work_and_wait(range_pool);
-
- BLI_task_parallel_range_pool_free(range_pool);
-
- /* Those checks should ensure us all items of the listbase were processed once, and only once -
- * as expected. */
-
- for (int j = 0; j < num_tasks; j++) {
- int expected_sum = 0;
- for (int i = 0; i < NUM_ITEMS; i++) {
- // EXPECT_EQ(data[j][i], i);
- expected_sum += i;
- }
- EXPECT_EQ(data[j][NUM_ITEMS], expected_sum);
- }
-
- BLI_threadapi_exit();
-}
-
/* *** Parallel iterations over mempool items. *** */
static void task_mempool_iter_func(void *userdata, MempoolIterData *item)